From 9a9170047b628c59f1c7737e7c650465fbb35778 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Wed, 18 Jan 2023 14:32:00 -0800 Subject: [PATCH 001/511] Implementation for oauth2 authentication using a redirect flow (without window popup) from frontend to backend API, followed by a redirect back to the fronted. A localstorage provider token is added before the redirect to the backend auth API. During the subsequent front end refresh an asynchronous backstage session refresh is triggered when the provider token is put in localstorage. The session refresh will return a backstage authentication token if authentication succeeded during the previous backend auth API execution. Addresses https://github.com/backstage/backstage/issues/9582 Signed-off-by: headphonejames --- app-config.yaml | 1 + packages/app-defaults/src/defaults/apis.ts | 8 + packages/core-app-api/api-report.md | 2 + packages/core-app-api/config.d.ts | 6 + .../auth/atlassian/AtlassianAuth.ts | 2 + .../auth/bitbucket/BitbucketAuth.ts | 3 + .../implementations/auth/github/GithubAuth.ts | 3 + .../implementations/auth/gitlab/GitlabAuth.ts | 3 + .../implementations/auth/google/GoogleAuth.ts | 3 + .../auth/microsoft/MicrosoftAuth.ts | 3 + .../implementations/auth/oauth2/OAuth2.ts | 2 + .../implementations/auth/okta/OktaAuth.ts | 3 + .../auth/onelogin/OneLoginAuth.ts | 4 + .../src/apis/implementations/auth/types.ts | 1 + .../DefaultAuthConnector.test.ts | 35 ++ .../lib/AuthConnector/DefaultAuthConnector.ts | 31 +- .../src/lib/AuthConnector/types.ts | 1 + .../RefreshingAuthSessionManager.ts | 2 +- .../OAuthRequestDialog/OAuthRequestDialog.tsx | 13 +- .../src/layout/SignInPage/commonProvider.tsx | 9 +- packages/core-plugin-api/api-report.md | 1 + .../src/apis/definitions/auth.ts | 6 +- plugins/auth-backend/api-report.md | 12 +- .../src/lib/flow/authFlowHelpers.test.ts | 17 + .../src/lib/flow/authFlowHelpers.ts | 8 + plugins/auth-backend/src/lib/flow/index.ts | 6 +- .../src/lib/oauth/OAuthAdapter.test.ts | 537 +++++++----------- .../src/lib/oauth/OAuthAdapter.ts | 31 +- plugins/auth-backend/src/lib/oauth/types.ts | 1 + plugins/auth-backend/src/providers/types.ts | 2 + plugins/auth-backend/src/service/router.ts | 4 + 31 files changed, 426 insertions(+), 334 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index dd72051189..1d3bf31083 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -293,6 +293,7 @@ auth: # path: my-sessions environment: development + usePopup: false ### Providing an auth.session.secret will enable session support in the auth-backend # session: # secret: custom session secret diff --git a/packages/app-defaults/src/defaults/apis.ts b/packages/app-defaults/src/defaults/apis.ts index 3f5cfc1c58..9e71855714 100644 --- a/packages/app-defaults/src/defaults/apis.ts +++ b/packages/app-defaults/src/defaults/apis.ts @@ -131,6 +131,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -145,6 +146,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -160,6 +162,7 @@ export const apis = [ oauthRequestApi, defaultScopes: ['read:user'], environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -174,6 +177,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -188,6 +192,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -202,6 +207,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -217,6 +223,7 @@ export const apis = [ oauthRequestApi, defaultScopes: ['team'], environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }), }), createApiFactory({ @@ -231,6 +238,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), + usePopup: configApi.getOptionalBoolean('auth.usePopup'), }); }, }), diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 133ac22e5b..aaaccb17de 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -263,6 +263,7 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; + usePopup?: boolean; }; // @public @@ -516,6 +517,7 @@ export type OneLoginAuthCreateOptions = { discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; + usePopup?: boolean; provider?: AuthProviderInfo; }; diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index ae876f7fe0..0dd73369f6 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -114,5 +114,11 @@ export interface Config { * @visibility frontend */ environment?: string; + /** + $ The authentication flow type - either using a popup to authenticate or perform a http redirect + * default value: 'true' + * @visibility frontend + */ + usePopup?: boolean; }; } diff --git a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts index 07ebefca28..5582a29c00 100644 --- a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts @@ -34,6 +34,7 @@ export default class AtlassianAuth { const { discoveryApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; @@ -43,6 +44,7 @@ export default class AtlassianAuth { oauthRequestApi, provider, environment, + usePopup, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts index 7c5d4f3fc0..1d27eb1aa3 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts @@ -36,6 +36,7 @@ export type BitbucketAuthResponse = { const DEFAULT_PROVIDER = { id: 'bitbucket', title: 'Bitbucket', + provider_id: 'bitbucket-auth-provider', icon: () => null, }; @@ -49,6 +50,7 @@ export default class BitbucketAuth { const { discoveryApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['team'], @@ -59,6 +61,7 @@ export default class BitbucketAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts index 7efe4e95c6..11af9995a1 100644 --- a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts @@ -21,6 +21,7 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'github', title: 'GitHub', + provider_id: 'github-auth-provider', icon: () => null, }; @@ -37,6 +38,7 @@ export default class GithubAuth { provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read:user'], + usePopup = true, } = options; return OAuth2.create({ @@ -45,6 +47,7 @@ export default class GithubAuth { provider, environment, defaultScopes, + usePopup, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts index 00085de8ac..965d0431ac 100644 --- a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts @@ -21,6 +21,7 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'gitlab', title: 'GitLab', + provider_id: 'gitlab-auth-provider', icon: () => null, }; @@ -34,6 +35,7 @@ export default class GitlabAuth { const { discoveryApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read_user'], @@ -44,6 +46,7 @@ export default class GitlabAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts index 8a528f4511..514b257ada 100644 --- a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts @@ -21,6 +21,7 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'google', title: 'Google', + provider_id: 'google-auth-provider', icon: () => null, }; @@ -37,6 +38,7 @@ export default class GoogleAuth { discoveryApi, oauthRequestApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, defaultScopes = [ 'openid', @@ -50,6 +52,7 @@ export default class GoogleAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes, scopeTransform(scopes: string[]) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index be5776609d..e988a79268 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -21,6 +21,7 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'microsoft', title: 'Microsoft', + provider_id: 'microsoft-auth-provider', icon: () => null, }; @@ -33,6 +34,7 @@ export default class MicrosoftAuth { static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T { const { environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, discoveryApi, @@ -50,6 +52,7 @@ export default class MicrosoftAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts index ad2d04cb56..a1d0c7d3a9 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts @@ -77,6 +77,7 @@ export default class OAuth2 provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = [], + usePopup = true, scopeTransform = x => x, } = options; @@ -85,6 +86,7 @@ export default class OAuth2 environment, provider, oauthRequestApi: oauthRequestApi, + usePopup, sessionTransform(res: OAuth2Response): OAuth2Session { return { ...res, diff --git a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts index 42c0ddd0ed..db574e7fb2 100644 --- a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts @@ -21,6 +21,7 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'okta', title: 'Okta', + provider_id: 'okta-auth-provider', icon: () => null, }; @@ -46,6 +47,7 @@ export default class OktaAuth { const { discoveryApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['openid', 'email', 'profile', 'offline_access'], @@ -56,6 +58,7 @@ export default class OktaAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes, scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts index ea9e2cad28..d767cb6b55 100644 --- a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts @@ -30,12 +30,14 @@ export type OneLoginAuthCreateOptions = { discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; + usePopup?: boolean; provider?: AuthProviderInfo; }; const DEFAULT_PROVIDER = { id: 'onelogin', title: 'onelogin', + provider_id: 'onelogin-auth-provider', icon: () => null, }; @@ -63,6 +65,7 @@ export default class OneLoginAuth { const { discoveryApi, environment = 'development', + usePopup = true, provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; @@ -72,6 +75,7 @@ export default class OneLoginAuth { oauthRequestApi, provider, environment, + usePopup, defaultScopes: ['openid', 'email', 'profile', 'offline_access'], scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/types.ts b/packages/core-app-api/src/apis/implementations/auth/types.ts index 55d6c19098..e29fe0c7d2 100644 --- a/packages/core-app-api/src/apis/implementations/auth/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/types.ts @@ -37,4 +37,5 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; + usePopup?: boolean; }; diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index 2b132e09cd..113ee95bd0 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -34,8 +34,10 @@ const defaultOptions = { provider: { id: 'my-provider', title: 'My Provider', + provider_id: 'myprovider-auth-provider', icon: () => null, }, + usePopup: true, oauthRequestApi: new MockOAuthApi(), sessionTransform: ({ expiresInSeconds, ...res }: any) => ({ ...res, @@ -182,4 +184,37 @@ describe('DefaultAuthConnector', () => { url: 'http://my-host/api/auth/my-provider/start?scope=-ab-&origin=http%3A%2F%2Flocalhost&env=production', }); }); + + it('should redirect to api server', async () => { + const mockOauth = new MockOAuthApi(); + const mockResponse = jest.fn(); + // replace the window.location object + Object.defineProperty(window, 'location', { + value: { + hash: { + endsWith: mockResponse, + includes: mockResponse, + }, + assign: mockResponse, + }, + writable: true, + }); + const helper = new DefaultAuthConnector({ + ...defaultOptions, + usePopup: false, + oauthRequestApi: mockOauth, + }); + + const sessionPromise = helper.createSession({ + scopes: new Set(['a', 'b']), + }); + + await mockOauth.triggerAll(); + + await expect(sessionPromise).resolves.toEqual({}); + // redirect to the auth api + expect(window.location.href).toMatch( + 'http://my-host/api/auth/my-provider/start?scope=a%20b&authType=redirect&env=production', + ); + }); }); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index 988c9f17b1..acc6b97b2c 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -32,6 +32,10 @@ type Options = { * Environment hint passed on to auth backend, for example 'production' or 'development' */ environment: string; + /** + * use a popup or a redirect for authentication with backend authentication api + */ + usePopup: boolean; /** * Information about the auth provider to be shown to the user. * The ID Must match the backend auth plugin configuration, for example 'google'. @@ -77,12 +81,37 @@ export class DefaultAuthConnector provider, joinScopes = defaultJoinScopes, oauthRequestApi, + usePopup, sessionTransform = id => id, } = options; this.authRequester = oauthRequestApi.createAuthRequester({ provider, - onAuthRequest: scopes => this.showPopup(scopes), + onAuthRequest: async scopes => { + if (!usePopup) { + // modal before redirect + const scope = this.joinScopesFunc(scopes); + const redirectUrl = await this.buildUrl('/start', { + scope, + origin: window.location.origin, + redirectUrl: window.location.href, + authType: 'redirect', + }); + + if (provider.hasOwnProperty('provider_id')) { + // set the sign in provider here + localStorage.setItem( + '@backstage/core:SignInPage:provider', + provider.provider_id!, + ); + } + + window.location.href = redirectUrl; + // we need to return to exit function or else popup occurs + return Promise.resolve({} as AuthSession); + } + return this.showPopup(scopes); + }, }); this.discoveryApi = discoveryApi; diff --git a/packages/core-app-api/src/lib/AuthConnector/types.ts b/packages/core-app-api/src/lib/AuthConnector/types.ts index 464a2ed627..7c4f19184e 100644 --- a/packages/core-app-api/src/lib/AuthConnector/types.ts +++ b/packages/core-app-api/src/lib/AuthConnector/types.ts @@ -17,6 +17,7 @@ export type CreateSessionOptions = { scopes: Set; instantPopup?: boolean; + redirectUrl?: string; }; /** diff --git a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts index d31f5e29bf..67d83bb36a 100644 --- a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts +++ b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts @@ -93,7 +93,7 @@ export class RefreshingAuthSessionManager implements SessionManager { // // We skip this check if an instant login popup is requested, as we need to // stay in a synchronous call stack from the user interaction. The downside - // is that that the user will sometimes be requested to log in even if they + // is that the user will sometimes be requested to log in even if they // already had an existing session. if (!this.currentSession && !options.instantPopup) { try { diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index 02b1afe4a1..1884e6e358 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -24,7 +24,11 @@ import Button from '@material-ui/core/Button'; import React, { useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; import LoginRequestListItem from './LoginRequestListItem'; -import { useApi, oauthRequestApiRef } from '@backstage/core-plugin-api'; +import { + useApi, + oauthRequestApiRef, + configApiRef, +} from '@backstage/core-plugin-api'; import Typography from '@material-ui/core/Typography'; export type OAuthRequestDialogClassKey = @@ -58,6 +62,12 @@ export function OAuthRequestDialog(_props: {}) { const classes = useStyles(); const [busy, setBusy] = useState(false); const oauthRequestApi = useApi(oauthRequestApiRef); + const configApi = useApi(configApiRef); + const usePopup = configApi.getOptionalBoolean('auth.usePopup') ?? true; + const redirectMessage = usePopup + ? '' + : 'This will trigger a http redirect to OAuth Login.'; + const requests = useObservable( useMemo(() => oauthRequestApi.authRequest$(), [oauthRequestApi]), [], @@ -83,6 +93,7 @@ export function OAuthRequestDialog(_props: {}) { Login Required + {redirectMessage} diff --git a/packages/core-components/src/layout/SignInPage/commonProvider.tsx b/packages/core-components/src/layout/SignInPage/commonProvider.tsx index 8f426a3907..aa458692dd 100644 --- a/packages/core-components/src/layout/SignInPage/commonProvider.tsx +++ b/packages/core-components/src/layout/SignInPage/commonProvider.tsx @@ -24,7 +24,7 @@ import { SignInProvider, SignInProviderConfig, } from './types'; -import { useApi, errorApiRef } from '@backstage/core-plugin-api'; +import { useApi, errorApiRef, configApiRef } from '@backstage/core-plugin-api'; import { GridItem } from './styles'; import { ForwardedError } from '@backstage/errors'; import { UserIdentity } from './UserIdentity'; @@ -33,13 +33,18 @@ const Component: ProviderComponent = ({ config, onSignInSuccess }) => { const { apiRef, title, message } = config as SignInProviderConfig; const authApi = useApi(apiRef); const errorApi = useApi(errorApiRef); + const configApi = useApi(configApiRef); + const usePopup = configApi.getOptionalBoolean('auth.usePopup') ?? true; const handleLogin = async () => { try { const identityResponse = await authApi.getBackstageIdentity({ - instantPopup: true, + instantPopup: usePopup, }); if (!identityResponse) { + if (!usePopup) { + return; + } throw new Error( `The ${title} provider is not configured to support sign-in`, ); diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index dc7aa9eb5f..ecf615dd01 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -193,6 +193,7 @@ export type AuthProviderInfo = { id: string; title: string; icon: IconComponent; + provider_id?: string; }; // @public diff --git a/packages/core-plugin-api/src/apis/definitions/auth.ts b/packages/core-plugin-api/src/apis/definitions/auth.ts index 163ae74806..6ae19d53a6 100644 --- a/packages/core-plugin-api/src/apis/definitions/auth.ts +++ b/packages/core-plugin-api/src/apis/definitions/auth.ts @@ -54,6 +54,11 @@ export type AuthProviderInfo = { * Icon for the auth provider. */ icon: IconComponent; + + /** + * The provider id from the list of provider configured in the login page + */ + provider_id?: string; }; /** @@ -285,7 +290,6 @@ export type SessionApi = { * Sign out from the current session. This will reload the page. */ signOut(): Promise; - /** * Observe the current state of the auth session. Emits the current state on subscription. */ diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 88cb33863e..b272f81c2e 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -41,6 +41,7 @@ export type AuthProviderConfig = { appUrl: string; isOriginAllowed: (origin: string) => boolean; cookieConfigurer?: CookieConfigurer; + isPopupAuthenticationRequest: boolean; }; // @public (undocumented) @@ -268,7 +269,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { handlers: OAuthHandlers, options: Pick< OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' + 'providerId' | 'persistScopes' | 'callbackUrl' | 'redirectUrl' >, ): OAuthAdapter; // (undocumented) @@ -284,10 +285,12 @@ export type OAuthAdapterOptions = { providerId: string; persistScopes?: boolean; appOrigin: string; + redirectUrl?: string; baseUrl: string; cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; callbackUrl: string; + isPopupAuthenticationRequest: boolean; }; // @public (undocumented) @@ -385,6 +388,7 @@ export type OAuthState = { env: string; origin?: string; scope?: string; + redirectUrl?: string; }; // @public @@ -667,6 +671,12 @@ export const providers: Readonly<{ // @public (undocumented) export const readState: (stateString: string) => OAuthState; +// @public (undocumented) +export const redirectMessageResponse: ( + res: express.Response, + redirectUrl: string, +) => void; + // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts index a0c437815d..868477506a 100644 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts +++ b/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts @@ -19,6 +19,7 @@ import { safelyEncodeURIComponent, ensuresXRequestedWith, postMessageResponse, + redirectMessageResponse, } from './authFlowHelpers'; import { WebMessageResponse } from './types'; @@ -178,6 +179,22 @@ describe('oauth helpers', () => { }); }); + describe('redirectMessageResponse', () => { + const redirectUrl = 'http://localhost:3000/catalog'; + it('should perform redirect', () => { + const mockResponse = { + end: jest.fn().mockReturnThis(), + setHeader: jest.fn().mockReturnThis(), + redirect: jest.fn().mockReturnThis(), + } as unknown as express.Response; + + redirectMessageResponse(mockResponse, redirectUrl); + expect(mockResponse.redirect).toHaveBeenCalledTimes(1); + expect(mockResponse.end).not.toHaveBeenCalled(); + expect(mockResponse.setHeader).not.toHaveBeenCalled(); + }); + }); + describe('ensuresXRequestedWith', () => { it('should return false if no header present', () => { const mockRequest = { diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts index 94ac4fba15..08449fd923 100644 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts +++ b/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts @@ -69,6 +69,14 @@ export const postMessageResponse = ( res.end(``); }; +/** @public */ +export const redirectMessageResponse = ( + res: express.Response, + redirectUrl: string, +) => { + res.redirect(redirectUrl); +}; + /** @public */ export const ensuresXRequestedWith = (req: express.Request) => { const requiredHeader = req.header('X-Requested-With'); diff --git a/plugins/auth-backend/src/lib/flow/index.ts b/plugins/auth-backend/src/lib/flow/index.ts index f7b4491edb..ebc3fe2ebe 100644 --- a/plugins/auth-backend/src/lib/flow/index.ts +++ b/plugins/auth-backend/src/lib/flow/index.ts @@ -14,6 +14,10 @@ * limitations under the License. */ -export { ensuresXRequestedWith, postMessageResponse } from './authFlowHelpers'; +export { + ensuresXRequestedWith, + postMessageResponse, + redirectMessageResponse, +} from './authFlowHelpers'; export type { WebMessageResponse } from './types'; diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts index e0d4f0e051..31d7e5aff5 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts @@ -74,6 +74,7 @@ describe('OAuthAdapter', () => { providerId: 'test-provider', appOrigin: 'http://localhost:3000', baseUrl: 'http://domain.org/auth', + isPopupAuthenticationRequest: true, cookieConfigurer: mockCookieConfigurer, tokenIssuer: { issueToken: async () => 'my-id-token', @@ -83,56 +84,10 @@ describe('OAuthAdapter', () => { callbackUrl: 'http://domain.org/auth/test-provider/handler/frame', }; - it('sets the correct headers in start', async () => { - const oauthProvider = new OAuthAdapter( - providerInstance, - oAuthProviderOptions, - ); - const mockRequest = { - query: { - scope: 'user', - env: 'development', - }, - } as unknown as express.Request; + const defaultState = { nonce: 'nonce', env: 'development' }; - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - statusCode: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.start(mockRequest, mockResponse); - // nonce cookie checks - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - `${oAuthProviderOptions.providerId}-nonce`, - expect.any(String), - expect.objectContaining({ - httpOnly: true, - path: '/auth/test-provider/handler', - maxAge: TEN_MINUTES_MS, - domain: 'domain.org', - sameSite: 'lax', - secure: false, - }), - ); - // redirect checks - expect(mockResponse.setHeader).toHaveBeenCalledTimes(2); - expect(mockResponse.setHeader).toHaveBeenCalledWith('Location', '/url'); - expect(mockResponse.setHeader).toHaveBeenCalledWith('Content-Length', '0'); - expect(mockResponse.statusCode).toEqual(301); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - }); - - it('sets the refresh cookie if refresh is enabled', async () => { - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - const state = { nonce: 'nonce', env: 'development' }; - const mockRequest = { + const createEncodedQueryMockRequest = (state: any) => { + return { cookies: { 'test-provider-nonce': 'nonce', }, @@ -140,12 +95,69 @@ describe('OAuthAdapter', () => { state: encodeState(state), }, } as unknown as express.Request; + }; - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - } as unknown as express.Response; + const mockResponse = { + cookie: jest.fn().mockReturnThis(), + end: jest.fn().mockReturnThis(), + setHeader: jest.fn().mockReturnThis(), + statusCode: jest.fn().mockReturnThis(), + redirect: jest.fn().mockReturnThis(), + status: jest.fn().mockReturnThis(), + json: jest.fn().mockReturnThis(), + } as unknown as express.Response; + + const mockStartRequest = { + query: { + scope: 'user', + env: 'development', + }, + } as unknown as express.Request; + + const expectedStartAuthCookieData = { + httpOnly: true, + path: '/auth/test-provider/handler', + maxAge: TEN_MINUTES_MS, + domain: 'domain.org', + sameSite: 'lax', + secure: false, + }; + + it('sets the correct headers in start', async () => { + const oauthProvider = new OAuthAdapter( + providerInstance, + oAuthProviderOptions, + ); + + await oauthProvider.start(mockStartRequest, mockResponse); + // nonce cookie checks + expect(mockResponse.cookie).toHaveBeenCalledTimes(1); + expect(mockResponse.cookie).toHaveBeenCalledWith( + `${oAuthProviderOptions.providerId}-nonce`, + expect.any(String), + expect.objectContaining(expectedStartAuthCookieData), + ); + expect(mockResponse.setHeader).toHaveBeenCalledTimes(2); + expect(mockResponse.setHeader).toHaveBeenCalledWith('Location', '/url'); + expect(mockResponse.setHeader).toHaveBeenCalledWith('Content-Length', '0'); + expect(mockResponse.statusCode).toEqual(301); + expect(mockResponse.end).toHaveBeenCalledTimes(1); + expect(mockResponse.redirect).not.toHaveBeenCalled(); + }); + + const refreshCookieData = { + ...expectedStartAuthCookieData, + path: '/auth/test-provider', + maxAge: THOUSAND_DAYS_MS, + }; + + it('sets the refresh cookie if refresh is enabled', async () => { + const oauthProvider = new OAuthAdapter(providerInstance, { + ...oAuthProviderOptions, + isOriginAllowed: () => false, + }); + + const mockRequest = createEncodedQueryMockRequest(defaultState); await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockCookieConfigurer).toHaveBeenCalledTimes(1); @@ -153,15 +165,22 @@ describe('OAuthAdapter', () => { expect(mockResponse.cookie).toHaveBeenCalledWith( expect.stringContaining('test-provider-refresh-token'), expect.stringContaining('token'), - expect.objectContaining({ - httpOnly: true, - path: '/auth/test-provider', - maxAge: THOUSAND_DAYS_MS, - domain: 'domain.org', - secure: false, - sameSite: 'lax', - }), + expect.objectContaining(refreshCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); + }); + + it('sets the refresh cookie if refresh is enabled with redirect', async () => { + const oauthProvider = new OAuthAdapter(providerInstance, { + ...oAuthProviderOptions, + isOriginAllowed: () => false, + isPopupAuthenticationRequest: false, + }); + + const mockRequest = createEncodedQueryMockRequest(defaultState); + + await oauthProvider.frameHandler(mockRequest, mockResponse); + expect(mockResponse.redirect).toHaveBeenCalledTimes(1); }); it('persists scope through cookie if enabled', async () => { @@ -179,32 +198,15 @@ describe('OAuthAdapter', () => { }); // First we test the /start request, making sure state is set - const mockStartReq = { - query: { - scope: 'user', - env: 'development', - }, - } as unknown as express.Request; - const mockStartRes = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - statusCode: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.start(mockStartReq, mockStartRes); + await oauthProvider.start(mockStartRequest, mockResponse); expect(handlers.start).toHaveBeenCalledTimes(1); expect(handlers.start).toHaveBeenCalledWith({ - query: { - scope: 'user', - env: 'development', - }, + ...mockStartRequest, scope: 'user', state: { nonce: expect.any(String), env: 'development', - origin: undefined, scope: 'user', }, }); @@ -223,6 +225,7 @@ describe('OAuthAdapter', () => { cookie: jest.fn().mockReturnThis(), setHeader: jest.fn().mockReturnThis(), end: jest.fn().mockReturnThis(), + redirect: jest.fn().mockReturnThis(), } as unknown as express.Response; await oauthProvider.frameHandler(mockHandleReq, mockHandleRes); @@ -230,17 +233,11 @@ describe('OAuthAdapter', () => { expect(mockHandleRes.cookie).toHaveBeenCalledWith( 'test-provider-granted-scope', 'user', - expect.objectContaining({ - httpOnly: true, - path: '/auth/test-provider', - maxAge: THOUSAND_DAYS_MS, - domain: 'domain.org', - secure: false, - sameSite: 'lax', - }), + expect.objectContaining(refreshCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); - // Them make sure scopes are forwarded correctly during refresh + // Then make sure scopes are forwarded correctly during refresh const mockRefreshReq = { query: { scope: 'ignore-me' }, cookies: { @@ -252,6 +249,7 @@ describe('OAuthAdapter', () => { const mockRefreshRes = { status: jest.fn().mockReturnThis(), json: jest.fn().mockReturnThis(), + redirect: jest.fn().mockReturnThis(), } as unknown as express.Response; await oauthProvider.refresh(mockRefreshReq, mockRefreshRes); expect(handlers.refresh).toHaveBeenCalledTimes(1); @@ -261,8 +259,18 @@ describe('OAuthAdapter', () => { refreshToken: 'refresh-token', }), ); + expect(mockRefreshRes.redirect).not.toHaveBeenCalled(); }); + const mockRequestWithHeader = { + header: () => 'XMLHttpRequest', + cookies: { + 'test-provider-refresh-token': 'token', + }, + query: {}, + get: jest.fn(), + } as unknown as express.Request; + it('removes refresh cookie and calls logout handler when logging out', async () => { const logoutSpy = jest.spyOn(providerInstance, 'logout'); const oauthProvider = new OAuthAdapter(providerInstance, { @@ -270,22 +278,8 @@ describe('OAuthAdapter', () => { isOriginAllowed: () => false, }); - const mockRequest = { - cookies: { - 'test-provider-refresh-token': 'token', - }, - header: () => 'XMLHttpRequest', - get: jest.fn(), - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - status: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.logout(mockRequest, mockResponse); - expect(mockRequest.get).toHaveBeenCalledTimes(1); + await oauthProvider.logout(mockRequestWithHeader, mockResponse); + expect(mockRequestWithHeader.get).toHaveBeenCalledTimes(1); expect(logoutSpy).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( @@ -294,6 +288,7 @@ describe('OAuthAdapter', () => { expect.objectContaining({ path: '/auth/test-provider' }), ); expect(mockResponse.end).toHaveBeenCalledTimes(1); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); it('gets new access-token when refreshing', async () => { @@ -302,20 +297,7 @@ describe('OAuthAdapter', () => { isOriginAllowed: () => false, }); - const mockRequest = { - header: () => 'XMLHttpRequest', - cookies: { - 'test-provider-refresh-token': 'token', - }, - query: {}, - } as unknown as express.Request; - - const mockResponse = { - json: jest.fn().mockReturnThis(), - status: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.refresh(mockRequest, mockResponse); + await oauthProvider.refresh(mockRequestWithHeader, mockResponse); expect(mockResponse.json).toHaveBeenCalledTimes(1); expect(mockResponse.json).toHaveBeenCalledWith({ ...mockResponseData, @@ -328,6 +310,7 @@ describe('OAuthAdapter', () => { }, }, }); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); it('sets new access-token when old cookie exists', async () => { @@ -337,20 +320,12 @@ describe('OAuthAdapter', () => { }); const mockRequest = { - header: () => 'XMLHttpRequest', + ...mockRequestWithHeader, cookies: { 'test-provider-refresh-token': 'old-token', }, - query: {}, - get: jest.fn(), } as unknown as express.Request; - const mockResponse = { - json: jest.fn().mockReturnThis(), - status: jest.fn().mockReturnThis(), - cookie: jest.fn().mockReturnThis(), - } as unknown as express.Response; - await oauthProvider.refresh(mockRequest, mockResponse); expect(mockRequest.get).toHaveBeenCalledTimes(1); expect(mockCookieConfigurer).toHaveBeenCalledTimes(1); @@ -358,15 +333,9 @@ describe('OAuthAdapter', () => { expect(mockResponse.cookie).toHaveBeenCalledWith( 'test-provider-refresh-token', 'token', - expect.objectContaining({ - httpOnly: true, - path: '/auth/test-provider', - maxAge: THOUSAND_DAYS_MS, - domain: 'domain.org', - secure: false, - sameSite: 'lax', - }), + expect.objectContaining(refreshCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); it('sets the correct nonce cookie configuration', async () => { @@ -374,168 +343,97 @@ describe('OAuthAdapter', () => { baseUrl: 'http://domain.org/auth', appUrl: 'http://domain.org', isOriginAllowed: () => false, + isPopupAuthenticationRequest: true, }; const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { ...oAuthProviderOptions, }); - const mockRequest = { - query: { - scope: 'user', - env: 'development', - origin: 'http://domain.org', - }, - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - statusCode: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.start(mockRequest, mockResponse); + await oauthProvider.start(mockStartRequest, mockResponse); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( `${oAuthProviderOptions.providerId}-nonce`, expect.any(String), - expect.objectContaining({ - httpOnly: true, - domain: 'domain.org', - maxAge: TEN_MINUTES_MS, - path: '/auth/test-provider/handler', - secure: false, - sameSite: 'lax', - }), + expect.objectContaining(expectedStartAuthCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('sets the correct nonce cookie configuration using origin from request', async () => { - const config = { - baseUrl: 'http://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; + const config = { + baseUrl: 'http://domain.org/auth', + appUrl: 'http://domain.org', + isOriginAllowed: () => false, + isPopupAuthenticationRequest: true, + }; + const mockStartRequestWithOrigin = { + query: { + scope: 'user', + env: 'development', + origin: 'http://other.domain', + }, + } as unknown as express.Request; + + it('sets the correct nonce cookie configuration using origin from request', async () => { const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { ...oAuthProviderOptions, callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', }); - const mockRequest = { - query: { - scope: 'user', - env: 'development', - origin: 'http://other.domain', - }, - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - statusCode: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.start(mockRequest, mockResponse); + await oauthProvider.start(mockStartRequestWithOrigin, mockResponse); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( `${oAuthProviderOptions.providerId}-nonce`, expect.any(String), expect.objectContaining({ - httpOnly: true, - domain: 'domain.org', - maxAge: TEN_MINUTES_MS, - path: '/auth/test-provider/handler', + ...expectedStartAuthCookieData, secure: true, sameSite: 'none', }), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('sets the correct cookie configuration using an secure callbackUrl', async () => { - const config = { - baseUrl: 'https://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; + const secureCookieData = { + ...refreshCookieData, + secure: true, + sameSite: 'lax', + maxAge: THOUSAND_DAYS_MS, + }; + it('sets the correct cookie configuration using an secure callbackUrl', async () => { const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { ...oAuthProviderOptions, callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', }); - const state = { - nonce: 'nonce', - env: 'development', - }; - - const mockRequest = { - cookies: { - 'test-provider-nonce': 'nonce', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - } as unknown as express.Response; - + const mockRequest = createEncodedQueryMockRequest(defaultState); await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( expect.stringContaining('test-provider-refresh-token'), expect.stringContaining('token'), - expect.objectContaining({ - httpOnly: true, - domain: 'domain.org', - path: '/auth/test-provider', - secure: true, - sameSite: 'lax', - }), + expect.objectContaining(secureCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('sets the correct cookie configuration when on different domains and secure', async () => { - const config = { - baseUrl: 'https://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; + const secureSameSiteNoneCookieData = { + ...secureCookieData, + sameSite: 'none', + }; + it('sets the correct cookie configuration when on different domains and secure', async () => { const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { ...oAuthProviderOptions, callbackUrl: 'https://authdomain.org/auth/test-provider/handler/frame', }); - const state = { - nonce: 'nonce', - env: 'development', - }; - - const mockRequest = { - cookies: { - 'test-provider-nonce': 'nonce', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - } as unknown as express.Response; - + const mockRequest = createEncodedQueryMockRequest(defaultState); await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); @@ -543,106 +441,109 @@ describe('OAuthAdapter', () => { expect.stringContaining('test-provider-refresh-token'), expect.stringContaining('token'), expect.objectContaining({ - httpOnly: true, + ...secureSameSiteNoneCookieData, domain: 'authdomain.org', - path: '/auth/test-provider', - secure: true, - sameSite: 'none', }), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); + const configOriginAllowed = { + ...config, + isOriginAllowed: () => true, + }; + it('sets the correct cookie configuration using origin from state', async () => { - const config = { - baseUrl: 'https://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => true, - }; + const oauthProvider = OAuthAdapter.fromConfig( + configOriginAllowed, + providerInstance, + { + ...oAuthProviderOptions, + callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', + }, + ); - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }); - - const state = { - nonce: 'nonce', - env: 'development', + const mockRequest = createEncodedQueryMockRequest({ + ...defaultState, origin: 'http://other.domain', - }; - - const mockRequest = { - cookies: { - 'test-provider-nonce': 'nonce', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - } as unknown as express.Response; - + }); await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( expect.stringContaining('test-provider-refresh-token'), expect.stringContaining('token'), - expect.objectContaining({ - httpOnly: true, - domain: 'domain.org', - path: '/auth/test-provider', - secure: true, - sameSite: 'none', - }), + expect.objectContaining(secureSameSiteNoneCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('sets the correct cookie configuration using origin from header', async () => { - const config = { - baseUrl: 'https://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; + const mockRequestWithGetMockReturn = { + header: () => 'XMLHttpRequest', + cookies: { + 'test-provider-refresh-token': 'old-token', + }, + query: {}, + get: jest.fn().mockReturnValue('http://other.domain'), + } as unknown as express.Request; + it('sets the correct cookie configuration using origin from header', async () => { const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { ...oAuthProviderOptions, callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', }); - const mockRequest = { - header: () => 'XMLHttpRequest', - cookies: { - 'test-provider-refresh-token': 'old-token', - }, - query: {}, - get: jest.fn().mockReturnValue('http://other.domain'), - } as unknown as express.Request; - - const mockResponse = { - json: jest.fn().mockReturnThis(), - status: jest.fn().mockReturnThis(), - cookie: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.refresh(mockRequest, mockResponse); - expect(mockRequest.get).toHaveBeenCalledTimes(1); + await oauthProvider.refresh(mockRequestWithGetMockReturn, mockResponse); + expect(mockRequestWithGetMockReturn.get).toHaveBeenCalledTimes(1); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).toHaveBeenCalledTimes(1); expect(mockResponse.cookie).toHaveBeenCalledWith( 'test-provider-refresh-token', 'token', - expect.objectContaining({ - httpOnly: true, - path: '/auth/test-provider', - maxAge: THOUSAND_DAYS_MS, - domain: 'domain.org', - secure: true, - sameSite: 'none', - }), + expect.objectContaining(secureSameSiteNoneCookieData), ); + expect(mockResponse.redirect).not.toHaveBeenCalled(); + }); + + it('executed a response redirect when isPopupAuthenticationRequest is false', async () => { + const handlers = { + start: jest.fn(async (_req: { state: OAuthState }) => ({ + url: '/url', + status: 301, + })), + handler: jest.fn(async () => ({ response: mockResponseData })), + refresh: jest.fn(async () => ({ response: mockResponseData })), + }; + const configWithNoPopupEnabled = { + ...configOriginAllowed, + isPopupAuthenticationRequest: false, + }; + const oauthProvider = OAuthAdapter.fromConfig( + configWithNoPopupEnabled, + handlers, + { + ...oAuthProviderOptions, + callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', + }, + ); + + const state = { + ...defaultState, + origin: 'http://other.domain', + redirectUrl: 'http://domain.org', + }; + + const mockRequest = { + ...createEncodedQueryMockRequest(state), + get: jest.fn().mockReturnValue('http://other.domain'), + } as unknown as express.Request; + + await oauthProvider.frameHandler(mockRequest, mockResponse); + expect(mockRequest.get).not.toHaveBeenCalled(); + expect(mockResponse.end).not.toHaveBeenCalled(); + expect(mockCookieConfigurer).not.toHaveBeenCalled(); + expect(mockResponse.cookie).not.toHaveBeenCalled(); + expect(mockResponse.redirect).toHaveBeenCalledTimes(1); + expect(mockResponse.redirect).toHaveBeenCalledWith('http://domain.org'); }); }); diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index 85104e9608..239e660298 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -33,7 +33,12 @@ import { NotAllowedError, } from '@backstage/errors'; import { defaultCookieConfigurer, readState, verifyNonce } from './helpers'; -import { postMessageResponse, ensuresXRequestedWith } from '../flow'; +import { + postMessageResponse, + redirectMessageResponse, + ensuresXRequestedWith, + WebMessageResponse, +} from '../flow'; import { OAuthHandlers, OAuthStartRequest, @@ -51,10 +56,12 @@ export type OAuthAdapterOptions = { providerId: string; persistScopes?: boolean; appOrigin: string; + redirectUrl?: string; baseUrl: string; cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; callbackUrl: string; + isPopupAuthenticationRequest: boolean; }; /** @public */ @@ -64,10 +71,11 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { handlers: OAuthHandlers, options: Pick< OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' + 'providerId' | 'persistScopes' | 'callbackUrl' | 'redirectUrl' >, ): OAuthAdapter { - const { appUrl, baseUrl, isOriginAllowed } = config; + const { appUrl, baseUrl, isOriginAllowed, isPopupAuthenticationRequest } = + config; const { origin: appOrigin } = new URL(appUrl); const cookieConfigurer = config.cookieConfigurer ?? defaultCookieConfigurer; @@ -78,6 +86,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { baseUrl, cookieConfigurer, isOriginAllowed, + isPopupAuthenticationRequest: isPopupAuthenticationRequest, }); } @@ -98,7 +107,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const scope = req.query.scope?.toString() ?? ''; const env = req.query.env?.toString(); const origin = req.query.origin?.toString(); - + const redirectUrl = req.query.redirectUrl?.toString(); if (!env) { throw new InputError('No env provided in request query parameters'); } @@ -109,7 +118,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { // set a nonce cookie before redirecting to oauth provider this.setNonceCookie(res, nonce, cookieConfig); - const state: OAuthState = { nonce, env, origin }; + const state: OAuthState = { nonce, env, origin, redirectUrl }; // If scopes are persisted then we pass them through the state so that we // can set the cookie on successful auth @@ -136,6 +145,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { try { const state: OAuthState = readState(req.query.state?.toString() ?? ''); + const redirectUrl = state.redirectUrl ?? ''; if (state.origin) { try { @@ -169,11 +179,16 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const identity = await this.populateIdentity(response.backstageIdentity); - // post message back to popup if successful - return postMessageResponse(res, appOrigin, { + const responseObj: WebMessageResponse = { type: 'authorization_response', response: { ...response, backstageIdentity: identity }, - }); + }; + + if (!this.options.isPopupAuthenticationRequest) { + return redirectMessageResponse(res, redirectUrl); + } + // post message back to popup if successful + return postMessageResponse(res, appOrigin, responseObj); } catch (error) { const { name, message } = isError(error) ? error diff --git a/plugins/auth-backend/src/lib/oauth/types.ts b/plugins/auth-backend/src/lib/oauth/types.ts index 3902c3f026..2b06e1f78b 100644 --- a/plugins/auth-backend/src/lib/oauth/types.ts +++ b/plugins/auth-backend/src/lib/oauth/types.ts @@ -90,6 +90,7 @@ export type OAuthState = { env: string; origin?: string; scope?: string; + redirectUrl?: string; }; /** @public */ diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts index 1459cff484..f70b639de9 100644 --- a/plugins/auth-backend/src/providers/types.ts +++ b/plugins/auth-backend/src/providers/types.ts @@ -131,6 +131,8 @@ export type AuthProviderConfig = { * The function used to resolve cookie configuration based on the auth provider options. */ cookieConfigurer?: CookieConfigurer; + + isPopupAuthenticationRequest: boolean; }; /** @public */ diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 8013777415..f19eb54a72 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -107,6 +107,9 @@ export async function createRouter( ...providerFactories, }; const providersConfig = config.getConfig('auth.providers'); + const isPopupAuthenticationRequest = + config.getOptionalBoolean('auth.usePopup') ?? true; + const configuredProviders = providersConfig.keys(); const isOriginAllowed = createOriginFilter(config); @@ -123,6 +126,7 @@ export async function createRouter( baseUrl: authUrl, appUrl, isOriginAllowed, + isPopupAuthenticationRequest: isPopupAuthenticationRequest, }, config: providersConfig.getConfig(providerId), logger, From ae4d826fb215e7a6b2038cccf90970027a073bf6 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Fri, 3 Feb 2023 12:03:01 -0800 Subject: [PATCH 002/511] Updates to redirect implementation after initial PR review. Signed-off-by: headphonejames --- app-config.yaml | 2 +- packages/app-defaults/src/defaults/apis.ts | 16 +++--- packages/core-app-api/config.d.ts | 6 +- .../OAuthRequestApi/OAuthRequestManager.ts | 6 ++ .../auth/atlassian/AtlassianAuth.ts | 4 +- .../auth/bitbucket/BitbucketAuth.ts | 5 +- .../implementations/auth/github/GithubAuth.ts | 5 +- .../implementations/auth/gitlab/GitlabAuth.ts | 5 +- .../implementations/auth/google/GoogleAuth.ts | 5 +- .../auth/microsoft/MicrosoftAuth.ts | 5 +- .../implementations/auth/oauth2/OAuth2.ts | 4 +- .../implementations/auth/okta/OktaAuth.ts | 5 +- .../auth/onelogin/OneLoginAuth.ts | 7 +-- .../src/apis/implementations/auth/types.ts | 2 +- .../DefaultAuthConnector.test.ts | 40 +------------- .../lib/AuthConnector/DefaultAuthConnector.ts | 55 +++++++++---------- .../src/lib/AuthConnector/types.ts | 1 - .../OAuthRequestDialog/OAuthRequestDialog.tsx | 15 ++--- .../src/layout/SignInPage/commonProvider.tsx | 15 +++-- .../src/layout/SignInPage/providers.tsx | 7 +-- .../src/apis/definitions/OAuthRequestApi.ts | 10 ++++ .../src/apis/definitions/auth.ts | 5 -- .../src/lib/flow/authFlowHelpers.test.ts | 17 ------ .../src/lib/flow/authFlowHelpers.ts | 8 --- .../src/lib/oauth/OAuthAdapter.test.ts | 16 +++--- .../src/lib/oauth/OAuthAdapter.ts | 13 ++--- plugins/auth-backend/src/lib/oauth/types.ts | 1 + plugins/auth-backend/src/providers/types.ts | 2 - plugins/auth-backend/src/service/router.ts | 3 - 29 files changed, 107 insertions(+), 178 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index 1d3bf31083..350b9068e3 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -293,7 +293,7 @@ auth: # path: my-sessions environment: development - usePopup: false + authFlow: redirect ### Providing an auth.session.secret will enable session support in the auth-backend # session: # secret: custom session secret diff --git a/packages/app-defaults/src/defaults/apis.ts b/packages/app-defaults/src/defaults/apis.ts index 9e71855714..feb4cd6cc8 100644 --- a/packages/app-defaults/src/defaults/apis.ts +++ b/packages/app-defaults/src/defaults/apis.ts @@ -131,7 +131,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -146,7 +146,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -162,7 +162,7 @@ export const apis = [ oauthRequestApi, defaultScopes: ['read:user'], environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -177,7 +177,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -192,7 +192,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -207,7 +207,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -223,7 +223,7 @@ export const apis = [ oauthRequestApi, defaultScopes: ['team'], environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -238,7 +238,7 @@ export const apis = [ discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - usePopup: configApi.getOptionalBoolean('auth.usePopup'), + authFlow: configApi.getOptionalString('auth.authFlow'), }); }, }), diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index 0dd73369f6..c499dfa7c6 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -115,10 +115,10 @@ export interface Config { */ environment?: string; /** - $ The authentication flow type - either using a popup to authenticate or perform a http redirect - * default value: 'true' + $ The authentication flow type - currently supports 'popup' and 'redirect' + * default value: 'popup' * @visibility frontend */ - usePopup?: boolean; + authFlow?: string; }; } diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts index 5d467be7b4..751f2bf24c 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts @@ -37,8 +37,10 @@ export class OAuthRequestManager implements OAuthRequestApi { private readonly subject = new BehaviorSubject([]); private currentRequests: PendingOAuthRequest[] = []; private handlerCount = 0; + private authFlowStr: string = 'popup'; createAuthRequester(options: OAuthRequesterOptions): OAuthRequester { + this.authFlowStr = options.authFlow; const handler = new OAuthPendingRequests(); const index = this.handlerCount; @@ -91,4 +93,8 @@ export class OAuthRequestManager implements OAuthRequestApi { authRequest$(): Observable { return this.subject; } + + authFlow(): string { + return this.authFlowStr; + } } diff --git a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts index 5582a29c00..df714e2290 100644 --- a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts @@ -34,7 +34,7 @@ export default class AtlassianAuth { const { discoveryApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; @@ -44,7 +44,7 @@ export default class AtlassianAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts index 1d27eb1aa3..3bdb09b010 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts @@ -36,7 +36,6 @@ export type BitbucketAuthResponse = { const DEFAULT_PROVIDER = { id: 'bitbucket', title: 'Bitbucket', - provider_id: 'bitbucket-auth-provider', icon: () => null, }; @@ -50,7 +49,7 @@ export default class BitbucketAuth { const { discoveryApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['team'], @@ -61,7 +60,7 @@ export default class BitbucketAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts index 11af9995a1..5acdd20719 100644 --- a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts @@ -21,7 +21,6 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'github', title: 'GitHub', - provider_id: 'github-auth-provider', icon: () => null, }; @@ -38,7 +37,7 @@ export default class GithubAuth { provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read:user'], - usePopup = true, + authFlow = 'popup', } = options; return OAuth2.create({ @@ -47,7 +46,7 @@ export default class GithubAuth { provider, environment, defaultScopes, - usePopup, + authFlow, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts index 965d0431ac..919d67dd8d 100644 --- a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts @@ -21,7 +21,6 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'gitlab', title: 'GitLab', - provider_id: 'gitlab-auth-provider', icon: () => null, }; @@ -35,7 +34,7 @@ export default class GitlabAuth { const { discoveryApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read_user'], @@ -46,7 +45,7 @@ export default class GitlabAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts index 514b257ada..e8adefb08f 100644 --- a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts @@ -21,7 +21,6 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'google', title: 'Google', - provider_id: 'google-auth-provider', icon: () => null, }; @@ -38,7 +37,7 @@ export default class GoogleAuth { discoveryApi, oauthRequestApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, defaultScopes = [ 'openid', @@ -52,7 +51,7 @@ export default class GoogleAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, defaultScopes, scopeTransform(scopes: string[]) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index e988a79268..c28e115950 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -21,7 +21,6 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'microsoft', title: 'Microsoft', - provider_id: 'microsoft-auth-provider', icon: () => null, }; @@ -34,7 +33,7 @@ export default class MicrosoftAuth { static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T { const { environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, discoveryApi, @@ -52,7 +51,7 @@ export default class MicrosoftAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts index a1d0c7d3a9..7a133154f2 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts @@ -77,7 +77,7 @@ export default class OAuth2 provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = [], - usePopup = true, + authFlow = 'popup', scopeTransform = x => x, } = options; @@ -86,7 +86,7 @@ export default class OAuth2 environment, provider, oauthRequestApi: oauthRequestApi, - usePopup, + authFlow, sessionTransform(res: OAuth2Response): OAuth2Session { return { ...res, diff --git a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts index db574e7fb2..9075d8cb82 100644 --- a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts @@ -21,7 +21,6 @@ import { OAuthApiCreateOptions } from '../types'; const DEFAULT_PROVIDER = { id: 'okta', title: 'Okta', - provider_id: 'okta-auth-provider', icon: () => null, }; @@ -47,7 +46,7 @@ export default class OktaAuth { const { discoveryApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['openid', 'email', 'profile', 'offline_access'], @@ -58,7 +57,7 @@ export default class OktaAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow, defaultScopes, scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts index d767cb6b55..edfcbc4463 100644 --- a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts @@ -30,14 +30,13 @@ export type OneLoginAuthCreateOptions = { discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; - usePopup?: boolean; + authFlow?: string; provider?: AuthProviderInfo; }; const DEFAULT_PROVIDER = { id: 'onelogin', title: 'onelogin', - provider_id: 'onelogin-auth-provider', icon: () => null, }; @@ -65,7 +64,7 @@ export default class OneLoginAuth { const { discoveryApi, environment = 'development', - usePopup = true, + authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; @@ -75,7 +74,7 @@ export default class OneLoginAuth { oauthRequestApi, provider, environment, - usePopup, + authFlow: authFlow, defaultScopes: ['openid', 'email', 'profile', 'offline_access'], scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/types.ts b/packages/core-app-api/src/apis/implementations/auth/types.ts index e29fe0c7d2..fdb2bbc7f8 100644 --- a/packages/core-app-api/src/apis/implementations/auth/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/types.ts @@ -37,5 +37,5 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - usePopup?: boolean; + authFlow?: string; }; diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index 113ee95bd0..fd2a2833a8 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -34,16 +34,15 @@ const defaultOptions = { provider: { id: 'my-provider', title: 'My Provider', - provider_id: 'myprovider-auth-provider', icon: () => null, }, - usePopup: true, oauthRequestApi: new MockOAuthApi(), sessionTransform: ({ expiresInSeconds, ...res }: any) => ({ ...res, scopes: new Set(res.scopes.split(' ')), expiresAt: new Date(Date.now() + expiresInSeconds * 1000), }), + authFlow: 'popup', }; describe('DefaultAuthConnector', () => { @@ -133,7 +132,7 @@ describe('DefaultAuthConnector', () => { expect(popupSpy).toHaveBeenCalledTimes(1); expect(popupSpy.mock.calls[0][0]).toMatchObject({ - url: 'http://my-host/api/auth/my-provider/start?scope=a%20b&origin=http%3A%2F%2Flocalhost&env=production', + url: 'http://my-host/api/auth/my-provider/start?scope=a%20b&origin=http%3A%2F%2Flocalhost&authFlow=popup&env=production', }); await expect(sessionPromise).resolves.toEqual({ @@ -181,40 +180,7 @@ describe('DefaultAuthConnector', () => { expect(popupSpy).toHaveBeenCalledTimes(1); expect(popupSpy.mock.calls[0][0]).toMatchObject({ - url: 'http://my-host/api/auth/my-provider/start?scope=-ab-&origin=http%3A%2F%2Flocalhost&env=production', + url: 'http://my-host/api/auth/my-provider/start?scope=-ab-&origin=http%3A%2F%2Flocalhost&authFlow=popup&env=production', }); }); - - it('should redirect to api server', async () => { - const mockOauth = new MockOAuthApi(); - const mockResponse = jest.fn(); - // replace the window.location object - Object.defineProperty(window, 'location', { - value: { - hash: { - endsWith: mockResponse, - includes: mockResponse, - }, - assign: mockResponse, - }, - writable: true, - }); - const helper = new DefaultAuthConnector({ - ...defaultOptions, - usePopup: false, - oauthRequestApi: mockOauth, - }); - - const sessionPromise = helper.createSession({ - scopes: new Set(['a', 'b']), - }); - - await mockOauth.triggerAll(); - - await expect(sessionPromise).resolves.toEqual({}); - // redirect to the auth api - expect(window.location.href).toMatch( - 'http://my-host/api/auth/my-provider/start?scope=a%20b&authType=redirect&env=production', - ); - }); }); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index acc6b97b2c..7cada8b0f9 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -32,10 +32,6 @@ type Options = { * Environment hint passed on to auth backend, for example 'production' or 'development' */ environment: string; - /** - * use a popup or a redirect for authentication with backend authentication api - */ - usePopup: boolean; /** * Information about the auth provider to be shown to the user. * The ID Must match the backend auth plugin configuration, for example 'google'. @@ -53,6 +49,10 @@ type Options = { * Function used to transform an auth response into the session type. */ sessionTransform?(response: any): AuthSession | Promise; + /** + * The UI authentication flow with backend authentication api. Supports either 'popup' or 'redirect'. + */ + authFlow: string; }; function defaultJoinScopes(scopes: Set) { @@ -73,6 +73,7 @@ export class DefaultAuthConnector private readonly joinScopesFunc: (scopes: Set) => string; private readonly authRequester: OAuthRequester; private readonly sessionTransform: (response: any) => Promise; + private readonly authFlow: string; constructor(options: Options) { const { @@ -81,39 +82,22 @@ export class DefaultAuthConnector provider, joinScopes = defaultJoinScopes, oauthRequestApi, - usePopup, + authFlow, sessionTransform = id => id, } = options; this.authRequester = oauthRequestApi.createAuthRequester({ provider, onAuthRequest: async scopes => { - if (!usePopup) { - // modal before redirect - const scope = this.joinScopesFunc(scopes); - const redirectUrl = await this.buildUrl('/start', { - scope, - origin: window.location.origin, - redirectUrl: window.location.href, - authType: 'redirect', - }); - - if (provider.hasOwnProperty('provider_id')) { - // set the sign in provider here - localStorage.setItem( - '@backstage/core:SignInPage:provider', - provider.provider_id!, - ); - } - - window.location.href = redirectUrl; - // we need to return to exit function or else popup occurs - return Promise.resolve({} as AuthSession); + if (authFlow === 'popup') { + return this.showPopup(scopes); } - return this.showPopup(scopes); + return this.executeRedirect(scopes); }, + authFlow, }); + this.authFlow = authFlow; this.discoveryApi = discoveryApi; this.environment = environment; this.provider = provider; @@ -122,7 +106,7 @@ export class DefaultAuthConnector } async createSession(options: CreateSessionOptions): Promise { - if (options.instantPopup) { + if (options.instantPopup && this.authFlow === 'popup') { return this.showPopup(options.scopes); } return this.authRequester(options.scopes); @@ -184,6 +168,7 @@ export class DefaultAuthConnector const popupUrl = await this.buildUrl('/start', { scope, origin: window.location.origin, + authFlow: 'popup', }); const payload = await showLoginPopup({ @@ -197,6 +182,20 @@ export class DefaultAuthConnector return await this.sessionTransform(payload); } + private async executeRedirect(scopes: Set): Promise { + const scope = this.joinScopesFunc(scopes); + const redirectUrl = await this.buildUrl('/start', { + scope, + origin: window.location.origin, + redirectUrl: window.location.href, + authFlow: 'redirect', + }); + // redirect to auth api + window.location.href = redirectUrl; + // return a promise that never resolves + return new Promise(() => {}); + } + private async buildUrl( path: string, query?: { [key: string]: string | boolean | undefined }, diff --git a/packages/core-app-api/src/lib/AuthConnector/types.ts b/packages/core-app-api/src/lib/AuthConnector/types.ts index 7c4f19184e..464a2ed627 100644 --- a/packages/core-app-api/src/lib/AuthConnector/types.ts +++ b/packages/core-app-api/src/lib/AuthConnector/types.ts @@ -17,7 +17,6 @@ export type CreateSessionOptions = { scopes: Set; instantPopup?: boolean; - redirectUrl?: string; }; /** diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index 1884e6e358..e68120298a 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -24,11 +24,7 @@ import Button from '@material-ui/core/Button'; import React, { useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; import LoginRequestListItem from './LoginRequestListItem'; -import { - useApi, - oauthRequestApiRef, - configApiRef, -} from '@backstage/core-plugin-api'; +import { useApi, oauthRequestApiRef } from '@backstage/core-plugin-api'; import Typography from '@material-ui/core/Typography'; export type OAuthRequestDialogClassKey = @@ -62,11 +58,10 @@ export function OAuthRequestDialog(_props: {}) { const classes = useStyles(); const [busy, setBusy] = useState(false); const oauthRequestApi = useApi(oauthRequestApiRef); - const configApi = useApi(configApiRef); - const usePopup = configApi.getOptionalBoolean('auth.usePopup') ?? true; - const redirectMessage = usePopup - ? '' - : 'This will trigger a http redirect to OAuth Login.'; + const redirectMessage = + oauthRequestApi.authFlow() === 'popup' + ? '' + : 'This will trigger a http redirect to OAuth Login.'; const requests = useObservable( useMemo(() => oauthRequestApi.authRequest$(), [oauthRequestApi]), diff --git a/packages/core-components/src/layout/SignInPage/commonProvider.tsx b/packages/core-components/src/layout/SignInPage/commonProvider.tsx index aa458692dd..6796e3f22d 100644 --- a/packages/core-components/src/layout/SignInPage/commonProvider.tsx +++ b/packages/core-components/src/layout/SignInPage/commonProvider.tsx @@ -24,27 +24,25 @@ import { SignInProvider, SignInProviderConfig, } from './types'; -import { useApi, errorApiRef, configApiRef } from '@backstage/core-plugin-api'; +import { useApi, errorApiRef } from '@backstage/core-plugin-api'; import { GridItem } from './styles'; import { ForwardedError } from '@backstage/errors'; import { UserIdentity } from './UserIdentity'; +import { PROVIDER_STORAGE_KEY } from './providers'; const Component: ProviderComponent = ({ config, onSignInSuccess }) => { - const { apiRef, title, message } = config as SignInProviderConfig; + const { apiRef, title, message, id } = config as SignInProviderConfig; const authApi = useApi(apiRef); const errorApi = useApi(errorApiRef); - const configApi = useApi(configApiRef); - const usePopup = configApi.getOptionalBoolean('auth.usePopup') ?? true; const handleLogin = async () => { try { + localStorage.setItem(PROVIDER_STORAGE_KEY, id); const identityResponse = await authApi.getBackstageIdentity({ - instantPopup: usePopup, + instantPopup: true, }); if (!identityResponse) { - if (!usePopup) { - return; - } + localStorage.removeItem(PROVIDER_STORAGE_KEY); throw new Error( `The ${title} provider is not configured to support sign-in`, ); @@ -60,6 +58,7 @@ const Component: ProviderComponent = ({ config, onSignInSuccess }) => { }), ); } catch (error) { + localStorage.removeItem(PROVIDER_STORAGE_KEY); errorApi.post(new ForwardedError('Login failed', error)); } }; diff --git a/packages/core-components/src/layout/SignInPage/providers.tsx b/packages/core-components/src/layout/SignInPage/providers.tsx index 23d6c95b3c..716befda17 100644 --- a/packages/core-components/src/layout/SignInPage/providers.tsx +++ b/packages/core-components/src/layout/SignInPage/providers.tsx @@ -32,7 +32,7 @@ import { guestProvider } from './guestProvider'; import { customProvider } from './customProvider'; import { IdentityApiSignOutProxy } from './IdentityApiSignOutProxy'; -const PROVIDER_STORAGE_KEY = '@backstage/core:SignInPage:provider'; +export const PROVIDER_STORAGE_KEY = '@backstage/core:SignInPage:provider'; export type SignInProviderType = { [key: string]: { @@ -134,6 +134,7 @@ export const useSignInProviders = ( .loader(apiHolder, provider.config?.apiRef!) .then(result => { if (didCancel) { + localStorage.removeItem(PROVIDER_STORAGE_KEY); return; } if (result) { @@ -143,10 +144,10 @@ export const useSignInProviders = ( } }) .catch(error => { + localStorage.removeItem(PROVIDER_STORAGE_KEY); if (didCancel) { return; } - localStorage.removeItem(PROVIDER_STORAGE_KEY); errorApi.post(error); setLoading(false); }); @@ -172,8 +173,6 @@ export const useSignInProviders = ( const { Component } = provider.components; const handleSignInSuccess = (result: IdentityApi) => { - localStorage.setItem(PROVIDER_STORAGE_KEY, provider.id); - handleWrappedResult(result); }; diff --git a/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts b/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts index 75bf3a3864..2027852de7 100644 --- a/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts +++ b/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts @@ -35,6 +35,11 @@ export type OAuthRequesterOptions = { * trigger() is called on an auth requests. */ onAuthRequest(scopes: Set): Promise; + + /** + * The authentication flow type + */ + authFlow: string; }; /** @@ -119,6 +124,11 @@ export type OAuthRequestApi = { * AuthRequester calls will resolve to the value returned by the onAuthRequest call. */ authRequest$(): Observable; + + /** + * The authentication flow type + */ + authFlow(): string; }; /** diff --git a/packages/core-plugin-api/src/apis/definitions/auth.ts b/packages/core-plugin-api/src/apis/definitions/auth.ts index 6ae19d53a6..3ab8c98fee 100644 --- a/packages/core-plugin-api/src/apis/definitions/auth.ts +++ b/packages/core-plugin-api/src/apis/definitions/auth.ts @@ -54,11 +54,6 @@ export type AuthProviderInfo = { * Icon for the auth provider. */ icon: IconComponent; - - /** - * The provider id from the list of provider configured in the login page - */ - provider_id?: string; }; /** diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts index 868477506a..a0c437815d 100644 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts +++ b/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts @@ -19,7 +19,6 @@ import { safelyEncodeURIComponent, ensuresXRequestedWith, postMessageResponse, - redirectMessageResponse, } from './authFlowHelpers'; import { WebMessageResponse } from './types'; @@ -179,22 +178,6 @@ describe('oauth helpers', () => { }); }); - describe('redirectMessageResponse', () => { - const redirectUrl = 'http://localhost:3000/catalog'; - it('should perform redirect', () => { - const mockResponse = { - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - redirect: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - redirectMessageResponse(mockResponse, redirectUrl); - expect(mockResponse.redirect).toHaveBeenCalledTimes(1); - expect(mockResponse.end).not.toHaveBeenCalled(); - expect(mockResponse.setHeader).not.toHaveBeenCalled(); - }); - }); - describe('ensuresXRequestedWith', () => { it('should return false if no header present', () => { const mockRequest = { diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts index 08449fd923..94ac4fba15 100644 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts +++ b/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts @@ -69,14 +69,6 @@ export const postMessageResponse = ( res.end(``); }; -/** @public */ -export const redirectMessageResponse = ( - res: express.Response, - redirectUrl: string, -) => { - res.redirect(redirectUrl); -}; - /** @public */ export const ensuresXRequestedWith = (req: express.Request) => { const requiredHeader = req.header('X-Requested-With'); diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts index 31d7e5aff5..dd45ab5441 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts @@ -74,7 +74,6 @@ describe('OAuthAdapter', () => { providerId: 'test-provider', appOrigin: 'http://localhost:3000', baseUrl: 'http://domain.org/auth', - isPopupAuthenticationRequest: true, cookieConfigurer: mockCookieConfigurer, tokenIssuer: { issueToken: async () => 'my-id-token', @@ -174,10 +173,14 @@ describe('OAuthAdapter', () => { const oauthProvider = new OAuthAdapter(providerInstance, { ...oAuthProviderOptions, isOriginAllowed: () => false, - isPopupAuthenticationRequest: false, }); - const mockRequest = createEncodedQueryMockRequest(defaultState); + const state = { + ...defaultState, + redirectUrl: 'http://localhost:3000', + authFlow: 'redirect', + }; + const mockRequest = createEncodedQueryMockRequest(state); await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockResponse.redirect).toHaveBeenCalledTimes(1); @@ -343,7 +346,6 @@ describe('OAuthAdapter', () => { baseUrl: 'http://domain.org/auth', appUrl: 'http://domain.org', isOriginAllowed: () => false, - isPopupAuthenticationRequest: true, }; const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { @@ -365,7 +367,6 @@ describe('OAuthAdapter', () => { baseUrl: 'http://domain.org/auth', appUrl: 'http://domain.org', isOriginAllowed: () => false, - isPopupAuthenticationRequest: true, }; const mockStartRequestWithOrigin = { @@ -505,7 +506,7 @@ describe('OAuthAdapter', () => { expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('executed a response redirect when isPopupAuthenticationRequest is false', async () => { + it('executed a response redirect when authFlow query string is set to "redirect"', async () => { const handlers = { start: jest.fn(async (_req: { state: OAuthState }) => ({ url: '/url', @@ -516,7 +517,6 @@ describe('OAuthAdapter', () => { }; const configWithNoPopupEnabled = { ...configOriginAllowed, - isPopupAuthenticationRequest: false, }; const oauthProvider = OAuthAdapter.fromConfig( configWithNoPopupEnabled, @@ -531,6 +531,7 @@ describe('OAuthAdapter', () => { ...defaultState, origin: 'http://other.domain', redirectUrl: 'http://domain.org', + authFlow: 'redirect', }; const mockRequest = { @@ -540,7 +541,6 @@ describe('OAuthAdapter', () => { await oauthProvider.frameHandler(mockRequest, mockResponse); expect(mockRequest.get).not.toHaveBeenCalled(); - expect(mockResponse.end).not.toHaveBeenCalled(); expect(mockCookieConfigurer).not.toHaveBeenCalled(); expect(mockResponse.cookie).not.toHaveBeenCalled(); expect(mockResponse.redirect).toHaveBeenCalledTimes(1); diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index 239e660298..ac55fa8ad1 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -35,7 +35,6 @@ import { import { defaultCookieConfigurer, readState, verifyNonce } from './helpers'; import { postMessageResponse, - redirectMessageResponse, ensuresXRequestedWith, WebMessageResponse, } from '../flow'; @@ -61,7 +60,6 @@ export type OAuthAdapterOptions = { cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; callbackUrl: string; - isPopupAuthenticationRequest: boolean; }; /** @public */ @@ -74,8 +72,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { 'providerId' | 'persistScopes' | 'callbackUrl' | 'redirectUrl' >, ): OAuthAdapter { - const { appUrl, baseUrl, isOriginAllowed, isPopupAuthenticationRequest } = - config; + const { appUrl, baseUrl, isOriginAllowed } = config; const { origin: appOrigin } = new URL(appUrl); const cookieConfigurer = config.cookieConfigurer ?? defaultCookieConfigurer; @@ -86,7 +83,6 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { baseUrl, cookieConfigurer, isOriginAllowed, - isPopupAuthenticationRequest: isPopupAuthenticationRequest, }); } @@ -108,6 +104,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const env = req.query.env?.toString(); const origin = req.query.origin?.toString(); const redirectUrl = req.query.redirectUrl?.toString(); + const authFlow = req.query.authFlow?.toString(); if (!env) { throw new InputError('No env provided in request query parameters'); } @@ -118,7 +115,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { // set a nonce cookie before redirecting to oauth provider this.setNonceCookie(res, nonce, cookieConfig); - const state: OAuthState = { nonce, env, origin, redirectUrl }; + const state: OAuthState = { nonce, env, origin, redirectUrl, authFlow }; // If scopes are persisted then we pass them through the state so that we // can set the cookie on successful auth @@ -184,8 +181,8 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { response: { ...response, backstageIdentity: identity }, }; - if (!this.options.isPopupAuthenticationRequest) { - return redirectMessageResponse(res, redirectUrl); + if (state.authFlow === 'redirect') { + res.redirect(redirectUrl); } // post message back to popup if successful return postMessageResponse(res, appOrigin, responseObj); diff --git a/plugins/auth-backend/src/lib/oauth/types.ts b/plugins/auth-backend/src/lib/oauth/types.ts index 2b06e1f78b..4cb7a94ffd 100644 --- a/plugins/auth-backend/src/lib/oauth/types.ts +++ b/plugins/auth-backend/src/lib/oauth/types.ts @@ -91,6 +91,7 @@ export type OAuthState = { origin?: string; scope?: string; redirectUrl?: string; + authFlow?: string; }; /** @public */ diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts index f70b639de9..1459cff484 100644 --- a/plugins/auth-backend/src/providers/types.ts +++ b/plugins/auth-backend/src/providers/types.ts @@ -131,8 +131,6 @@ export type AuthProviderConfig = { * The function used to resolve cookie configuration based on the auth provider options. */ cookieConfigurer?: CookieConfigurer; - - isPopupAuthenticationRequest: boolean; }; /** @public */ diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index f19eb54a72..9440a2c4ed 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -107,8 +107,6 @@ export async function createRouter( ...providerFactories, }; const providersConfig = config.getConfig('auth.providers'); - const isPopupAuthenticationRequest = - config.getOptionalBoolean('auth.usePopup') ?? true; const configuredProviders = providersConfig.keys(); @@ -126,7 +124,6 @@ export async function createRouter( baseUrl: authUrl, appUrl, isOriginAllowed, - isPopupAuthenticationRequest: isPopupAuthenticationRequest, }, config: providersConfig.getConfig(providerId), logger, From 167f457803168ab6d675d4e13aa3a0e52c9a906f Mon Sep 17 00:00:00 2001 From: headphonejames Date: Fri, 3 Feb 2023 12:18:50 -0800 Subject: [PATCH 003/511] fix missing code fixes from update after PR review. Signed-off-by: headphonejames --- .../implementations/OAuthRequestApi/MockOAuthApi.test.ts | 4 ++++ .../apis/implementations/OAuthRequestApi/MockOAuthApi.ts | 4 ++++ .../OAuthRequestApi/OAuthRequestManager.test.ts | 1 + plugins/auth-backend/src/lib/flow/index.ts | 6 +----- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts index a64fadeb3e..a22fc24626 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts @@ -25,12 +25,14 @@ describe('MockOAuthApi', () => { const requester1 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler1, + authFlow: 'popup', }); const authHandler2 = jest.fn().mockResolvedValue('other'); const requester2 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler2, + authFlow: 'popup', }); const promises = [ @@ -68,12 +70,14 @@ describe('MockOAuthApi', () => { const requester1 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler1, + authFlow: 'popup', }); const authHandler2 = jest.fn(); const requester2 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler2, + authFlow: 'popup', }); const promises = [ diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts index 193c474361..4ca0ffc645 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts @@ -55,4 +55,8 @@ export default class MockOAuthApi implements OAuthRequestApi { }); }); } + + authFlow() { + return 'popup'; + } } diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts index 4dd6af715e..54cfc8e41b 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts @@ -30,6 +30,7 @@ describe('OAuthRequestManager', () => { icon: () => null, }, onAuthRequest: async () => 'hello', + authFlow: 'popup', }); expect(reqSpy).toHaveBeenCalledTimes(0); diff --git a/plugins/auth-backend/src/lib/flow/index.ts b/plugins/auth-backend/src/lib/flow/index.ts index ebc3fe2ebe..f7b4491edb 100644 --- a/plugins/auth-backend/src/lib/flow/index.ts +++ b/plugins/auth-backend/src/lib/flow/index.ts @@ -14,10 +14,6 @@ * limitations under the License. */ -export { - ensuresXRequestedWith, - postMessageResponse, - redirectMessageResponse, -} from './authFlowHelpers'; +export { ensuresXRequestedWith, postMessageResponse } from './authFlowHelpers'; export type { WebMessageResponse } from './types'; From 564de00947ec31bcd95c74a17ce4dd4aad56f748 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Fri, 3 Feb 2023 13:35:28 -0800 Subject: [PATCH 004/511] update api reports Signed-off-by: headphonejames --- packages/core-app-api/api-report.md | 6 ++++-- packages/core-plugin-api/api-report.md | 3 ++- plugins/auth-backend/api-report.md | 9 +-------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index aaaccb17de..d0890bfca8 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -263,7 +263,7 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - usePopup?: boolean; + authFlow?: string; }; // @public @@ -492,6 +492,8 @@ export type OAuthApiCreateOptions = AuthApiCreateOptions & { // @public export class OAuthRequestManager implements OAuthRequestApi { + // (undocumented) + authFlow(): string; // (undocumented) authRequest$(): Observable; // (undocumented) @@ -517,7 +519,7 @@ export type OneLoginAuthCreateOptions = { discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; - usePopup?: boolean; + authFlow?: string; provider?: AuthProviderInfo; }; diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index ecf615dd01..d5f9bcbc60 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -193,7 +193,6 @@ export type AuthProviderInfo = { id: string; title: string; icon: IconComponent; - provider_id?: string; }; // @public @@ -549,6 +548,7 @@ export type OAuthRequestApi = { options: OAuthRequesterOptions, ): OAuthRequester; authRequest$(): Observable; + authFlow(): string; }; // @public @@ -563,6 +563,7 @@ export type OAuthRequester = ( export type OAuthRequesterOptions = { provider: AuthProviderInfo; onAuthRequest(scopes: Set): Promise; + authFlow: string; }; // @public diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index b272f81c2e..68852626a9 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -41,7 +41,6 @@ export type AuthProviderConfig = { appUrl: string; isOriginAllowed: (origin: string) => boolean; cookieConfigurer?: CookieConfigurer; - isPopupAuthenticationRequest: boolean; }; // @public (undocumented) @@ -290,7 +289,6 @@ export type OAuthAdapterOptions = { cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; callbackUrl: string; - isPopupAuthenticationRequest: boolean; }; // @public (undocumented) @@ -389,6 +387,7 @@ export type OAuthState = { origin?: string; scope?: string; redirectUrl?: string; + authFlow?: string; }; // @public @@ -671,12 +670,6 @@ export const providers: Readonly<{ // @public (undocumented) export const readState: (stateString: string) => OAuthState; -// @public (undocumented) -export const redirectMessageResponse: ( - res: express.Response, - redirectUrl: string, -) => void; - // @public (undocumented) export interface RouterOptions { // (undocumented) From ad15aaa285d9f2308f8a43eddd011dc8e29eeca3 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 21 Feb 2023 18:45:50 -0800 Subject: [PATCH 005/511] Add onSignInStarted() and onSignInFailure() hooks. Clean up and renaming. Signed-off-by: headphonejames --- packages/core-app-api/src/app/types.ts | 10 +++++++++- .../src/layout/SignInPage/commonProvider.tsx | 16 ++++++++++------ .../src/layout/SignInPage/customProvider.tsx | 3 ++- .../src/layout/SignInPage/guestProvider.tsx | 7 +++++-- .../src/layout/SignInPage/providers.tsx | 10 ++++++++++ .../src/lib/oauth/OAuthAdapter.test.ts | 6 +++--- .../auth-backend/src/lib/oauth/OAuthAdapter.ts | 17 ++++++++++------- plugins/auth-backend/src/lib/oauth/types.ts | 2 +- plugins/auth-backend/src/service/router.ts | 1 - 9 files changed, 50 insertions(+), 22 deletions(-) diff --git a/packages/core-app-api/src/app/types.ts b/packages/core-app-api/src/app/types.ts index 75b8fb2a34..8f5e1f5b27 100644 --- a/packages/core-app-api/src/app/types.ts +++ b/packages/core-app-api/src/app/types.ts @@ -45,9 +45,17 @@ export type BootErrorPageProps = { */ export type SignInPageProps = { /** - * Set the IdentityApi on successful sign in. This should only be called once. + * Invoked when the sign-in process has started. + */ + onSignInStarted(): void; + /** + * Set the IdentityApi on successful sign-in. This should only be called once. */ onSignInSuccess(identityApi: IdentityApi): void; + /** + * Invoked when the sign-in process has failed. + */ + onSignInFailure(): void; }; /** diff --git a/packages/core-components/src/layout/SignInPage/commonProvider.tsx b/packages/core-components/src/layout/SignInPage/commonProvider.tsx index 6796e3f22d..1827981e6f 100644 --- a/packages/core-components/src/layout/SignInPage/commonProvider.tsx +++ b/packages/core-components/src/layout/SignInPage/commonProvider.tsx @@ -28,21 +28,25 @@ import { useApi, errorApiRef } from '@backstage/core-plugin-api'; import { GridItem } from './styles'; import { ForwardedError } from '@backstage/errors'; import { UserIdentity } from './UserIdentity'; -import { PROVIDER_STORAGE_KEY } from './providers'; -const Component: ProviderComponent = ({ config, onSignInSuccess }) => { - const { apiRef, title, message, id } = config as SignInProviderConfig; +const Component: ProviderComponent = ({ + config, + onSignInStarted, + onSignInSuccess, + onSignInFailure, +}) => { + const { apiRef, title, message } = config as SignInProviderConfig; const authApi = useApi(apiRef); const errorApi = useApi(errorApiRef); const handleLogin = async () => { try { - localStorage.setItem(PROVIDER_STORAGE_KEY, id); + onSignInStarted(); const identityResponse = await authApi.getBackstageIdentity({ instantPopup: true, }); if (!identityResponse) { - localStorage.removeItem(PROVIDER_STORAGE_KEY); + onSignInFailure(); throw new Error( `The ${title} provider is not configured to support sign-in`, ); @@ -58,7 +62,7 @@ const Component: ProviderComponent = ({ config, onSignInSuccess }) => { }), ); } catch (error) { - localStorage.removeItem(PROVIDER_STORAGE_KEY); + onSignInFailure(); errorApi.post(new ForwardedError('Login failed', error)); } }; diff --git a/packages/core-components/src/layout/SignInPage/customProvider.tsx b/packages/core-components/src/layout/SignInPage/customProvider.tsx index 101c74d3cd..ad02715447 100644 --- a/packages/core-components/src/layout/SignInPage/customProvider.tsx +++ b/packages/core-components/src/layout/SignInPage/customProvider.tsx @@ -61,7 +61,7 @@ const asInputRef = (renderResult: UseFormRegisterReturn) => { }; }; -const Component: ProviderComponent = ({ onSignInSuccess }) => { +const Component: ProviderComponent = ({ onSignInStarted, onSignInSuccess }) => { const classes = useFormStyles(); const { register, handleSubmit, formState } = useForm({ mode: 'onChange', @@ -70,6 +70,7 @@ const Component: ProviderComponent = ({ onSignInSuccess }) => { const { errors } = formState; const handleResult = ({ userId, idToken }: Data) => { + onSignInStarted(); onSignInSuccess( UserIdentity.fromLegacy({ userId, diff --git a/packages/core-components/src/layout/SignInPage/guestProvider.tsx b/packages/core-components/src/layout/SignInPage/guestProvider.tsx index b2370a98d5..5393c1ea89 100644 --- a/packages/core-components/src/layout/SignInPage/guestProvider.tsx +++ b/packages/core-components/src/layout/SignInPage/guestProvider.tsx @@ -22,7 +22,7 @@ import { GridItem } from './styles'; import { ProviderComponent, ProviderLoader, SignInProvider } from './types'; import { GuestUserIdentity } from './GuestUserIdentity'; -const Component: ProviderComponent = ({ onSignInSuccess }) => ( +const Component: ProviderComponent = ({ onSignInStarted, onSignInSuccess }) => ( ( diff --git a/packages/core-components/src/layout/SignInPage/providers.tsx b/packages/core-components/src/layout/SignInPage/providers.tsx index 716befda17..1f3db4da36 100644 --- a/packages/core-components/src/layout/SignInPage/providers.tsx +++ b/packages/core-components/src/layout/SignInPage/providers.tsx @@ -176,11 +176,21 @@ export const useSignInProviders = ( handleWrappedResult(result); }; + const handleSignInStarted = () => { + localStorage.setItem(PROVIDER_STORAGE_KEY, provider.config!.id); + }; + + const handleSignInFailure = () => { + localStorage.removeItem(PROVIDER_STORAGE_KEY); + }; + return ( ); }), diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts index dd45ab5441..1b6653d97e 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts @@ -178,7 +178,7 @@ describe('OAuthAdapter', () => { const state = { ...defaultState, redirectUrl: 'http://localhost:3000', - authFlow: 'redirect', + flow: 'redirect', }; const mockRequest = createEncodedQueryMockRequest(state); @@ -506,7 +506,7 @@ describe('OAuthAdapter', () => { expect(mockResponse.redirect).not.toHaveBeenCalled(); }); - it('executed a response redirect when authFlow query string is set to "redirect"', async () => { + it('executed a response redirect when flow query string is set to "redirect"', async () => { const handlers = { start: jest.fn(async (_req: { state: OAuthState }) => ({ url: '/url', @@ -531,7 +531,7 @@ describe('OAuthAdapter', () => { ...defaultState, origin: 'http://other.domain', redirectUrl: 'http://domain.org', - authFlow: 'redirect', + flow: 'redirect', }; const mockRequest = { diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index ac55fa8ad1..78365cda0f 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -55,7 +55,6 @@ export type OAuthAdapterOptions = { providerId: string; persistScopes?: boolean; appOrigin: string; - redirectUrl?: string; baseUrl: string; cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; @@ -69,7 +68,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { handlers: OAuthHandlers, options: Pick< OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' | 'redirectUrl' + 'providerId' | 'persistScopes' | 'callbackUrl' >, ): OAuthAdapter { const { appUrl, baseUrl, isOriginAllowed } = config; @@ -104,7 +103,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const env = req.query.env?.toString(); const origin = req.query.origin?.toString(); const redirectUrl = req.query.redirectUrl?.toString(); - const authFlow = req.query.authFlow?.toString(); + const flow = req.query.authFlow?.toString(); if (!env) { throw new InputError('No env provided in request query parameters'); } @@ -115,7 +114,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { // set a nonce cookie before redirecting to oauth provider this.setNonceCookie(res, nonce, cookieConfig); - const state: OAuthState = { nonce, env, origin, redirectUrl, authFlow }; + const state: OAuthState = { nonce, env, origin, redirectUrl, flow: flow }; // If scopes are persisted then we pass them through the state so that we // can set the cookie on successful auth @@ -142,7 +141,6 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { try { const state: OAuthState = readState(req.query.state?.toString() ?? ''); - const redirectUrl = state.redirectUrl ?? ''; if (state.origin) { try { @@ -181,8 +179,13 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { response: { ...response, backstageIdentity: identity }, }; - if (state.authFlow === 'redirect') { - res.redirect(redirectUrl); + if (state.flow === 'redirect') { + if (!state.redirectUrl) { + throw new InputError( + 'No redirectUrl provided in request query parameters', + ); + } + res.redirect(state.redirectUrl); } // post message back to popup if successful return postMessageResponse(res, appOrigin, responseObj); diff --git a/plugins/auth-backend/src/lib/oauth/types.ts b/plugins/auth-backend/src/lib/oauth/types.ts index 4cb7a94ffd..e960af2988 100644 --- a/plugins/auth-backend/src/lib/oauth/types.ts +++ b/plugins/auth-backend/src/lib/oauth/types.ts @@ -91,7 +91,7 @@ export type OAuthState = { origin?: string; scope?: string; redirectUrl?: string; - authFlow?: string; + flow?: string; }; /** @public */ diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 9440a2c4ed..8013777415 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -107,7 +107,6 @@ export async function createRouter( ...providerFactories, }; const providersConfig = config.getConfig('auth.providers'); - const configuredProviders = providersConfig.keys(); const isOriginAllowed = createOriginFilter(config); From 0354c9fb0d43eff49f9908d0b90d56ea556fc135 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 21 Feb 2023 19:35:37 -0800 Subject: [PATCH 006/511] fix SignInPageWrapper with new sign in hooks Signed-off-by: headphonejames --- packages/core-app-api/src/app/AppRouter.tsx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/core-app-api/src/app/AppRouter.tsx b/packages/core-app-api/src/app/AppRouter.tsx index b799983a3b..33de9d479c 100644 --- a/packages/core-app-api/src/app/AppRouter.tsx +++ b/packages/core-app-api/src/app/AppRouter.tsx @@ -72,8 +72,22 @@ function SignInPageWrapper({ const configApi = useApi(configApiRef); const basePath = getBasePath(configApi); + const handleSignInStarted = () => { + // no-op + }; + + const handleSignInFailure = () => { + // no-op + }; + if (!identityApi) { - return ; + return ( + + ); } appIdentityProxy.setTarget(identityApi, { From 3ae55c4a8d9a057233b7f8cc1e87dd9123697595 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 21 Feb 2023 19:48:35 -0800 Subject: [PATCH 007/511] api reports Signed-off-by: headphonejames --- packages/core-app-api/api-report.md | 2 ++ packages/core-plugin-api/api-report.md | 2 ++ plugins/auth-backend/api-report.md | 5 ++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index d0890bfca8..f8d5a99cd6 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -545,7 +545,9 @@ export class SamlAuth // @public export type SignInPageProps = { + onSignInStarted(): void; onSignInSuccess(identityApi: IdentityApi): void; + onSignInFailure(): void; }; // @public diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index d5f9bcbc60..17278d4cc5 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -695,7 +695,9 @@ export enum SessionState { // @public export type SignInPageProps = { + onSignInStarted(): void; onSignInSuccess(identityApi: IdentityApi_2): void; + onSignInFailure(): void; }; // @public diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 68852626a9..5caea64b33 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -268,7 +268,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { handlers: OAuthHandlers, options: Pick< OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' | 'redirectUrl' + 'providerId' | 'persistScopes' | 'callbackUrl' >, ): OAuthAdapter; // (undocumented) @@ -284,7 +284,6 @@ export type OAuthAdapterOptions = { providerId: string; persistScopes?: boolean; appOrigin: string; - redirectUrl?: string; baseUrl: string; cookieConfigurer: CookieConfigurer; isOriginAllowed: (origin: string) => boolean; @@ -387,7 +386,7 @@ export type OAuthState = { origin?: string; scope?: string; redirectUrl?: string; - authFlow?: string; + flow?: string; }; // @public From 5acc047748415e48206a5526bb9c10e0ad264e71 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Mon, 27 Feb 2023 16:34:30 -0800 Subject: [PATCH 008/511] Move configuration of redirect authentication flow to a global parameter named "enableExperimentalRedirectFlow". Pass the configApi instance into authentication providers to read new configuration parameter. Signed-off-by: headphonejames --- app-config.yaml | 1 - packages/app-defaults/src/defaults/apis.ts | 16 ++++----- packages/core-app-api/api-report.md | 7 ++-- packages/core-app-api/config.d.ts | 13 +++---- .../OAuthRequestApi/MockOAuthApi.test.ts | 4 --- .../OAuthRequestManager.test.ts | 1 - .../OAuthRequestApi/OAuthRequestManager.ts | 6 ---- .../auth/atlassian/AtlassianAuth.ts | 4 +-- .../auth/bitbucket/BitbucketAuth.test.ts | 7 ++++ .../auth/bitbucket/BitbucketAuth.ts | 4 +-- .../auth/github/GithubAuth.test.ts | 7 ++++ .../implementations/auth/github/GithubAuth.ts | 4 +-- .../auth/gitlab/GitlabAuth.test.ts | 7 ++++ .../implementations/auth/gitlab/GitlabAuth.ts | 4 +-- .../auth/google/GoogleAuth.test.ts | 7 ++++ .../implementations/auth/google/GoogleAuth.ts | 4 +-- .../auth/microsoft/MicrosoftAuth.ts | 4 +-- .../auth/oauth2/OAuth2.test.ts | 13 +++++++ .../implementations/auth/oauth2/OAuth2.ts | 4 +-- .../auth/okta/OktaAuth.test.ts | 6 ++++ .../implementations/auth/okta/OktaAuth.ts | 4 +-- .../auth/onelogin/OneLoginAuth.ts | 7 ++-- .../src/apis/implementations/auth/types.ts | 4 +-- .../DefaultAuthConnector.test.ts | 8 ++++- .../lib/AuthConnector/DefaultAuthConnector.ts | 36 ++++++++++--------- .../OAuthRequestDialog/OAuthRequestDialog.tsx | 18 ++++++---- packages/core-plugin-api/api-report.md | 2 -- .../src/apis/definitions/OAuthRequestApi.ts | 10 ------ .../test-utils/src/testUtils/defaultApis.ts | 8 +++++ .../src/lib/oauth/OAuthAdapter.ts | 2 +- plugins/gitops-profiles/package.json | 1 + .../ProfileCatalog/ProfileCatalog.test.tsx | 6 ++++ yarn.lock | 1 + 33 files changed, 143 insertions(+), 87 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index 350b9068e3..dd72051189 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -293,7 +293,6 @@ auth: # path: my-sessions environment: development - authFlow: redirect ### Providing an auth.session.secret will enable session support in the auth-backend # session: # secret: custom session secret diff --git a/packages/app-defaults/src/defaults/apis.ts b/packages/app-defaults/src/defaults/apis.ts index feb4cd6cc8..b3a3d55736 100644 --- a/packages/app-defaults/src/defaults/apis.ts +++ b/packages/app-defaults/src/defaults/apis.ts @@ -128,10 +128,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GoogleAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -143,10 +143,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => MicrosoftAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -158,11 +158,11 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GithubAuth.create({ + configApi, discoveryApi, oauthRequestApi, defaultScopes: ['read:user'], environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -174,10 +174,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => OktaAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -189,10 +189,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GitlabAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -204,10 +204,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => OneLoginAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -219,11 +219,11 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => BitbucketAuth.create({ + configApi, discoveryApi, oauthRequestApi, defaultScopes: ['team'], environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }), }), createApiFactory({ @@ -235,10 +235,10 @@ export const apis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => { return AtlassianAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), - authFlow: configApi.getOptionalString('auth.authFlow'), }); }, }), diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index f8d5a99cd6..f7e2155db0 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -24,6 +24,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { bitbucketAuthApiRef } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { Config } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/config'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { ErrorApi } from '@backstage/core-plugin-api'; @@ -263,7 +264,7 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - authFlow?: string; + configApi: ConfigApi; }; // @public @@ -492,8 +493,6 @@ export type OAuthApiCreateOptions = AuthApiCreateOptions & { // @public export class OAuthRequestManager implements OAuthRequestApi { - // (undocumented) - authFlow(): string; // (undocumented) authRequest$(): Observable; // (undocumented) @@ -516,10 +515,10 @@ export class OneLoginAuth { // @public export type OneLoginAuthCreateOptions = { + configApi: ConfigApi; discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; - authFlow?: string; provider?: AuthProviderInfo; }; diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index c499dfa7c6..2de1d96114 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -114,11 +114,12 @@ export interface Config { * @visibility frontend */ environment?: string; - /** - $ The authentication flow type - currently supports 'popup' and 'redirect' - * default value: 'popup' - * @visibility frontend - */ - authFlow?: string; }; + + /** + $ Enable redirect authentication flow type, instead of a popup for authentication + * default value: 'false' + * @visibility frontend + */ + enableExperimentalRedirectFlow?: boolean; } diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts index a22fc24626..a64fadeb3e 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.test.ts @@ -25,14 +25,12 @@ describe('MockOAuthApi', () => { const requester1 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler1, - authFlow: 'popup', }); const authHandler2 = jest.fn().mockResolvedValue('other'); const requester2 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler2, - authFlow: 'popup', }); const promises = [ @@ -70,14 +68,12 @@ describe('MockOAuthApi', () => { const requester1 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler1, - authFlow: 'popup', }); const authHandler2 = jest.fn(); const requester2 = mock.createAuthRequester({ provider: { icon: () => null, title: 'Test', id: 'test-provider' }, onAuthRequest: authHandler2, - authFlow: 'popup', }); const promises = [ diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts index 54cfc8e41b..4dd6af715e 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.test.ts @@ -30,7 +30,6 @@ describe('OAuthRequestManager', () => { icon: () => null, }, onAuthRequest: async () => 'hello', - authFlow: 'popup', }); expect(reqSpy).toHaveBeenCalledTimes(0); diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts index 751f2bf24c..5d467be7b4 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/OAuthRequestManager.ts @@ -37,10 +37,8 @@ export class OAuthRequestManager implements OAuthRequestApi { private readonly subject = new BehaviorSubject([]); private currentRequests: PendingOAuthRequest[] = []; private handlerCount = 0; - private authFlowStr: string = 'popup'; createAuthRequester(options: OAuthRequesterOptions): OAuthRequester { - this.authFlowStr = options.authFlow; const handler = new OAuthPendingRequests(); const index = this.handlerCount; @@ -93,8 +91,4 @@ export class OAuthRequestManager implements OAuthRequestApi { authRequest$(): Observable { return this.subject; } - - authFlow(): string { - return this.authFlowStr; - } } diff --git a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts index df714e2290..3477eec361 100644 --- a/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/atlassian/AtlassianAuth.ts @@ -32,19 +32,19 @@ const DEFAULT_PROVIDER = { export default class AtlassianAuth { static create(options: OAuthApiCreateOptions): typeof atlassianAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts index f4bd7cbe85..29cd696a29 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts @@ -17,6 +17,8 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import BitbucketAuth from './BitbucketAuth'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const getSession = jest.fn(); @@ -32,6 +34,10 @@ describe('BitbucketAuth', () => { jest.resetAllMocks(); }); + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); + it.each([ ['team api write_repository', ['team', 'api', 'write_repository']], ['read_repository sudo', ['read_repository', 'sudo']], @@ -39,6 +45,7 @@ describe('BitbucketAuth', () => { const gitlabAuth = BitbucketAuth.create({ oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), + configApi: configApi, }); gitlabAuth.getAccessToken(scope); diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts index 3bdb09b010..7a9f1bc094 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.ts @@ -47,20 +47,20 @@ const DEFAULT_PROVIDER = { export default class BitbucketAuth { static create(options: OAuthApiCreateOptions): typeof bitbucketAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['team'], } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts index ea7b4ac688..e34c3cea87 100644 --- a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts @@ -17,6 +17,8 @@ import { UrlPatternDiscovery } from '../../DiscoveryApi'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import GithubAuth from './GithubAuth'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const getSession = jest.fn(); @@ -32,8 +34,13 @@ describe('GithubAuth', () => { jest.resetAllMocks(); }); + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); + it('should forward access token request to session manager', async () => { const githubAuth = GithubAuth.create({ + configApi: configApi, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), }); diff --git a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts index 5acdd20719..943dfa7da4 100644 --- a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.ts @@ -32,21 +32,21 @@ const DEFAULT_PROVIDER = { export default class GithubAuth { static create(options: OAuthApiCreateOptions): typeof githubAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read:user'], - authFlow = 'popup', } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, defaultScopes, - authFlow, }); } } diff --git a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts index 3346af9b7c..71368c173e 100644 --- a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts @@ -17,6 +17,8 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import GitlabAuth from './GitlabAuth'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const getSession = jest.fn(); @@ -39,7 +41,12 @@ describe('GitlabAuth', () => { ], ['read_repository sudo', ['read_repository', 'sudo']], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); + const gitlabAuth = GitlabAuth.create({ + configApi: configApi, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), }); diff --git a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts index 919d67dd8d..c39f5a6e23 100644 --- a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.ts @@ -32,20 +32,20 @@ const DEFAULT_PROVIDER = { export default class GitlabAuth { static create(options: OAuthApiCreateOptions): typeof gitlabAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['read_user'], } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts index f8a1c3a1f5..44a3fed30f 100644 --- a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts @@ -17,6 +17,8 @@ import GoogleAuth from './GoogleAuth'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const PREFIX = 'https://www.googleapis.com/auth/'; @@ -58,7 +60,12 @@ describe('GoogleAuth', () => { [`${PREFIX}profile`, [`${PREFIX}profile`]], [`${PREFIX}openid`, [`${PREFIX}openid`]], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); + const googleAuth = GoogleAuth.create({ + configApi: configApi, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), }); diff --git a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts index e8adefb08f..f4674ab64f 100644 --- a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.ts @@ -34,10 +34,10 @@ const SCOPE_PREFIX = 'https://www.googleapis.com/auth/'; export default class GoogleAuth { static create(options: OAuthApiCreateOptions): typeof googleAuthApiRef.T { const { + configApi, discoveryApi, oauthRequestApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, defaultScopes = [ 'openid', @@ -47,11 +47,11 @@ export default class GoogleAuth { } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, defaultScopes, scopeTransform(scopes: string[]) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index c28e115950..30cfde7c6e 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -32,8 +32,8 @@ const DEFAULT_PROVIDER = { export default class MicrosoftAuth { static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T { const { + configApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, discoveryApi, @@ -47,11 +47,11 @@ export default class MicrosoftAuth { } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, defaultScopes, }); } diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts index 0bb40c23fc..671d80c2be 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts @@ -17,6 +17,8 @@ import OAuth2 from './OAuth2'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const theFuture = new Date(Date.now() + 3600000); const thePast = new Date(Date.now() - 10); @@ -34,12 +36,17 @@ jest.mock('../../../../lib/AuthSessionManager', () => ({ }, })); +const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, +}); + describe('OAuth2', () => { it('should get refreshed access token', async () => { getSession = jest.fn().mockResolvedValue({ providerInfo: { accessToken: 'access-token', expiresAt: theFuture }, }); const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopeTransform, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), @@ -59,6 +66,7 @@ describe('OAuth2', () => { providerInfo: { accessToken: 'access-token', expiresAt: theFuture }, }); const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopes => scopes.map(scope => `my-prefix/${scope}`), oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), @@ -75,7 +83,9 @@ describe('OAuth2', () => { getSession = jest.fn().mockResolvedValue({ providerInfo: { idToken: 'id-token', expiresAt: theFuture }, }); + const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopeTransform, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), @@ -90,6 +100,7 @@ describe('OAuth2', () => { providerInfo: { idToken: 'id-token', expiresAt: theFuture }, }); const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopes => scopes.map(scope => `my-prefix/${scope}`), oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), @@ -113,6 +124,7 @@ describe('OAuth2', () => { }) .mockRejectedValue(error); const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopes => scopes.map(scope => `my-prefix/${scope}`), oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), @@ -147,6 +159,7 @@ describe('OAuth2', () => { }, }); const oauth2 = OAuth2.create({ + configApi: configApi, scopeTransform: scopes => scopes.map(scope => `my-prefix/${scope}`), oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts index 7a133154f2..e3ff395fd0 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts @@ -72,21 +72,21 @@ export default class OAuth2 { static create(options: OAuth2CreateOptions) { const { + configApi, discoveryApi, environment = 'development', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = [], - authFlow = 'popup', scopeTransform = x => x, } = options; const connector = new DefaultAuthConnector({ + configApi, discoveryApi, environment, provider, oauthRequestApi: oauthRequestApi, - authFlow, sessionTransform(res: OAuth2Response): OAuth2Session { return { ...res, diff --git a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts index 6489b326ff..1918e51a34 100644 --- a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts @@ -17,6 +17,8 @@ import OktaAuth from './OktaAuth'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const PREFIX = 'okta.'; @@ -50,7 +52,11 @@ describe('OktaAuth', () => { [`${PREFIX}profile`, [`${PREFIX}profile`]], [`${PREFIX}openid`, [`${PREFIX}openid`]], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); const auth = OktaAuth.create({ + configApi: configApi, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), }); diff --git a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts index 9075d8cb82..c1921a8f93 100644 --- a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.ts @@ -44,20 +44,20 @@ const OKTA_SCOPE_PREFIX: string = 'okta.'; export default class OktaAuth { static create(options: OAuthApiCreateOptions): typeof oktaAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, defaultScopes = ['openid', 'email', 'profile', 'offline_access'], } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow, defaultScopes, scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts index edfcbc4463..8beac05755 100644 --- a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts @@ -18,6 +18,7 @@ import { oneloginAuthApiRef, OAuthRequestApi, AuthProviderInfo, + ConfigApi, DiscoveryApi, } from '@backstage/core-plugin-api'; import { OAuth2 } from '../oauth2'; @@ -27,10 +28,10 @@ import { OAuth2 } from '../oauth2'; * @public */ export type OneLoginAuthCreateOptions = { + configApi: ConfigApi; discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; - authFlow?: string; provider?: AuthProviderInfo; }; @@ -62,19 +63,19 @@ export default class OneLoginAuth { options: OneLoginAuthCreateOptions, ): typeof oneloginAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', - authFlow = 'popup', provider = DEFAULT_PROVIDER, oauthRequestApi, } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, environment, - authFlow: authFlow, defaultScopes: ['openid', 'email', 'profile', 'offline_access'], scopeTransform(scopes) { return scopes.map(scope => { diff --git a/packages/core-app-api/src/apis/implementations/auth/types.ts b/packages/core-app-api/src/apis/implementations/auth/types.ts index fdb2bbc7f8..c2614a54ff 100644 --- a/packages/core-app-api/src/apis/implementations/auth/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/types.ts @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { AuthProviderInfo, + ConfigApi, DiscoveryApi, OAuthRequestApi, } from '@backstage/core-plugin-api'; @@ -37,5 +37,5 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - authFlow?: string; + configApi: ConfigApi; }; diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index fd2a2833a8..8234f3cc51 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -21,6 +21,8 @@ import { UrlPatternDiscovery } from '../../apis'; import { setupRequestMockHandlers } from '@backstage/test-utils'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; jest.mock('../loginPopup', () => { return { @@ -28,6 +30,10 @@ jest.mock('../loginPopup', () => { }; }); +const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, +}); + const defaultOptions = { discoveryApi: UrlPatternDiscovery.compile('http://my-host/api/{{pluginId}}'), environment: 'production', @@ -42,7 +48,7 @@ const defaultOptions = { scopes: new Set(res.scopes.split(' ')), expiresAt: new Date(Date.now() + expiresInSeconds * 1000), }), - authFlow: 'popup', + configApi: configApi, }; describe('DefaultAuthConnector', () => { diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index 7cada8b0f9..3ec997d80a 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { - OAuthRequester, - OAuthRequestApi, AuthProviderInfo, + ConfigApi, DiscoveryApi, + OAuthRequestApi, + OAuthRequester, } from '@backstage/core-plugin-api'; import { showLoginPopup } from '../loginPopup'; import { AuthConnector, CreateSessionOptions } from './types'; @@ -50,9 +50,9 @@ type Options = { */ sessionTransform?(response: any): AuthSession | Promise; /** - * The UI authentication flow with backend authentication api. Supports either 'popup' or 'redirect'. + * ConfigApi instance used to configure authentication flow of pop-up or redirect. */ - authFlow: string; + configApi: ConfigApi; }; function defaultJoinScopes(scopes: Set) { @@ -68,36 +68,37 @@ export class DefaultAuthConnector implements AuthConnector { private readonly discoveryApi: DiscoveryApi; + private readonly configApi: ConfigApi; private readonly environment: string; private readonly provider: AuthProviderInfo; private readonly joinScopesFunc: (scopes: Set) => string; private readonly authRequester: OAuthRequester; private readonly sessionTransform: (response: any) => Promise; - private readonly authFlow: string; - constructor(options: Options) { const { + configApi, discoveryApi, environment, provider, joinScopes = defaultJoinScopes, oauthRequestApi, - authFlow, sessionTransform = id => id, } = options; this.authRequester = oauthRequestApi.createAuthRequester({ provider, onAuthRequest: async scopes => { - if (authFlow === 'popup') { + const enableExperimentalRedirectFlow = + this.configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? + false; + if (!enableExperimentalRedirectFlow) { return this.showPopup(scopes); } return this.executeRedirect(scopes); }, - authFlow, }); - this.authFlow = authFlow; + this.configApi = configApi; this.discoveryApi = discoveryApi; this.environment = environment; this.provider = provider; @@ -106,7 +107,11 @@ export class DefaultAuthConnector } async createSession(options: CreateSessionOptions): Promise { - if (options.instantPopup && this.authFlow === 'popup') { + const enableExperimentalRedirectFlow = + this.configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? + false; + + if (options.instantPopup && !enableExperimentalRedirectFlow) { return this.showPopup(options.scopes); } return this.authRequester(options.scopes); @@ -184,14 +189,13 @@ export class DefaultAuthConnector private async executeRedirect(scopes: Set): Promise { const scope = this.joinScopesFunc(scopes); - const redirectUrl = await this.buildUrl('/start', { + // redirect to auth api + window.location.href = await this.buildUrl('/start', { scope, origin: window.location.origin, redirectUrl: window.location.href, - authFlow: 'redirect', + flow: 'redirect', }); - // redirect to auth api - window.location.href = redirectUrl; // return a promise that never resolves return new Promise(() => {}); } diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index e68120298a..c7a8e49faa 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { makeStyles, Theme } from '@material-ui/core/styles'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; @@ -24,7 +23,11 @@ import Button from '@material-ui/core/Button'; import React, { useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; import LoginRequestListItem from './LoginRequestListItem'; -import { useApi, oauthRequestApiRef } from '@backstage/core-plugin-api'; +import { + useApi, + configApiRef, + oauthRequestApiRef, +} from '@backstage/core-plugin-api'; import Typography from '@material-ui/core/Typography'; export type OAuthRequestDialogClassKey = @@ -58,10 +61,13 @@ export function OAuthRequestDialog(_props: {}) { const classes = useStyles(); const [busy, setBusy] = useState(false); const oauthRequestApi = useApi(oauthRequestApiRef); - const redirectMessage = - oauthRequestApi.authFlow() === 'popup' - ? '' - : 'This will trigger a http redirect to OAuth Login.'; + const configApi = useApi(configApiRef); + + const authRedirect = + configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? false; + const redirectMessage = authRedirect + ? 'This will trigger a http redirect to OAuth Login.' + : ''; const requests = useObservable( useMemo(() => oauthRequestApi.authRequest$(), [oauthRequestApi]), diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index 17278d4cc5..6bba47a3f4 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -548,7 +548,6 @@ export type OAuthRequestApi = { options: OAuthRequesterOptions, ): OAuthRequester; authRequest$(): Observable; - authFlow(): string; }; // @public @@ -563,7 +562,6 @@ export type OAuthRequester = ( export type OAuthRequesterOptions = { provider: AuthProviderInfo; onAuthRequest(scopes: Set): Promise; - authFlow: string; }; // @public diff --git a/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts b/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts index 2027852de7..75bf3a3864 100644 --- a/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts +++ b/packages/core-plugin-api/src/apis/definitions/OAuthRequestApi.ts @@ -35,11 +35,6 @@ export type OAuthRequesterOptions = { * trigger() is called on an auth requests. */ onAuthRequest(scopes: Set): Promise; - - /** - * The authentication flow type - */ - authFlow: string; }; /** @@ -124,11 +119,6 @@ export type OAuthRequestApi = { * AuthRequester calls will resolve to the value returned by the onAuthRequest call. */ authRequest$(): Observable; - - /** - * The authentication flow type - */ - authFlow(): string; }; /** diff --git a/packages/test-utils/src/testUtils/defaultApis.ts b/packages/test-utils/src/testUtils/defaultApis.ts index 1ff10bfe6f..2231d28cd0 100644 --- a/packages/test-utils/src/testUtils/defaultApis.ts +++ b/packages/test-utils/src/testUtils/defaultApis.ts @@ -89,6 +89,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GoogleAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), @@ -103,6 +104,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => MicrosoftAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), @@ -117,6 +119,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GithubAuth.create({ + configApi, discoveryApi, oauthRequestApi, defaultScopes: ['read:user'], @@ -132,6 +135,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => OktaAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), @@ -146,6 +150,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => GitlabAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), @@ -160,6 +165,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => OneLoginAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), @@ -174,6 +180,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => BitbucketAuth.create({ + configApi, discoveryApi, oauthRequestApi, defaultScopes: ['team'], @@ -189,6 +196,7 @@ export const defaultApis = [ }, factory: ({ discoveryApi, oauthRequestApi, configApi }) => { return AtlassianAuth.create({ + configApi, discoveryApi, oauthRequestApi, environment: configApi.getOptionalString('auth.environment'), diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index 78365cda0f..3d2a312a81 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -103,7 +103,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const env = req.query.env?.toString(); const origin = req.query.origin?.toString(); const redirectUrl = req.query.redirectUrl?.toString(); - const flow = req.query.authFlow?.toString(); + const flow = req.query.flow?.toString(); if (!env) { throw new InputError('No env provided in request query parameters'); } diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index b485aea867..9c8f623c12 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -33,6 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/config": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/theme": "workspace:^", diff --git a/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx b/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx index 5aa59a1cae..03d3d84c36 100644 --- a/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx +++ b/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx @@ -18,6 +18,8 @@ import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; import React from 'react'; import { gitOpsApiRef, GitOpsRestApi } from '../../api'; import ProfileCatalog from './ProfileCatalog'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; import { ApiProvider, @@ -31,6 +33,9 @@ import { githubAuthApiRef } from '@backstage/core-plugin-api'; describe('ProfileCatalog', () => { it('should render', async () => { const oauthRequestApi = new OAuthRequestManager(); + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); const apis = TestApiRegistry.from( [gitOpsApiRef, new GitOpsRestApi('http://localhost:3008')], [ @@ -40,6 +45,7 @@ describe('ProfileCatalog', () => { 'http://example.com/{{pluginId}}', ), oauthRequestApi, + configApi: configApi, }), ], ); diff --git a/yarn.lock b/yarn.lock index 7cc0dbd8b5..974db36e32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6195,6 +6195,7 @@ __metadata: resolution: "@backstage/plugin-gitops-profiles@workspace:plugins/gitops-profiles" dependencies: "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" From fa9e9e36ab093b72669bb8f10caba2e69c5d8ca8 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Mon, 27 Feb 2023 16:39:13 -0800 Subject: [PATCH 009/511] fix query string name Signed-off-by: headphonejames --- .../src/lib/AuthConnector/DefaultAuthConnector.test.ts | 4 ++-- .../src/lib/AuthConnector/DefaultAuthConnector.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index 8234f3cc51..51da9cbfb5 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -138,7 +138,7 @@ describe('DefaultAuthConnector', () => { expect(popupSpy).toHaveBeenCalledTimes(1); expect(popupSpy.mock.calls[0][0]).toMatchObject({ - url: 'http://my-host/api/auth/my-provider/start?scope=a%20b&origin=http%3A%2F%2Flocalhost&authFlow=popup&env=production', + url: 'http://my-host/api/auth/my-provider/start?scope=a%20b&origin=http%3A%2F%2Flocalhost&flow=popup&env=production', }); await expect(sessionPromise).resolves.toEqual({ @@ -186,7 +186,7 @@ describe('DefaultAuthConnector', () => { expect(popupSpy).toHaveBeenCalledTimes(1); expect(popupSpy.mock.calls[0][0]).toMatchObject({ - url: 'http://my-host/api/auth/my-provider/start?scope=-ab-&origin=http%3A%2F%2Flocalhost&authFlow=popup&env=production', + url: 'http://my-host/api/auth/my-provider/start?scope=-ab-&origin=http%3A%2F%2Flocalhost&flow=popup&env=production', }); }); }); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index 3ec997d80a..633ccb8ae1 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -173,7 +173,7 @@ export class DefaultAuthConnector const popupUrl = await this.buildUrl('/start', { scope, origin: window.location.origin, - authFlow: 'popup', + flow: 'popup', }); const payload = await showLoginPopup({ From 63a6a3d44ba2e61094778a7ff4dfcd5e78141a6c Mon Sep 17 00:00:00 2001 From: headphonejames Date: Mon, 27 Feb 2023 17:32:00 -0800 Subject: [PATCH 010/511] rebase and fix bitbucket server Signed-off-by: headphonejames --- packages/app-defaults/src/defaults/apis.ts | 4 +++- .../auth/bitbucketServer/BitbucketServerAuth.test.ts | 7 +++++++ .../auth/bitbucketServer/BitbucketServerAuth.ts | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/app-defaults/src/defaults/apis.ts b/packages/app-defaults/src/defaults/apis.ts index f8464adaff..3a552c25c7 100644 --- a/packages/app-defaults/src/defaults/apis.ts +++ b/packages/app-defaults/src/defaults/apis.ts @@ -233,9 +233,11 @@ export const apis = [ deps: { discoveryApi: discoveryApiRef, oauthRequestApi: oauthRequestApiRef, + configApi: configApiRef, }, - factory: ({ discoveryApi, oauthRequestApi }) => + factory: ({ discoveryApi, oauthRequestApi, configApi }) => BitbucketServerAuth.create({ + configApi, discoveryApi, oauthRequestApi, defaultScopes: ['REPO_READ'], diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts index 32e7755a00..e1625c7687 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts @@ -17,6 +17,8 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import BitbucketServerAuth from './BitbucketServerAuth'; +import { ConfigReader } from '@backstage/config'; +import { ConfigApi } from '@backstage/core-plugin-api'; const getSession = jest.fn(); @@ -40,7 +42,12 @@ describe('BitbucketServerAuth', () => { ['PROJECT_ADMIN', 'REPO_READ', 'ACCOUNT_WRITE'], ], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { + const configApi: ConfigApi = new ConfigReader({ + enableExperimentalRedirectFlow: false, + }); + const bitbucketServerAuth = BitbucketServerAuth.create({ + configApi: configApi, oauthRequestApi: new MockOAuthApi(), discoveryApi: UrlPatternDiscovery.compile('http://example.com'), }); diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.ts index dc50eff6ab..b25deffb93 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.ts @@ -48,6 +48,7 @@ export default class BitbucketServerAuth { options: OAuthApiCreateOptions, ): typeof bitbucketServerAuthApiRef.T { const { + configApi, discoveryApi, environment = 'development', provider = DEFAULT_PROVIDER, @@ -56,6 +57,7 @@ export default class BitbucketServerAuth { } = options; return OAuth2.create({ + configApi, discoveryApi, oauthRequestApi, provider, From cef1a238a963f8adfd59863d0d76180c98b27750 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Tue, 28 Feb 2023 17:35:09 +0100 Subject: [PATCH 011/511] bump mui labs to remove warnings Signed-off-by: Morgan Bentell --- plugins/adr/package.json | 2 +- plugins/airbrake/package.json | 2 +- plugins/allure/package.json | 2 +- plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/package.json | 2 +- plugins/api-docs/package.json | 2 +- plugins/azure-devops/package.json | 2 +- plugins/azure-sites/package.json | 2 +- plugins/badges/package.json | 2 +- plugins/bazaar/package.json | 2 +- plugins/bitrise/package.json | 2 +- plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/package.json | 2 +- plugins/catalog-react/package.json | 2 +- plugins/catalog/package.json | 2 +- plugins/cicd-statistics/package.json | 2 +- plugins/circleci/package.json | 2 +- plugins/cloudbuild/package.json | 2 +- plugins/code-climate/package.json | 2 +- plugins/code-coverage/package.json | 2 +- plugins/config-schema/package.json | 2 +- plugins/cost-insights/package.json | 2 +- plugins/dynatrace/package.json | 2 +- plugins/entity-feedback/package.json | 2 +- plugins/example-todo-list/package.json | 2 +- plugins/explore/package.json | 2 +- plugins/firehydrant/package.json | 2 +- plugins/fossa/package.json | 2 +- plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/package.json | 2 +- plugins/github-actions/package.json | 2 +- plugins/github-deployments/package.json | 2 +- .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/package.json | 2 +- plugins/gocd/package.json | 2 +- plugins/graphiql/package.json | 2 +- plugins/graphql-voyager/package.json | 2 +- plugins/home/package.json | 2 +- plugins/ilert/package.json | 2 +- plugins/jenkins/package.json | 2 +- plugins/kafka/package.json | 2 +- plugins/kubernetes/package.json | 2 +- plugins/lighthouse/package.json | 2 +- plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/package.json | 2 +- plugins/org/package.json | 2 +- plugins/pagerduty/package.json | 2 +- plugins/periskop/package.json | 2 +- plugins/rollbar/package.json | 2 +- plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/package.json | 2 +- plugins/search-react/package.json | 2 +- plugins/search/package.json | 2 +- plugins/sentry/package.json | 2 +- plugins/shortcuts/package.json | 2 +- plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/package.json | 2 +- plugins/tech-insights/package.json | 2 +- plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/package.json | 2 +- .../package.json | 2 +- plugins/techdocs-react/package.json | 2 +- plugins/techdocs/package.json | 2 +- plugins/todo/package.json | 2 +- plugins/user-settings/package.json | 2 +- plugins/xcmetrics/package.json | 2 +- yarn.lock | 138 +++++++++--------- 69 files changed, 137 insertions(+), 137 deletions(-) diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 3910fbdef9..7169c0ab79 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -33,7 +33,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-markdown": "^8.0.0", "react-use": "^17.2.4", "remark-gfm": "^3.0.1" diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 22d961419c..1ea4291201 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -31,7 +31,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 98296190b7..af30c8d540 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -30,7 +30,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 2cf706b25e..11ef7ad2ad 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -28,7 +28,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-ga": "^3.3.0", "react-use": "^17.2.4" }, diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index b249948e90..d9d4d8f7df 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -26,7 +26,7 @@ "@backstage/core-plugin-api": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "cross-fetch": "^3.1.5", "qs": "^6.10.1", "react-use": "^17.2.4" diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 7660e62320..41232d25c1 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "graphiql": "^1.8.8", "graphql": "^16.0.0", "graphql-ws": "^5.4.1", diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 4174675f03..3d7f36af83 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "humanize-duration": "^3.27.0", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 7d37bf287a..f3ea8bf1fc 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "react-use": "^17.2.4" }, diff --git a/plugins/badges/package.json b/plugins/badges/package.json index a5a610c041..eada841784 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index ae3703cbbc..064b5e00f9 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -34,7 +34,7 @@ "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/pickers": "^3.3.10", "@testing-library/jest-dom": "^5.10.1", "luxon": "^3.0.0", diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 3366b34d9a..ed5fa886a8 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -30,7 +30,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "cross-fetch": "^3.1.5", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 0e093a3ab1..63bf8953d2 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -30,7 +30,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "classnames": "^2.3.1", "lodash": "^4.17.15", "p-limit": "^3.1.0", diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 57633f7b22..6f0b9deeaf 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -44,7 +44,7 @@ "@backstage/plugin-catalog-react": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", "git-url-parse": "^13.0.0", "js-base64": "^3.6.0", diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 7a707240ca..4a9c30ad0d 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -59,7 +59,7 @@ "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "classnames": "^2.2.6", "jwt-decode": "^3.1.0", "lodash": "^4.17.21", diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 212f4044b4..42a78f31c8 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -46,7 +46,7 @@ "@backstage/types": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "history": "^5.0.0", "lodash": "^4.17.21", "pluralize": "^8.0.0", diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 79469a7ce8..46165c6ed1 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -43,7 +43,7 @@ "@date-io/luxon": "^1.3.13", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/pickers": "^3.3.10", "already": "^3.2.0", "humanize-duration": "^3.27.0", diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index b657d07f28..d8e558792d 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "circleci-api": "^4.0.0", "humanize-duration": "^3.27.0", "lodash": "^4.17.21", diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 7604fdaf63..6f1130710f 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "qs": "^6.9.4", "react-use": "^17.2.4" diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 0f99afff6a..20ba30f548 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "humanize-duration": "^3.27.1", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 3a2de06c7f..09815ff66c 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -32,7 +32,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.11.0", "highlight.js": "^10.6.0", "luxon": "^3.0.0", diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 07773496c0..4ad91d70ed 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -31,7 +31,7 @@ "@backstage/types": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "jsonschema": "^1.2.6", "react-use": "^17.2.4", "zen-observable": "^0.10.0" diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index bce00a354f..17c59ba034 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.9.6", "@types/recharts": "^1.8.14", "classnames": "^2.2.6", diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index ef8c2bb22b..09563fe6bd 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -33,7 +33,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index bcf3895d7b..12c6edd750 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -36,7 +36,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 4eb7d3357f..a14a3a7a04 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -28,7 +28,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c53f00ff6a..e7f0a2d1f2 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -44,7 +44,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "classnames": "^2.2.6", "react-use": "^17.2.4" }, diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 06edc1cd38..0658f60386 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "react-use": "^17.2.4" }, diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 5864780dca..0c74bb722f 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "cross-fetch": "^3.1.5", "luxon": "^3.0.0", "p-limit": "^3.0.2", diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 37df64f7f4..7eedbc1e03 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -28,7 +28,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@maxim_mazurok/gapi.client.calendar": "^3.0.20220408", "@tanstack/react-query": "^4.1.3", "classnames": "^2.3.1", diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 2a382f97bb..e2e1924642 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -38,7 +38,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0" }, "peerDependencies": { diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 63ebb36dfb..90e95ac665 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", "luxon": "^3.0.0", "qs": "^6.10.1", diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 8a51def8c4..821d4dd4fd 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -42,7 +42,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 9027c5f23a..376ddf012b 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -33,7 +33,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/graphql": "^5.0.0", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index e837da56e9..964fe13d5f 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -42,7 +42,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", "luxon": "^3.0.0", "p-limit": "^4.0.0", diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 1f42adc3d9..de4a081134 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -38,7 +38,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 4567a6e59b..4a1e0201eb 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "luxon": "^3.0.0", "qs": "^6.10.1", diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 7f1bd12beb..c7b295b00b 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "graphiql": "^1.5.12", "graphql": "^16.0.0", "graphql-ws": "^5.4.1", diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index 3f6d833f7f..afa5111e3e 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -28,7 +28,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "graphql-voyager": "^1.0.0-rc.31", "react-use": "^17.2.4" }, diff --git a/plugins/home/package.json b/plugins/home/package.json index f7f98a26fd..bc8fdff417 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "react-use": "^17.2.4" }, diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 1bf968218a..6b10364303 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -32,7 +32,7 @@ "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/pickers": "^3.3.10", "humanize-duration": "^3.26.0", "luxon": "^3.0.0", diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index f6eb791af0..4c1d50c9cc 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -42,7 +42,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "react-use": "^17.2.4" }, diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 98f01102f3..102c37cd42 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -32,7 +32,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index b69efb0d65..d67240441f 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -43,7 +43,7 @@ "@kubernetes/client-node": "0.18.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", "cronstrue": "^2.2.0", "js-yaml": "^4.0.0", diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 0d9d1365eb..a90e1b00b6 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -42,7 +42,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 462352b69e..99ea9c4690 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -29,7 +29,7 @@ "@backstage/plugin-catalog-react": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "devDependencies": { diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 9d183f34d6..03c472c12e 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -38,7 +38,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index c469b55c38..31d2de1947 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/org/package.json b/plugins/org/package.json index c1a4e8b1e5..384987858d 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -35,7 +35,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "p-limit": "^3.1.0", "pluralize": "^8.0.0", "qs": "^6.10.1", diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index f248c6f31f..3b9f9b8ca0 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "classnames": "^2.2.6", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index eba10dc41e..bc1d415a14 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -31,7 +31,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "react-use": "^17.2.4" }, diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index f95f2cb8c4..6c09d3b268 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "react-sparklines": "^1.7.0", "react-use": "^17.2.4" diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 070a92ee53..93e4c7150e 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -57,7 +57,7 @@ "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", "@rjsf/core-v5": "npm:@rjsf/core@5.1.0", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 8a0c1f8e26..91b6334159 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -65,7 +65,7 @@ "@codemirror/view": "^6.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index fd8242b552..1990aecc36 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -39,7 +39,7 @@ "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "qs": "^6.9.4", "react-use": "^17.3.2" diff --git a/plugins/search/package.json b/plugins/search/package.json index 31b57878dd..cff45cef09 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -45,7 +45,7 @@ "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "qs": "^6.9.4", "react-use": "^17.2.4" }, diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 7d385260f4..d5af0e1732 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -41,7 +41,7 @@ "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "react-sparklines": "^1.7.0", "react-use": "^17.2.4" diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 0209e76ec7..968618f2b3 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -29,7 +29,7 @@ "@backstage/types": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@types/zen-observable": "^0.8.2", "react-hook-form": "^7.12.2", "react-use": "^17.2.4", diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index ef14f6da58..69feee56e1 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -43,7 +43,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.10.0", "cross-fetch": "^3.1.5", "rc-progress": "3.4.1", diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 2703a95871..e0eadaf035 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "classnames": "^2.2.6", "luxon": "^3.0.0", "react-use": "^17.2.4" diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 25b72e0de5..62631fbf29 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -37,7 +37,7 @@ "@backstage/types": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "qs": "^6.9.4", "react-use": "^17.2.4" }, diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index afb484dc06..b3fd617478 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "color": "^4.0.1", "d3-force": "^3.0.0", "prop-types": "^15.7.2", diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 2f9078c7f8..a238509540 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -44,7 +44,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@testing-library/react": "^12.1.3", "react-use": "^17.2.4", "testing-library__dom": "^7.29.4-beta.1" diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 51d656007d..13f0f0de07 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "git-url-parse": "^13.0.0", "photoswipe": "^5.3.5", diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index e2e45febf0..f03d13616a 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -39,7 +39,7 @@ "@backstage/core-plugin-api": "workspace:^", "@backstage/version-bridge": "workspace:^", "@material-ui/core": "^4.12.2", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.11.0", "jss": "~10.10.0", "lodash": "^4.17.21", diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index b66750991b..1147599d8f 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -47,7 +47,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.10.0", "dompurify": "^2.2.9", "event-source-polyfill": "1.0.25", diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 8c925c5cf7..d58cf2c420 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -38,7 +38,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index cce6dfa1e5..1b6bf61001 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -41,7 +41,7 @@ "@backstage/types": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", "react-use": "^17.2.4", "zen-observable": "^0.10.0" diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 107cb9600e..241a32fc24 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "luxon": "^3.0.0", "react-use": "^17.2.4", diff --git a/yarn.lock b/yarn.lock index fc43679003..229d156ece 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4280,7 +4280,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4333,7 +4333,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4362,7 +4362,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4390,7 +4390,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4416,7 +4416,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4460,7 +4460,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4672,7 +4672,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4734,7 +4734,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4786,7 +4786,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4837,7 +4837,7 @@ __metadata: "@date-io/luxon": 1.x "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/pickers": ^3.3.10 "@testing-library/jest-dom": ^5.10.1 cross-fetch: ^3.1.5 @@ -4878,7 +4878,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5301,7 +5301,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -5363,7 +5363,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -5457,7 +5457,7 @@ __metadata: "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -5504,7 +5504,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5548,7 +5548,7 @@ __metadata: "@date-io/luxon": ^1.3.13 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/pickers": ^3.3.10 "@types/luxon": ^3.0.0 "@types/react": ^16.13.1 || ^17.0.0 @@ -5578,7 +5578,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5612,7 +5612,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5642,7 +5642,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5704,7 +5704,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.11.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -5770,7 +5770,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5810,7 +5810,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.9.6 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -5853,7 +5853,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5917,7 +5917,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.1 @@ -6171,7 +6171,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6201,7 +6201,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6231,7 +6231,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6260,7 +6260,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@maxim_mazurok/gapi.client.calendar": ^3.0.20220408 "@tanstack/react-query": ^4.1.3 "@testing-library/jest-dom": ^5.10.1 @@ -6295,7 +6295,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6323,7 +6323,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6360,7 +6360,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6394,7 +6394,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/graphql": ^5.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6458,7 +6458,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6489,7 +6489,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6519,7 +6519,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6550,7 +6550,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6607,7 +6607,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6660,7 +6660,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6693,7 +6693,7 @@ __metadata: "@date-io/luxon": 1.x "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/pickers": ^3.3.10 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6762,7 +6762,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6817,7 +6817,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -6905,7 +6905,7 @@ __metadata: "@kubernetes/client-node": 0.18.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -6967,7 +6967,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7100,7 +7100,7 @@ __metadata: "@backstage/plugin-catalog-react": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@types/react": ^16.13.1 || ^17.0.0 cross-fetch: ^3.1.5 @@ -7123,7 +7123,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7151,7 +7151,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7209,7 +7209,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7242,7 +7242,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7295,7 +7295,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7561,7 +7561,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7766,7 +7766,7 @@ __metadata: "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 "@rjsf/core-v5": "npm:@rjsf/core@5.1.0" @@ -7830,7 +7830,7 @@ __metadata: "@codemirror/view": ^6.0.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 "@rjsf/material-ui": ^3.2.1 @@ -7981,7 +7981,7 @@ __metadata: "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8017,7 +8017,7 @@ __metadata: "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8050,7 +8050,7 @@ __metadata: "@material-table/core": ^3.1.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8082,7 +8082,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8149,7 +8149,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.10.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -8179,7 +8179,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8368,7 +8368,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8397,7 +8397,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8434,7 +8434,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8501,7 +8501,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -8575,7 +8575,7 @@ __metadata: "@backstage/theme": "workspace:^" "@backstage/version-bridge": "workspace:^" "@material-ui/core": ^4.12.2 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.11.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -8614,7 +8614,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.10.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -8682,7 +8682,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8735,7 +8735,7 @@ __metadata: "@backstage/types": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8821,7 +8821,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -11005,7 +11005,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -11707,7 +11707,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61": +"@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61": version: 4.0.0-alpha.61 resolution: "@material-ui/lab@npm:4.0.0-alpha.61" dependencies: From d7e856ad55b002b6ffe1e986fcdceed8e4f3a88d Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 28 Feb 2023 17:05:11 -0800 Subject: [PATCH 012/511] simplify code and test cases. clean up rendering. Signed-off-by: headphonejames --- packages/core-app-api/api-report.md | 4 +-- .../auth/bitbucket/BitbucketAuth.test.ts | 7 ++-- .../BitbucketServerAuth.test.ts | 7 ++-- .../auth/github/GithubAuth.test.ts | 7 ++-- .../auth/gitlab/GitlabAuth.test.ts | 7 ++-- .../auth/google/GoogleAuth.test.ts | 7 ++-- .../auth/oauth2/OAuth2.test.ts | 7 ++-- .../auth/okta/OktaAuth.test.ts | 7 ++-- .../src/apis/implementations/auth/types.ts | 2 +- packages/core-app-api/src/app/AppRouter.tsx | 16 +-------- packages/core-app-api/src/app/types.ts | 8 ----- .../lib/AuthConnector/DefaultAuthConnector.ts | 33 ++++++++++++------- .../OAuthRequestDialog/OAuthRequestDialog.tsx | 9 ++--- .../src/layout/SignInPage/types.ts | 13 +++++++- packages/core-plugin-api/api-report.md | 2 -- .../src/apis/definitions/auth.ts | 1 + .../src/lib/oauth/OAuthAdapter.ts | 2 +- .../ProfileCatalog/ProfileCatalog.test.tsx | 12 +++---- 18 files changed, 63 insertions(+), 88 deletions(-) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 405c9ed7b8..a2a34171b1 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -265,7 +265,7 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - configApi: ConfigApi; + configApi?: ConfigApi; }; // @public @@ -564,9 +564,7 @@ export class SamlAuth // @public export type SignInPageProps = { - onSignInStarted(): void; onSignInSuccess(identityApi: IdentityApi): void; - onSignInFailure(): void; }; // @public diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts index 29cd696a29..1335808280 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucket/BitbucketAuth.test.ts @@ -17,8 +17,7 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import BitbucketAuth from './BitbucketAuth'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const getSession = jest.fn(); @@ -34,9 +33,7 @@ describe('BitbucketAuth', () => { jest.resetAllMocks(); }); - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); it.each([ ['team api write_repository', ['team', 'api', 'write_repository']], diff --git a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts index e1625c7687..5631a9a886 100644 --- a/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.test.ts @@ -17,8 +17,7 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import BitbucketServerAuth from './BitbucketServerAuth'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const getSession = jest.fn(); @@ -42,9 +41,7 @@ describe('BitbucketServerAuth', () => { ['PROJECT_ADMIN', 'REPO_READ', 'ACCOUNT_WRITE'], ], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); const bitbucketServerAuth = BitbucketServerAuth.create({ configApi: configApi, diff --git a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts index e34c3cea87..fc77754f6f 100644 --- a/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/github/GithubAuth.test.ts @@ -17,8 +17,7 @@ import { UrlPatternDiscovery } from '../../DiscoveryApi'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import GithubAuth from './GithubAuth'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const getSession = jest.fn(); @@ -34,9 +33,7 @@ describe('GithubAuth', () => { jest.resetAllMocks(); }); - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); it('should forward access token request to session manager', async () => { const githubAuth = GithubAuth.create({ diff --git a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts index 71368c173e..6dde0c0334 100644 --- a/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/gitlab/GitlabAuth.test.ts @@ -17,8 +17,7 @@ import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; import GitlabAuth from './GitlabAuth'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const getSession = jest.fn(); @@ -41,9 +40,7 @@ describe('GitlabAuth', () => { ], ['read_repository sudo', ['read_repository', 'sudo']], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); const gitlabAuth = GitlabAuth.create({ configApi: configApi, diff --git a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts index 44a3fed30f..7897eef42e 100644 --- a/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/google/GoogleAuth.test.ts @@ -17,8 +17,7 @@ import GoogleAuth from './GoogleAuth'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const PREFIX = 'https://www.googleapis.com/auth/'; @@ -60,9 +59,7 @@ describe('GoogleAuth', () => { [`${PREFIX}profile`, [`${PREFIX}profile`]], [`${PREFIX}openid`, [`${PREFIX}openid`]], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); const googleAuth = GoogleAuth.create({ configApi: configApi, diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts index 671d80c2be..c6d92d2dad 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts @@ -17,8 +17,7 @@ import OAuth2 from './OAuth2'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const theFuture = new Date(Date.now() + 3600000); const thePast = new Date(Date.now() - 10); @@ -36,9 +35,7 @@ jest.mock('../../../../lib/AuthSessionManager', () => ({ }, })); -const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, -}); +const configApi = new MockConfigApi({}); describe('OAuth2', () => { it('should get refreshed access token', async () => { diff --git a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts index 1918e51a34..5e7370a947 100644 --- a/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/okta/OktaAuth.test.ts @@ -17,8 +17,7 @@ import OktaAuth from './OktaAuth'; import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; import { UrlPatternDiscovery } from '../../DiscoveryApi'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; const PREFIX = 'okta.'; @@ -52,9 +51,7 @@ describe('OktaAuth', () => { [`${PREFIX}profile`, [`${PREFIX}profile`]], [`${PREFIX}openid`, [`${PREFIX}openid`]], ])(`should normalize scopes correctly - %p`, (scope, scopes) => { - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); const auth = OktaAuth.create({ configApi: configApi, oauthRequestApi: new MockOAuthApi(), diff --git a/packages/core-app-api/src/apis/implementations/auth/types.ts b/packages/core-app-api/src/apis/implementations/auth/types.ts index c2614a54ff..08ddc5e659 100644 --- a/packages/core-app-api/src/apis/implementations/auth/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/types.ts @@ -37,5 +37,5 @@ export type AuthApiCreateOptions = { discoveryApi: DiscoveryApi; environment?: string; provider?: AuthProviderInfo; - configApi: ConfigApi; + configApi?: ConfigApi; }; diff --git a/packages/core-app-api/src/app/AppRouter.tsx b/packages/core-app-api/src/app/AppRouter.tsx index 33de9d479c..b799983a3b 100644 --- a/packages/core-app-api/src/app/AppRouter.tsx +++ b/packages/core-app-api/src/app/AppRouter.tsx @@ -72,22 +72,8 @@ function SignInPageWrapper({ const configApi = useApi(configApiRef); const basePath = getBasePath(configApi); - const handleSignInStarted = () => { - // no-op - }; - - const handleSignInFailure = () => { - // no-op - }; - if (!identityApi) { - return ( - - ); + return ; } appIdentityProxy.setTarget(identityApi, { diff --git a/packages/core-app-api/src/app/types.ts b/packages/core-app-api/src/app/types.ts index 8f5e1f5b27..3d9005b0c0 100644 --- a/packages/core-app-api/src/app/types.ts +++ b/packages/core-app-api/src/app/types.ts @@ -44,18 +44,10 @@ export type BootErrorPageProps = { * @public */ export type SignInPageProps = { - /** - * Invoked when the sign-in process has started. - */ - onSignInStarted(): void; /** * Set the IdentityApi on successful sign-in. This should only be called once. */ onSignInSuccess(identityApi: IdentityApi): void; - /** - * Invoked when the sign-in process has failed. - */ - onSignInFailure(): void; }; /** diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index 633ccb8ae1..f2c35b0ba3 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -23,6 +23,8 @@ import { import { showLoginPopup } from '../loginPopup'; import { AuthConnector, CreateSessionOptions } from './types'; +let warned = false; + type Options = { /** * DiscoveryApi instance used to locate the auth backend endpoint. @@ -52,7 +54,7 @@ type Options = { /** * ConfigApi instance used to configure authentication flow of pop-up or redirect. */ - configApi: ConfigApi; + configApi?: ConfigApi; }; function defaultJoinScopes(scopes: Set) { @@ -68,12 +70,12 @@ export class DefaultAuthConnector implements AuthConnector { private readonly discoveryApi: DiscoveryApi; - private readonly configApi: ConfigApi; private readonly environment: string; private readonly provider: AuthProviderInfo; private readonly joinScopesFunc: (scopes: Set) => string; private readonly authRequester: OAuthRequester; private readonly sessionTransform: (response: any) => Promise; + private readonly enableExperimentalRedirectFlow: boolean; constructor(options: Options) { const { configApi, @@ -85,20 +87,28 @@ export class DefaultAuthConnector sessionTransform = id => id, } = options; + if (!warned && !configApi) { + // eslint-disable-next-line no-console + console.warn( + 'DEPRECATION WARNING: Authentication providers require a configApi instance to configure the authentication flow. Please provide one to the authentication provider constructor.', + ); + warned = true; + } + + this.enableExperimentalRedirectFlow = configApi + ? configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? false + : false; + this.authRequester = oauthRequestApi.createAuthRequester({ provider, onAuthRequest: async scopes => { - const enableExperimentalRedirectFlow = - this.configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? - false; - if (!enableExperimentalRedirectFlow) { + if (!this.enableExperimentalRedirectFlow) { return this.showPopup(scopes); } return this.executeRedirect(scopes); }, }); - this.configApi = configApi; this.discoveryApi = discoveryApi; this.environment = environment; this.provider = provider; @@ -107,11 +117,10 @@ export class DefaultAuthConnector } async createSession(options: CreateSessionOptions): Promise { - const enableExperimentalRedirectFlow = - this.configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? - false; - - if (options.instantPopup && !enableExperimentalRedirectFlow) { + if (options.instantPopup) { + if (this.enableExperimentalRedirectFlow) { + return this.executeRedirect(options.scopes); + } return this.showPopup(options.scopes); } return this.authRequester(options.scopes); diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index c7a8e49faa..3e6c685401 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -65,9 +65,6 @@ export function OAuthRequestDialog(_props: {}) { const authRedirect = configApi.getOptionalBoolean('enableExperimentalRedirectFlow') ?? false; - const redirectMessage = authRedirect - ? 'This will trigger a http redirect to OAuth Login.' - : ''; const requests = useObservable( useMemo(() => oauthRequestApi.authRequest$(), [oauthRequestApi]), @@ -94,7 +91,11 @@ export function OAuthRequestDialog(_props: {}) { Login Required - {redirectMessage} + {authRedirect ? ( + + This will trigger a http redirect to OAuth Login. + + ) : null} diff --git a/packages/core-components/src/layout/SignInPage/types.ts b/packages/core-components/src/layout/SignInPage/types.ts index 8a0430a27d..6213c03432 100644 --- a/packages/core-components/src/layout/SignInPage/types.ts +++ b/packages/core-components/src/layout/SignInPage/types.ts @@ -35,8 +35,19 @@ export type SignInProviderConfig = { /** @public */ export type IdentityProviders = ('guest' | 'custom' | SignInProviderConfig)[]; +/** + * Invoked when the sign-in process has failed. + */ +export type onSignInFailure = () => void; +/** + * Invoked when the sign-in process has started. + */ +export type onSignInStarted = () => void; + export type ProviderComponent = ComponentType< - SignInPageProps & { config: SignInProviderConfig } + { onSignInStarted: onSignInStarted } & { + onSignInFailure: onSignInFailure; + } & SignInPageProps & { config: SignInProviderConfig } >; export type ProviderLoader = ( diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index 035b837729..4887f0b7f2 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -687,9 +687,7 @@ export enum SessionState { // @public export type SignInPageProps = { - onSignInStarted(): void; onSignInSuccess(identityApi: IdentityApi_2): void; - onSignInFailure(): void; }; // @public diff --git a/packages/core-plugin-api/src/apis/definitions/auth.ts b/packages/core-plugin-api/src/apis/definitions/auth.ts index 21717e19e0..43597639b6 100644 --- a/packages/core-plugin-api/src/apis/definitions/auth.ts +++ b/packages/core-plugin-api/src/apis/definitions/auth.ts @@ -285,6 +285,7 @@ export type SessionApi = { * Sign out from the current session. This will reload the page. */ signOut(): Promise; + /** * Observe the current state of the auth session. Emits the current state on subscription. */ diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index 3d2a312a81..b7aa5390fb 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -114,7 +114,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { // set a nonce cookie before redirecting to oauth provider this.setNonceCookie(res, nonce, cookieConfig); - const state: OAuthState = { nonce, env, origin, redirectUrl, flow: flow }; + const state: OAuthState = { nonce, env, origin, redirectUrl, flow }; // If scopes are persisted then we pass them through the state so that we // can set the cookie on successful auth diff --git a/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx b/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx index 03d3d84c36..eb58e03580 100644 --- a/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx +++ b/plugins/gitops-profiles/src/components/ProfileCatalog/ProfileCatalog.test.tsx @@ -14,12 +14,14 @@ * limitations under the License. */ -import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; +import { + MockConfigApi, + renderInTestApp, + TestApiRegistry, +} from '@backstage/test-utils'; import React from 'react'; import { gitOpsApiRef, GitOpsRestApi } from '../../api'; import ProfileCatalog from './ProfileCatalog'; -import { ConfigReader } from '@backstage/config'; -import { ConfigApi } from '@backstage/core-plugin-api'; import { ApiProvider, @@ -33,9 +35,7 @@ import { githubAuthApiRef } from '@backstage/core-plugin-api'; describe('ProfileCatalog', () => { it('should render', async () => { const oauthRequestApi = new OAuthRequestManager(); - const configApi: ConfigApi = new ConfigReader({ - enableExperimentalRedirectFlow: false, - }); + const configApi = new MockConfigApi({}); const apis = TestApiRegistry.from( [gitOpsApiRef, new GitOpsRestApi('http://localhost:3008')], [ From 57ec7e225036924af3167a9a8d99c344c1b6e8d6 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 28 Feb 2023 17:20:23 -0800 Subject: [PATCH 013/511] minor clean up Signed-off-by: headphonejames --- .../src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts | 4 ---- packages/core-app-api/src/apis/implementations/auth/types.ts | 1 + .../src/components/OAuthRequestDialog/OAuthRequestDialog.tsx | 1 + packages/core-components/src/layout/SignInPage/providers.tsx | 2 +- plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts | 1 + 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts index 4ca0ffc645..193c474361 100644 --- a/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts +++ b/packages/core-app-api/src/apis/implementations/OAuthRequestApi/MockOAuthApi.ts @@ -55,8 +55,4 @@ export default class MockOAuthApi implements OAuthRequestApi { }); }); } - - authFlow() { - return 'popup'; - } } diff --git a/packages/core-app-api/src/apis/implementations/auth/types.ts b/packages/core-app-api/src/apis/implementations/auth/types.ts index 08ddc5e659..7a74fd3a3b 100644 --- a/packages/core-app-api/src/apis/implementations/auth/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/types.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { AuthProviderInfo, ConfigApi, diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index 3e6c685401..0159d8f503 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { makeStyles, Theme } from '@material-ui/core/styles'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; diff --git a/packages/core-components/src/layout/SignInPage/providers.tsx b/packages/core-components/src/layout/SignInPage/providers.tsx index 1f3db4da36..5e7ab7b7be 100644 --- a/packages/core-components/src/layout/SignInPage/providers.tsx +++ b/packages/core-components/src/layout/SignInPage/providers.tsx @@ -32,7 +32,7 @@ import { guestProvider } from './guestProvider'; import { customProvider } from './customProvider'; import { IdentityApiSignOutProxy } from './IdentityApiSignOutProxy'; -export const PROVIDER_STORAGE_KEY = '@backstage/core:SignInPage:provider'; +const PROVIDER_STORAGE_KEY = '@backstage/core:SignInPage:provider'; export type SignInProviderType = { [key: string]: { diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts index b7aa5390fb..5f51b2d301 100644 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts @@ -104,6 +104,7 @@ export class OAuthAdapter implements AuthProviderRouteHandlers { const origin = req.query.origin?.toString(); const redirectUrl = req.query.redirectUrl?.toString(); const flow = req.query.flow?.toString(); + if (!env) { throw new InputError('No env provided in request query parameters'); } From 7908d72e033fb6af4d95a41d62d82ef1afe42511 Mon Sep 17 00:00:00 2001 From: headphonejames Date: Tue, 28 Feb 2023 21:56:38 -0800 Subject: [PATCH 014/511] add change set Signed-off-by: headphonejames --- .changeset/long-gorillas-remain.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changeset/long-gorillas-remain.md diff --git a/.changeset/long-gorillas-remain.md b/.changeset/long-gorillas-remain.md new file mode 100644 index 0000000000..f74dc1b1a7 --- /dev/null +++ b/.changeset/long-gorillas-remain.md @@ -0,0 +1,11 @@ +--- +'@backstage/core-components': minor +'@backstage/core-plugin-api': minor +'@backstage/plugin-gitops-profiles': minor +'@backstage/app-defaults': minor +'@backstage/core-app-api': minor +'@backstage/plugin-auth-backend': minor +'@backstage/test-utils': minor +--- + +Introduce a new global config parameter, "enableExperimentalRedirectFlow" When enabled, instead of having a popup window where the authentication takes place, backstage will redirect to the authentication backend plugin, followed by a redirect back to the backstage frontend after authentication takes place. From f41478fd0236eca84115492481c7f9a7a1169c33 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 1 Mar 2023 09:34:53 +0100 Subject: [PATCH 015/511] wrap settingsaddons in span to remove warning from mui Menu component Signed-off-by: Morgan Bentell --- .../TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx index 0cef4d521f..df4197b5b6 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx @@ -107,7 +107,7 @@ export const TechDocsReaderPageSubheader = (props: { onClose={handleClose} keepMounted > - {settingsAddons} + {settingsAddons} ) : null} From 08048a5a8b81e6d59830f046a0aa1e7553ddb3e5 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 1 Mar 2023 13:39:54 +0100 Subject: [PATCH 016/511] use span if the value of the header label content is not string, to remove warnings from validateDomNesting Signed-off-by: Morgan Bentell --- .../src/layout/HeaderLabel/HeaderLabel.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx index e3b6299f85..bc27bd82ec 100644 --- a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx +++ b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx @@ -50,9 +50,16 @@ type HeaderLabelContentProps = { className: string; }; -const HeaderLabelContent = ({ value, className }: HeaderLabelContentProps) => ( - {value} -); +const HeaderLabelContent = ({ value, className }: HeaderLabelContentProps) => { + return ( + + {value} + + ); +}; type HeaderLabelProps = { label: string; From 7cf160e4bc02f1c41017e7ef4dda2d8933481823 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 1 Mar 2023 13:55:58 +0100 Subject: [PATCH 017/511] cancel debounced function on unmount to avoid updating state on an umounted component Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/hooks.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/techdocs-react/src/hooks.ts b/plugins/techdocs-react/src/hooks.ts index e8cc7bddc8..42d8f0fbc1 100644 --- a/plugins/techdocs-react/src/hooks.ts +++ b/plugins/techdocs-react/src/hooks.ts @@ -82,6 +82,8 @@ export const useShadowRootSelection = (waitMillis: number = 0) => { [shadowRoot, setSelection, waitMillis], ); + useEffect(() => handleSelectionChange.cancel); + useEffect(() => { window.document.addEventListener('selectionchange', handleSelectionChange); return () => From 8e00acb28db6b0ba3efccec32f92f8db0413d32f Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 1 Mar 2023 14:04:51 +0100 Subject: [PATCH 018/511] add changeset Signed-off-by: Morgan Bentell --- .changeset/seven-gifts-fetch.md | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .changeset/seven-gifts-fetch.md diff --git a/.changeset/seven-gifts-fetch.md b/.changeset/seven-gifts-fetch.md new file mode 100644 index 0000000000..0646eb3d9e --- /dev/null +++ b/.changeset/seven-gifts-fetch.md @@ -0,0 +1,73 @@ +--- +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-github-pull-requests-board': patch +'@backstage/plugin-techdocs-addons-test-utils': patch +'@backstage/plugin-analytics-module-ga': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-github-deployments': patch +'@backstage/plugin-newrelic-dashboard': patch +'@internal/plugin-todo-list': patch +'@backstage/core-components': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-cicd-statistics': patch +'@backstage/plugin-entity-feedback': patch +'@backstage/plugin-gitops-profiles': patch +'@backstage/plugin-graphql-voyager': patch +'@backstage/plugin-apache-airflow': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-github-actions': patch +'@backstage/plugin-octopus-deploy': patch +'@backstage/plugin-splunk-on-call': patch +'@backstage/plugin-techdocs-react': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-code-coverage': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-cost-insights': patch +'@backstage/plugin-tech-insights': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-azure-devops': patch +'@backstage/plugin-code-climate': patch +'@backstage/plugin-gcp-projects': patch +'@backstage/plugin-search-react': patch +'@backstage/plugin-azure-sites': patch +'@backstage/plugin-firehydrant': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-tech-radar': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-gcalendar': patch +'@backstage/plugin-pagerduty': patch +'@backstage/plugin-shortcuts': patch +'@backstage/plugin-sonarqube': patch +'@backstage/plugin-xcmetrics': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-graphiql': patch +'@backstage/plugin-newrelic': patch +'@backstage/plugin-periskop': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-bitrise': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-explore': patch +'@backstage/plugin-jenkins': patch +'@backstage/plugin-rollbar': patch +'@backstage/plugin-allure': patch +'@backstage/plugin-badges': patch +'@backstage/plugin-bazaar': patch +'@backstage/plugin-search': patch +'@backstage/plugin-sentry': patch +'@backstage/plugin-fossa': patch +'@backstage/plugin-ilert': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-gocd': patch +'@backstage/plugin-home': patch +'@backstage/plugin-todo': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-org': patch +--- + +Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) From e73da4a0a99fa7f276c39f3e70f3f9f4dd280936 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 1 Mar 2023 15:45:23 +0100 Subject: [PATCH 019/511] use div insted of span because it's not allowed Signed-off-by: Morgan Bentell --- plugins/techdocs-backend/.gitignore | 1 + .../TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/techdocs-backend/.gitignore b/plugins/techdocs-backend/.gitignore index 7b4d4ba2e6..ff1cdd948f 100644 --- a/plugins/techdocs-backend/.gitignore +++ b/plugins/techdocs-backend/.gitignore @@ -1 +1,2 @@ static +**/?/ diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx index df4197b5b6..f3612aa46e 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx @@ -107,7 +107,7 @@ export const TechDocsReaderPageSubheader = (props: { onClose={handleClose} keepMounted > - {settingsAddons} +
{settingsAddons}
) : null} From 911c25de59cefe6f77823258438123edb7f9299a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 5 Mar 2023 20:17:14 +0100 Subject: [PATCH 020/511] eslint-plugin: add auto fix for missing imports Signed-off-by: Patrik Oldsberg --- .changeset/twelve-parrots-camp.md | 5 + packages/eslint-plugin/lib/getPackages.js | 4 + packages/eslint-plugin/lib/visitImports.js | 30 ++- .../rules/no-undeclared-imports.js | 188 +++++++++++++----- .../src/no-undeclared-imports.test.ts | 64 +++++- 5 files changed, 232 insertions(+), 59 deletions(-) create mode 100644 .changeset/twelve-parrots-camp.md diff --git a/.changeset/twelve-parrots-camp.md b/.changeset/twelve-parrots-camp.md new file mode 100644 index 0000000000..ea7e254f29 --- /dev/null +++ b/.changeset/twelve-parrots-camp.md @@ -0,0 +1,5 @@ +--- +'@backstage/eslint-plugin': patch +--- + +Add support for auto-fixing missing imports detected by the `no-undeclared-imports` rule. diff --git a/packages/eslint-plugin/lib/getPackages.js b/packages/eslint-plugin/lib/getPackages.js index f5f2c63cc1..8f4ccfacf3 100644 --- a/packages/eslint-plugin/lib/getPackages.js +++ b/packages/eslint-plugin/lib/getPackages.js @@ -31,6 +31,7 @@ const manypkg = require('@manypkg/get-packages'); * @property {ExtendedPackage} root * @property {ExtendedPackage[]} list * @property {Map} map + * @property {() => void} clearCache * @property {(path: string) => ExtendedPackage | undefined} byPath */ @@ -64,6 +65,9 @@ module.exports = (function () { pkg => !path.relative(pkg.dir, filePath).startsWith('..'), ); }, + clearCache() { + result = undefined; + }, }; lastLoadAt = Date.now(); return result; diff --git a/packages/eslint-plugin/lib/visitImports.js b/packages/eslint-plugin/lib/visitImports.js index 1a344c1101..376c37575f 100644 --- a/packages/eslint-plugin/lib/visitImports.js +++ b/packages/eslint-plugin/lib/visitImports.js @@ -24,6 +24,16 @@ const getPackages = require('./getPackages'); * @type {object} * @property {'local'} type * @property {'value' | 'type'} kind + * @property {import('estree').Node} node + * @property {string} path + */ + +/** + * @typedef ImportDirective + * @type {object} + * @property {'directive'} type + * @property {'value' | 'type'} kind + * @property {import('estree').Node} node * @property {string} path */ @@ -32,6 +42,7 @@ const getPackages = require('./getPackages'); * @type {object} * @property {'internal'} type * @property {'value' | 'type'} kind + * @property {import('estree').Node} node * @property {string} path * @property {import('./getPackages').ExtendedPackage} package * @property {string} packageName @@ -42,6 +53,7 @@ const getPackages = require('./getPackages'); * @type {object} * @property {'external'} type * @property {'value' | 'type'} kind + * @property {import('estree').Node} node * @property {string} path * @property {string} packageName */ @@ -51,6 +63,7 @@ const getPackages = require('./getPackages'); * @type {object} * @property {'builtin'} type * @property {'value' | 'type'} kind + * @property {import('estree').Literal} node * @property {string} path * @property {string} packageName */ @@ -58,7 +71,7 @@ const getPackages = require('./getPackages'); /** * @callback ImportVisitor * @param {ConsideredNode} node - * @param {LocalImport | InternalImport | ExternalImport | BuiltinImport} import + * @param {ImportDirective | LocalImport | InternalImport | ExternalImport | BuiltinImport} import */ /** @@ -68,7 +81,7 @@ const getPackages = require('./getPackages'); /** * @param {ConsideredNode} node - * @returns {undefined | {path: string, kind: 'type' | 'value'}} + * @returns {undefined | {path: string, node: import('estree').Literal, kind: 'type' | 'value'}} */ function getImportInfo(node) { /** @type {import('estree').Expression | import('estree').SpreadElement | undefined | null} */ @@ -95,7 +108,11 @@ function getImportInfo(node) { /** @type {any} */ const anyNode = node; - return { path: pathNode.value, kind: anyNode.importKind ?? 'value' }; + return { + path: pathNode.value, + node: pathNode, + kind: anyNode.importKind ?? 'value', + }; } /** @@ -122,6 +139,10 @@ module.exports = function visitImports(context, visitor) { return visitor(node, { type: 'local', ...info }); } + if (info.path.startsWith('directive:')) { + return visitor(node, { type: 'directive', ...info }); + } + const pathParts = info.path.split('/'); // Check for match with plain name, then namespaced name @@ -143,6 +164,7 @@ module.exports = function visitImports(context, visitor) { return visitor(node, { type: 'builtin', kind: info.kind, + node: info.node, path: subPath, packageName, }); @@ -151,6 +173,7 @@ module.exports = function visitImports(context, visitor) { return visitor(node, { type: 'external', kind: info.kind, + node: info.node, path: subPath, packageName, }); @@ -159,6 +182,7 @@ module.exports = function visitImports(context, visitor) { return visitor(node, { type: 'internal', kind: info.kind, + node: info.node, path: subPath, package: pkg, packageName, diff --git a/packages/eslint-plugin/rules/no-undeclared-imports.js b/packages/eslint-plugin/rules/no-undeclared-imports.js index b1e11d1b97..06f0afed46 100644 --- a/packages/eslint-plugin/rules/no-undeclared-imports.js +++ b/packages/eslint-plugin/rules/no-undeclared-imports.js @@ -20,6 +20,7 @@ const path = require('path'); const getPackageMap = require('../lib/getPackages'); const visitImports = require('../lib/visitImports'); const minimatch = require('minimatch'); +const { execFileSync } = require('child_process'); const depFields = { dep: 'dependencies', @@ -124,11 +125,13 @@ function getAddFlagForDepsField(depsField) { module.exports = { meta: { type: 'problem', + fixable: 'code', messages: { undeclared: "{{ packageName }} must be declared in {{ depsField }} of {{ packageJsonPath }}, run 'yarn --cwd {{ packagePath }} add{{ addFlag }} {{ packageName }}' from the project root.", switch: '{{ packageName }} is declared in {{ oldDepsField }}, but should be moved to {{ depsField }} in {{ packageJsonPath }}.', + switchBack: 'Switch back to import declaration', }, docs: { description: @@ -150,63 +153,150 @@ module.exports = { return {}; } - return visitImports(context, (node, imp) => { - // We leave checking of type imports to the repo-tools check, - // and we skip builtins and local imports - if ( - imp.kind === 'type' || - imp.type === 'builtin' || - imp.type === 'local' - ) { - return; - } + /** @type Array<{name: string, flag: string, node: import('estree').Node}> */ + const importsToAdd = []; - // We skip imports for the package itself - if (imp.packageName === localPkg.packageJson.name) { - return; - } + return { + // All missing imports that we detect are collected as we traverse, and then we use + // the program exit to execute all install directives that have been found. + ['Program:exit']() { + /** @type Record> */ + const byFlag = {}; - const modulePath = path.relative(localPkg.dir, filePath); - const expectedType = getExpectedDepType( - localPkg.packageJson, - imp.packageName, - modulePath, - ); + for (const { name, flag } of importsToAdd) { + byFlag[flag] = byFlag[flag] ?? new Set(); + byFlag[flag].add(name); + } - const conflict = findConflict( - localPkg.packageJson, - imp.packageName, - expectedType, - ); + for (const name of byFlag[''] ?? []) { + byFlag['--dev']?.delete(name); + } + for (const name of byFlag['--peer'] ?? []) { + byFlag['']?.delete(name); + byFlag['--dev']?.delete(name); + } - if (conflict) { - try { - const fullImport = imp.path - ? `${imp.packageName}/${imp.path}` - : imp.packageName; - require.resolve(fullImport, { - paths: [localPkg.dir], + for (const [flag, names] of Object.entries(byFlag)) { + // The security implication of this is a bit interesting, as crafted add-import + // directives could be used to install malicious packages. However, the same is true + // for adding malicious packages to package.json, so there's significant difference. + execFileSync('yarn', ['add', ...(flag || []), ...names], { + cwd: localPkg.dir, + stdio: 'inherit', }); - } catch { - // If the dependency doesn't resolve then it's likely a type import, ignore + } + + // This switches all import directives back to the original import. + for (const added of importsToAdd) { + context.report({ + node: added.node, + messageId: 'switchBack', + fix(fixer) { + return fixer.replaceText(added.node, `'${added.name}'`); + }, + }); + } + + importsToAdd.length = 0; + packages.clearCache(); + }, + ...visitImports(context, (node, imp) => { + // We leave checking of type imports to the repo-tools check, + // and we skip builtins and local imports + if ( + imp.kind === 'type' || + imp.type === 'builtin' || + imp.type === 'local' + ) { return; } - const packagePath = path.relative(packages.root.dir, localPkg.dir); - const packageJsonPath = path.join(packagePath, 'package.json'); + // Any import directive that is found is collected for processing later + if (imp.type === 'directive') { + const parts = imp.path.split(':'); + if (parts[1] !== 'add-import') { + return; + } + const [type, name] = parts.slice(2); + if (!name.match(/^(@[-\w\.~]+\/)?[-\w\.~]*$/i)) { + throw new Error( + `Invalid package name to add as dependency: '${name}'`, + ); + } - context.report({ - node, - messageId: conflict.oldDepsField ? 'switch' : 'undeclared', - data: { - ...conflict, - packagePath, - addFlag: getAddFlagForDepsField(conflict.depsField), - packageName: imp.packageName, - packageJsonPath: packageJsonPath, - }, - }); - } - }); + importsToAdd.push({ + flag: getAddFlagForDepsField(type).trim(), + name, + node: imp.node, + }); + return; + } + + // We skip imports for the package itself + if (imp.packageName === localPkg.packageJson.name) { + return; + } + + const modulePath = path.relative(localPkg.dir, filePath); + const expectedType = getExpectedDepType( + localPkg.packageJson, + imp.packageName, + modulePath, + ); + + const conflict = findConflict( + localPkg.packageJson, + imp.packageName, + expectedType, + ); + + if (conflict) { + try { + const fullImport = imp.path + ? `${imp.packageName}/${imp.path}` + : imp.packageName; + require.resolve(fullImport, { + paths: [localPkg.dir], + }); + } catch { + // If the dependency doesn't resolve then it's likely a type import, ignore + return; + } + + const packagePath = path.relative(packages.root.dir, localPkg.dir); + const packageJsonPath = path.join(packagePath, 'package.json'); + + context.report({ + node, + messageId: conflict.oldDepsField ? 'switch' : 'undeclared', + data: { + ...conflict, + packagePath, + addFlag: getAddFlagForDepsField(conflict.depsField), + packageName: imp.packageName, + packageJsonPath: packageJsonPath, + }, + // This fix callback is always executed, regardless of whether linting is run with + // fixes enabled or not. There is no way to determine if fixes are being applied, so + // instead our fix will replace the import with a directive that will be picked up + // on the next run. When ESLint applies fixes all rules are re-run to make sure the fixes + // applied correctly, which means that these directives will be picked up, executed, + // and switched back to the original import immediately. + // This is not true for all editor integrations. For example, VSCode translates there fixes + // to native editor commands, and does not re-run ESLint. This means that the import directive + // will end up in source code, and the import directive fix needs to be applied manually too. + // There is to my knowledge no way around this that doesn't get very hacky, so it will do for now. + fix: conflict.oldDepsField + ? undefined + : fixer => { + return fixer.replaceText( + imp.node, + `'directive:add-import:${conflict.depsField}:${imp.packageName}'`, + ); + }, + }); + } + }), + }; }, }; diff --git a/packages/eslint-plugin/src/no-undeclared-imports.test.ts b/packages/eslint-plugin/src/no-undeclared-imports.test.ts index 78844899ba..e92d422057 100644 --- a/packages/eslint-plugin/src/no-undeclared-imports.test.ts +++ b/packages/eslint-plugin/src/no-undeclared-imports.test.ts @@ -18,6 +18,10 @@ import { RuleTester } from 'eslint'; import { join as joinPath } from 'path'; import rule from '../rules/no-undeclared-imports'; +jest.mock('child_process', () => ({ + execFileSync: jest.fn(), +})); + const RULE = 'no-undeclared-imports'; const FIXTURE = joinPath(__dirname, '__fixtures__/monorepo'); @@ -45,6 +49,9 @@ const ERR_SWITCHED = ( 'package.json', )}.`, }); +const ERR_SWITCH_BACK = () => ({ + message: 'Switch back to import declaration', +}); process.chdir(FIXTURE); @@ -130,6 +137,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'lodash'`, + output: `import 'directive:add-import:dependencies:lodash'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -137,6 +145,7 @@ ruleTester.run(RULE, rule, { }, { code: `import { debounce } from 'lodash'`, + output: `import { debounce } from 'directive:add-import:dependencies:lodash'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -144,6 +153,7 @@ ruleTester.run(RULE, rule, { }, { code: `import * as _ from 'lodash'`, + output: `import * as _ from 'directive:add-import:dependencies:lodash'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -151,6 +161,7 @@ ruleTester.run(RULE, rule, { }, { code: `import _ from 'lodash'`, + output: `import _ from 'directive:add-import:dependencies:lodash'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -158,6 +169,7 @@ ruleTester.run(RULE, rule, { }, { code: `import('lodash')`, + output: `import('directive:add-import:dependencies:lodash')`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -165,6 +177,7 @@ ruleTester.run(RULE, rule, { }, { code: `require('lodash')`, + output: `require('directive:add-import:dependencies:lodash')`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), @@ -172,13 +185,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'lodash'`, - filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), - errors: [ - ERR_UNDECLARED('lodash', 'dependencies', joinPath('packages', 'bar')), - ], - }, - { - code: `import 'lodash'`, + output: `import 'directive:add-import:devDependencies:lodash'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.test.ts'), errors: [ ERR_UNDECLARED( @@ -191,6 +198,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'react'`, + output: `import 'directive:add-import:peerDependencies:react'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED( @@ -203,6 +211,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'react'`, + output: `import 'directive:add-import:peerDependencies:react'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.test.ts'), errors: [ ERR_UNDECLARED( @@ -215,6 +224,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'react-dom'`, + output: `import 'directive:add-import:dependencies:react-dom'`, filename: joinPath(FIXTURE, 'packages/foo/src/index.ts'), errors: [ ERR_UNDECLARED( @@ -226,6 +236,7 @@ ruleTester.run(RULE, rule, { }, { code: `import 'react-dom'`, + output: `import 'directive:add-import:devDependencies:react-dom'`, filename: joinPath(FIXTURE, 'packages/foo/src/index.test.ts'), errors: [ ERR_UNDECLARED( @@ -238,6 +249,7 @@ ruleTester.run(RULE, rule, { }, { code: `import '@internal/foo'`, + output: `import 'directive:add-import:dependencies:@internal/foo'`, filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), errors: [ ERR_UNDECLARED( @@ -247,5 +259,43 @@ ruleTester.run(RULE, rule, { ), ], }, + + // Switching back to original import declarations + { + code: `import 'directive:add-import:dependencies:lodash'`, + output: `import 'lodash'`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, + { + code: `import { debounce } from 'directive:add-import:dependencies:lodash'`, + output: `import { debounce } from 'lodash'`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, + { + code: `import * as _ from 'directive:add-import:dependencies:lodash'`, + output: `import * as _ from 'lodash'`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, + { + code: `import _ from 'directive:add-import:dependencies:lodash'`, + output: `import _ from 'lodash'`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, + { + code: `import('directive:add-import:dependencies:lodash')`, + output: `import('lodash')`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, + { + code: `require('directive:add-import:dependencies:lodash')`, + output: `require('lodash')`, + filename: joinPath(FIXTURE, 'packages/bar/src/index.ts'), + errors: [ERR_SWITCH_BACK()], + }, ], }); From 8f72438559c22c6447dacf94f1173c859b6041b6 Mon Sep 17 00:00:00 2001 From: Headphones James Date: Mon, 6 Mar 2023 10:10:04 -0800 Subject: [PATCH 021/511] Update .changeset/long-gorillas-remain.md Co-authored-by: Patrik Oldsberg Signed-off-by: Headphones James --- .changeset/long-gorillas-remain.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.changeset/long-gorillas-remain.md b/.changeset/long-gorillas-remain.md index f74dc1b1a7..60ad6fa092 100644 --- a/.changeset/long-gorillas-remain.md +++ b/.changeset/long-gorillas-remain.md @@ -1,11 +1,9 @@ --- -'@backstage/core-components': minor -'@backstage/core-plugin-api': minor -'@backstage/plugin-gitops-profiles': minor +'@backstage/core-components': patch '@backstage/app-defaults': minor '@backstage/core-app-api': minor -'@backstage/plugin-auth-backend': minor +'@backstage/plugin-auth-backend': patch '@backstage/test-utils': minor --- -Introduce a new global config parameter, "enableExperimentalRedirectFlow" When enabled, instead of having a popup window where the authentication takes place, backstage will redirect to the authentication backend plugin, followed by a redirect back to the backstage frontend after authentication takes place. +Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. From ef729bc30cb3c3726fded9b5d7c144b9eaaad3cf Mon Sep 17 00:00:00 2001 From: headphonejames Date: Mon, 6 Mar 2023 10:16:21 -0800 Subject: [PATCH 022/511] clean up, add missing optional configApi to OneLoginAuthCreateOptions. Signed-off-by: headphonejames --- packages/core-app-api/api-report.md | 2 +- .../apis/implementations/auth/onelogin/OneLoginAuth.ts | 2 +- packages/core-components/src/layout/SignInPage/types.ts | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index a2a34171b1..d7e4a22873 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -535,7 +535,7 @@ export class OneLoginAuth { // @public export type OneLoginAuthCreateOptions = { - configApi: ConfigApi; + configApi?: ConfigApi; discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; diff --git a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts index 8beac05755..d8f54e7e50 100644 --- a/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/onelogin/OneLoginAuth.ts @@ -28,7 +28,7 @@ import { OAuth2 } from '../oauth2'; * @public */ export type OneLoginAuthCreateOptions = { - configApi: ConfigApi; + configApi?: ConfigApi; discoveryApi: DiscoveryApi; oauthRequestApi: OAuthRequestApi; environment?: string; diff --git a/packages/core-components/src/layout/SignInPage/types.ts b/packages/core-components/src/layout/SignInPage/types.ts index 6213c03432..a7e1ca62c2 100644 --- a/packages/core-components/src/layout/SignInPage/types.ts +++ b/packages/core-components/src/layout/SignInPage/types.ts @@ -45,9 +45,11 @@ export type onSignInFailure = () => void; export type onSignInStarted = () => void; export type ProviderComponent = ComponentType< - { onSignInStarted: onSignInStarted } & { - onSignInFailure: onSignInFailure; - } & SignInPageProps & { config: SignInProviderConfig } + SignInPageProps & { + config: SignInProviderConfig; + onSignInStarted(): void; + onSignInFailure(): void; + } >; export type ProviderLoader = ( From 19a0d5b4295e8012851dd86800cd521746400dc7 Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Mon, 6 Mar 2023 17:03:42 -0500 Subject: [PATCH 023/511] Add additional auth backend props and limit visibility. Signed-off-by: Aramis Sennyey --- plugins/auth-backend/config.d.ts | 97 +++++++++++++++++++++++++++++--- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index 5aff9df90a..cdd3fe1bf0 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -62,30 +62,72 @@ export interface Config { */ providers?: { google?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + callbackUrl: string; + }; }; github?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + callbackUrl?: string; + enterpriseInstanceUrl?: string; + }; }; gitlab?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + audience?: string; + callbackUrl?: string; + }; }; saml?: { entryPoint: string; logoutUrl?: string; issuer: string; + /** + * @visibility secret + */ cert: string; audience?: string; + /** + * @visibility secret + */ privateKey?: string; authnContext?: string[]; identifierFormat?: string; + /** + * @visibility secret + */ decryptionPvk?: string; signatureAlgorithm?: 'sha256' | 'sha512'; digestAlgorithm?: string; acceptedClockSkewMs?: number; }; okta?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + audience: string; + authServerId?: string; + idp?: string; + callbackUrl?: string; + }; }; oauth2?: { [authEnv: string]: { @@ -101,19 +143,56 @@ export interface Config { }; }; oidc?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + callbackUrl?: string; + metadataUrl: string; + scope?: string; + prompt?: string; + }; }; auth0?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + domain: string; + callbackUrl?: string; + audience?: string; + connection?: string; + connectionScope?: string; + }; }; microsoft?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + tenantId: string; + callbackUrl?: string; + }; }; onelogin?: { - [authEnv: string]: { [key: string]: string }; + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + issuer: string; + callbackUrl?: string; + }; }; awsalb?: { - issuer?: string; + iss?: string; region: string; }; cfaccess?: { From 354295465f7e35b714ed13677be63851be4ad753 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 09:53:11 +0000 Subject: [PATCH 024/511] fix(deps): update dependency kafkajs to v2.2.4 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 14d1ddbc05..07cfb527df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28053,9 +28053,9 @@ __metadata: linkType: hard "kafkajs@npm:^2.0.0": - version: 2.2.3 - resolution: "kafkajs@npm:2.2.3" - checksum: 30f17de75da852942334b6069c5c515e2531a7b610997f0e4c6088281f16588df45ac920218411d9ae995c09af1f69186ed4d73cbe0e5f1247ec756dd9c7678e + version: 2.2.4 + resolution: "kafkajs@npm:2.2.4" + checksum: 83e9e8bc50a09b142f4ff79f6a2bd88ecc21b83bcefe6621ab1716118d624886befb7371731274f67812ce35dd50b53140ff3b49a06e5d9169fe6b164d72fea5 languageName: node linkType: hard From f04f99a897cddc71c3137c1b4d7b693eaaa4fa93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:04:23 +0000 Subject: [PATCH 025/511] chore(deps): update graphqlcodegenerator monorepo to v3.2.2 Signed-off-by: Renovate Bot --- yarn.lock | 100 +++++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2bf9c900df..337903e13e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10604,8 +10604,8 @@ __metadata: linkType: hard "@graphql-codegen/cli@npm:^3.0.0": - version: 3.2.1 - resolution: "@graphql-codegen/cli@npm:3.2.1" + version: 3.2.2 + resolution: "@graphql-codegen/cli@npm:3.2.2" dependencies: "@babel/generator": ^7.18.13 "@babel/template": ^7.18.10 @@ -10626,12 +10626,12 @@ __metadata: "@whatwg-node/fetch": ^0.8.0 chalk: ^4.1.0 cosmiconfig: ^7.0.0 - cosmiconfig-typescript-loader: ^4.3.0 debounce: ^1.2.0 detect-indent: ^6.0.0 - graphql-config: ^4.4.0 + graphql-config: ^4.5.0 inquirer: ^8.0.0 is-glob: ^4.0.1 + jiti: ^1.17.1 json-to-pretty-yaml: ^1.2.2 listr2: ^4.0.5 log-symbols: ^4.0.0 @@ -10639,7 +10639,6 @@ __metadata: shell-quote: ^1.7.3 string-env-interpolation: ^1.0.1 ts-log: ^2.2.3 - ts-node: ^10.9.1 tslib: ^2.4.0 yaml: ^1.10.0 yargs: ^17.0.0 @@ -10650,7 +10649,7 @@ __metadata: graphql-code-generator: cjs/bin.js graphql-codegen: cjs/bin.js graphql-codegen-esm: esm/bin.js - checksum: b62e2a3cee866cb006163946272f25ba9cc59bb2d45b7b3df5d1b220096e79183929456a440e5c4980d6a5664d6b14d7870d7f1760eb250b9211f4743d2afad3 + checksum: b94284ac538a3504f96c7d507c140b7cfee30042209c4230ffc3068f05b6b27c75e1922b31c696363ab43e34e472ed194cc72996bbb10f59991cd2a4a35ff36e languageName: node linkType: hard @@ -10669,18 +10668,18 @@ __metadata: linkType: hard "@graphql-codegen/graphql-modules-preset@npm:^3.0.0": - version: 3.1.0 - resolution: "@graphql-codegen/graphql-modules-preset@npm:3.1.0" + version: 3.1.1 + resolution: "@graphql-codegen/graphql-modules-preset@npm:3.1.1" dependencies: "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-codegen/visitor-plugin-common": 3.0.1 + "@graphql-codegen/visitor-plugin-common": 3.0.2 "@graphql-tools/utils": ^9.0.0 change-case-all: 1.0.15 parse-filepath: ^1.0.2 tslib: ~2.5.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: cee2e7f8afbc0b0d81592abfc8894422b791f0eca6e878a789de980bf1710a3c726786ade296e653cc83f920b2618aa9f5c9dbb6934ee9da0122b2d10ef5bdb5 + checksum: f437590afa33ac308c075d214b501404ae2f99888cac8071d05cc2b8c7ceaea5aef8f86bb60e7a9a45902126dc99bd20d77e951c0beef665aaa31ac3c2217e26 languageName: node linkType: hard @@ -10714,39 +10713,39 @@ __metadata: linkType: hard "@graphql-codegen/typescript-resolvers@npm:^3.0.0": - version: 3.1.0 - resolution: "@graphql-codegen/typescript-resolvers@npm:3.1.0" + version: 3.1.1 + resolution: "@graphql-codegen/typescript-resolvers@npm:3.1.1" dependencies: "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-codegen/typescript": ^3.0.1 - "@graphql-codegen/visitor-plugin-common": 3.0.1 + "@graphql-codegen/typescript": ^3.0.2 + "@graphql-codegen/visitor-plugin-common": 3.0.2 "@graphql-tools/utils": ^9.0.0 auto-bind: ~4.0.0 tslib: ~2.5.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 05888a9dfd1556fe15465a524750c36881334c231297e2e89bccb536450bed61fde2ba182ba4e79e34be846ce2e2439f3f6b31a67e7437f03a4e4ace62e84dcd + checksum: 88faa1ca2335096aa9939101f3591007d9fa477836d969a3c622dbf67704505600387a2e9fbb416d61b5ef42dbd79a0d351003037c0756d8d0c7f32c7961e783 languageName: node linkType: hard -"@graphql-codegen/typescript@npm:^3.0.0, @graphql-codegen/typescript@npm:^3.0.1": - version: 3.0.1 - resolution: "@graphql-codegen/typescript@npm:3.0.1" +"@graphql-codegen/typescript@npm:^3.0.0, @graphql-codegen/typescript@npm:^3.0.2": + version: 3.0.2 + resolution: "@graphql-codegen/typescript@npm:3.0.2" dependencies: "@graphql-codegen/plugin-helpers": ^4.1.0 "@graphql-codegen/schema-ast": ^3.0.1 - "@graphql-codegen/visitor-plugin-common": 3.0.1 + "@graphql-codegen/visitor-plugin-common": 3.0.2 auto-bind: ~4.0.0 tslib: ~2.5.0 peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 56a369237971cc4a5a4987628ec0fcceed66ec03a292b3d17b6ffb64279185cd085be351268c55be6b152634c430e885b9c584d816aaa25f067d91c6996c329a + checksum: e92dc54804b6ad45fb2499b91cb89743e455a984684e2b1df1b1a8f479a0bbffa5c625be97ccb55874ac8b7316a820b546e9e312b22eda78012acd5c27594a28 languageName: node linkType: hard -"@graphql-codegen/visitor-plugin-common@npm:3.0.1": - version: 3.0.1 - resolution: "@graphql-codegen/visitor-plugin-common@npm:3.0.1" +"@graphql-codegen/visitor-plugin-common@npm:3.0.2": + version: 3.0.2 + resolution: "@graphql-codegen/visitor-plugin-common@npm:3.0.2" dependencies: "@graphql-codegen/plugin-helpers": ^4.1.0 "@graphql-tools/optimize": ^1.3.0 @@ -10760,7 +10759,7 @@ __metadata: tslib: ~2.5.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 32bf553f73938581f634b1bbdf8616b1cb30cc85c73d7a8f6088d2a81a957e198c7c278edf6582c1eee7328a4463cea4725316b1743b87b26dc3e9fdd8318648 + checksum: c8f941df7f8304b722b492ceaf15dddcf33e3a69bc29b54970908ffa12b14d92276958005bd307648e0cdc55f9e243d0fb390862f73a17a26bd50f6484ac42d6 languageName: node linkType: hard @@ -20284,18 +20283,6 @@ __metadata: languageName: node linkType: hard -"cosmiconfig-typescript-loader@npm:^4.3.0": - version: 4.3.0 - resolution: "cosmiconfig-typescript-loader@npm:4.3.0" - peerDependencies: - "@types/node": "*" - cosmiconfig: ">=7" - ts-node: ">=10" - typescript: ">=3" - checksum: ea61dfd8e112cf2bb18df0ef89280bd3ae3dd5b997b4a9fc22bbabdc02513aadfbc6d4e15e922b6a9a5d987e9dad42286fa38caf77a9b8dcdbe7d4ce1c9db4fb - languageName: node - linkType: hard - "cosmiconfig@npm:8.0.0": version: 8.0.0 resolution: "cosmiconfig@npm:8.0.0" @@ -24970,9 +24957,9 @@ __metadata: languageName: node linkType: hard -"graphql-config@npm:^4.4.0": - version: 4.4.0 - resolution: "graphql-config@npm:4.4.0" +"graphql-config@npm:^4.5.0": + version: 4.5.0 + resolution: "graphql-config@npm:4.5.0" dependencies: "@graphql-tools/graphql-file-loader": ^7.3.7 "@graphql-tools/json-file-loader": ^7.3.7 @@ -24981,14 +24968,17 @@ __metadata: "@graphql-tools/url-loader": ^7.9.7 "@graphql-tools/utils": ^9.0.0 cosmiconfig: 8.0.0 - minimatch: 4.2.1 + jiti: 1.17.1 + minimatch: 4.2.3 string-env-interpolation: 1.0.1 tslib: ^2.4.0 peerDependencies: cosmiconfig-toml-loader: ^1.0.0 - cosmiconfig-typescript-loader: ^4.0.0 graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 2f8cbb4710a7c0a411074eb843317bc66e5602fdab7eefa9765812d986d4b04fc2d285d3c0811ed0efaef12ea58351676561d704e79880f5848ed970badab500 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + checksum: 8ab1a3ce3534598ddac2df213b6af2eecd9ebcca2268d39cc3e87a6e55749483389a6df222e9e0acd638dd2479378a5c8e8d90f980e6a54e700c4c4ae3522123 languageName: node linkType: hard @@ -27615,6 +27605,24 @@ __metadata: languageName: node linkType: hard +"jiti@npm:1.17.1": + version: 1.17.1 + resolution: "jiti@npm:1.17.1" + bin: + jiti: bin/jiti.js + checksum: 56c6d8488e7e9cc6ee66a0f0d5e18db6669cb12b2e93364f393442289a9bc75a8e8c796249f59015e01c3ebdf9478e2ca8b76c30e29072c678ee00d39de757c7 + languageName: node + linkType: hard + +"jiti@npm:^1.17.1": + version: 1.17.2 + resolution: "jiti@npm:1.17.2" + bin: + jiti: bin/jiti.js + checksum: 51941fea3622d1ff80d914ec6ec95ae463ede598a4a2317f1e8ff018823212eba6b9ea1c638c97c18f681870b1c2b9f49fbb13021b7c2415c46c8a3b1910f1e3 + languageName: node + linkType: hard + "jju@npm:~1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" @@ -30323,12 +30331,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:4.2.1": - version: 4.2.1 - resolution: "minimatch@npm:4.2.1" +"minimatch@npm:4.2.3": + version: 4.2.3 + resolution: "minimatch@npm:4.2.3" dependencies: brace-expansion: ^1.1.7 - checksum: 2b1514e3d0f29a549912f0db7ae7b82c5cab4a8f2dd0369f1c6451a325b3f12b2cf473c95873b6157bb8df183d6cf6db82ff03614b6adaaf1d7e055beccdfd01 + checksum: 3392388e3ef7de7ae9a3a48d48a27a323934452f4af81b925dfbe85ce2dc07da855e3dbcc69229888be4e5118f6c0b79847d30f3e7c0e0017b25e423c11c0409 languageName: node linkType: hard From c7d88f8bab3ffce2f2939a1accdfd98e3d95edfd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 6 Mar 2023 14:35:12 +0100 Subject: [PATCH 026/511] GOVERNANCE: update governance based on CNCF contributor ladder template Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .github/vale/Vocab/Backstage/accept.txt | 1 + GOVERNANCE.md | 266 ++++++++++++++++++------ OWNERS.md | 83 +++++--- 3 files changed, 258 insertions(+), 92 deletions(-) diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 63fa474115..d3b0928b6e 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -82,6 +82,7 @@ Debounce debuggability declaratively deduplicated +deliverables dependabot deps destructured diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 5bafa19c81..82380129c6 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -1,88 +1,234 @@ -# Process for becoming a maintainer +# Project Areas -## a) Your organization is not yet a maintainer +The Backstage project is divided into several project areas, each covering particular parts of the project. The main driver for each area is ownership of code in the main Backstage repository, as well as other repositories in the Backstage GitHub organization. Each area has a set of maintainers and repository content that they own. There may be no overlap in ownership between areas, which is defined as multiple owners for a single line in the GitHub code owners file. Each area is represented by a team in the Backstage GitHub organization. Apart from certain project-wide concerns, such as the release process, each area is self-governing and chooses their own ways of working. Project areas may also have special interest groups (SIGs) related to their area, but this is not required. -- Express interest to the sponsors that your organization is interested in becoming a maintainer. Becoming a maintainer generally means that you are going to be spending substantial time on Backstage for the foreseeable future. You should have domain expertise and be extremely proficient in TypeScript. -- We will expect you to start contributing increasingly complicated PRs, under the guidance of the existing maintainers. -- We may ask you to do some PRs from our backlog. -- As you gain experience with the code base and our standards, we will ask you to do code reviews for incoming PRs. -- After a period of approximately 2-3 months of working together and making sure we see eye to eye, the existing sponsors and maintainers will confer and decide whether to grant maintainer status or not. We make no guarantees on the length of time this will take, but 2-3 months is the approximate goal. +The project areas as well as their maintainers are listed in the [OWNERS.md](./OWNERS.md) file. -## b) Your organization is currently a maintainer +Each project area must have at least one maintainer. Project area maintainers may have shared ownership with the core maintainers, which in that case is considered an incubating area. The project area maintainers help drive work forward in the area, but they might not yet feel ready to take on ownership. The goal should generally be that these project area maintainers eventually become sole maintainers of the project area. This is to allow for a more smooth onboarding and transition of ownership, where members of the community might for example be new to open source maintainership. -To become a maintainer you need to demonstrate the following: +## Adding new project areas -- First decide whether your organization really needs more people with maintainer access. Valid reasons are "blast radius", a large organization that is working on multiple unrelated projects, etc. -- Contact a sponsor for your organization and express interest. -- Start doing PRs and code reviews under the guidance of your maintainer. -- After a period of 1-2 months the existing sponsors will discuss granting maintainer access. -- Maintainer access can be upgraded to sponsor access after another conference of the existing sponsors. +Project areas are added by nominating new maintainers for that area. See the sections for becoming a [Project Area Maintainer](#project-area-maintainer). -# Maintainer responsibilities +Project areas may also by added by splitting existing areas. Every area that is created through this process must have at least one maintainer. -- Monitor email aliases. -- Monitor Discord (delayed response is perfectly acceptable). -- Triage GitHub issues and perform pull request reviews for other maintainers and the community. -- Triage build issues - file issues for known flaky builds or bugs, and either fix or find someone to fix any master build breakages. -- During GitHub issue triage, apply all applicable ([labels](https://github.com/backstage/backstage/labels)) to each new issue. Labels are extremely useful for future issue follow-up. Which labels to apply is somewhat subjective so just use your best judgment. A few of the most important labels that are not self-explanatory are: - - good first issue: Mark any issue that can reasonably be accomplished by a new contributor with this label. - - help wanted: Unless it is immediately obvious that someone is going to work on an issue (and if so assign it), mark it help wanted. -- Make sure that ongoing PRs are moving forward at the right pace or closing them. -- Participate when called upon in the security release process. Note that although this should be a rare occurrence, if a serious vulnerability is found, the process may take up to several full days of work to implement. This reality should be taken into account when discussing time commitment obligations with employers. -- In general, continue to be willing to spend at least 25% of one's time working on Backstage (~1.25 business days per week). -- We currently maintain an "on-call" rotation within the maintainers. Each on-call is 1 week. Although all maintainers are welcome to perform all of the above tasks, it is the on-call maintainer's responsibility to triage incoming issues/questions and marshal ongoing work forward. To reiterate, it is not the responsibility of the on-call maintainer to answer all questions and do all reviews, but it is their responsibility to make sure that everything is being actively covered by someone. +## Removing project areas -# When does a maintainer lose maintainer status +Project areas are removed by removing all maintainers for that area and removing the corresponding team from the Backstage GitHub organization. The project area can be re-added later if there is a need for it. Reasons for removal may include lack of activity, lack of maintainers, or lack of relevance to the project. -If a maintainer is no longer interested or cannot perform the maintainer duties listed above, they should volunteer to be moved to emeritus status. In extreme cases this can also occur by a vote of the sponsors and maintainers per the voting process below. +# Project Roles -# End User Sponsors +## Contributor -## Role of a Backstage End User Sponsor +A Contributor contributes directly to the project and adds value to it. Contributions need not be code. People at the Contributor level may be new contributors, or they may only contribute occasionally. -- Provide support for Backstage by removing blockers, securing funding, providing advocacy, feedback, and ensuring project continuity and long term success. -- Assist Backstage maintainers in prioritizing upcoming roadmap items and planned work. -- Provide neutral mediation for any disputes that arise as part of the project. +### Responsibilities -## Backstage End User Sponsor Membership +- Follow the [CNCF CoC](https://github.com/cncf/foundation/blob/main/code-of-conduct.md) +- Follow the project [contributing guide](CONTRIBUTING.md) + +### How to get involved + +- Participating in community discussions +- Helping other users +- Submitting bug reports +- Commenting on issues +- Trying out new releases +- Attending community events + +### How to contribute + +- Report and sometimes resolve issues +- Occasionally submit PRs +- Contribute to the documentation +- Show up at meetings, takes notes +- Answer questions from other community members +- Submit feedback on issues and PRs +- Test releases and patches and submit reviews +- Run or helps run events +- Promote the project in public + +## Organization Member + +An org member is a frequent contributor that has become a member of the Backstage GitHub organization. In addition to the responsibilities of contributors, an org member is also expected to be reasonably active in the community through continuous contributions of any type. + +An Organization Member must meet the responsibilities and has the requirements of a Contributor. + +### Responsibilities + +- Continues to contribute regularly, as demonstrated by having at least 10 GitHub contributions per year, as found in [Devstats](https://backstage.devstats.cncf.io/d/48/users-statistics-by-repository-group?orgId=1&var-period=y&var-metric=contributions&var-repogroup_name=All&from=now-1y&to=now&var-users=All). + +### Requirements + +- Must have successful contributions to the project, including at least one of the following: +- Must have at least 10 contributions to the projects in the form of: + - Accepted PRs + - Helpful PR reviews + - Resolving GitHub issues + - Or some equivalent combination or contributions to the project +- Must have been contributing for at least 3 months +- Or is the member of a team that owns a project area, in which case the above requirements do not apply and the member is instead vetted by the project area maintainers. + +### Becoming an Organization Member + +Open an issue towards https://github.com/backstage/community using the [org membership request template](#TODO). + +### Privileges + +- Membership in the Backstage GitHub organization + +## Plugin Maintainer + +A Plugin Maintainer is responsible for maintaining an individual Backstage plugin or module. This includes reviewing contributions and respond to issues towards an individual plugin, as well as keeping the plugin up to date. + +Plugin Maintainer is a lightweight form of ownership that is primarily reflected though code owners of the plugin packages in the [CODEOWNERS.md](./.github/CODEOWNERS) file. Each plugin can have one or more maintainers. If a plugin becomes a significant part of the Backstage ecosystem, it may be promoted to be a distinct project area instead. + +A Plugin Maintainer has all the rights and responsibilities of an Organization Member. + +### Responsibilities + +- Review the majority of PRs towards the plugin +- Respond to GitHub issues related to the plugin +- Keep the plugin up-to-date with Backstage libraries and other dependencies +- Follow the [reviewing guide](https://github.com/backstage/backstage/blob/master/REVIEWING.md) + +### Requirements + +- Is an Organization Member +- Display knowledge of Backstage's review process and best practices for plugin design +- Is supportive of new and occasional contributors and helps get useful PRs in shape to merge + +### Privileges + +- GitHub code owner of the plugin directory, with rights to approve and merge PRs towards the plugin + +### Becoming a Plugin Maintainer + +To become a Plugin Maintainer, you first need to be an Organization Member. You can then file a pull request towards [CODEOWNERS.md](./.github/CODEOWNERS) requesting to be added as a code owner of the plugin directory. Existing code owners of that plugin alongside the core maintainers will then review the request. + +## Project Area Maintainer + +Project Area Maintainers are owners of a particular project area. They are expected to review and merge pull requests towards their area, and also drive development and manage tech health. A Project Area Maintainer also need to commit a certain number of hours per month towards the project, and exercise judgment for the good of the project, independent of their employer. Project Area Maintainers should also mentor new maintainers and participate in and lead community meetings related to their area. New Project Area Maintainers need to be approved by the existing project area maintainers, or the core maintainers if it is a new area. + +The maintainers of a project area may be represented by a team in external organization. In this case, the state as a project area maintainer is tied to the membership in that team. New members of the team may automatically be added as maintainers, as well as removed when they leave. This process is governed autonomously by the team of project area maintainers. + +A Project Area Maintainer has all the rights and responsibilities of an Organization Member. + +### Responsibilities + +- Review PRs towards their project area. Project area maintainers are expected to review at least 20 PRs per year, or the majority of all PRs towards the area +- Follow the [reviewing guide](https://github.com/backstage/backstage/blob/master/REVIEWING.md) +- Triage and respond to issues related to their project area +- Mentor new project area maintainers +- Write refactoring PRs +- Determine strategy and policy for the project area +- Participate in or leading community meetings related to their project area + +### Requirements + +- Is an Organization Member +- Have made at least 5 meaningful contributions towards the project area +- Demonstrates knowledge of their project area, and how it fits into the larger Backstage project +- Is able to exercise judgment for the good of the project, independent of their employer, friends, or team +- Mentors other contributors and project area maintainers +- Can commit to spending at least 16 hours per month working on the project, preferably distributed evenly across the month + +### Privileges + +- Approve and merge PRs towards their project area +- Drive the direction and roadmap of their project area + +### Becoming a Project Area Maintainer + +If you are interested in becoming a project area maintainer, reach out to the existing maintainers for that area. If you wish to become a maintainer for a new area, reach out to the core maintainers. + +Any current project area maintainer or core maintainer may nominate a new project area maintainer by opening a PR towards the [OWNERS.md](https://github.com/backstage/backstage/blob/master/OWNERS.md) file. A majority of the project area maintainers for that area must approve the PR. If there are no existing maintainers for that area, the PR must be approved by a majority of the core maintainers. + +## Core Maintainer + +Core Maintainers are responsible for the Backstage project as a whole. They help review and merge project-level pull requests as well as coordinate work affecting multiple project areas. A project maintainer needs to commit the majority of their working time towards the project, and exercise judgment for the good of the project, independent of their employer. Project maintainers should also mentor and seek out new maintainers, lead community meetings, and communicate with the CNCF on behalf of the project. To become a project maintainer one needs to have been the maintainer of a number of different project areas, demonstrate a deep knowledge of large parts of the Backstage project, and be backed by the existing project maintainers. + +A Core Maintainer have all the rights and responsibilities of a Project Area Maintainer. + +### Responsibilities + +- Take part in the incoming issue and PR triage and review process. PRs are shared equally among all maintainers +- Mentor new Project Area Maintainers and Plugin Maintainers +- Drive refactoring and manage tech health across the entire project +- Participate in CNCF maintainer activities +- Respond to security incidents in accordance to our [security policy](./SECURITY.md) +- Determine strategy and policy for the project +- Participate in or leading community meetings + +### Requirements + +- Experience as a Project Area Maintainer for at least 6 months +- Demonstrates a broad knowledge of the project across multiple areas +- Is able to exercise judgment for the good of the project, independent of their employer, friends, or team +- Mentors other contributors +- Can commit to spending at least 10 days per month working on the project + +### Privileges + +- Approve PRs that fall outside any specific project area +- Merge PRs to any area of the project +- Represent the project in public as a Maintainer +- Communicate with the CNCF on behalf of the project +- Have a vote in Maintainer decision-making meetings + +### Becoming a Core Maintainer + +Any core maintainer or end user sponsor may nominate a new core maintainer by opening a PR towards the [OWNERS.md](https://github.com/backstage/backstage/blob/master/OWNERS.md) file. Core maintainers must be approved by a majority of the existing core maintainers and end user sponsors. + +## End User Sponsors + +### Role of a Backstage End User Sponsor + +- Provide support for Backstage by removing blockers, securing funding, providing advocacy, feedback, and ensuring project continuity and long term success +- Assist Backstage maintainers in prioritizing upcoming roadmap items and planned work +- Provide neutral mediation for any disputes that arise as part of the project + +### Backstage End User Sponsor Membership The End User Sponsors group comprises at most 5 people. To be eligible for membership in the group, you or the company where you work you must: - Be responsible for and end user of a production Backstage deployment of non-trivial size - Be active contributors to the open source project - Be willing and able to attend regularly-scheduled End User Sponsor meetings -- Abide by [Backstage’s Code of Conduct](./CODE_OF_CONDUCT.md). +- Abide by [CNCF CoC](https://github.com/cncf/foundation/blob/main/code-of-conduct.md) Candidates for membership will be nominated by current Sponsor members or by Backstage maintainers. If there are more nominations than Sponsor seats remaining, existing sponsors shall vote on the candidates, and the candidates with the most votes will become Sponsors. Any ties will be broken by current Backstage sponsors. -# Reviewers - -The project also contains a team called [@backstage/reviewers](https://github.com/orgs/backstage/teams/reviewers). This is the team of people who are the fallback in [`CODEOWNERS`](./.github/CODEOWNERS). This team will typically contain the maintainers, and a small number of additional people who are permitted to approve and merge pull requests. The purpose of this group is to offload some of the review work from the maintainers, simplifying and speeding up the review process for contributors. - -This responsibility is distinct from the maintainer role. A reviewer must not approve and merge changes that have a level of impact that a maintainer should oversee; see below for clarification. For that class of changes, a reviewer can still review the pull request thoroughly without approving it (e.g. with a comment on the pull request), and is expected to notify `@backstage/maintainers` for final approval. Note that it is best to not use the GitHub review approve functionality for this, since that would let Hall of Fame members self-merge the pull request before maintainers get the chance to look at it. - -The following is a non-exhaustive list of types of change, for which a reviewer should defer final decision and merge to a maintainer: - -- A larger refactoring that significantly affects the structure of/between packages -- Changes that settle or alter the trajectory of contested ongoing topics in issues or elsewhere -- Changes that affect the [Architecture Decision Records](./docs/architecture-decisions) -- Changes to APIs that have large customer impact, such as the core APIs in `@backstage/core-*` packages, or significant `@backstage/cli` changes. -- Pull requests whose build checks are not passing fully -- Additions and removals of entire packages -- Releases (e.g. pull requests titled `Version Packages`) - -A maintainer may suggest an addition to the reviewers team by opening a pull request that modifies [`OWNERS.md`](./OWNERS.md) accordingly. Prospective reviewers are not expected to do this themselves, but should rather ask a maintainer to sponsor their addition. All of the maintainers and sponsors are called to vote on the addition (see the section below about voting). If the vote passes, the pull request can be approved and merged, and the corresponding addition to the GitHub team can be made. - -A reviewer can elect to remove themselves from the reviewers group by opening, or asking a maintainer to open, a pull request that modifies [`OWNERS.md`](./OWNERS.md) accordingly. A maintainer will approve and merge the pull request, and the corresponding removal from the GitHub team can be made. - -A maintainer can call on the other maintainers and sponsors for a vote to remove a reviewer (see the section below about conflict resolution and voting). If the vote passes, a maintainer creates a pull request that modifies [`OWNERS.md`](./OWNERS.md) accordingly. After approval by another maintainer, the pull request can be merged, and the corresponding removal from the GitHub team can be made. - # Conflict resolution and voting -In general, we prefer that technical issues and membership are amicably worked out between the persons involved. If a dispute cannot be decided independently, the sponsors and maintainers can be called in to decide an issue. If the sponsors and maintainers themselves cannot decide an issue, the issue will be resolved by voting. +In general, we prefer that technical issues and membership are amicably worked out between the persons involved. If a dispute cannot be decided independently, the sponsors and core maintainers can be called in to decide an issue. If the sponsors and maintainers themselves cannot decide an issue, the issue will be resolved by voting. In all cases in this document where voting is mentioned, the voting process is a simple majority in which each sponsor receives two votes and each maintainer receives one vote. If such a majority is reached, the vote is said to have _passed_. -# Adding new projects to the Backstage GitHub organization +## Inactivity -New projects will be added to the Backstage organization via GitHub issue discussion in one of the existing projects in the organization. Once sufficient discussion has taken place (~3-5 business days but depending on the volume of conversation), the maintainers of the project where the issue was opened (since different projects in the organization may have different maintainers) will decide whether the new project should be added. See the section above on voting if the maintainers cannot easily decide. +It is important for contributors to be and stay active to set an example and show commitment to the project. Inactivity is harmful to the project as it may lead to unexpected delays, contributor attrition, and a lost of trust in the project. + +Inactivity is measured by periods of no contributions for longer than: + +- Core Maintainer: 2 months +- Project Area Maintainer: 4 months +- Plugin Maintainer: 6 months +- Organization Member: 8 months + +Consequences of being inactive include: + +- Involuntary removal or demotion +- Being asked to move to Emeritus status + +## Involuntary Removal or Demotion + +Involuntary removal/demotion of a contributor happens when responsibilities and requirements aren't being met. This may include repeated patterns of inactivity, extended period of inactivity, a period of failing to meet the requirements of your role, and/or a violation of the Code of Conduct. This process is important because it protects the community and its deliverables while also opens up opportunities for new contributors to step in. + +Involuntary removal or demotion is handled through a vote by a majority of the current Core Maintainers. Some aspects of this process may be automated, such as removal after periods of inactivity. + +## Stepping Down/Emeritus Process + +If and when contributors' commitment levels change, contributors can consider stepping down (moving down the contributor ladder) vs moving to emeritus status (completely stepping away from the project). + +Contact the Maintainers about changing to Emeritus status, or reducing your contributor level. diff --git a/OWNERS.md b/OWNERS.md index 6615046540..e41d8c6b62 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -1,43 +1,62 @@ - See [CONTRIBUTING.md](CONTRIBUTING.md) for general contribution guidelines. - See [GOVERNANCE.md](GOVERNANCE.md) for governance guidelines and responsibilities. -This page lists all active sponsors and maintainers. +## Core Maintainers + +| Maintainer | Organization | GitHub | Discord | +| --------------- | ------------ | ----------------------------------------------- | ------------- | +| Patrik Oldsberg | Spotify | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | +| Fredrik Adelöw | Spotify | [freben](https://github.com/freben) | `freben#3926` | +| Ben Lambert | Spotify | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | +| Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | + +# Project Areas + +## Catalog + +Team: @backstage/catalog + +| Name | Organization | GitHub | Discord | +| ---- | ------------ | ---------------------------- | ------- | +| TBD | TBD | [TBD](http://github.com/TBD) | TBD | + +## TechDocs + +Team: @backstage/techdocs + +| Name | Organization | GitHub | Discord | +| ---- | ------------ | ---------------------------- | ------- | +| TBD | TBD | [TBD](http://github.com/TBD) | TBD | + +## Search + +Team: @backstage/search + +| Name | Organization | GitHub | Discord | +| ---- | ------------ | ---------------------------- | ------- | +| TBD | TBD | [TBD](http://github.com/TBD) | TBD | # Sponsors -- Niklas Gustavsson ([protocol7](https://github.com/protocol7)) (ngn@spotify.com) -- Dave Zolotusky ([dzolotusky](https://github.com/dzolotusky)) (dzolo@spotify.com) -- Lee Mills ([leemills83](https://github.com/leemills83)) (leem@spotify.com) +| Name | Organization | GitHub | Email | +| ----------------- | ------------ | ------------------------------------------- | ----------------- | +| Niklas Gustavsson | Spotify | [protocol7](https://github.com/protocol7) | ngn@spotify.com | +| Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | dzolo@spotify.com | +| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | leem@spotify.com | -# Maintainers +# Organization Members -- Patrik Oldsberg ([rugvip](https://github.com/rugvip)) (Discord: @Rugvip) -- Fredrik Adelöw ([freben](https://github.com/freben)) (Discord: @freben) -- Ben Lambert ([benjdlambert](https://github.com/benjdlambert)) (Discord: @blam) -- Johan Haals ([jhaals](https://github.com/jhaals)) (Discord: @jhaals) +People that have made significant contributions to the project -# Reviewers +| Name | Organization | GitHub | Discord | +| ------------- | ------------ | ----------------------------------------------- | ------------------------------ | +| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | +| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | +| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | -See [`GOVERNANCE.md`](./GOVERNANCE.md) for details about how the reviewers team -works. +# Emeritus Core Maintainers -- Patrik Oldsberg ([rugvip](https://github.com/rugvip)) (Discord: @Rugvip) -- Fredrik Adelöw ([freben](https://github.com/freben)) (Discord: @freben) -- Ben Lambert ([benjdlambert](https://github.com/benjdlambert)) (Discord: @blam) -- Johan Haals ([jhaals](https://github.com/jhaals)) (Discord: @jhaals) -- Himanshu Mishra ([OrkoHunter](https://github.com/OrkoHunter)) (Discord: @OrkoHunter) -- Tim Hansen ([timbonicus](https://github.com/timbonicus)) (Discord: @timbonicus) - -# Emeritus maintainers - -- Stefan Ålund ([stefanalund](https://github.com/stefanalund)) (Discord: @stalund) - -# Hall of Fame - -People that have made significant contributions to the project and earned write access. - -- Andrew Thauer - Wealthsimple (GitHub: [andrewthauer](https://github.com/andrewthauer)) -- Oliver Sand - SDA SE (GitHub: [Fox32](https://github.com/Fox32)) -- David Tuite - Roadie (GitHub: [dtuite](https://github.com/dtuite)) -- Adam Harvey - Cisco (GitHub: [adamdmharvey](https://github.com/adamdmharvey)) -- Dominik Henneke - SDA SE (GitHub: [dhenneke](https://github.com/dhenneke)) +| Maintainer | Organization | GitHub | Discord | +| ------------ | ------------ | --------------------------------------------- | -------------- | +| Stefan Ålund | Spotify | [stefanalund](https://github.com/stefanalund) | `stalund#9602` | From 136bbfa000a7f93b814cd4f7e1a7336e7316506c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 7 Mar 2023 19:13:15 +0100 Subject: [PATCH 027/511] Update GOVERNANCE.md Co-authored-by: Phil Kuang Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 82380129c6..b2582ecd31 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -146,7 +146,7 @@ Any current project area maintainer or core maintainer may nominate a new projec ## Core Maintainer -Core Maintainers are responsible for the Backstage project as a whole. They help review and merge project-level pull requests as well as coordinate work affecting multiple project areas. A project maintainer needs to commit the majority of their working time towards the project, and exercise judgment for the good of the project, independent of their employer. Project maintainers should also mentor and seek out new maintainers, lead community meetings, and communicate with the CNCF on behalf of the project. To become a project maintainer one needs to have been the maintainer of a number of different project areas, demonstrate a deep knowledge of large parts of the Backstage project, and be backed by the existing project maintainers. +Core Maintainers are responsible for the Backstage project as a whole. They help review and merge project-level pull requests as well as coordinate work affecting multiple project areas. A core maintainer needs to commit the majority of their working time towards the project, and exercise judgment for the good of the project, independent of their employer. Core maintainers should also mentor and seek out new maintainers, lead community meetings, and communicate with the CNCF on behalf of the project. To become a core maintainer one needs to have been the maintainer of a number of different project areas, demonstrate a deep knowledge of large parts of the Backstage project, and be backed by the existing core maintainers. A Core Maintainer have all the rights and responsibilities of a Project Area Maintainer. From c17fa10182574f52491ecdf1295a526f9d62e781 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Tue, 7 Mar 2023 16:11:02 -0300 Subject: [PATCH 028/511] feat(@backstage/plugin-catalog-backend-module-azure): Add branch filter support Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 5 +++ docs/integrations/azure/discovery.md | 9 +++-- .../src/lib/azure.ts | 1 + .../AzureDevOpsEntityProvider.test.ts | 40 +++++++++++++++++-- .../providers/AzureDevOpsEntityProvider.ts | 10 +++-- .../src/providers/config.test.ts | 24 ++++++++++- .../src/providers/config.ts | 2 + .../src/providers/types.ts | 1 + 8 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 .changeset/modern-colts-exercise.md diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md new file mode 100644 index 0000000000..d869945870 --- /dev/null +++ b/.changeset/modern-colts-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': minor +--- + +Add branch filter support diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 6cb135900e..d96b7d84ab 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -61,6 +61,7 @@ catalog: host: selfhostedazure.yourcompany.com organization: myorg project: myproject + branch: development ``` The parameters available are: @@ -70,6 +71,7 @@ The parameters available are: - **`project:`** _(optional)_ Your project slug. Wildcards are supported as show on the examples above. If not set, all projects will be searched. For a project name containing spaces, use both single and double quotes as in `project: '"My Project Name"'`. - **`repository:`** _(optional)_ The repository name. Wildcards are supported as show on the examples above. If not set, all repositories will be searched. - **`path:`** _(optional)_ Where to find catalog-info.yaml files. Defaults to /catalog-info.yaml. +- **`branch:`** _(optional)_ The branch name to use. - **`schedule`** _(optional)_: - **`frequency`**: How often you want the task to run. The system does its best to avoid overlapping invocations. @@ -80,9 +82,10 @@ The parameters available are: - **`scope`** _(optional)_: `'global'` or `'local'`. Sets the scope of concurrency control. -_Note:_ the path parameter follows the same rules as the search on Azure DevOps -web interface. For more details visit the -[official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). +_Note:_ + +- The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). +- The branch parameters need that the branch desired it`s added on 'Searchable branches' on Azure DevOps Repositories As this provider is not one of the default providers, you will first need to install the Azure catalog plugin: diff --git a/plugins/catalog-backend-module-azure/src/lib/azure.ts b/plugins/catalog-backend-module-azure/src/lib/azure.ts index 0c96d133d3..714090d5bc 100644 --- a/plugins/catalog-backend-module-azure/src/lib/azure.ts +++ b/plugins/catalog-backend-module-azure/src/lib/azure.ts @@ -34,6 +34,7 @@ export interface CodeSearchResultItem { project: { name: string; }; + branch?: string; } const isCloud = (host: string) => host === 'dev.azure.com'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index dff1164899..53919b9bb4 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -105,9 +105,13 @@ describe('AzureDevOpsEntityProvider', () => { await (taskDef.fn as () => Promise)(); const expectedEntities = codeSearchResults.map(item => { - const url = encodeURI( - `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, - ); + const url = item.branch + ? encodeURI( + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GBmybranch`, + ) + : encodeURI( + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, + ); return { entity: { apiVersion: 'backstage.io/v1alpha1', @@ -177,6 +181,36 @@ describe('AzureDevOpsEntityProvider', () => { ); }); + // eslint-disable-next-line jest/expect-expect + it('single mutation when repos use branch filter', async () => { + return expectMutation( + 'allReposSingleFile', + { + organization: 'myorganization', + project: 'myproject', + branch: 'mybranch', + }, + [ + { + fileName: 'catalog-info.yaml', + path: '/catalog-info.yaml', + repository: { + name: 'myrepo', + }, + project: { + name: 'myproject', + }, + branch: 'mybranch', + }, + ], + 'https://dev.azure.com/myorganization/myproject', + { + 'myrepo?path=/catalog-info.yaml': + 'generated-589e8cc47341987c7a34f5291791151fa64f7754', + }, + ); + }); + // eslint-disable-next-line jest/expect-expect it('single mutation when multiple repos have multiple files', async () => { return expectMutation( diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 788b9c2f05..457a9e74f2 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -177,8 +177,12 @@ export class AzureDevOpsEntityProvider implements EntityProvider { private createObjectUrl(file: CodeSearchResultItem): string { const baseUrl = `https://${this.config.host}/${this.config.organization}/${file.project.name}`; - return encodeURI( - `${baseUrl}/_git/${file.repository.name}?path=${file.path}`, - ); + + let fullUrl = `${baseUrl}/_git/${file.repository.name}?path=${file.path}`; + if (this.config.branch) { + fullUrl += `&version=GB${this.config.branch}`; + } + + return encodeURI(fullUrl); } } diff --git a/plugins/catalog-backend-module-azure/src/providers/config.test.ts b/plugins/catalog-backend-module-azure/src/providers/config.test.ts index a09079f1c3..02dbaab90e 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.test.ts @@ -44,17 +44,30 @@ describe('readAzureDevOpsConfigs', () => { }, }, }; + const provider5 = { + host: 'azure.mycompany.com', + organization: 'mycompany', + project: 'myproject', + branch: 'mybranch', + }; + const config = { catalog: { providers: { - azureDevOps: { provider1, provider2, provider3, provider4 }, + azureDevOps: { + provider1, + provider2, + provider3, + provider4, + provider5, + }, }, }, }; const actual = readAzureDevOpsConfigs(new ConfigReader(config)); - expect(actual).toHaveLength(4); + expect(actual).toHaveLength(5); expect(actual[0]).toEqual({ ...provider1, path: '/catalog-info.yaml', @@ -85,5 +98,12 @@ describe('readAzureDevOpsConfigs', () => { frequency: Duration.fromISO(provider4.schedule.frequency), }, }); + expect(actual[4]).toEqual({ + ...provider5, + branch: 'mybranch', + path: '/catalog-info.yaml', + repository: '*', + id: 'provider5', + }); }); }); diff --git a/plugins/catalog-backend-module-azure/src/providers/config.ts b/plugins/catalog-backend-module-azure/src/providers/config.ts index c84c242488..3c10a50863 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.ts @@ -41,6 +41,7 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { const project = config.getString('project'); const host = config.getOptionalString('host') || 'dev.azure.com'; const repository = config.getOptionalString('repository') || '*'; + const branch = config.getOptionalString('branch'); const path = config.getOptionalString('path') || '/catalog-info.yaml'; const schedule = config.has('schedule') @@ -53,6 +54,7 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { organization, project, repository, + branch, path, schedule, }; diff --git a/plugins/catalog-backend-module-azure/src/providers/types.ts b/plugins/catalog-backend-module-azure/src/providers/types.ts index b22a8551a5..3cd827b380 100644 --- a/plugins/catalog-backend-module-azure/src/providers/types.ts +++ b/plugins/catalog-backend-module-azure/src/providers/types.ts @@ -22,6 +22,7 @@ export type AzureDevOpsConfig = { organization: string; project: string; repository: string; + branch?: string; path: string; schedule?: TaskScheduleDefinition; }; From e339789173e64f4eacca76492175edbd674e6334 Mon Sep 17 00:00:00 2001 From: zjpersc Date: Sat, 25 Feb 2023 00:10:13 -0600 Subject: [PATCH 029/511] Add global-agent to dependencies; Update Readme w/ instructions Signed-off-by: zjpersc --- packages/techdocs-cli/README.md | 7 +++++++ packages/techdocs-cli/package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/packages/techdocs-cli/README.md b/packages/techdocs-cli/README.md index ae296d2c26..e6ba03e1d0 100644 --- a/packages/techdocs-cli/README.md +++ b/packages/techdocs-cli/README.md @@ -40,6 +40,13 @@ yarn start yarn techdocs-cli:dev [...options] ``` +### Connecting behind a proxy +```sh +# Prior to executing the techdocs-cli command +export GLOBAL_AGENT_HTTPS_PROXY=${HTTP_PROXY} +export GLOBAL_AGENT_NO_PROXY=${NO_PROXY} +``` + ### Using an example docs project For the purpose of local development, we have created an example documentation project. You are of course also free to create your own local test site - all it takes is a `docs/index.md` and an `mkdocs.yml` in a directory. diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 0a3bbed06f..371ddf440f 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -69,6 +69,7 @@ "commander": "^9.1.0", "dockerode": "^3.3.1", "fs-extra": "^10.0.1", + "global-agent": "^3.0.0", "http-proxy": "^1.18.1", "react-dev-utils": "^12.0.0-next.60", "serve-handler": "^6.1.3", From 7b4991adb9f1b2bc86b4a3e490de22472c2d5398 Mon Sep 17 00:00:00 2001 From: zjpersc Date: Sat, 25 Feb 2023 00:37:06 -0600 Subject: [PATCH 030/511] Adding changeset Signed-off-by: zjpersc --- .changeset/short-panthers-float.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/short-panthers-float.md diff --git a/.changeset/short-panthers-float.md b/.changeset/short-panthers-float.md new file mode 100644 index 0000000000..91eafe28aa --- /dev/null +++ b/.changeset/short-panthers-float.md @@ -0,0 +1,5 @@ +--- +'@techdocs/cli': patch +--- + +Adding global-agent to enable the ability to publish through a proxy From 8af3a93d07c213b1f2b432504491ea20d1455233 Mon Sep 17 00:00:00 2001 From: zjpersc Date: Sun, 26 Feb 2023 20:40:13 -0600 Subject: [PATCH 031/511] Revert "Adding changeset" This reverts commit b83d77e1bc7b608b0478d3de91c2080a9d153872. Signed-off-by: zjpersc --- .changeset/short-panthers-float.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/short-panthers-float.md diff --git a/.changeset/short-panthers-float.md b/.changeset/short-panthers-float.md deleted file mode 100644 index 91eafe28aa..0000000000 --- a/.changeset/short-panthers-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@techdocs/cli': patch ---- - -Adding global-agent to enable the ability to publish through a proxy From 1093f1b1cd62741029400aba24ec51b7d7121e55 Mon Sep 17 00:00:00 2001 From: zjpersc Date: Sun, 26 Feb 2023 20:40:21 -0600 Subject: [PATCH 032/511] Revert "Add global-agent to dependencies; Update Readme w/ instructions" This reverts commit 39f5a8389b8ff4afcb18fb19a0ca20d2552abc83. Signed-off-by: zjpersc --- packages/techdocs-cli/README.md | 7 ------- packages/techdocs-cli/package.json | 1 - 2 files changed, 8 deletions(-) diff --git a/packages/techdocs-cli/README.md b/packages/techdocs-cli/README.md index e6ba03e1d0..ae296d2c26 100644 --- a/packages/techdocs-cli/README.md +++ b/packages/techdocs-cli/README.md @@ -40,13 +40,6 @@ yarn start yarn techdocs-cli:dev [...options] ``` -### Connecting behind a proxy -```sh -# Prior to executing the techdocs-cli command -export GLOBAL_AGENT_HTTPS_PROXY=${HTTP_PROXY} -export GLOBAL_AGENT_NO_PROXY=${NO_PROXY} -``` - ### Using an example docs project For the purpose of local development, we have created an example documentation project. You are of course also free to create your own local test site - all it takes is a `docs/index.md` and an `mkdocs.yml` in a directory. diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 371ddf440f..0a3bbed06f 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -69,7 +69,6 @@ "commander": "^9.1.0", "dockerode": "^3.3.1", "fs-extra": "^10.0.1", - "global-agent": "^3.0.0", "http-proxy": "^1.18.1", "react-dev-utils": "^12.0.0-next.60", "serve-handler": "^6.1.3", From b348420a804d69047c98aea9743292c9156e4e3e Mon Sep 17 00:00:00 2001 From: zjpersc Date: Sun, 26 Feb 2023 20:44:08 -0600 Subject: [PATCH 033/511] Adding global-agent to dependencies; updated README w/ instructions Signed-off-by: zjpersc --- .changeset/short-panthers-float.md | 5 +++++ packages/techdocs-cli/README.md | 7 +++++++ packages/techdocs-cli/package.json | 1 + 3 files changed, 13 insertions(+) create mode 100644 .changeset/short-panthers-float.md diff --git a/.changeset/short-panthers-float.md b/.changeset/short-panthers-float.md new file mode 100644 index 0000000000..41ec71a7aa --- /dev/null +++ b/.changeset/short-panthers-float.md @@ -0,0 +1,5 @@ +--- +'@techdocs/cli': patch +--- + +Adding global-agent to enable the ability to publish through a proxy \ No newline at end of file diff --git a/packages/techdocs-cli/README.md b/packages/techdocs-cli/README.md index ae296d2c26..e6ba03e1d0 100644 --- a/packages/techdocs-cli/README.md +++ b/packages/techdocs-cli/README.md @@ -40,6 +40,13 @@ yarn start yarn techdocs-cli:dev [...options] ``` +### Connecting behind a proxy +```sh +# Prior to executing the techdocs-cli command +export GLOBAL_AGENT_HTTPS_PROXY=${HTTP_PROXY} +export GLOBAL_AGENT_NO_PROXY=${NO_PROXY} +``` + ### Using an example docs project For the purpose of local development, we have created an example documentation project. You are of course also free to create your own local test site - all it takes is a `docs/index.md` and an `mkdocs.yml` in a directory. diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 0a3bbed06f..371ddf440f 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -69,6 +69,7 @@ "commander": "^9.1.0", "dockerode": "^3.3.1", "fs-extra": "^10.0.1", + "global-agent": "^3.0.0", "http-proxy": "^1.18.1", "react-dev-utils": "^12.0.0-next.60", "serve-handler": "^6.1.3", From 9796fe16d731856b4e4d59bf66f7cafcafccdef1 Mon Sep 17 00:00:00 2001 From: zjpersc Date: Tue, 7 Mar 2023 14:31:34 -0600 Subject: [PATCH 034/511] Updating techdocs-cli dependency on global-agent@3.0.0 in yarn.lock Signed-off-by: zjpersc --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index 6973779ac5..b335996073 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13923,6 +13923,7 @@ __metadata: dockerode: ^3.3.1 find-process: ^1.4.5 fs-extra: ^10.0.1 + global-agent: ^3.0.0 http-proxy: ^1.18.1 nodemon: ^2.0.2 react-dev-utils: ^12.0.0-next.60 From 6620edc944c17302739b8717f8265d099075984b Mon Sep 17 00:00:00 2001 From: zjpersc Date: Tue, 7 Mar 2023 17:07:57 -0600 Subject: [PATCH 035/511] Fixing prettier errors Signed-off-by: zjpersc --- .changeset/short-panthers-float.md | 2 +- packages/techdocs-cli/README.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.changeset/short-panthers-float.md b/.changeset/short-panthers-float.md index 41ec71a7aa..91eafe28aa 100644 --- a/.changeset/short-panthers-float.md +++ b/.changeset/short-panthers-float.md @@ -2,4 +2,4 @@ '@techdocs/cli': patch --- -Adding global-agent to enable the ability to publish through a proxy \ No newline at end of file +Adding global-agent to enable the ability to publish through a proxy diff --git a/packages/techdocs-cli/README.md b/packages/techdocs-cli/README.md index e6ba03e1d0..85c0075946 100644 --- a/packages/techdocs-cli/README.md +++ b/packages/techdocs-cli/README.md @@ -41,7 +41,8 @@ yarn techdocs-cli:dev [...options] ``` ### Connecting behind a proxy -```sh + +```sh # Prior to executing the techdocs-cli command export GLOBAL_AGENT_HTTPS_PROXY=${HTTP_PROXY} export GLOBAL_AGENT_NO_PROXY=${NO_PROXY} From 172afbb4f0e83bcc149899f9c05e4f52d2b9682b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 11:30:43 +0000 Subject: [PATCH 036/511] fix(deps): update dependency @google-cloud/firestore to v6.5.0 Signed-off-by: Renovate Bot --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 31923b65bd..a013eb5113 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10086,14 +10086,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.4.3 - resolution: "@google-cloud/firestore@npm:6.4.3" + version: 6.5.0 + resolution: "@google-cloud/firestore@npm:6.5.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 - google-gax: ^3.5.3 + google-gax: ^3.5.7 protobufjs: ^7.0.0 - checksum: 8bbde2c9bad94459c231d41855e65866b2383f20e2741aa93d86204370172dd62af94e1eb66d977e000e0c7292c986eb25fe967db7ee847593fd9a68c9fb91e3 + checksum: dd9cf4eee263a976239232143d5caf213c34850a352c6b6cb15b7b17cfddc2c6bee5e72eed0d188f4317eb5cb6a898372d02c54be8a30bbdc7ffbd360e138cb7 languageName: node linkType: hard @@ -24434,7 +24434,7 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^3.5.2, google-gax@npm:^3.5.3": +"google-gax@npm:^3.5.2, google-gax@npm:^3.5.7": version: 3.5.7 resolution: "google-gax@npm:3.5.7" dependencies: From 616c278b898cb0021d3c9303ba1347e11710e608 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 08:58:49 -0300 Subject: [PATCH 037/511] Update .changeset/modern-colts-exercise.md Co-authored-by: Johan Haals Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md index d869945870..1dfe2f441a 100644 --- a/.changeset/modern-colts-exercise.md +++ b/.changeset/modern-colts-exercise.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-azure': minor +'@backstage/plugin-catalog-backend-module-azure': patch --- Add branch filter support From 7de756703dbd15c0356a3f6ac1049dd2b3511092 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 08:59:36 -0300 Subject: [PATCH 038/511] Update plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts Co-authored-by: Johan Haals Signed-off-by: Yuri Titi --- .../src/providers/AzureDevOpsEntityProvider.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index 53919b9bb4..dba29cbb88 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -107,7 +107,7 @@ describe('AzureDevOpsEntityProvider', () => { const expectedEntities = codeSearchResults.map(item => { const url = item.branch ? encodeURI( - `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GBmybranch`, + `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}&version=GB${item.branch}`, ) : encodeURI( `${expectedBaseUrl}/_git/${item.repository.name}?path=${item.path}`, From 3efdf55f238fb806f112dadbb6f25ed1faeb020c Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 16:33:45 +0000 Subject: [PATCH 039/511] remove unhandled promise on bad creds The unhandled promise had been bringing down the whole application when the creds were bad. Signed-off-by: Brian Fletcher --- .../AwsIamKubernetesAuthTranslator.ts | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts index b89945902d..84e60c9c69 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts @@ -55,46 +55,44 @@ export class AwsIamKubernetesAuthTranslator assumeRole?: string, externalId?: string, ): Promise { - return new Promise(async (resolve, reject) => { - const awsCreds = await this.awsGetCredentials(); + const awsCreds = await this.awsGetCredentials(); - if (!(awsCreds instanceof Credentials)) - return reject(Error('No AWS credentials found.')); + if (!(awsCreds instanceof Credentials)) + throw new Error('No AWS credentials found.'); - let creds: SigningCreds = { - accessKeyId: awsCreds.accessKeyId, - secretAccessKey: awsCreds.secretAccessKey, - sessionToken: awsCreds.sessionToken, + let creds: SigningCreds = { + accessKeyId: awsCreds.accessKeyId, + secretAccessKey: awsCreds.secretAccessKey, + sessionToken: awsCreds.sessionToken, + }; + + if (!this.validCredentials(creds)) + throw new Error('Invalid AWS credentials found.'); + if (!assumeRole) return creds; + + try { + const params: AWS.STS.Types.AssumeRoleRequest = { + RoleArn: assumeRole, + RoleSessionName: 'backstage-login', }; + if (externalId) params.ExternalId = externalId; - if (!this.validCredentials(creds)) - return reject(Error('Invalid AWS credentials found.')); - if (!assumeRole) return resolve(creds); + const assumedRole = await new AWS.STS().assumeRole(params).promise(); - try { - const params: AWS.STS.Types.AssumeRoleRequest = { - RoleArn: assumeRole, - RoleSessionName: 'backstage-login', - }; - if (externalId) params.ExternalId = externalId; - - const assumedRole = await new AWS.STS().assumeRole(params).promise(); - - if (!assumedRole.Credentials) { - throw new Error(`No credentials returned for role ${assumeRole}`); - } - - creds = { - accessKeyId: assumedRole.Credentials.AccessKeyId, - secretAccessKey: assumedRole.Credentials.SecretAccessKey, - sessionToken: assumedRole.Credentials.SessionToken, - }; - } catch (e) { - console.warn(`There was an error assuming the role: ${e}`); - return reject(Error(`Unable to assume role: ${e}`)); + if (!assumedRole.Credentials) { + throw new Error(`No credentials returned for role ${assumeRole}`); } - return resolve(creds); - }); + + creds = { + accessKeyId: assumedRole.Credentials.AccessKeyId, + secretAccessKey: assumedRole.Credentials.SecretAccessKey, + sessionToken: assumedRole.Credentials.SessionToken, + }; + } catch (e) { + console.warn(`There was an error assuming the role: ${e}`); + throw new Error(`Unable to assume role: ${e}`); + } + return creds; } async getBearerToken( clusterName: string, From 75d4985f5e80c8a86bbe2dbf216da330a651994c Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 16:38:42 +0000 Subject: [PATCH 040/511] add changeset for k8s plugin Signed-off-by: Brian Fletcher --- .changeset/fuzzy-actors-turn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fuzzy-actors-turn.md diff --git a/.changeset/fuzzy-actors-turn.md b/.changeset/fuzzy-actors-turn.md new file mode 100644 index 0000000000..3cb8f84cae --- /dev/null +++ b/.changeset/fuzzy-actors-turn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Fixes bug whereby backstage crashes when bad aws credentials are provided to the kubernetes plugin. From bd1ee2b7403b5049e67c72458526e521328770eb Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 16:42:59 +0000 Subject: [PATCH 041/511] remove typo Signed-off-by: Brian Fletcher --- .changeset/fuzzy-actors-turn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fuzzy-actors-turn.md b/.changeset/fuzzy-actors-turn.md index 3cb8f84cae..bd92ad34ef 100644 --- a/.changeset/fuzzy-actors-turn.md +++ b/.changeset/fuzzy-actors-turn.md @@ -2,4 +2,4 @@ '@backstage/plugin-kubernetes-backend': patch --- -Fixes bug whereby backstage crashes when bad aws credentials are provided to the kubernetes plugin. +Fixes bug whereby backstage crashes when bad credentials are provided to the kubernetes plugin. From 075761de52824a061987bb039c23ba5ee2fbd162 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Wed, 8 Mar 2023 14:47:29 -0300 Subject: [PATCH 042/511] Update discovery.md Signed-off-by: Yuri Titi --- docs/integrations/azure/discovery.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index d96b7d84ab..2308b8634b 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -85,7 +85,13 @@ The parameters available are: _Note:_ - The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). -- The branch parameters need that the branch desired it`s added on 'Searchable branches' on Azure DevOps Repositories +- To use branch parameters, it is necessary that the desired branch be added to the "Searchable branches" list within Azure DevOps Repositories. To do this, follow the instructions below: +1. Access your Azure DevOps and open the repository in which you want to add the branch. +2. Click on "Settings" in the lower-left corner of the screen. +3. Select the "Options" option in the left navigation bar. +4. In the "Searchable branches" section, click on the "Add" button to add a new branch. +5. In the window that appears, enter the name of the branch you want to add and click "Add". +6. The added branch will now appear in the "Searchable branches" list. As this provider is not one of the default providers, you will first need to install the Azure catalog plugin: From b2e182cdfa4f352d6d6907bff359854db7f8a95d Mon Sep 17 00:00:00 2001 From: Sudeep Sinha Date: Wed, 8 Mar 2023 13:54:24 -0500 Subject: [PATCH 043/511] Fix font size and color in search result item Signed-off-by: Sudeep Sinha --- .changeset/many-eggs-press.md | 6 ++++++ .../DefaultResultListItem/DefaultResultListItem.tsx | 2 ++ .../src/search/components/TechDocsSearchResultListItem.tsx | 2 ++ 3 files changed, 10 insertions(+) create mode 100644 .changeset/many-eggs-press.md diff --git a/.changeset/many-eggs-press.md b/.changeset/many-eggs-press.md new file mode 100644 index 0000000000..551cf9e759 --- /dev/null +++ b/.changeset/many-eggs-press.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-react': patch +'@backstage/plugin-techdocs': patch +--- + +Fixes a UI bug in search result item which rendered the item text with incorrect font size and color diff --git a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx index cf89b6a9cd..0d2c59e173 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx +++ b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx @@ -81,6 +81,8 @@ export const DefaultResultListItemComponent = ({ WebkitLineClamp: lineClamp, overflow: 'hidden', }} + color="textSecondary" + variant="body2" > {highlight?.fields.text ? ( {highlight?.fields.text ? ( Date: Wed, 8 Mar 2023 21:55:09 -0300 Subject: [PATCH 044/511] docs(azure-discovery): fix prettier Signed-off-by: Yuri Titi --- docs/integrations/azure/discovery.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 2308b8634b..bcbb00a49d 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -86,6 +86,7 @@ _Note:_ - The path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the [official search documentation](https://docs.microsoft.com/en-us/azure/devops/project/search/get-started-search?view=azure-devops). - To use branch parameters, it is necessary that the desired branch be added to the "Searchable branches" list within Azure DevOps Repositories. To do this, follow the instructions below: + 1. Access your Azure DevOps and open the repository in which you want to add the branch. 2. Click on "Settings" in the lower-left corner of the screen. 3. Select the "Options" option in the left navigation bar. From cad86281a24db3643f3a2f3965a8be0cf91d2d23 Mon Sep 17 00:00:00 2001 From: Yuri Titi Date: Thu, 9 Mar 2023 09:43:30 -0300 Subject: [PATCH 045/511] Add link to discovery information Signed-off-by: Yuri Titi --- .changeset/modern-colts-exercise.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md index 1dfe2f441a..651f10bc98 100644 --- a/.changeset/modern-colts-exercise.md +++ b/.changeset/modern-colts-exercise.md @@ -3,3 +3,4 @@ --- Add branch filter support +https://backstage.io/docs/integrations/azure/discovery From e27ddc36dade80b41389f87ddad17875fc2c98f4 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Thu, 9 Mar 2023 15:40:47 +0100 Subject: [PATCH 046/511] Cancelling the running task (executing of a scaffolder template) Signed-off-by: Bogdan Nechyporenko --- .changeset/backend-token-authentication.md | 5 + .changeset/beige-hats-cheer.md | 27 + .changeset/big-gorillas-fail1.md | 5 + .changeset/big-gorillas-fail2.md | 5 + .changeset/big-gorillas-fail3.md | 5 + .changeset/big-gorillas-fail4.md | 5 + .changeset/big-gorillas-fail5.md | 5 + .changeset/big-gorillas-fail6.md | 5 + .changeset/cold-dogs-watch.md | 5 + .changeset/create-app-1678209629.md | 5 + .changeset/curly-jobs-kneel.md | 8 + .../dull-adults-drum.md | 0 .changeset/gorgeous-pumas-speak.md | 5 + .changeset/healthy-buses-live-1.md | 5 + .changeset/healthy-buses-live-2.md | 5 + .changeset/healthy-buses-live-3.md | 5 + .changeset/healthy-buses-live-4.md | 5 + .changeset/healthy-buses-live-5.md | 5 + .changeset/healthy-buses-live-6.md | 5 + .changeset/healthy-buses-live-7.md | 5 + .changeset/healthy-buses-live-8.md | 5 + .changeset/healthy-buses-live-9.md | 5 + .changeset/honest-clouds-shout.md | 5 + .changeset/light-bees-end.md | 5 + .changeset/moody-apes-know.md | 16 + .changeset/nine-bikes-applaud.md | 5 + .changeset/pre.json | 33 +- .changeset/proud-jokes-pull.md | 5 + .changeset/rotten-cats-matter.md | 19 + .changeset/silver-bikes-breathe.md | 21 +- .changeset/stupid-games-brake.md | 5 + .changeset/twenty-insects-live.md | 5 + .changeset/witty-squids-fetch.md | 5 + .changeset/young-walls-prove.md | 5 + ADOPTERS.md | 1 + docs/auth/gitlab/provider.md | 6 +- docs/features/kubernetes/configuration.md | 5 +- docs/features/software-templates/index.md | 4 + .../writing-custom-actions.md | 7 +- docs/overview/adopting.md | 2 +- docs/releases/v1.12.0-next.2-changelog.md | 1833 +++++++++++++++++ .../src/components/simpleCard/simpleCard.tsx | 17 + .../src/pages/on-demand/_onDemandCard.tsx | 66 + microsite-next/src/pages/on-demand/index.tsx | 78 + .../src/pages/on-demand/onDemand.module.scss | 44 + .../src/pages/plugins/_pluginCard.tsx | 37 +- microsite-next/src/pages/plugins/index.tsx | 13 +- .../src/util/truncateDescription.tsx | 11 + microsite/pages/en/plugins.js | 2 +- package.json | 2 +- packages/app-defaults/CHANGELOG.md | 10 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 64 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 12 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 28 + packages/backend-common/package.json | 2 +- .../src/reading/AwsS3UrlReader.test.ts | 12 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 11 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 9 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 12 + packages/backend-tasks/package.json | 2 +- packages/backend-tasks/src/migrations.test.ts | 7 +- packages/backend-test-utils/CHANGELOG.md | 11 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 47 + packages/backend/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 26 + packages/core-app-api/package.json | 2 +- .../auth/oauth2/OAuth2.test.ts | 24 +- .../implementations/auth/oauth2/OAuth2.ts | 5 +- packages/core-components/CHANGELOG.md | 12 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 11 + packages/core-plugin-api/api-report.md | 6 +- packages/core-plugin-api/package.json | 2 +- .../src/apis/definitions/auth.ts | 6 +- packages/create-app/CHANGELOG.md | 6 + packages/create-app/package.json | 2 +- .../default-app/packages/app/.eslintignore | 1 + packages/dev-utils/CHANGELOG.md | 13 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 7 + packages/e2e-test/package.json | 2 +- packages/integration-react/CHANGELOG.md | 10 + packages/integration-react/api-report.md | 6 +- packages/integration-react/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 17 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 9 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 10 + packages/test-utils/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 10 + plugins/adr-backend/package.json | 2 +- plugins/adr/CHANGELOG.md | 11 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 11 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 9 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 9 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 11 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 8 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 9 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 9 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 8 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 9 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 8 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 9 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 8 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 9 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 10 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 11 + plugins/bazaar/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 9 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 14 + .../alpha-api-report.md | 2 +- .../catalog-backend-module-aws/api-report.md | 10 +- .../catalog-backend-module-aws/package.json | 3 +- .../catalog-backend-module-aws/src/alpha.ts | 2 +- .../catalogModuleAwsS3EntityProvider.test.ts} | 6 +- .../catalogModuleAwsS3EntityProvider.ts} | 2 +- .../src/module/index.ts | 17 + .../src/processors/AwsEKSClusterProcessor.ts | 2 +- .../AwsOrganizationCloudAccountProcessor.ts | 2 +- .../AwsS3DiscoveryProcessor.test.ts | 2 +- .../src/processors/AwsS3DiscoveryProcessor.ts | 2 +- .../src/providers/AwsS3EntityProvider.test.ts | 2 +- .../src/providers/AwsS3EntityProvider.ts | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 13 + .../alpha-api-report.md | 2 +- .../api-report.md | 10 +- .../catalog-backend-module-azure/package.json | 3 +- .../catalog-backend-module-azure/src/alpha.ts | 2 +- ...ogModuleAzureDevOpsEntityProvider.test.ts} | 6 +- ...catalogModuleAzureDevOpsEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 + .../AzureDevOpsDiscoveryProcessor.test.ts | 2 +- .../AzureDevOpsDiscoveryProcessor.ts | 2 +- .../AzureDevOpsEntityProvider.test.ts | 2 +- .../providers/AzureDevOpsEntityProvider.ts | 2 +- .../CHANGELOG.md | 14 + .../alpha-api-report.md | 2 +- .../api-report.md | 4 +- .../package.json | 3 +- .../src/alpha.ts | 2 +- .../src/index.ts | 2 +- ...oduleBitbucketCloudEntityProvider.test.ts} | 8 +- ...alogModuleBitbucketCloudEntityProvider.ts} | 4 +- .../src/module/index.ts | 17 + .../BitbucketCloudEntityProvider.test.ts | 2 +- .../BitbucketCloudEntityProvider.ts | 2 +- ...BitbucketCloudEntityProviderConfig.test.ts | 0 .../BitbucketCloudEntityProviderConfig.ts | 0 .../CHANGELOG.md | 13 + .../alpha-api-report.md | 2 +- .../api-report.md | 6 +- .../package.json | 3 +- .../src/alpha.ts | 2 +- ...duleBitbucketServerEntityProvider.test.ts} | 6 +- ...logModuleBitbucketServerEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 + .../BitbucketServerEntityProvider.test.ts | 2 +- .../BitbucketServerEntityProvider.ts | 2 +- .../BitbucketServerLocationParser.ts | 2 +- .../CHANGELOG.md | 10 + .../api-report.md | 8 +- .../package.json | 4 +- .../src/BitbucketDiscoveryProcessor.test.ts | 5 +- .../src/BitbucketDiscoveryProcessor.ts | 2 +- .../src/lib/BitbucketRepositoryParser.test.ts | 2 +- .../src/lib/BitbucketRepositoryParser.ts | 2 +- .../CHANGELOG.md | 13 + .../alpha-api-report.md | 2 +- .../api-report.md | 4 +- .../package.json | 3 +- .../src/alpha.ts | 2 +- ...catalogModuleGerritEntityProvider.test.ts} | 6 +- .../catalogModuleGerritEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 + .../providers/GerritEntityProvider.test.ts | 2 +- .../src/providers/GerritEntityProvider.ts | 2 +- .../CHANGELOG.md | 15 + .../alpha-api-report.md | 2 +- .../api-report.md | 10 +- .../package.json | 2 +- .../src/alpha.ts | 2 +- .../src/deprecated.ts | 2 +- .../src/lib/github.ts | 4 +- ...catalogModuleGithubEntityProvider.test.ts} | 6 +- .../catalogModuleGithubEntityProvider.ts} | 2 +- .../src/module/index.ts | 17 + .../GithubDiscoveryProcessor.test.ts | 2 +- .../processors/GithubDiscoveryProcessor.ts | 2 +- .../GithubMultiOrgReaderProcessor.ts | 2 +- .../GithubOrgReaderProcessor.test.ts | 2 +- .../processors/GithubOrgReaderProcessor.ts | 2 +- .../providers/GithubEntityProvider.test.ts | 2 +- .../src/providers/GithubEntityProvider.ts | 2 +- .../providers/GithubOrgEntityProvider.test.ts | 2 +- .../src/providers/GithubOrgEntityProvider.ts | 2 +- .../CHANGELOG.md | 14 + .../alpha-api-report.md | 2 +- .../api-report.md | 10 +- .../package.json | 3 +- .../src/GitLabDiscoveryProcessor.test.ts | 2 +- .../src/GitLabDiscoveryProcessor.ts | 2 +- .../src/alpha.ts | 2 +- ...duleGitlabDiscoveryEntityProvider.test.ts} | 6 +- ...logModuleGitlabDiscoveryEntityProvider.ts} | 2 +- .../GitlabDiscoveryEntityProvider.test.ts | 2 +- .../GitlabDiscoveryEntityProvider.ts | 2 +- .../GitlabOrgDiscoveryEntityProvider.test.ts | 2 +- .../GitlabOrgDiscoveryEntityProvider.ts | 2 +- .../CHANGELOG.md | 13 + .../alpha-api-report.md | 2 +- .../api-report.md | 2 +- .../package.json | 5 +- .../IncrementalIngestionDatabaseManager.ts | 2 +- .../src/engine/IncrementalIngestionEngine.ts | 2 +- ...ncrementalIngestionEntityProvider.test.ts} | 6 +- ...duleIncrementalIngestionEntityProvider.ts} | 2 +- .../src/module/index.ts | 2 +- .../src/run.ts | 4 +- .../src/service/IncrementalCatalogBuilder.ts | 1 + .../src/types.ts | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 9 + .../catalog-backend-module-ldap/api-report.md | 10 +- .../catalog-backend-module-ldap/package.json | 4 +- .../src/processors/LdapOrgEntityProvider.ts | 2 +- .../src/processors/LdapOrgReaderProcessor.ts | 2 +- .../CHANGELOG.md | 13 + .../alpha-api-report.md | 4 +- .../api-report.md | 10 +- .../package.json | 3 +- .../src/alpha.ts | 3 +- ...leMicrosoftGraphOrgEntityProvider.test.ts} | 6 +- ...gModuleMicrosoftGraphOrgEntityProvider.ts} | 8 +- .../src/module/index.ts | 18 + .../MicrosoftGraphOrgEntityProvider.test.ts | 2 +- .../MicrosoftGraphOrgEntityProvider.ts | 2 +- .../MicrosoftGraphOrgReaderProcessor.ts | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../alpha-api-report.md | 12 + .../api-report.md | 4 +- .../package.json | 24 +- .../src/alpha.ts} | 4 +- ...atalogModulePuppetDbEntityProvider.test.ts | 79 + .../catalogModulePuppetDbEntityProvider.ts | 51 + .../src/module/index.ts | 17 + .../providers/PuppetDbEntityProvider.test.ts | 2 +- .../src/providers/PuppetDbEntityProvider.ts | 6 +- plugins/catalog-backend/CHANGELOG.md | 12 + plugins/catalog-backend/api-report.md | 161 +- plugins/catalog-backend/package.json | 2 +- plugins/catalog-backend/src/deprecated.ts | 143 ++ plugins/catalog-backend/src/index.ts | 37 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 9 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 12 + plugins/catalog-import/package.json | 2 +- .../src/api/CatalogImportClient.test.ts | 1 - plugins/catalog-node/CHANGELOG.md | 7 + plugins/catalog-node/api-report.md | 10 + plugins/catalog-node/package.json | 2 +- plugins/catalog-node/src/conversion.ts | 103 + plugins/catalog-node/src/index.ts | 1 + plugins/catalog-react/CHANGELOG.md | 11 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 15 + plugins/catalog/package.json | 2 +- .../EntitySwitch/EntitySwitch.test.tsx | 36 + .../components/EntitySwitch/EntitySwitch.tsx | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 8 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 9 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 9 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 9 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 9 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 10 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 9 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 9 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 10 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 9 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 9 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 9 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 9 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 11 + .../alpha-api-report.md | 2 +- .../package.json | 2 +- .../src/alpha.ts | 2 +- ...duleAwsSqsConsumingEventPublisher.test.ts} | 6 +- ...ntsModuleAwsSqsConsumingEventPublisher.ts} | 4 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../alpha-api-report.md | 2 +- .../events-backend-module-azure/package.json | 2 +- .../events-backend-module-azure/src/alpha.ts | 2 +- ...ventsModuleAzureDevOpsEventRouter.test.ts} | 6 +- ... => eventsModuleAzureDevOpsEventRouter.ts} | 2 +- .../CHANGELOG.md | 8 + .../alpha-api-report.md | 2 +- .../package.json | 2 +- .../src/alpha.ts | 2 +- ...tsModuleBitbucketCloudEventRouter.test.ts} | 6 +- ... eventsModuleBitbucketCloudEventRouter.ts} | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../alpha-api-report.md | 2 +- .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-gerrit/src/alpha.ts | 2 +- ... => eventsModuleGerritEventRouter.test.ts} | 6 +- ...le.ts => eventsModuleGerritEventRouter.ts} | 2 +- .../events-backend-module-github/CHANGELOG.md | 9 + .../alpha-api-report.md | 4 +- .../events-backend-module-github/package.json | 2 +- .../events-backend-module-github/src/alpha.ts | 4 +- ... => eventsModuleGithubEventRouter.test.ts} | 6 +- ...le.ts => eventsModuleGithubEventRouter.ts} | 2 +- ...t.ts => eventsModuleGithubWebhook.test.ts} | 6 +- ...Module.ts => eventsModuleGithubWebhook.ts} | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../alpha-api-report.md | 4 +- .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-module-gitlab/src/alpha.ts | 4 +- ... => eventsModuleGitlabEventRouter.test.ts} | 6 +- ...le.ts => eventsModuleGitlabEventRouter.ts} | 2 +- ...t.ts => eventsModuleGitlabWebhook.test.ts} | 4 +- ...Module.ts => eventsModuleGitlabWebhook.ts} | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 10 + plugins/events-backend/README.md | 4 +- plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 7 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 10 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 8 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 8 + plugins/explore-backend/package.json | 2 +- plugins/explore-react/CHANGELOG.md | 7 + plugins/explore-react/package.json | 2 +- plugins/explore/CHANGELOG.md | 12 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 9 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 9 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 8 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 8 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 9 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 10 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 11 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 10 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 10 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 8 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 9 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 8 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 9 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 8 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 10 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 9 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 9 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 9 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 9 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 10 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 9 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 11 + plugins/kubernetes/package.json | 2 +- plugins/kubernetes/src/plugin.ts | 4 + plugins/lighthouse-backend/CHANGELOG.md | 9 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 10 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 11 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 9 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 8 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 9 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 8 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 9 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 9 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 10 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 9 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 9 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 10 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 9 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 8 + plugins/permission-react/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 10 + plugins/playlist-backend/package.json | 2 +- plugins/playlist/CHANGELOG.md | 11 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 9 + plugins/proxy-backend/package.json | 2 +- plugins/proxy-backend/src/service/router.ts | 5 + plugins/rollbar-backend/CHANGELOG.md | 8 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 9 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 12 + .../README.md | 2 + .../api-report.md | 2 +- .../package.json | 2 +- .../src/actions/fetch/cookiecutter.test.ts | 12 + .../src/actions/fetch/cookiecutter.ts | 11 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../src/actions/fetch/rails/index.test.ts | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 18 + plugins/scaffolder-backend/api-report.md | 34 +- plugins/scaffolder-backend/package.json | 4 +- .../actions/builtin/catalog/write.ts | 1 + .../actions/builtin/createBuiltinActions.ts | 3 +- .../scaffolder/actions/builtin/debug/index.ts | 1 + .../actions/builtin/debug/wait.test.ts | 76 + .../scaffolder/actions/builtin/debug/wait.ts | 131 ++ .../actions/builtin/publish/azure.test.ts | 11 +- .../src/scaffolder/dryrun/createDryRunner.ts | 7 +- .../tasks/DatabaseTaskStore.test.ts | 191 ++ .../src/scaffolder/tasks/DatabaseTaskStore.ts | 72 +- .../tasks/NunjucksWorkflowRunner.test.ts | 3 +- .../tasks/NunjucksWorkflowRunner.ts | 310 +-- .../src/scaffolder/tasks/StorageTaskBroker.ts | 64 +- .../src/scaffolder/tasks/TaskWorker.test.ts | 88 +- .../src/scaffolder/tasks/TaskWorker.ts | 5 +- .../src/scaffolder/tasks/types.ts | 47 +- .../scaffolder-backend/src/service/router.ts | 19 +- plugins/scaffolder-node/CHANGELOG.md | 7 + plugins/scaffolder-node/api-report.md | 1 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-node/src/actions/types.ts | 5 + plugins/scaffolder-react/CHANGELOG.md | 12 + plugins/scaffolder-react/api-report.md | 9 +- plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder-react/src/api/types.ts | 14 +- .../src/hooks/useEventStream.ts | 13 +- .../components/Workflow/Workflow.test.tsx | 4 +- plugins/scaffolder/CHANGELOG.md | 21 + plugins/scaffolder/api-report.md | 2 + plugins/scaffolder/package.json | 2 +- plugins/scaffolder/src/api.ts | 45 +- .../ActionsPage/ActionsPage.test.tsx | 1 + .../src/components/TaskPage/TaskPage.tsx | 39 +- .../TemplatePage/TemplatePage.test.tsx | 6 +- .../src/next/OngoingTask/ContextMenu.tsx | 28 +- .../src/next/OngoingTask/OngoingTask.test.tsx | 84 + .../src/next/OngoingTask/OngoingTask.tsx | 12 +- .../TemplateWizardPage.test.tsx | 1 + .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 9 + plugins/search-backend-module-pg/package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 9 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 11 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 10 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 12 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 9 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 8 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 8 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube-react/CHANGELOG.md | 7 + plugins/sonarqube-react/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 11 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 10 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 8 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 11 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 8 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 10 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 9 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 10 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 8 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 15 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 10 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 11 + plugins/techdocs-node/package.json | 2 +- .../src/stages/generate/helpers.test.ts | 4 +- plugins/techdocs-react/CHANGELOG.md | 10 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 15 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 11 + plugins/todo-backend/package.json | 2 +- plugins/todo-backend/src/plugin.ts | 2 +- plugins/todo/CHANGELOG.md | 9 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 9 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 10 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 9 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 9 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 8 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 1352 +++++------- 597 files changed, 6911 insertions(+), 1680 deletions(-) create mode 100644 .changeset/backend-token-authentication.md create mode 100644 .changeset/beige-hats-cheer.md create mode 100644 .changeset/big-gorillas-fail1.md create mode 100644 .changeset/big-gorillas-fail2.md create mode 100644 .changeset/big-gorillas-fail3.md create mode 100644 .changeset/big-gorillas-fail4.md create mode 100644 .changeset/big-gorillas-fail5.md create mode 100644 .changeset/big-gorillas-fail6.md create mode 100644 .changeset/cold-dogs-watch.md create mode 100644 .changeset/create-app-1678209629.md create mode 100644 .changeset/curly-jobs-kneel.md rename {plugins/.changeset => .changeset}/dull-adults-drum.md (100%) create mode 100644 .changeset/gorgeous-pumas-speak.md create mode 100644 .changeset/healthy-buses-live-1.md create mode 100644 .changeset/healthy-buses-live-2.md create mode 100644 .changeset/healthy-buses-live-3.md create mode 100644 .changeset/healthy-buses-live-4.md create mode 100644 .changeset/healthy-buses-live-5.md create mode 100644 .changeset/healthy-buses-live-6.md create mode 100644 .changeset/healthy-buses-live-7.md create mode 100644 .changeset/healthy-buses-live-8.md create mode 100644 .changeset/healthy-buses-live-9.md create mode 100644 .changeset/honest-clouds-shout.md create mode 100644 .changeset/light-bees-end.md create mode 100644 .changeset/moody-apes-know.md create mode 100644 .changeset/nine-bikes-applaud.md create mode 100644 .changeset/proud-jokes-pull.md create mode 100644 .changeset/rotten-cats-matter.md create mode 100644 .changeset/stupid-games-brake.md create mode 100644 .changeset/twenty-insects-live.md create mode 100644 .changeset/witty-squids-fetch.md create mode 100644 .changeset/young-walls-prove.md create mode 100644 docs/releases/v1.12.0-next.2-changelog.md create mode 100644 microsite-next/src/components/simpleCard/simpleCard.tsx create mode 100644 microsite-next/src/pages/on-demand/_onDemandCard.tsx create mode 100644 microsite-next/src/pages/on-demand/index.tsx create mode 100644 microsite-next/src/pages/on-demand/onDemand.module.scss create mode 100644 microsite-next/src/util/truncateDescription.tsx create mode 100644 packages/create-app/templates/default-app/packages/app/.eslintignore rename plugins/catalog-backend-module-aws/src/{service/AwsS3EntityProviderCatalogModule.test.ts => module/catalogModuleAwsS3EntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-aws/src/{service/AwsS3EntityProviderCatalogModule.ts => module/catalogModuleAwsS3EntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-aws/src/module/index.ts rename plugins/catalog-backend-module-azure/src/{service/AzureDevOpsEntityProviderCatalogModule.test.ts => module/catalogModuleAzureDevOpsEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-azure/src/{service/AzureDevOpsEntityProviderCatalogModule.ts => module/catalogModuleAzureDevOpsEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-azure/src/module/index.ts rename plugins/catalog-backend-module-bitbucket-cloud/src/{service/BitbucketCloudEntityProviderCatalogModule.test.ts => module/catalogModuleBitbucketCloudEntityProvider.test.ts} (90%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{service/BitbucketCloudEntityProviderCatalogModule.ts => module/catalogModuleBitbucketCloudEntityProvider.ts} (93%) create mode 100644 plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProvider.test.ts (99%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProvider.ts (99%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProviderConfig.test.ts (100%) rename plugins/catalog-backend-module-bitbucket-cloud/src/{ => providers}/BitbucketCloudEntityProviderConfig.ts (100%) rename plugins/catalog-backend-module-bitbucket-server/src/{service/BitbucketServerEntityProviderCatalogModule.test.ts => module/catalogModuleBitbucketServerEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-bitbucket-server/src/{service/BitbucketServerEntityProviderCatalogModule.ts => module/catalogModuleBitbucketServerEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-bitbucket-server/src/module/index.ts rename plugins/catalog-backend-module-gerrit/src/{service/GerritEntityProviderCatalogModule.test.ts => module/catalogModuleGerritEntityProvider.test.ts} (93%) rename plugins/catalog-backend-module-gerrit/src/{service/GerritEntityProviderCatalogModule.ts => module/catalogModuleGerritEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-gerrit/src/module/index.ts rename plugins/catalog-backend-module-github/src/{service/GithubEntityProviderCatalogModule.test.ts => module/catalogModuleGithubEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-github/src/{service/GithubEntityProviderCatalogModule.ts => module/catalogModuleGithubEntityProvider.ts} (96%) create mode 100644 plugins/catalog-backend-module-github/src/module/index.ts rename plugins/catalog-backend-module-gitlab/src/{service/GitlabDiscoveryEntityProviderCatalogModule.test.ts => module/catalogModuleGitlabDiscoveryEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-gitlab/src/{service/GitlabDiscoveryEntityProviderCatalogModule.ts => module/catalogModuleGitlabDiscoveryEntityProvider.ts} (96%) rename plugins/catalog-backend-module-incremental-ingestion/src/module/{incrementalIngestionEntityProviderCatalogModule.test.ts => catalogModuleIncrementalIngestionEntityProvider.test.ts} (91%) rename plugins/catalog-backend-module-incremental-ingestion/src/module/{incrementalIngestionEntityProviderCatalogModule.ts => catalogModuleIncrementalIngestionEntityProvider.ts} (97%) rename plugins/catalog-backend-module-msgraph/src/{service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts => module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts} (92%) rename plugins/catalog-backend-module-msgraph/src/{service/MicrosoftGraphOrgEntityProviderCatalogModule.ts => module/catalogModuleMicrosoftGraphOrgEntityProvider.ts} (91%) create mode 100644 plugins/catalog-backend-module-msgraph/src/module/index.ts create mode 100644 plugins/catalog-backend-module-puppetdb/CHANGELOG.md create mode 100644 plugins/catalog-backend-module-puppetdb/alpha-api-report.md rename plugins/{catalog-backend/src/util/index.ts => catalog-backend-module-puppetdb/src/alpha.ts} (84%) create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts create mode 100644 plugins/catalog-backend-module-puppetdb/src/module/index.ts create mode 100644 plugins/catalog-backend/src/deprecated.ts create mode 100644 plugins/catalog-node/src/conversion.ts rename plugins/events-backend-module-aws-sqs/src/service/{AwsSqsConsumingEventPublisherEventsModule.test.ts => eventsModuleAwsSqsConsumingEventPublisher.test.ts} (92%) rename plugins/events-backend-module-aws-sqs/src/service/{AwsSqsConsumingEventPublisherEventsModule.ts => eventsModuleAwsSqsConsumingEventPublisher.ts} (92%) rename plugins/events-backend-module-azure/src/service/{AzureDevOpsEventRouterEventsModule.test.ts => eventsModuleAzureDevOpsEventRouter.test.ts} (88%) rename plugins/events-backend-module-azure/src/service/{AzureDevOpsEventRouterEventsModule.ts => eventsModuleAzureDevOpsEventRouter.ts} (95%) rename plugins/events-backend-module-bitbucket-cloud/src/service/{BitbucketCloudEventRouterEventsModule.test.ts => eventsModuleBitbucketCloudEventRouter.test.ts} (88%) rename plugins/events-backend-module-bitbucket-cloud/src/service/{BitbucketCloudEventRouterEventsModule.ts => eventsModuleBitbucketCloudEventRouter.ts} (95%) rename plugins/events-backend-module-gerrit/src/service/{GerritEventRouterEventsModule.test.ts => eventsModuleGerritEventRouter.test.ts} (89%) rename plugins/events-backend-module-gerrit/src/service/{GerritEventRouterEventsModule.ts => eventsModuleGerritEventRouter.ts} (95%) rename plugins/events-backend-module-github/src/service/{GithubEventRouterEventsModule.test.ts => eventsModuleGithubEventRouter.test.ts} (89%) rename plugins/events-backend-module-github/src/service/{GithubEventRouterEventsModule.ts => eventsModuleGithubEventRouter.ts} (95%) rename plugins/events-backend-module-github/src/service/{GithubWebhookEventsModule.test.ts => eventsModuleGithubWebhook.test.ts} (94%) rename plugins/events-backend-module-github/src/service/{GithubWebhookEventsModule.ts => eventsModuleGithubWebhook.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabEventRouterEventsModule.test.ts => eventsModuleGitlabEventRouter.test.ts} (89%) rename plugins/events-backend-module-gitlab/src/service/{GitlabEventRouterEventsModule.ts => eventsModuleGitlabEventRouter.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabWebhookEventsModule.test.ts => eventsModuleGitlabWebhook.test.ts} (95%) rename plugins/events-backend-module-gitlab/src/service/{GitlabWebhookEventsModule.ts => eventsModuleGitlabWebhook.ts} (95%) create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts create mode 100644 plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx diff --git a/.changeset/backend-token-authentication.md b/.changeset/backend-token-authentication.md new file mode 100644 index 0000000000..3b0f016800 --- /dev/null +++ b/.changeset/backend-token-authentication.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Make identity valid if subject of token is a backstage server-2-server auth token diff --git a/.changeset/beige-hats-cheer.md b/.changeset/beige-hats-cheer.md new file mode 100644 index 0000000000..83b70d137e --- /dev/null +++ b/.changeset/beige-hats-cheer.md @@ -0,0 +1,27 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add deprecations for symbols that were moved to `@backstage/plugin-catalog-node` a long time ago: + +- `CatalogProcessor` +- `CatalogProcessorCache` +- `CatalogProcessorEmit` +- `CatalogProcessorEntityResult` +- `CatalogProcessorErrorResult` +- `CatalogProcessorLocationResult` +- `CatalogProcessorParser` +- `CatalogProcessorRefreshKeysResult` +- `CatalogProcessorRelationResult` +- `CatalogProcessorResult` +- `DeferredEntity` +- `EntityProvider` +- `EntityProviderConnection` +- `EntityProviderMutation` +- `EntityRelationSpec` +- `processingResult` + +Also moved over and deprecated the following symbols: + +- `locationSpecToLocationEntity` +- `locationSpecToMetadataName` diff --git a/.changeset/big-gorillas-fail1.md b/.changeset/big-gorillas-fail1.md new file mode 100644 index 0000000000..18c2d621d7 --- /dev/null +++ b/.changeset/big-gorillas-fail1.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-bitbucket-cloud': patch +--- + +Renamed `bitbucketCloudEventRouterEventsModule` to `eventsModuleBitbucketCloudEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail2.md b/.changeset/big-gorillas-fail2.md new file mode 100644 index 0000000000..bc34bf9aaa --- /dev/null +++ b/.changeset/big-gorillas-fail2.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-aws-sqs': patch +--- + +Renamed `awsSqsConsumingEventPublisherEventsModule` to `eventsModuleAwsSqsConsumingEventPublisher` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail3.md b/.changeset/big-gorillas-fail3.md new file mode 100644 index 0000000000..352c1a2cff --- /dev/null +++ b/.changeset/big-gorillas-fail3.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-gerrit': patch +--- + +Renamed `gerritEventRouterEventsModule` to `eventsModuleGerritEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail4.md b/.changeset/big-gorillas-fail4.md new file mode 100644 index 0000000000..add8699f8b --- /dev/null +++ b/.changeset/big-gorillas-fail4.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-github': patch +--- + +Renamed `githubEventRouterEventsModule` to `eventsModuleGithubEventRouter` and `githubWebhookEventsModule` to `eventsModuleGithubWebhook`, to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail5.md b/.changeset/big-gorillas-fail5.md new file mode 100644 index 0000000000..549eb61f24 --- /dev/null +++ b/.changeset/big-gorillas-fail5.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-gitlab': patch +--- + +Renamed `gitlabEventRouterEventsModule` to `eventsModuleGitlabEventRouter` and `gitlabWebhookEventsModule` to `eventsModuleGitlabWebhook` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail6.md b/.changeset/big-gorillas-fail6.md new file mode 100644 index 0000000000..6622b5222e --- /dev/null +++ b/.changeset/big-gorillas-fail6.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-azure': patch +--- + +Renamed `azureDevOpsEventRouterEventsModule` to `eventsModuleAzureDevOpsEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/cold-dogs-watch.md b/.changeset/cold-dogs-watch.md new file mode 100644 index 0000000000..99b25a833e --- /dev/null +++ b/.changeset/cold-dogs-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-puppetdb': patch +--- + +Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system diff --git a/.changeset/create-app-1678209629.md b/.changeset/create-app-1678209629.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1678209629.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/curly-jobs-kneel.md b/.changeset/curly-jobs-kneel.md new file mode 100644 index 0000000000..f313beab88 --- /dev/null +++ b/.changeset/curly-jobs-kneel.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-node': patch +'@backstage/plugin-scaffolder-react': patch +--- + +Added a possibility to cancel the running task (executing of a scaffolder template) diff --git a/plugins/.changeset/dull-adults-drum.md b/.changeset/dull-adults-drum.md similarity index 100% rename from plugins/.changeset/dull-adults-drum.md rename to .changeset/dull-adults-drum.md diff --git a/.changeset/gorgeous-pumas-speak.md b/.changeset/gorgeous-pumas-speak.md new file mode 100644 index 0000000000..60f40c6748 --- /dev/null +++ b/.changeset/gorgeous-pumas-speak.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +fix entity switch rendering when there is no default case diff --git a/.changeset/healthy-buses-live-1.md b/.changeset/healthy-buses-live-1.md new file mode 100644 index 0000000000..7e433372df --- /dev/null +++ b/.changeset/healthy-buses-live-1.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +--- + +Renamed `incrementalIngestionEntityProviderCatalogModule` to `catalogModuleIncrementalIngestionEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-2.md b/.changeset/healthy-buses-live-2.md new file mode 100644 index 0000000000..ab577276d8 --- /dev/null +++ b/.changeset/healthy-buses-live-2.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +--- + +Renamed `bitbucketServerEntityProviderCatalogModule` to `catalogModuleBitbucketServerEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-3.md b/.changeset/healthy-buses-live-3.md new file mode 100644 index 0000000000..493236ea73 --- /dev/null +++ b/.changeset/healthy-buses-live-3.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +--- + +Renamed `bitbucketCloudEntityProviderCatalogModule` to `catalogModuleBitbucketCloudEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-4.md b/.changeset/healthy-buses-live-4.md new file mode 100644 index 0000000000..fdc223a7f4 --- /dev/null +++ b/.changeset/healthy-buses-live-4.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Renamed `microsoftGraphOrgEntityProviderCatalogModule` to `catalogModuleMicrosoftGraphOrgEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-5.md b/.changeset/healthy-buses-live-5.md new file mode 100644 index 0000000000..f540751696 --- /dev/null +++ b/.changeset/healthy-buses-live-5.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gerrit': patch +--- + +Renamed `gerritEntityProviderCatalogModule` to `catalogModuleGerritEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-6.md b/.changeset/healthy-buses-live-6.md new file mode 100644 index 0000000000..f293e56eae --- /dev/null +++ b/.changeset/healthy-buses-live-6.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Renamed `githubEntityProviderCatalogModule` to `catalogModuleGithubEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-7.md b/.changeset/healthy-buses-live-7.md new file mode 100644 index 0000000000..7e7219bf01 --- /dev/null +++ b/.changeset/healthy-buses-live-7.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-8.md b/.changeset/healthy-buses-live-8.md new file mode 100644 index 0000000000..9137a3b31a --- /dev/null +++ b/.changeset/healthy-buses-live-8.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': patch +--- + +Renamed `azureDevOpsEntityProviderCatalogModule` to `catalogModuleAzureDevOpsEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-9.md b/.changeset/healthy-buses-live-9.md new file mode 100644 index 0000000000..dbcba51470 --- /dev/null +++ b/.changeset/healthy-buses-live-9.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Renamed `awsS3EntityProviderCatalogModule` to `catalogModuleAwsS3EntityProviders` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/honest-clouds-shout.md b/.changeset/honest-clouds-shout.md new file mode 100644 index 0000000000..0a7249d9ad --- /dev/null +++ b/.changeset/honest-clouds-shout.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +catalog write action should allow any shape of object diff --git a/.changeset/light-bees-end.md b/.changeset/light-bees-end.md new file mode 100644 index 0000000000..9fbbc44da0 --- /dev/null +++ b/.changeset/light-bees-end.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes': patch +--- + +GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters diff --git a/.changeset/moody-apes-know.md b/.changeset/moody-apes-know.md new file mode 100644 index 0000000000..bd48cb108e --- /dev/null +++ b/.changeset/moody-apes-know.md @@ -0,0 +1,16 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-bitbucket': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` diff --git a/.changeset/nine-bikes-applaud.md b/.changeset/nine-bikes-applaud.md new file mode 100644 index 0000000000..77a1c0e4be --- /dev/null +++ b/.changeset/nine-bikes-applaud.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +--- + +allow container runner to be undefined in cookiecutter plugin diff --git a/.changeset/pre.json b/.changeset/pre.json index 2f69a85050..fc7fbffc9a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "next", "initialVersions": { "example-app": "0.2.80", @@ -210,44 +210,63 @@ "@backstage/plugin-vault-backend": "0.2.8", "@backstage/plugin-xcmetrics": "0.2.35", "@backstage/plugin-octopus-deploy": "0.0.0", - "@backstage/plugin-stackstorm": "0.0.0" + "@backstage/plugin-stackstorm": "0.0.0", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.0.1" }, "changesets": [ "afraid-trees-stare", + "backend-token-authentication", "breezy-bees-care", "bright-kids-raise", + "clean-lemons-jump", "clean-planes-join", + "clever-dogs-cheat", "cool-clocks-prove", + "cool-feet-speak", "create-app-1676993958", + "create-app-1678209629", "curvy-pets-hang", "eight-radios-bake", + "eighty-chairs-roll", "eighty-geese-return", + "empty-books-occur", "famous-sloths-tie", + "fifty-beds-dress", "flat-kids-occur", "flat-peaches-act", "forty-snails-clap", "four-lizards-grin", + "fresh-hairs-switch", "fuzzy-trains-search", + "gentle-bears-love", "gentle-pears-clean", "great-trains-jam", "grumpy-bikes-begin", "happy-boxes-arrive", + "honest-clouds-shout", "honest-nails-bake", "khaki-poems-run", + "light-bees-end", "light-sheep-trade", "long-nails-pump", "long-wolves-drive", + "lovely-tigers-look", + "mean-toys-itch", "metal-suns-rhyme", "mighty-games-turn", "mighty-years-own", "new-jobs-deny", "nice-planets-wave", + "nine-bikes-applaud", "ninety-turtles-wait", "odd-fireants-bathe", "odd-oranges-tease", "odd-waves-rescue", "old-foxes-shave", + "olive-berries-poke", + "orange-experts-hug", "perfect-mayflies-greet", + "pink-dolls-unite", "polite-chicken-do", "polite-falcons-jump", "polite-wombats-smash", @@ -267,8 +286,13 @@ "renovate-fb85ae7", "rich-clocks-approve", "rich-wombats-rescue", + "rotten-cats-matter", + "rotten-panthers-share", + "selfish-hats-wait", "short-mayflies-fix", + "silent-dryers-end", "silly-suits-run", + "silver-bikes-breathe", "silver-lies-rest", "six-melons-rhyme", "slimy-lobsters-kneel", @@ -282,6 +306,7 @@ "tall-hats-talk", "ten-tigers-marry", "thin-candles-wait", + "tiny-llamas-jump", "tricky-jars-film", "twelve-cars-push", "twenty-jeans-speak", @@ -292,9 +317,11 @@ "wicked-lions-repeat", "wicked-spoons-call", "wild-ads-pull", + "wild-bulldogs-suffer", "witty-geckos-design", "yellow-bananas-yawn", "young-schools-double", - "young-scissors-cough" + "young-scissors-cough", + "young-walls-prove" ] } diff --git a/.changeset/proud-jokes-pull.md b/.changeset/proud-jokes-pull.md new file mode 100644 index 0000000000..7d7790889a --- /dev/null +++ b/.changeset/proud-jokes-pull.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': patch +--- + +Added `locationSpecToMetadataName` and `locationSpecToLocationEntity` as their new home, moved over from the backend package where they now are marked as deprecated. diff --git a/.changeset/rotten-cats-matter.md b/.changeset/rotten-cats-matter.md new file mode 100644 index 0000000000..2515db9991 --- /dev/null +++ b/.changeset/rotten-cats-matter.md @@ -0,0 +1,19 @@ +--- +'@backstage/core-app-api': minor +--- + +`OAuth2` now gets ID tokens from a session with the `openid` scope explicitly +requested. + +This should not be considered a breaking change, because spec-compliant OIDC +providers will already be returning ID tokens if and only if the `openid` scope +is granted. + +This change makes the dependence explicit, and removes the burden on +OAuth2-based providers which require an ID token (e.g. this is done by various +default [auth +handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add +`openid` to their default scopes. _That_ could carry another indirect benefit: +by removing `openid` from the default scopes for a provider, grants for +resource-specific access tokens can avoid requesting excess ID token-related +scopes. diff --git a/.changeset/silver-bikes-breathe.md b/.changeset/silver-bikes-breathe.md index 63dabf7b2e..0288580bba 100644 --- a/.changeset/silver-bikes-breathe.md +++ b/.changeset/silver-bikes-breathe.md @@ -2,4 +2,23 @@ '@backstage/plugin-catalog': minor --- -allow entity switch to render all cases that match the condition +Allow `EntitySwitch` to render all cases that match the condition. + +This change introduces a new parameter for the `EntitySwitch` component +`renderMultipleMatches`. In case the parameter value is `all`, the `EntitySwitch` +will render all `EntitySwitch.Case` that contain `if` parameter, and it +evaluates to true. In case none of the cases match, the default case will be +rendered, if any. + +This means for example in the CI/CD page you can now do the following: + +```tsx + + Jenkins + CodeBuild + No CI/CD + +``` + +This allows the component to have multiple CI/CD systems and all of those are +rendered on the same page. diff --git a/.changeset/stupid-games-brake.md b/.changeset/stupid-games-brake.md new file mode 100644 index 0000000000..0a50a32ffa --- /dev/null +++ b/.changeset/stupid-games-brake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend': patch +--- + +Updated README instructions diff --git a/.changeset/twenty-insects-live.md b/.changeset/twenty-insects-live.md new file mode 100644 index 0000000000..d3f8cdfc25 --- /dev/null +++ b/.changeset/twenty-insects-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-proxy-backend': patch +--- + +Ensure that `@backstage/plugin-proxy-backend` logs the requests that it proxies when log level is set to `debug`. diff --git a/.changeset/witty-squids-fetch.md b/.changeset/witty-squids-fetch.md new file mode 100644 index 0000000000..3e13421038 --- /dev/null +++ b/.changeset/witty-squids-fetch.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Added to the template `packages/app/.eslintignore` file to packages to ignore the contents of `packages/app/public`. diff --git a/.changeset/young-walls-prove.md b/.changeset/young-walls-prove.md new file mode 100644 index 0000000000..33fafa1548 --- /dev/null +++ b/.changeset/young-walls-prove.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-plugin-api': minor +--- + +The GitLab auth provider can now be used to get OpenID tokens. diff --git a/ADOPTERS.md b/ADOPTERS.md index 70b2992cf9..26f4331b70 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -233,4 +233,5 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Gumtree](https://www.gumtree.com.au) | [Kumar Gaurav](https://www.linkedin.com/in/kumargaurav517) | We are starting to use it as a single place to find all component information in a distributed architecture. | | [N26](https://n26.com) | [Alexei Timofti](https://www.linkedin.com/in/alexeitimofti) | We use Backstage for our service catalog and are actively looking into adopting other plugins like TechDocs, TechInsights and Software Templates. | | [The LEGO Group](https://www.lego.com) | [Waqas Ali](https://www.linkedin.com/in/waqasali47) | We are building our internal develper portal on top of Backstage. | +| [CORS.gmbh](https://www.cors.gmbh) | [@dpfaffenbauer](https://github.com/dpfaffenbauer) | Developer Portal for our Projects we develop for our Customers and Hosting them On Kubernetes. | diff --git a/docs/auth/gitlab/provider.md b/docs/auth/gitlab/provider.md index 5041e161c5..dc41617812 100644 --- a/docs/auth/gitlab/provider.md +++ b/docs/auth/gitlab/provider.md @@ -18,7 +18,11 @@ Settings for local development: - Name: Backstage (or your custom app name) - Redirect URI: `http://localhost:7007/api/auth/gitlab/handler/frame` -- Scopes: `read_api` and `read_user` +- Scopes: `read_user` for sign-in. If you also need ID tokens (e.g. if you are + using the Kubernetes plugin and have clusters with `authProvider: oidc` and + [`oidcTokenProvider: +gitlab`](https://backstage.io/docs/features/kubernetes/configuration/#clustersoidctokenprovider-optional)), + add the `openid` scope. ## Configuration diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index 837574aa9e..458637f316 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -160,8 +160,9 @@ auth: audience: ${AUTH_OKTA_AUDIENCE} ``` -The following values are supported out-of-the-box by the frontend: `google`, `microsoft`, -`okta`, `onelogin`. +The following values are supported out-of-the-box by the frontend: `gitlab` (the +application whose `clientId` is used by the auth provider should be granted the +`openid` scope), `google`, `microsoft`, `okta`, `onelogin`. Take note that `oidcTokenProvider` is just the issuer for the token, you can use any of these with an OIDC enabled cluster, like using `microsoft` as the issuer for a EKS diff --git a/docs/features/software-templates/index.md b/docs/features/software-templates/index.md index 5911e192b1..fbccf8848c 100644 --- a/docs/features/software-templates/index.md +++ b/docs/features/software-templates/index.md @@ -58,6 +58,10 @@ It shouldn't take too long, and you'll have a success screen! If it fails, you'll be able to click on each section to get the log from the step that failed which can be helpful in debugging. +You can also cancel the running process. Once you clicked on button "Cancel", the abort signal +will be sent to a task and all next steps won't be executed. The current step will be cancelled +only if it supports it. + ![Templating failed](../../assets/software-templates/failed.png) ## View Component in Catalog diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md index 3e89e89582..7a841dfd0e 100644 --- a/docs/features/software-templates/writing-custom-actions.md +++ b/docs/features/software-templates/writing-custom-actions.md @@ -71,7 +71,7 @@ You can also choose to define your custom action using JSON schema instead of `z ```ts title="With JSON Schema" import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; -import fs from 'fs-extra'; +import { writeFile } from 'fs'; export const createNewFileAction = () => { return createTemplateAction<{ contents: string; filename: string }>({ @@ -95,9 +95,12 @@ export const createNewFileAction = () => { }, }, async handler(ctx) { - await fs.outputFile( + const { signal } = ctx; + await writeFile( `${ctx.workspacePath}/${ctx.input.filename}`, ctx.input.contents, + { signal }, + _ => {}, ); }, }); diff --git a/docs/overview/adopting.md b/docs/overview/adopting.md index 0765d4a452..15450c995b 100644 --- a/docs/overview/adopting.md +++ b/docs/overview/adopting.md @@ -153,7 +153,7 @@ Backstage as _the_ platform: percentage of engineers is below 50%. Most engineers actually use Backstage on a daily basis. -Again, any feedback is appreciated. Please use the Edit button at the top of the +Again, any feedback is appreciated. Please use the Edit button at the bottom of the page to make a suggestion. _**Note!** It might be tempting to try to optimize Backstage usage and diff --git a/docs/releases/v1.12.0-next.2-changelog.md b/docs/releases/v1.12.0-next.2-changelog.md new file mode 100644 index 0000000000..7a64ec5f84 --- /dev/null +++ b/docs/releases/v1.12.0-next.2-changelog.md @@ -0,0 +1,1833 @@ +# Release v1.12.0-next.2 + +## @backstage/backend-tasks@0.5.0-next.2 + +### Minor Changes + +- 1578276708a: add functionality to get descriptions from the scheduler for triggering + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/core-app-api@1.6.0-next.2 + +### Minor Changes + +- 456eaa8cf83: `OAuth2` now gets ID tokens from a session with the `openid` scope explicitly + requested. + + This should not be considered a breaking change, because spec-compliant OIDC + providers will already be returning ID tokens if and only if the `openid` scope + is granted. + + This change makes the dependence explicit, and removes the burden on + OAuth2-based providers which require an ID token (e.g. this is done by various + default [auth + handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add + `openid` to their default scopes. _That_ could carry another indirect benefit: + by removing `openid` from the default scopes for a provider, grants for + resource-specific access tokens can avoid requesting excess ID token-related + scopes. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/core-plugin-api@1.5.0-next.2 + +### Minor Changes + +- ab750ddc4f2: The GitLab auth provider can now be used to get OpenID tokens. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-catalog@1.9.0-next.2 + +### Minor Changes + +- 23cc40039c0: allow entity switch to render all cases that match the condition + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.0-next.0 + +### Minor Changes + +- a1efcf9a658: Initial version of the plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-scaffolder@1.12.0-next.2 + +### Minor Changes + +- 0d61fcca9c3: Update `EntityPicker` to use the fully qualified entity ref instead of the humanized version. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- 0aae4596296: Fix the scaffolder validator for arrays when the item is a field in the object +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-scaffolder-react@1.2.0-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/app-defaults@1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + +## @backstage/backend-app-api@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/backend-common@0.18.3-next.2 + +### Patch Changes + +- f75097868a7: Adds config option `backend.database.role` to set ownership for newly created schemas and tables in Postgres + + The example config below connects to the database as user `v-backstage-123` but sets the ownership of + the create schemas and tables to `backstage` + + ```yaml + backend: + database: + client: pg + pluginDivisionMode: schema + role: backstage + connection: + user: v-backstage-123 + ... + ``` + +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 + +- Updated dependencies + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + - @backstage/integration-aws-node@0.1.2-next.0 + +## @backstage/backend-defaults@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + +## @backstage/backend-plugin-api@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/backend-test-utils@0.1.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/core-components@0.12.5-next.2 + +### Patch Changes + +- 8bbf95b5507: Button labels in the sidebar (previously displayed in uppercase) will be displayed in the case that is provided without any transformations. + For example, a sidebar button with the label "Search" will appear as Search, "search" will appear as search, "SEARCH" will appear as SEARCH etc. + This can potentially affect any overriding styles previously applied to change the appearance of Button labels in the Sidebar. +- fa004f66871: Use media queries to change layout instead of `isMobile` prop in `BackstagePage` component +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/create-app@0.4.38-next.2 + +### Patch Changes + +- Bumped create-app version. + +## @backstage/dev-utils@1.0.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + +## @backstage/integration-react@1.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @techdocs/cli@1.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/test-utils@1.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-adr@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + +## @backstage/plugin-adr-backend@0.3.1-next.2 + +### Patch Changes + +- 2a73ded3861: Support MADR v3 format +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-airbrake@0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/dev-utils@1.0.13-next.2 + - @backstage/test-utils@1.2.6-next.2 + +## @backstage/plugin-airbrake-backend@0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-allure@0.1.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-analytics-module-ga@0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-apache-airflow@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-api-docs@0.9.1-next.2 + +### Patch Changes + +- 8bc7dcec820: Fix dark theme Swagger's clear button font color. +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-apollo-explorer@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-app-backend@0.3.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-auth-backend@0.18.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-auth-node@0.2.12-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-azure-devops@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-azure-devops-backend@0.3.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-azure-sites@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-azure-sites-backend@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-badges@0.2.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-badges-backend@0.1.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-bazaar@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/cli@0.22.4-next.1 + +## @backstage/plugin-bazaar-backend@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-bitrise@0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-catalog-backend@1.8.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.1.17-next.2 + +### Patch Changes + +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.2.6-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.14-next.2 + +### Patch Changes + +- be129f8f3cd: filter gitlab groups by prefix +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.2-next.2 + +### Patch Changes + +- 26eef93c547: Fixed msgraph catalog backend to use user.select option when fetching user from AzureAD +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-graph@0.2.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-catalog-import@0.9.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-catalog-node@1.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + +## @backstage/plugin-catalog-react@1.4.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-cicd-statistics@0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-cicd-statistics@0.1.18-next.2 + +## @backstage/plugin-circleci@0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-cloudbuild@0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-code-climate@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-code-coverage@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-code-coverage-backend@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-codescene@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-config-schema@0.1.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-cost-insights@0.12.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-dynatrace@3.0.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-entity-feedback@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-entity-feedback-backend@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-entity-validation@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-events-backend@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-events-backend-module-azure@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + +## @backstage/plugin-events-backend-module-github@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-events-backend-module-gitlab@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-events-backend-test-utils@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.4-next.2 + +## @backstage/plugin-events-node@0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + +## @backstage/plugin-explore@0.4.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-explore-react@0.0.27-next.2 + +## @backstage/plugin-explore-backend@0.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-explore-react@0.0.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-firehydrant@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-fossa@0.2.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-gcalendar@0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-gcp-projects@0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-git-release-manager@0.3.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-github-actions@0.5.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-github-deployments@0.1.47-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-github-issues@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-github-pull-requests-board@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-gitops-profiles@0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-gocd@0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-graphiql@0.2.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-graphql-backend@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/plugin-catalog-graphql@0.3.19-next.1 + +## @backstage/plugin-graphql-voyager@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-home@0.4.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-ilert@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-jenkins@0.7.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-jenkins-backend@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-kafka@0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-kafka-backend@0.2.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-kubernetes@0.7.9-next.2 + +### Patch Changes + +- 8adeb19b37d: GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-kubernetes-backend@0.9.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-lighthouse@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-lighthouse-backend@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-linguist@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-linguist-backend@0.2.0-next.2 + +### Patch Changes + +- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-microsoft-calendar@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-newrelic@0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-newrelic-dashboard@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-octopus-deploy@0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-org@0.6.6-next.2 + +### Patch Changes + +- a06fcac4040: Add styling to the `MembersListCard` and `ComponentsGrid` to handle overflow text. +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-org-react@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-pagerduty@0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-periskop@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-periskop-backend@0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-permission-backend@0.5.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-permission-node@0.7.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-permission-react@0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-playlist@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + +## @backstage/plugin-playlist-backend@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-proxy-backend@0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-rollbar@0.4.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-rollbar-backend@0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-scaffolder-backend@1.12.0-next.2 + +### Patch Changes + +- 860de10fa67: Make identity valid if subject of token is a backstage server-2-server auth token +- 65454876fb2: Minor API report tweaks +- 9968f455921: catalog write action should allow any shape of object +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.18-next.2 + +### Patch Changes + +- 62414770ead: allow container runner to be undefined in cookiecutter plugin +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-scaffolder-node@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + +## @backstage/plugin-scaffolder-react@1.2.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- d9893263ba9: scaffolder/next: Fix for steps without properties +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-search@1.1.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-search-backend@1.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-search-backend-module-pg@0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-search-backend-node@1.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-search-react@1.5.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 553f3c95011: Correctly disable next button in `SearchPagination` on last page +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-sentry@0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-shortcuts@0.3.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-sonarqube@0.6.5-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-sonarqube-react@0.1.4-next.2 + +## @backstage/plugin-sonarqube-backend@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-sonarqube-react@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-splunk-on-call@0.4.5-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-stack-overflow@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-home@0.4.32-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-stack-overflow-backend@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-stackstorm@0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-tech-insights@0.3.8-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-tech-insights-backend@0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-tech-insights-node@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-tech-radar@0.6.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-techdocs@1.6.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + +## @backstage/plugin-techdocs-backend@1.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-techdocs-node@1.6.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + - @backstage/integration-aws-node@0.1.2-next.0 + +## @backstage/plugin-techdocs-react@1.1.4-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-todo@0.2.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-todo-backend@0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## @backstage/plugin-user-settings@0.7.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-user-settings-backend@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + +## @backstage/plugin-vault@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @backstage/plugin-vault-backend@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + +## @backstage/plugin-xcmetrics@0.2.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## example-app@0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-scaffolder-react@1.2.0-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-tech-insights@0.3.8-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/plugin-scaffolder@1.12.0-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/plugin-explore@0.4.1-next.2 + - @backstage/plugin-search@1.1.1-next.2 + - @backstage/plugin-kubernetes@0.7.9-next.2 + - @backstage/plugin-api-docs@0.9.1-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-org@0.6.6-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/cli@0.22.4-next.1 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/plugin-airbrake@0.3.16-next.2 + - @backstage/plugin-apache-airflow@0.2.9-next.2 + - @backstage/plugin-azure-devops@0.2.7-next.2 + - @backstage/plugin-azure-sites@0.1.5-next.2 + - @backstage/plugin-badges@0.2.40-next.2 + - @backstage/plugin-catalog-graph@0.2.28-next.2 + - @backstage/plugin-catalog-import@0.9.6-next.2 + - @backstage/plugin-circleci@0.3.16-next.2 + - @backstage/plugin-cloudbuild@0.3.16-next.2 + - @backstage/plugin-code-coverage@0.2.9-next.2 + - @backstage/plugin-cost-insights@0.12.5-next.2 + - @backstage/plugin-dynatrace@3.0.0-next.2 + - @backstage/plugin-entity-feedback@0.1.1-next.2 + - @backstage/plugin-gcalendar@0.3.12-next.2 + - @backstage/plugin-gcp-projects@0.3.35-next.2 + - @backstage/plugin-github-actions@0.5.16-next.2 + - @backstage/plugin-gocd@0.1.22-next.2 + - @backstage/plugin-graphiql@0.2.48-next.2 + - @backstage/plugin-home@0.4.32-next.2 + - @backstage/plugin-jenkins@0.7.15-next.2 + - @backstage/plugin-kafka@0.3.16-next.2 + - @backstage/plugin-lighthouse@0.4.1-next.2 + - @backstage/plugin-linguist@0.1.1-next.2 + - @backstage/plugin-microsoft-calendar@0.1.1-next.2 + - @backstage/plugin-newrelic@0.3.34-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.9-next.2 + - @backstage/plugin-pagerduty@0.5.9-next.2 + - @backstage/plugin-playlist@0.1.7-next.2 + - @backstage/plugin-rollbar@0.4.16-next.2 + - @backstage/plugin-sentry@0.5.1-next.2 + - @backstage/plugin-shortcuts@0.3.8-next.2 + - @backstage/plugin-stack-overflow@0.1.12-next.2 + - @backstage/plugin-stackstorm@0.1.0-next.2 + - @backstage/plugin-tech-radar@0.6.2-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.11-next.2 + - @backstage/plugin-todo@0.2.18-next.2 + - @backstage/plugin-user-settings@0.7.1-next.2 + - @internal/plugin-catalog-customized@0.0.8-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + +## example-backend@0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.2 + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/plugin-adr-backend@0.3.1-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-linguist-backend@0.2.0-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.2 + - example-app@0.2.81-next.2 + - @backstage/plugin-techdocs-backend@1.5.4-next.2 + - @backstage/plugin-auth-backend@0.18.1-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.1-next.2 + - @backstage/plugin-jenkins-backend@0.1.33-next.2 + - @backstage/plugin-kubernetes-backend@0.9.4-next.2 + - @backstage/plugin-permission-backend@0.5.18-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-playlist-backend@0.2.6-next.2 + - @backstage/plugin-search-backend@1.2.4-next.2 + - @backstage/plugin-lighthouse-backend@0.1.1-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/plugin-tech-insights-backend@0.5.9-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/plugin-app-backend@0.3.43-next.2 + - @backstage/plugin-azure-devops-backend@0.3.22-next.2 + - @backstage/plugin-azure-sites-backend@0.1.5-next.2 + - @backstage/plugin-badges-backend@0.1.37-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-code-coverage-backend@0.2.9-next.2 + - @backstage/plugin-events-backend@0.2.4-next.2 + - @backstage/plugin-explore-backend@0.0.5-next.2 + - @backstage/plugin-graphql-backend@0.1.33-next.2 + - @backstage/plugin-kafka-backend@0.2.36-next.2 + - @backstage/plugin-proxy-backend@0.2.37-next.2 + - @backstage/plugin-rollbar-backend@0.1.40-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.4-next.2 + - @backstage/plugin-todo-backend@0.1.40-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + +## example-backend-next@0.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-defaults@0.1.8-next.2 + - @backstage/plugin-app-backend@0.3.43-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-todo-backend@0.1.40-next.2 + +## e2e-test@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.38-next.2 + +## techdocs-cli-embedded-app@0.2.80-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/cli@0.22.4-next.1 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + - @backstage/config@1.0.7-next.0 + +## @internal/plugin-catalog-customized@0.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + +## @internal/plugin-todo-list@1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + +## @internal/plugin-todo-list-backend@1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 diff --git a/microsite-next/src/components/simpleCard/simpleCard.tsx b/microsite-next/src/components/simpleCard/simpleCard.tsx new file mode 100644 index 0000000000..77be566f18 --- /dev/null +++ b/microsite-next/src/components/simpleCard/simpleCard.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +export interface ICardData { + header: React.ReactNode; + body: React.ReactNode; + footer: React.ReactNode; +} + +export const SimpleCard = ({ header, body, footer }: ICardData) => ( +
+
{header}
+ +
{body}
+ +
{footer}
+
+); diff --git a/microsite-next/src/pages/on-demand/_onDemandCard.tsx b/microsite-next/src/pages/on-demand/_onDemandCard.tsx new file mode 100644 index 0000000000..e203c80f9a --- /dev/null +++ b/microsite-next/src/pages/on-demand/_onDemandCard.tsx @@ -0,0 +1,66 @@ +import Link from '@docusaurus/Link'; +import { SimpleCard } from '@site/src/components/simpleCard/simpleCard'; +import React from 'react'; + +export interface IOnDemandData { + title: string; + category: string; + description: string; + date: string; + youtubeUrl: string; + youtubeImgUrl: string; + rsvpUrl: string; + eventUrl: string; +} + +export const OnDemandCard = ({ + title, + category, + description, + date, + youtubeUrl, + youtubeImgUrl, + rsvpUrl, + eventUrl, +}: IOnDemandData) => ( + +

{title}

+ +

on {date}

+ + {category} + + {title} + + } + body={

{description}

} + footer={ + category.toLowerCase() === 'upcoming' ? ( + <> + + Event page + + + + Remind me + + + ) : ( + + Watch on YouTube + + ) + } + /> +); diff --git a/microsite-next/src/pages/on-demand/index.tsx b/microsite-next/src/pages/on-demand/index.tsx new file mode 100644 index 0000000000..7262005f70 --- /dev/null +++ b/microsite-next/src/pages/on-demand/index.tsx @@ -0,0 +1,78 @@ +import Layout from '@theme/Layout'; +import clsx from 'clsx'; +import React from 'react'; + +import { IOnDemandData, OnDemandCard } from './_onDemandCard'; +import pluginsStyles from './onDemand.module.scss'; +import { truncateDescription } from '@site/src/util/truncateDescription'; +import Link from '@docusaurus/Link'; + +//#region Plugin data import +const onDemandContext = require.context( + '../../../../microsite/data/on-demand', + false, + /\.ya?ml/, +); + +const onDemandData = onDemandContext.keys().reduce( + (acum, id) => { + const pluginData: IOnDemandData = onDemandContext(id).default; + + acum[ + pluginData.category === 'Upcoming' ? 'upcomingEvents' : 'onDemandEvents' + ].push(truncateDescription(pluginData)); + + return acum; + }, + { + upcomingEvents: [] as IOnDemandData[], + onDemandEvents: [] as IOnDemandData[], + }, +); +//#endregion + +const Plugins = () => ( + +
+
+
+

Community sessions

+ +

+ Upcoming events and recorded sessions about updates, demos and + discussions. +

+
+ + + Add an event or recording + +
+ +
+ +

Upcoming live events

+ +
+ {onDemandData.upcomingEvents.map(eventData => ( + + ))} +
+ +

Community on demand

+ +
+ {onDemandData.onDemandEvents.map(eventData => ( + + ))} +
+
+
+); + +export default Plugins; diff --git a/microsite-next/src/pages/on-demand/onDemand.module.scss b/microsite-next/src/pages/on-demand/onDemand.module.scss new file mode 100644 index 0000000000..fba051ec97 --- /dev/null +++ b/microsite-next/src/pages/on-demand/onDemand.module.scss @@ -0,0 +1,44 @@ +.onDemandPage { + :global(.marketplaceBanner) { + display: flex; + align-items: center; + } + + :global(.marketplaceContent) { + flex: 1; + } + + :global(.card) { + max-width: 100%; + } + + :global(.card .card__header) { + display: grid; + row-gap: 0.25rem; + column-gap: 1rem; + justify-items: start; + + > * { + margin: 0; + } + + :global(img) { + width: 250px; + max-width: 100%; + justify-self: center; + } + } + + :global(.card .card__footer) { + gap: 1rem; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); + } + + :global(.cardsContainer) { + gap: 1rem; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + justify-items: start; + } +} diff --git a/microsite-next/src/pages/plugins/_pluginCard.tsx b/microsite-next/src/pages/plugins/_pluginCard.tsx index dec62af06f..99f27b865d 100644 --- a/microsite-next/src/pages/plugins/_pluginCard.tsx +++ b/microsite-next/src/pages/plugins/_pluginCard.tsx @@ -1,4 +1,5 @@ import Link from '@docusaurus/Link'; +import { SimpleCard } from '@site/src/components/simpleCard/simpleCard'; import React from 'react'; export interface IPluginData { @@ -23,32 +24,30 @@ export const PluginCard = ({ iconUrl, title, }: IPluginData) => ( -
-
- {title} + + {title} -

{title}

+

{title}

-

- by {author} -

+

+ by {author} +

- - {category} - -
- -
-

{description}

-
- -
+ + {category} + + + } + body={

{description}

} + footer={ Explore -
-
+ } + /> ); diff --git a/microsite-next/src/pages/plugins/index.tsx b/microsite-next/src/pages/plugins/index.tsx index f8c6f78819..0e57e01994 100644 --- a/microsite-next/src/pages/plugins/index.tsx +++ b/microsite-next/src/pages/plugins/index.tsx @@ -5,18 +5,9 @@ import React from 'react'; import { IPluginData, PluginCard } from './_pluginCard'; import pluginsStyles from './plugins.module.scss'; +import { truncateDescription } from '@site/src/util/truncateDescription'; //#region Plugin data import -const maxDescLength = 160; - -const truncatePluginDescription = (pluginData: IPluginData) => - pluginData.description.length > maxDescLength - ? { - ...pluginData, - description: pluginData.description.slice(0, maxDescLength) + '...', - } - : pluginData; - const pluginsContext = require.context( '../../../../microsite/data/plugins', false, @@ -29,7 +20,7 @@ const plugins = pluginsContext.keys().reduce( acum[ pluginData.category === 'Core Feature' ? 'corePlugins' : 'otherPlugins' - ].push(truncatePluginDescription(pluginData)); + ].push(truncateDescription(pluginData)); return acum; }, diff --git a/microsite-next/src/util/truncateDescription.tsx b/microsite-next/src/util/truncateDescription.tsx new file mode 100644 index 0000000000..dc661cbd49 --- /dev/null +++ b/microsite-next/src/util/truncateDescription.tsx @@ -0,0 +1,11 @@ +export const maxDescLength = 160; + +export const truncateDescription = ( + itemData: T, +) => + itemData.description.length > maxDescLength + ? { + ...itemData, + description: itemData.description.slice(0, maxDescLength) + '...', + } + : itemData; diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js index 237161b98a..6e2e1c09ad 100644 --- a/microsite/pages/en/plugins.js +++ b/microsite/pages/en/plugins.js @@ -24,7 +24,7 @@ const truncate = text => const newForDays = 100; const addPluginDocsLink = '/docs/plugins/add-to-marketplace'; -const defaultIconUrl = 'img/logo-gradient-on-dark.svg'; +const defaultIconUrl = '/img/logo-gradient-on-dark.svg'; const Plugins = () => (
diff --git a/package.json b/package.json index 1bdaa670c8..43a146e0a1 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.12.0-next.1", + "version": "1.12.0-next.2", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 648fad21b9..0b2b813d14 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/app-defaults +## 1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + ## 1.2.1-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 76af117a84..873a2fa28f 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.2.1-next.1", + "version": "1.2.1-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 301c3684fc..ac21cbad07 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,69 @@ # example-app +## 0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-scaffolder-react@1.2.0-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-tech-insights@0.3.8-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/plugin-scaffolder@1.12.0-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/plugin-explore@0.4.1-next.2 + - @backstage/plugin-search@1.1.1-next.2 + - @backstage/plugin-kubernetes@0.7.9-next.2 + - @backstage/plugin-api-docs@0.9.1-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-org@0.6.6-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/cli@0.22.4-next.1 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/plugin-airbrake@0.3.16-next.2 + - @backstage/plugin-apache-airflow@0.2.9-next.2 + - @backstage/plugin-azure-devops@0.2.7-next.2 + - @backstage/plugin-azure-sites@0.1.5-next.2 + - @backstage/plugin-badges@0.2.40-next.2 + - @backstage/plugin-catalog-graph@0.2.28-next.2 + - @backstage/plugin-catalog-import@0.9.6-next.2 + - @backstage/plugin-circleci@0.3.16-next.2 + - @backstage/plugin-cloudbuild@0.3.16-next.2 + - @backstage/plugin-code-coverage@0.2.9-next.2 + - @backstage/plugin-cost-insights@0.12.5-next.2 + - @backstage/plugin-dynatrace@3.0.0-next.2 + - @backstage/plugin-entity-feedback@0.1.1-next.2 + - @backstage/plugin-gcalendar@0.3.12-next.2 + - @backstage/plugin-gcp-projects@0.3.35-next.2 + - @backstage/plugin-github-actions@0.5.16-next.2 + - @backstage/plugin-gocd@0.1.22-next.2 + - @backstage/plugin-graphiql@0.2.48-next.2 + - @backstage/plugin-home@0.4.32-next.2 + - @backstage/plugin-jenkins@0.7.15-next.2 + - @backstage/plugin-kafka@0.3.16-next.2 + - @backstage/plugin-lighthouse@0.4.1-next.2 + - @backstage/plugin-linguist@0.1.1-next.2 + - @backstage/plugin-microsoft-calendar@0.1.1-next.2 + - @backstage/plugin-newrelic@0.3.34-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.9-next.2 + - @backstage/plugin-pagerduty@0.5.9-next.2 + - @backstage/plugin-playlist@0.1.7-next.2 + - @backstage/plugin-rollbar@0.4.16-next.2 + - @backstage/plugin-sentry@0.5.1-next.2 + - @backstage/plugin-shortcuts@0.3.8-next.2 + - @backstage/plugin-stack-overflow@0.1.12-next.2 + - @backstage/plugin-stackstorm@0.1.0-next.2 + - @backstage/plugin-tech-radar@0.6.2-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.11-next.2 + - @backstage/plugin-todo@0.2.18-next.2 + - @backstage/plugin-user-settings@0.7.1-next.2 + - @internal/plugin-catalog-customized@0.0.8-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.81-next.1 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index b74a2c7a6e..c51f8be911 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.81-next.1", + "version": "0.2.81-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 4cbc4fa844..6ea78e983f 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-app-api +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.1-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index dd5a404118..f59e39ef09 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index a3dfe498e9..06968a3c8a 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/backend-common +## 0.18.3-next.2 + +### Patch Changes + +- f75097868a7: Adds config option `backend.database.role` to set ownership for newly created schemas and tables in Postgres + + The example config below connects to the database as user `v-backstage-123` but sets the ownership of + the create schemas and tables to `backstage` + + ```yaml + backend: + database: + client: pg + pluginDivisionMode: schema + role: backstage + connection: + user: v-backstage-123 + ... + ``` + +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- Updated dependencies + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + - @backstage/integration-aws-node@0.1.2-next.0 + ## 0.18.3-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 665b14e2dd..beee72c860 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.18.3-next.1", + "version": "0.18.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index dad12c7660..0bd4d2636f 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -265,10 +265,8 @@ describe('AwsS3UrlReader', () => { reader.readUrl( 'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml', ), - ).rejects.toThrow( - Error( - `Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`, - ), + ).rejects.toMatchInlineSnapshot( + `[Error: Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml]`, ); }); }); @@ -325,10 +323,8 @@ describe('AwsS3UrlReader', () => { reader.readUrl!( 'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml', ), - ).rejects.toThrow( - Error( - `Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`, - ), + ).rejects.toMatchInlineSnapshot( + `[Error: Could not retrieve file from S3; caused by Error: Invalid AWS S3 URL https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml]`, ); }); }); diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index bbf760d6e2..7283ae89e2 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 468bcfd4ce..2ae0074849 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index fdce1b2096..91ded2391f 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,16 @@ # example-backend-next +## 0.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-defaults@0.1.8-next.2 + - @backstage/plugin-app-backend@0.3.43-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-todo-backend@0.1.40-next.2 + ## 0.0.9-next.1 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 1540803b3b..9f7ec8306a 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.9-next.1", + "version": "0.0.9-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 8319475840..5125411eb6 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-plugin-api +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.1-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 856f2a70e2..4d97fdcd74 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index acce10665a..7eb43c4677 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-tasks +## 0.5.0-next.2 + +### Minor Changes + +- 1578276708a: add functionality to get descriptions from the scheduler for triggering + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.4-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 3f3c594cd4..fa826067c8 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.4.4-next.1", + "version": "0.5.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/src/migrations.test.ts b/packages/backend-tasks/src/migrations.test.ts index 4d37b9d39e..74503ab9a7 100644 --- a/packages/backend-tasks/src/migrations.test.ts +++ b/packages/backend-tasks/src/migrations.test.ts @@ -71,8 +71,11 @@ describe('migrations', () => { await migrateDownOnce(knex); - await expect(knex('backstage_backend_tasks__tasks')).rejects.toThrow( - /backstage_backend_tasks__tasks/, + // This looks odd - you might expect a .toThrow at the end but that + // actually is flaky for some reason specifically on sqlite when + // performing multiple runs in sequence + await expect(knex('backstage_backend_tasks__tasks')).rejects.toEqual( + expect.anything(), ); await knex.destroy(); diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index d1f383bf43..3b20fe92d5 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-test-utils +## 0.1.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-app-api@0.4.1-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.35-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index d5ace4b8f3..e797e346ff 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.35-next.1", + "version": "0.1.35-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 8430961cc5..933d9688b9 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,52 @@ # example-backend +## 0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.2 + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/plugin-adr-backend@0.3.1-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-linguist-backend@0.2.0-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.2 + - example-app@0.2.81-next.2 + - @backstage/plugin-techdocs-backend@1.5.4-next.2 + - @backstage/plugin-auth-backend@0.18.1-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.1-next.2 + - @backstage/plugin-jenkins-backend@0.1.33-next.2 + - @backstage/plugin-kubernetes-backend@0.9.4-next.2 + - @backstage/plugin-permission-backend@0.5.18-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-playlist-backend@0.2.6-next.2 + - @backstage/plugin-search-backend@1.2.4-next.2 + - @backstage/plugin-lighthouse-backend@0.1.1-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/plugin-tech-insights-backend@0.5.9-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/plugin-app-backend@0.3.43-next.2 + - @backstage/plugin-azure-devops-backend@0.3.22-next.2 + - @backstage/plugin-azure-sites-backend@0.1.5-next.2 + - @backstage/plugin-badges-backend@0.1.37-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-code-coverage-backend@0.2.9-next.2 + - @backstage/plugin-events-backend@0.2.4-next.2 + - @backstage/plugin-explore-backend@0.0.5-next.2 + - @backstage/plugin-graphql-backend@0.1.33-next.2 + - @backstage/plugin-kafka-backend@0.2.36-next.2 + - @backstage/plugin-proxy-backend@0.2.37-next.2 + - @backstage/plugin-rollbar-backend@0.1.40-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.4-next.2 + - @backstage/plugin-todo-backend@0.1.40-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.2.81-next.1 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 40b47bbc7b..107a1147f1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.81-next.1", + "version": "0.2.81-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 092a43cfe0..d91fa44f05 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/core-app-api +## 1.6.0-next.2 + +### Minor Changes + +- 456eaa8cf83: `OAuth2` now gets ID tokens from a session with the `openid` scope explicitly + requested. + + This should not be considered a breaking change, because spec-compliant OIDC + providers will already be returning ID tokens if and only if the `openid` scope + is granted. + + This change makes the dependence explicit, and removes the burden on + OAuth2-based providers which require an ID token (e.g. this is done by various + default [auth + handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add + `openid` to their default scopes. _That_ could carry another indirect benefit: + by removing `openid` from the default scopes for a provider, grants for + resource-specific access tokens can avoid requesting excess ID token-related + scopes. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.5.1-next.1 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index d17e05fdea..073a5a22b2 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.5.1-next.1", + "version": "1.6.0-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts index 0bb40c23fc..63070120ef 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.test.ts @@ -48,9 +48,8 @@ describe('OAuth2', () => { expect(await oauth2.getAccessToken('my-scope my-scope2')).toBe( 'access-token', ); - expect(getSession).toHaveBeenCalledTimes(1); - expect(getSession.mock.calls[0][0].scopes).toEqual( - new Set(['my-scope', 'my-scope2']), + expect(getSession).toHaveBeenCalledWith( + expect.objectContaining({ scopes: new Set(['my-scope', 'my-scope2']) }), ); }); @@ -65,9 +64,10 @@ describe('OAuth2', () => { }); expect(await oauth2.getAccessToken('my-scope')).toBe('access-token'); - expect(getSession).toHaveBeenCalledTimes(1); - expect(getSession.mock.calls[0][0].scopes).toEqual( - new Set(['my-prefix/my-scope']), + expect(getSession).toHaveBeenCalledWith( + expect.objectContaining({ + scopes: new Set(['my-prefix/my-scope']), + }), ); }); @@ -82,7 +82,11 @@ describe('OAuth2', () => { }); expect(await oauth2.getIdToken()).toBe('id-token'); - expect(getSession).toHaveBeenCalledTimes(1); + expect(getSession).toHaveBeenCalledWith( + expect.objectContaining({ + scopes: new Set(['openid']), + }), + ); }); it('should get optional id token', async () => { @@ -96,7 +100,11 @@ describe('OAuth2', () => { }); expect(await oauth2.getIdToken({ optional: true })).toBe('id-token'); - expect(getSession).toHaveBeenCalledTimes(1); + expect(getSession).toHaveBeenCalledWith( + expect.objectContaining({ + scopes: new Set(['openid']), + }), + ); }); it('should share popup closed errors', async () => { diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts index ad2d04cb56..6f88178415 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts @@ -153,7 +153,10 @@ export default class OAuth2 } async getIdToken(options: AuthRequestOptions = {}) { - const session = await this.sessionManager.getSession(options); + const session = await this.sessionManager.getSession({ + ...options, + scopes: new Set(['openid']), + }); return session?.providerInfo.idToken ?? ''; } diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 4dbeaea64c..0eac19716d 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/core-components +## 0.12.5-next.2 + +### Patch Changes + +- 8bbf95b5507: Button labels in the sidebar (previously displayed in uppercase) will be displayed in the case that is provided without any transformations. + For example, a sidebar button with the label "Search" will appear as Search, "search" will appear as search, "SEARCH" will appear as SEARCH etc. + This can potentially affect any overriding styles previously applied to change the appearance of Button labels in the Sidebar. +- fa004f66871: Use media queries to change layout instead of `isMobile` prop in `BackstagePage` component +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.12.5-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 47f882d2cc..9630d7d706 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.12.5-next.1", + "version": "0.12.5-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 278d8d6d02..1001c01e52 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/core-plugin-api +## 1.5.0-next.2 + +### Minor Changes + +- ab750ddc4f2: The GitLab auth provider can now be used to get OpenID tokens. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7-next.0 + ## 1.4.1-next.1 ### Patch Changes diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md index 4887f0b7f2..eabd300fc6 100644 --- a/packages/core-plugin-api/api-report.md +++ b/packages/core-plugin-api/api-report.md @@ -482,7 +482,11 @@ export const githubAuthApiRef: ApiRef< // @public export const gitlabAuthApiRef: ApiRef< - OAuthApi & ProfileInfoApi & BackstageIdentityApi & SessionApi + OAuthApi & + OpenIdConnectApi & + ProfileInfoApi & + BackstageIdentityApi & + SessionApi >; // @public diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index e765762a8a..335f0f0efd 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.4.1-next.1", + "version": "1.5.0-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/core-plugin-api/src/apis/definitions/auth.ts b/packages/core-plugin-api/src/apis/definitions/auth.ts index 43597639b6..62d0d5c810 100644 --- a/packages/core-plugin-api/src/apis/definitions/auth.ts +++ b/packages/core-plugin-api/src/apis/definitions/auth.ts @@ -357,7 +357,11 @@ export const oktaAuthApiRef: ApiRef< * for a full list of supported scopes. */ export const gitlabAuthApiRef: ApiRef< - OAuthApi & ProfileInfoApi & BackstageIdentityApi & SessionApi + OAuthApi & + OpenIdConnectApi & + ProfileInfoApi & + BackstageIdentityApi & + SessionApi > = createApiRef({ id: 'core.auth.gitlab', }); diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 3a9a28e3ac..b17da7ba7b 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/create-app +## 0.4.38-next.2 + +### Patch Changes + +- Bumped create-app version. + ## 0.4.38-next.1 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index ef569aee6b..4097e3bd57 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.38-next.1", + "version": "0.4.38-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/create-app/templates/default-app/packages/app/.eslintignore b/packages/create-app/templates/default-app/packages/app/.eslintignore new file mode 100644 index 0000000000..a48cf0de7a --- /dev/null +++ b/packages/create-app/templates/default-app/packages/app/.eslintignore @@ -0,0 +1 @@ +public diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index abfd8997f3..85a0c81ee7 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/dev-utils +## 1.0.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + ## 1.0.13-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 119564ceae..d4f120b359 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.13-next.1", + "version": "1.0.13-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 9829e00e7f..7c3dcdbc36 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,12 @@ # e2e-test +## 0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.38-next.2 + ## 0.2.1-next.1 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index ecc377c6e2..f8c6f815e8 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.1-next.1", + "version": "0.2.1-next.2", "private": true, "backstage": { "role": "cli" diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index b1d72eec52..028c939822 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/integration-react +## 1.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.1.11-next.1 ### Patch Changes diff --git a/packages/integration-react/api-report.md b/packages/integration-react/api-report.md index 5b0c9d6174..3af0704990 100644 --- a/packages/integration-react/api-report.md +++ b/packages/integration-react/api-report.md @@ -23,7 +23,11 @@ export class ScmAuth implements ScmAuthApi { ScmAuthApi, { github: OAuthApi & ProfileInfoApi & BackstageIdentityApi & SessionApi; - gitlab: OAuthApi & ProfileInfoApi & BackstageIdentityApi & SessionApi; + gitlab: OAuthApi & + OpenIdConnectApi & + ProfileInfoApi & + BackstageIdentityApi & + SessionApi; azure: OAuthApi & OpenIdConnectApi & ProfileInfoApi & diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 62e3234439..119a8683d6 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.11-next.1", + "version": "1.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index a350735be4..2d2b669e38 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,22 @@ # techdocs-cli-embedded-app +## 0.2.80-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/app-defaults@1.2.1-next.2 + - @backstage/cli@0.22.4-next.1 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.80-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index cc5d64e234..2cbb1aabc8 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.80-next.1", + "version": "0.2.80-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index bddbd4a2d0..facd967e90 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,14 @@ # @techdocs/cli +## 1.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.4.0-next.1 ### Minor Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 169ef04a47..e8d9277871 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.0-next.1", + "version": "1.4.0-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index c5a30b5629..e521e9af91 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/test-utils +## 1.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.2.6-next.1 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index e43ca2a8b3..59ec2ce989 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.2.6-next.1", + "version": "1.2.6-next.2", "publishConfig": { "access": "public" }, diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 6b96383f68..58b37f1731 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-adr-backend +## 0.3.1-next.2 + +### Patch Changes + +- 2a73ded3861: Support MADR v3 format +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 452a58f4e5..f73bf159b0 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.1-next.1", + "version": "0.3.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 13e8ad37a2..a50f1a60d3 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-adr +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 0456e3961a..5e56c39638 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index a88cf895d0..bcbd88a755 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.16-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 0e5b160a86..52bd89e909 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.16-next.1", + "version": "0.2.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 406564d8cf..088bfbdcf9 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-airbrake +## 0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/dev-utils@1.0.13-next.2 + - @backstage/test-utils@1.2.6-next.2 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 4c31a2b5e7..e577ee8862 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.16-next.1", + "version": "0.3.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 48ce2bd75c..efde01c0b5 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-allure +## 0.1.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.32-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index f6dcdda941..18bf52feab 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.32-next.1", + "version": "0.1.32-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index c65f20cedd..e457b76bf8 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-analytics-module-ga +## 0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 722c34895e..b7152b1f69 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 8fec434e37..acc474e6e3 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 87889f6c86..070cbc4136 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.9-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 3966fa5ee8..56644c2322 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-api-docs +## 0.9.1-next.2 + +### Patch Changes + +- 8bc7dcec820: Fix dark theme Swagger's clear button font color. +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.9.1-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index a3d14e7fa2..d7db6566f9 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.1-next.1", + "version": "0.9.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 57b6934d5b..8e48be2ab8 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apollo-explorer +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 2aab81c0d3..0fcc315797 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 784c2d23c4..79c8276eeb 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-app-backend +## 0.3.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.3.43-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 43152faca1..77804372d1 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.43-next.1", + "version": "0.3.43-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 97124b3a3e..a22b2e40ee 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-backend +## 0.18.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.18.1-next.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index f399028594..bcc62814ed 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.1-next.1", + "version": "0.18.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 71e17743b4..0e7bcefae2 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.12-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.12-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index ffecaf44ba..093b23add9 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.12-next.1", + "version": "0.2.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index bc92e8cdd4..a4a7492ffc 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-devops-backend +## 0.3.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.3.22-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index dd46929944..1d921a468a 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.22-next.1", + "version": "0.3.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 3d82d3a0dd..b9fcc646b7 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index bec734c09b..f8bc46f422 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 439163b00d..9bc9b99388 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-sites-backend +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index e4a739d730..3cb7023933 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 2bb6cfba96..1de9e7a804 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-sites +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 4c17e880ea..6daadf199a 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index b2e06a5a0e..837e71bcce 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-badges-backend +## 0.1.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.37-next.1 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 73d4930130..f570a47874 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.37-next.1", + "version": "0.1.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 0d4f78a5ba..567c3e81d6 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-badges +## 0.2.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.40-next.1 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index ebed209962..7e817c024d 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.40-next.1", + "version": "0.2.40-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 4e579285b0..203c1ef67f 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-bazaar-backend +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index bac1f58a41..c9221e5c69 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index d13b98ef23..57ba471000 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/cli@0.22.4-next.1 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index d1a3b435cb..6a2311004b 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 856f77b655..1a9d86268d 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-bitrise +## 0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.43-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index ab34c9ef88..41cb8562b5 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.43-next.1", + "version": "0.1.43-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 76cd99d3c1..f4e268aae7 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.17-next.2 + +### Patch Changes + +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.17-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/alpha-api-report.md b/plugins/catalog-backend-module-aws/alpha-api-report.md index 8781975085..f78f6a802d 100644 --- a/plugins/catalog-backend-module-aws/alpha-api-report.md +++ b/plugins/catalog-backend-module-aws/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const awsS3EntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleAwsS3EntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index 5086ec1ea7..491dbf497e 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -3,13 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorParser } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Credentials } from 'aws-sdk'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 18b210ae67..79271cf4de 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.17-next.1", + "version": "0.1.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -53,7 +53,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", diff --git a/plugins/catalog-backend-module-aws/src/alpha.ts b/plugins/catalog-backend-module-aws/src/alpha.ts index 3ae30df0cb..c277a0a680 100644 --- a/plugins/catalog-backend-module-aws/src/alpha.ts +++ b/plugins/catalog-backend-module-aws/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { awsS3EntityProviderCatalogModule } from './service/AwsS3EntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts index 868a9535b4..1475da9e79 100644 --- a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { awsS3EntityProviderCatalogModule } from './AwsS3EntityProviderCatalogModule'; +import { catalogModuleAwsS3EntityProvider } from './catalogModuleAwsS3EntityProvider'; import { AwsS3EntityProvider } from '../providers'; -describe('awsS3EntityProviderCatalogModule', () => { +describe('catalogModuleAwsS3EntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -66,7 +66,7 @@ describe('awsS3EntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [awsS3EntityProviderCatalogModule()], + features: [catalogModuleAwsS3EntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts index 5d4170ec1c..452284e526 100644 --- a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-aws/src/module/catalogModuleAwsS3EntityProvider.ts @@ -27,7 +27,7 @@ import { AwsS3EntityProvider } from '../providers'; * * @alpha */ -export const awsS3EntityProviderCatalogModule = createBackendModule({ +export const catalogModuleAwsS3EntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'awsS3EntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-aws/src/module/index.ts b/plugins/catalog-backend-module-aws/src/module/index.ts new file mode 100644 index 0000000000..5644c034ea --- /dev/null +++ b/plugins/catalog-backend-module-aws/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleAwsS3EntityProvider } from './catalogModuleAwsS3EntityProvider'; diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts index b6418ade03..05c85c7426 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsEKSClusterProcessor.ts @@ -17,7 +17,7 @@ import { CatalogProcessor, CatalogProcessorEmit, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { ANNOTATION_KUBERNETES_API_SERVER, diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts index ecc42e69ea..c0ba1e3e98 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts @@ -20,7 +20,7 @@ import { CatalogProcessor, CatalogProcessorEmit, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import AWS, { Credentials, Organizations } from 'aws-sdk'; import { Account, ListAccountsResponse } from 'aws-sdk/clients/organizations'; diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts index ef540da7f5..7818b21bd1 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.test.ts @@ -21,7 +21,7 @@ import { CatalogProcessorEntityResult, CatalogProcessorResult, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { S3Client, ListObjectsV2Command, diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts index 072c3d8384..d6722d046e 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsS3DiscoveryProcessor.ts @@ -21,7 +21,7 @@ import { CatalogProcessorEmit, CatalogProcessorParser, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import limiterFactory from 'p-limit'; diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts index 134a3c6338..821fb6d4f4 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { AwsS3EntityProvider } from './AwsS3EntityProvider'; import aws from 'aws-sdk'; import AWSMock from 'aws-sdk-mock'; diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts index 5e24d4dc13..8212f9279a 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts @@ -21,7 +21,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { AwsCredentials } from '../credentials/AwsCredentials'; import { readAwsS3Configs } from './config'; diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 1dd3f48c2d..86566d383f 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/alpha-api-report.md b/plugins/catalog-backend-module-azure/alpha-api-report.md index 486aac7775..66551a2856 100644 --- a/plugins/catalog-backend-module-azure/alpha-api-report.md +++ b/plugins/catalog-backend-module-azure/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const azureDevOpsEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleAzureDevOpsEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index 8fb7edeb53..a1b9d706a9 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -3,12 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index c9a8d4b921..afe85243db 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.14-next.1", + "version": "0.1.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -52,7 +52,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", diff --git a/plugins/catalog-backend-module-azure/src/alpha.ts b/plugins/catalog-backend-module-azure/src/alpha.ts index cc3c4a83af..c277a0a680 100644 --- a/plugins/catalog-backend-module-azure/src/alpha.ts +++ b/plugins/catalog-backend-module-azure/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { azureDevOpsEntityProviderCatalogModule } from './service/AzureDevOpsEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts index a8e526e871..fa3b3d865e 100644 --- a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { azureDevOpsEntityProviderCatalogModule } from './AzureDevOpsEntityProviderCatalogModule'; +import { catalogModuleAzureDevOpsEntityProvider } from './catalogModuleAzureDevOpsEntityProvider'; import { AzureDevOpsEntityProvider } from '../providers'; -describe('azureDevOpsEntityProviderCatalogModule', () => { +describe('catalogModuleAzureDevOpsEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -69,7 +69,7 @@ describe('azureDevOpsEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [azureDevOpsEntityProviderCatalogModule()], + features: [catalogModuleAzureDevOpsEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts index 3fc1ddf3a4..ec8b6441ba 100644 --- a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-azure/src/module/catalogModuleAzureDevOpsEntityProvider.ts @@ -27,7 +27,7 @@ import { AzureDevOpsEntityProvider } from '../providers'; * * @alpha */ -export const azureDevOpsEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleAzureDevOpsEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'azureDevOpsEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-azure/src/module/index.ts b/plugins/catalog-backend-module-azure/src/module/index.ts new file mode 100644 index 0000000000..cfa8c78548 --- /dev/null +++ b/plugins/catalog-backend-module-azure/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleAzureDevOpsEntityProvider } from './catalogModuleAzureDevOpsEntityProvider'; diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts index 38df737179..0a1ec1e3cf 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts @@ -16,7 +16,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { AzureDevOpsDiscoveryProcessor, parseUrl, diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts index 8893d5d42d..fde59046ef 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts @@ -24,7 +24,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { codeSearch } from '../lib'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index dff1164899..23a668d60b 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { CodeSearchResultItem } from '../lib'; import { AzureDevOpsEntityProvider } from './AzureDevOpsEntityProvider'; import { codeSearch } from '../lib'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 788b9c2f05..89572286a1 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { readAzureDevOpsConfigs } from './config'; import { Logger } from 'winston'; import { AzureDevOpsConfig } from './types'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 6992b44c87..b1de810710 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md index 77b4b77410..a5d0ffc665 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const bitbucketCloudEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleBitbucketCloudEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md b/plugins/catalog-backend-module-bitbucket-cloud/api-report.md index 456ea62dd3..22eeddea3a 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/api-report.md @@ -5,8 +5,8 @@ ```ts import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import { Events } from '@backstage/plugin-bitbucket-cloud-common'; import { EventSubscriber } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 96922c7a8c..8ed58f0333 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -53,7 +53,6 @@ "@backstage/config": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-bitbucket-cloud-common": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-events-node": "workspace:^", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts index e949dcb894..c277a0a680 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketCloudEntityProviderCatalogModule } from './service/BitbucketCloudEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts index 1c15ad4e8f..d730d8618d 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/index.ts @@ -20,4 +20,4 @@ * @packageDocumentation */ -export { BitbucketCloudEntityProvider } from './BitbucketCloudEntityProvider'; +export { BitbucketCloudEntityProvider } from './providers/BitbucketCloudEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts similarity index 90% rename from plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts index 630c18b134..a34eae3750 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.test.ts @@ -23,10 +23,10 @@ import { startTestBackend, mockServices } from '@backstage/backend-test-utils'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { Duration } from 'luxon'; -import { bitbucketCloudEntityProviderCatalogModule } from './BitbucketCloudEntityProviderCatalogModule'; -import { BitbucketCloudEntityProvider } from '../BitbucketCloudEntityProvider'; +import { catalogModuleBitbucketCloudEntityProvider } from './catalogModuleBitbucketCloudEntityProvider'; +import { BitbucketCloudEntityProvider } from '../providers/BitbucketCloudEntityProvider'; -describe('bitbucketCloudEntityProviderCatalogModule', () => { +describe('catalogModuleBitbucketCloudEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let addedSubscribers: Array | undefined; @@ -73,7 +73,7 @@ describe('bitbucketCloudEntityProviderCatalogModule', () => { }), [coreServices.scheduler, scheduler], ], - features: [bitbucketCloudEntityProviderCatalogModule()], + features: [catalogModuleBitbucketCloudEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts similarity index 93% rename from plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts index a95d99ceef..7c4f4a30b2 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/service/BitbucketCloudEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/catalogModuleBitbucketCloudEntityProvider.ts @@ -24,12 +24,12 @@ import { catalogServiceRef, } from '@backstage/plugin-catalog-node/alpha'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { BitbucketCloudEntityProvider } from '../BitbucketCloudEntityProvider'; +import { BitbucketCloudEntityProvider } from '../providers/BitbucketCloudEntityProvider'; /** * @alpha */ -export const bitbucketCloudEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleBitbucketCloudEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'bitbucketCloudEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts new file mode 100644 index 0000000000..f9654971be --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleBitbucketCloudEntityProvider } from './catalogModuleBitbucketCloudEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts similarity index 99% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts index 367e95b99b..727b7fd40c 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.test.ts @@ -27,7 +27,7 @@ import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Events } from '@backstage/plugin-bitbucket-cloud-common'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts similarity index 99% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts index a139bd7d8d..11c872cf7b 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProvider.ts @@ -33,7 +33,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; import { diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.test.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.test.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.test.ts diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.ts similarity index 100% rename from plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProviderConfig.ts rename to plugins/catalog-backend-module-bitbucket-cloud/src/providers/BitbucketCloudEntityProviderConfig.ts diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 3dbe16771d..00341a3870 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md b/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md index 3177828f51..2cc53a3c16 100644 --- a/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const bitbucketServerEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleBitbucketServerEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.md index 6c840883af..467294f3b0 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.md @@ -6,9 +6,9 @@ import { BitbucketServerIntegrationConfig } from '@backstage/integration'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Response as Response_2 } from 'node-fetch'; diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 3c58377976..433d4bc907 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -51,7 +51,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@types/node-fetch": "^2.5.12", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts index d6227c29f1..c277a0a680 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketServerEntityProviderCatalogModule } from './service/BitbucketServerEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts index bdd7209364..d17b4a4c96 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.test.ts @@ -23,11 +23,11 @@ import { } from '@backstage/backend-tasks'; import { startTestBackend } from '@backstage/backend-test-utils'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { bitbucketServerEntityProviderCatalogModule } from './BitbucketServerEntityProviderCatalogModule'; +import { catalogModuleBitbucketServerEntityProvider } from './catalogModuleBitbucketServerEntityProvider'; import { Duration } from 'luxon'; import { BitbucketServerEntityProvider } from '../providers'; -describe('bitbucketServerEntityProviderCatalogModule', () => { +describe('catalogModuleBitbucketServerEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -73,7 +73,7 @@ describe('bitbucketServerEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [bitbucketServerEntityProviderCatalogModule()], + features: [catalogModuleBitbucketServerEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts index deab47c9e9..354bce7d6d 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts @@ -25,7 +25,7 @@ import { BitbucketServerEntityProvider } from '../providers'; /** * @alpha */ -export const bitbucketServerEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleBitbucketServerEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'bitbucketServerEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts new file mode 100644 index 0000000000..160f099ae0 --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleBitbucketServerEntityProvider } from './catalogModuleBitbucketServerEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index 20299e3452..bc3fa2ae23 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { BitbucketServerEntityProvider } from './BitbucketServerEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts index 2ecdd79019..fd2b3e3959 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts @@ -25,7 +25,7 @@ import { import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import * as uuid from 'uuid'; import { BitbucketServerClient, paginated } from '../lib'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts index 7f6dae8872..e5d48f92b8 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerLocationParser.ts @@ -17,7 +17,7 @@ import { LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Entity } from '@backstage/catalog-model'; import { Logger } from 'winston'; import { BitbucketServerClient } from '../lib'; diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 3ede5969ae..eef6da4c0e 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/api-report.md b/plugins/catalog-backend-module-bitbucket/api-report.md index 053c6040a4..30b2a89826 100644 --- a/plugins/catalog-backend-module-bitbucket/api-report.md +++ b/plugins/catalog-backend-module-bitbucket/api-report.md @@ -4,11 +4,11 @@ ```ts import { BitbucketIntegration } from '@backstage/integration'; -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorResult } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { ScmIntegrationRegistry } from '@backstage/integration'; diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 39b5399e21..79fbbe08c4 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", @@ -39,7 +39,7 @@ "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-bitbucket-cloud-common": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts index f7a56ebc8f..262fb4e6c4 100644 --- a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.test.ts @@ -18,10 +18,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { Models } from '@backstage/plugin-bitbucket-cloud-common'; -import { - LocationSpec, - processingResult, -} from '@backstage/plugin-catalog-backend'; +import { LocationSpec, processingResult } from '@backstage/plugin-catalog-node'; import { RequestHandler, rest } from 'msw'; import { setupServer } from 'msw/node'; import { BitbucketDiscoveryProcessor } from './BitbucketDiscoveryProcessor'; diff --git a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts index 78aa3eacfd..3f25d6ed7b 100644 --- a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts @@ -28,7 +28,7 @@ import { CatalogProcessor, CatalogProcessorEmit, LocationSpec, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { BitbucketRepository, diff --git a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts index 41f467ebaa..478ccd7c52 100644 --- a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts +++ b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { processingResult } from '@backstage/plugin-catalog-backend'; +import { processingResult } from '@backstage/plugin-catalog-node'; import { defaultRepositoryParser } from './BitbucketRepositoryParser'; describe('BitbucketRepositoryParser', () => { diff --git a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts index 97225e2579..aa973f87c2 100644 --- a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts +++ b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts @@ -18,7 +18,7 @@ import { BitbucketIntegration } from '@backstage/integration'; import { CatalogProcessorResult, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; /** diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 7cd5eb2bb5..07ab61c8c4 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/alpha-api-report.md b/plugins/catalog-backend-module-gerrit/alpha-api-report.md index 03f5d099b9..5aee61f28a 100644 --- a/plugins/catalog-backend-module-gerrit/alpha-api-report.md +++ b/plugins/catalog-backend-module-gerrit/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha (undocumented) -export const gerritEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGerritEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.md index 1dee786da1..f64e697555 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.md @@ -4,8 +4,8 @@ ```ts import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 357b5416bf..af9727cbf9 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -48,7 +48,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "fs-extra": "10.1.0", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-gerrit/src/alpha.ts b/plugins/catalog-backend-module-gerrit/src/alpha.ts index 8b03d9312a..c277a0a680 100644 --- a/plugins/catalog-backend-module-gerrit/src/alpha.ts +++ b/plugins/catalog-backend-module-gerrit/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gerritEntityProviderCatalogModule } from './service/GerritEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts similarity index 93% rename from plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts index 51c1749c66..0511aa7b4c 100644 --- a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { gerritEntityProviderCatalogModule } from './GerritEntityProviderCatalogModule'; +import { catalogModuleGerritEntityProvider } from './catalogModuleGerritEntityProvider'; import { GerritEntityProvider } from '../providers/GerritEntityProvider'; -describe('gerritEntityProviderCatalogModule', () => { +describe('catalogModuleGerritEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -79,7 +79,7 @@ describe('gerritEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [gerritEntityProviderCatalogModule()], + features: [catalogModuleGerritEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts index 782c724094..814259fb40 100644 --- a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-gerrit/src/module/catalogModuleGerritEntityProvider.ts @@ -25,7 +25,7 @@ import { GerritEntityProvider } from '../providers/GerritEntityProvider'; /** * @alpha */ -export const gerritEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGerritEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'gerritEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-gerrit/src/module/index.ts b/plugins/catalog-backend-module-gerrit/src/module/index.ts new file mode 100644 index 0000000000..95760538e7 --- /dev/null +++ b/plugins/catalog-backend-module-gerrit/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleGerritEntityProvider } from './catalogModuleGerritEntityProvider'; diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts index 5d258ee94f..9892b60a21 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import fs from 'fs-extra'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts index 986f8ae60c..76cccaf37b 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import fetch, { Response } from 'node-fetch'; import { GerritIntegration, diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index c7e9e756ba..1e0c455391 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-github +## 0.2.6-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/alpha-api-report.md b/plugins/catalog-backend-module-github/alpha-api-report.md index eb13ec4558..0d4e16b4ea 100644 --- a/plugins/catalog-backend-module-github/alpha-api-report.md +++ b/plugins/catalog-backend-module-github/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const githubEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGithubEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index c732740997..23faa31495 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -4,19 +4,19 @@ ```ts import { AnalyzeOptions } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; import { GithubCredentialsProvider } from '@backstage/integration'; import { GithubIntegrationConfig } from '@backstage/integration'; import { graphql } from '@octokit/graphql'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 733c3e8dc3..fe9183917e 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/src/alpha.ts b/plugins/catalog-backend-module-github/src/alpha.ts index 1b83eead82..c277a0a680 100644 --- a/plugins/catalog-backend-module-github/src/alpha.ts +++ b/plugins/catalog-backend-module-github/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { githubEntityProviderCatalogModule } from './service/GithubEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-github/src/deprecated.ts b/plugins/catalog-backend-module-github/src/deprecated.ts index d094bb4031..e27a856358 100644 --- a/plugins/catalog-backend-module-github/src/deprecated.ts +++ b/plugins/catalog-backend-module-github/src/deprecated.ts @@ -19,7 +19,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GithubEntityProvider } from './providers/GithubEntityProvider'; import { diff --git a/plugins/catalog-backend-module-github/src/lib/github.ts b/plugins/catalog-backend-module-github/src/lib/github.ts index ae6e14fc23..30e7bd83d4 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.ts @@ -26,7 +26,7 @@ import { } from './defaultTransformers'; import { withLocations } from '../providers/GithubOrgEntityProvider'; -import { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; // Graphql types @@ -195,7 +195,7 @@ export async function getOrganizationTeams( parentTeam { slug } members(first: 100, membership: IMMEDIATE) { pageInfo { hasNextPage } - nodes { + nodes { avatarUrl, bio, email, diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts index 7c08e8947d..82a5552dba 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { githubEntityProviderCatalogModule } from './GithubEntityProviderCatalogModule'; +import { catalogModuleGithubEntityProvider } from './catalogModuleGithubEntityProvider'; import { GithubEntityProvider } from '../providers/GithubEntityProvider'; -describe('githubEntityProviderCatalogModule', () => { +describe('catalogModuleGithubEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -66,7 +66,7 @@ describe('githubEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [githubEntityProviderCatalogModule()], + features: [catalogModuleGithubEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts index 246f700248..997da3023b 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-github/src/module/catalogModuleGithubEntityProvider.ts @@ -27,7 +27,7 @@ import { GithubEntityProvider } from '../providers/GithubEntityProvider'; * * @alpha */ -export const githubEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGithubEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'githubEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-github/src/module/index.ts b/plugins/catalog-backend-module-github/src/module/index.ts new file mode 100644 index 0000000000..640a633093 --- /dev/null +++ b/plugins/catalog-backend-module-github/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleGithubEntityProvider } from './catalogModuleGithubEntityProvider'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts index f30007c677..f008c88dbe 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.test.ts @@ -20,7 +20,7 @@ import { DefaultGithubCredentialsProvider, ScmIntegrations, } from '@backstage/integration'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { GithubDiscoveryProcessor, parseUrl } from './GithubDiscoveryProcessor'; import { getOrganizationRepositories } from '../lib'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts index c6733df13b..0907b8ac8d 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubDiscoveryProcessor.ts @@ -26,7 +26,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { getOrganizationRepositories } from '../lib'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts index 7777da6b1b..9709977010 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts @@ -34,7 +34,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { 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 ce81e2cf42..195214d561 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts @@ -20,7 +20,7 @@ import { GithubCredentialsProvider, ScmIntegrations, } from '@backstage/integration'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { GithubOrgReaderProcessor } from './GithubOrgReaderProcessor'; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts index 90c168ccf4..654deb3079 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts @@ -27,7 +27,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts index 2be5df09fe..21e6a46fbf 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts @@ -21,7 +21,7 @@ import { TaskRunner, } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GithubEntityProvider } from './GithubEntityProvider'; import * as helpers from '../lib/github'; import { EventParams } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts index 3c6fd43bd0..839f40e91a 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts @@ -28,7 +28,7 @@ import { EntityProvider, EntityProviderConnection, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { LocationSpec } from '@backstage/plugin-catalog-common'; diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts index 2711425998..ff42e42718 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts @@ -20,7 +20,7 @@ import { GithubCredentialsProvider, GithubIntegrationConfig, } from '@backstage/integration'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { EventParams } from '@backstage/plugin-events-node'; import { diff --git a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts index 2a888e6f91..02e225c938 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts @@ -33,7 +33,7 @@ import { EventSubscriber } from '@backstage/plugin-events-node'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { graphql } from '@octokit/graphql'; import { OrganizationEvent, diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index c7e0a592ca..491d972754 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.14-next.2 + +### Patch Changes + +- be129f8f3cd: filter gitlab groups by prefix +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/alpha-api-report.md b/plugins/catalog-backend-module-gitlab/alpha-api-report.md index 8912b4a7b2..f14b41d6c5 100644 --- a/plugins/catalog-backend-module-gitlab/alpha-api-report.md +++ b/plugins/catalog-backend-module-gitlab/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gitlabDiscoveryEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleGitlabDiscoveryEntityProvider: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.md index 68ea45169f..2596b5c99a 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.md @@ -3,12 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index f2042e4f8e..ed07ea842c 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.14-next.1", + "version": "0.1.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -52,7 +52,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", diff --git a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts index 385ce59bfb..6333184ea8 100644 --- a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.test.ts @@ -17,7 +17,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { rest, RestRequest } from 'msw'; import { setupServer } from 'msw/node'; import { GitLabDiscoveryProcessor, parseUrl } from './GitLabDiscoveryProcessor'; diff --git a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts index 756093bc56..9f2cd9b17a 100644 --- a/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-gitlab/src/GitLabDiscoveryProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GitLabClient, GitLabProject, paginated } from './lib'; diff --git a/plugins/catalog-backend-module-gitlab/src/alpha.ts b/plugins/catalog-backend-module-gitlab/src/alpha.ts index 883ffc13c4..ace970e3aa 100644 --- a/plugins/catalog-backend-module-gitlab/src/alpha.ts +++ b/plugins/catalog-backend-module-gitlab/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gitlabDiscoveryEntityProviderCatalogModule } from './service/GitlabDiscoveryEntityProviderCatalogModule'; +export { catalogModuleGitlabDiscoveryEntityProvider } from './module/catalogModuleGitlabDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts index efb86e4223..7a3d0a0e0d 100644 --- a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { gitlabDiscoveryEntityProviderCatalogModule } from './GitlabDiscoveryEntityProviderCatalogModule'; +import { catalogModuleGitlabDiscoveryEntityProvider } from './catalogModuleGitlabDiscoveryEntityProvider'; import { GitlabDiscoveryEntityProvider } from '../providers'; -describe('gitlabDiscoveryEntityProviderCatalogModule', () => { +describe('catalogModuleGitlabDiscoveryEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -78,7 +78,7 @@ describe('gitlabDiscoveryEntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [gitlabDiscoveryEntityProviderCatalogModule()], + features: [catalogModuleGitlabDiscoveryEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts similarity index 96% rename from plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts index 0adf5b18f2..ffae233319 100644 --- a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-gitlab/src/module/catalogModuleGitlabDiscoveryEntityProvider.ts @@ -27,7 +27,7 @@ import { GitlabDiscoveryEntityProvider } from '../providers'; * * @alpha */ -export const gitlabDiscoveryEntityProviderCatalogModule = createBackendModule({ +export const catalogModuleGitlabDiscoveryEntityProvider = createBackendModule({ pluginId: 'catalog', moduleId: 'gitlabDiscoveryEntityProvider', register(env) { diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index ae19edc48c..42fa1b471c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { GitlabDiscoveryEntityProvider } from './GitlabDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index f0d88c34f5..ece10ee8c6 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -22,7 +22,7 @@ import { EntityProviderConnection, LocationSpec, locationSpecToLocationEntity, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts index cff215acd3..5a323a8dec 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { GitlabOrgDiscoveryEntityProvider } from './GitlabOrgDiscoveryEntityProvider'; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index db1efac86d..acfa784c2e 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -20,7 +20,7 @@ import { GitLabIntegration, ScmIntegrations } from '@backstage/integration'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; import { Logger } from 'winston'; import { diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index ad4649ab7f..11393c6db2 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.3.0-next.1 ### Minor Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md b/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md index ec9c59a4c4..b11ec43cf5 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/alpha-api-report.md @@ -8,7 +8,7 @@ import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-mod import { IncrementalEntityProviderOptions } from '@backstage/plugin-catalog-backend-module-incremental-ingestion'; // @alpha -export const incrementalIngestionEntityProviderCatalogModule: (options: { +export const catalogModuleIncrementalIngestionEntityProvider: (options: { providers: { provider: IncrementalEntityProvider; options: IncrementalEntityProviderOptions; diff --git a/plugins/catalog-backend-module-incremental-ingestion/api-report.md b/plugins/catalog-backend-module-incremental-ingestion/api-report.md index 167c07f70f..c2fad4576c 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/api-report.md +++ b/plugins/catalog-backend-module-incremental-ingestion/api-report.md @@ -7,7 +7,7 @@ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; import type { Config } from '@backstage/config'; -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import type { DurationObjectUnits } from 'luxon'; import { EventParams } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index a88e3af1fa..5b2a534fcb 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.0-next.1", + "version": "0.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -69,8 +69,7 @@ "@backstage/backend-app-api": "workspace:^", "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", - "@backstage/cli": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/cli": "workspace:^" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts b/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts index cf47942754..527d345706 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/database/IncrementalIngestionDatabaseManager.ts @@ -15,7 +15,7 @@ */ import { Knex } from 'knex'; -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { Duration } from 'luxon'; import { v4 } from 'uuid'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts index 228c7a2505..13d5bfff71 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { DeferredEntity } from '@backstage/plugin-catalog-backend'; +import type { DeferredEntity } from '@backstage/plugin-catalog-node'; import { IterationEngine, IterationEngineOptions } from '../types'; import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager'; import { performance } from 'perf_hooks'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts similarity index 91% rename from plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts index dbadf573a4..ef07b4cb10 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.test.ts @@ -20,9 +20,9 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { IncrementalEntityProvider } from '../types'; -import { incrementalIngestionEntityProviderCatalogModule } from './incrementalIngestionEntityProviderCatalogModule'; +import { catalogModuleIncrementalIngestionEntityProvider } from './catalogModuleIncrementalIngestionEntityProvider'; -describe('bitbucketServerEntityProviderCatalogModule', () => { +describe('catalogModuleIncrementalIngestionEntityProvider', () => { it('should register provider at the catalog extension point', async () => { const provider1: IncrementalEntityProvider = { getProviderName: () => 'provider1', @@ -57,7 +57,7 @@ describe('bitbucketServerEntityProviderCatalogModule', () => { [coreServices.scheduler, scheduler], ], features: [ - incrementalIngestionEntityProviderCatalogModule({ + catalogModuleIncrementalIngestionEntityProvider({ providers: [ { provider: provider1, diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts similarity index 97% rename from plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts index 261768c142..19d5742b46 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/incrementalIngestionEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/catalogModuleIncrementalIngestionEntityProvider.ts @@ -30,7 +30,7 @@ import { WrapperProviders } from './WrapperProviders'; * * @alpha */ -export const incrementalIngestionEntityProviderCatalogModule = +export const catalogModuleIncrementalIngestionEntityProvider = createBackendModule( (options: { providers: Array<{ diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts b/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts index 577cf193e2..9fcee99e01 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/module/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { incrementalIngestionEntityProviderCatalogModule } from './incrementalIngestionEntityProviderCatalogModule'; +export { catalogModuleIncrementalIngestionEntityProvider } from './catalogModuleIncrementalIngestionEntityProvider'; diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/run.ts b/plugins/catalog-backend-module-incremental-ingestion/src/run.ts index f1b6bd1529..f94c988237 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/run.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/run.ts @@ -25,7 +25,7 @@ import { import { ConfigReader } from '@backstage/config'; import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha'; import { IncrementalEntityProvider } from '.'; -import { incrementalIngestionEntityProviderCatalogModule } from './alpha'; +import { catalogModuleIncrementalIngestionEntityProvider } from './alpha'; const provider: IncrementalEntityProvider = { getProviderName: () => 'test-provider', @@ -63,7 +63,7 @@ async function main() { backend.add(catalogPlugin()); backend.add( - incrementalIngestionEntityProviderCatalogModule({ + catalogModuleIncrementalIngestionEntityProvider({ providers: [ { provider: provider, diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts b/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts index c8458be09b..59cdf32391 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/service/IncrementalCatalogBuilder.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { IncrementalEntityProvider, IncrementalEntityProviderOptions, diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts index cd1e63b044..5f9d0489e6 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/types.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/types.ts @@ -26,7 +26,7 @@ import type { Config } from '@backstage/config'; import type { DeferredEntity, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { EventParams } from '@backstage/plugin-events-node'; import type { PermissionEvaluator } from '@backstage/plugin-permission-common'; import type { DurationObjectUnits } from 'luxon'; diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 78614a4c31..5e176f09ba 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.md index 9876c163e8..088e34fc34 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/api-report.md @@ -3,15 +3,15 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Client } from 'ldapjs'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { SearchEntry } from 'ldapjs'; import { SearchOptions } from 'ldapjs'; diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index eb8bbd1f97..06b33f1db2 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,7 +36,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts index 64d56cc8bc..811f451b26 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgEntityProvider.ts @@ -24,7 +24,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts index fcfdb43eb1..9c5442ca0c 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; /** * Extracts teams and users out of an LDAP server. diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 0d1f93299f..dc1a32f25a 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.2-next.2 + +### Patch Changes + +- 26eef93c547: Fixed msgraph catalog backend to use user.select option when fetching user from AzureAD +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.5.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/alpha-api-report.md b/plugins/catalog-backend-module-msgraph/alpha-api-report.md index ed30b83bc8..0fa093a1bc 100644 --- a/plugins/catalog-backend-module-msgraph/alpha-api-report.md +++ b/plugins/catalog-backend-module-msgraph/alpha-api-report.md @@ -9,10 +9,10 @@ import { OrganizationTransformer } from '@backstage/plugin-catalog-backend-modul import { UserTransformer } from '@backstage/plugin-catalog-backend-module-msgraph'; // @alpha -export const microsoftGraphOrgEntityProviderCatalogModule: () => BackendFeature; +export const catalogModuleMicrosoftGraphOrgEntityProvider: () => BackendFeature; // @alpha -export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { +export interface CatalogModuleMicrosoftGraphOrgEntityProviderOptions { groupTransformer?: GroupTransformer | Record; organizationTransformer?: | OrganizationTransformer diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 10a4f405c0..bde8c06fbb 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -3,13 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 369daa1c6b..f66151bbc4 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.2-next.1", + "version": "0.5.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -51,7 +51,6 @@ "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", diff --git a/plugins/catalog-backend-module-msgraph/src/alpha.ts b/plugins/catalog-backend-module-msgraph/src/alpha.ts index 137808d881..c277a0a680 100644 --- a/plugins/catalog-backend-module-msgraph/src/alpha.ts +++ b/plugins/catalog-backend-module-msgraph/src/alpha.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { microsoftGraphOrgEntityProviderCatalogModule } from './service/MicrosoftGraphOrgEntityProviderCatalogModule'; -export type { MicrosoftGraphOrgEntityProviderCatalogModuleOptions } from './service/MicrosoftGraphOrgEntityProviderCatalogModule'; +export * from './module'; diff --git a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts similarity index 92% rename from plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts rename to plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts index 3763553162..3362c75c95 100644 --- a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.test.ts @@ -24,10 +24,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { Duration } from 'luxon'; -import { microsoftGraphOrgEntityProviderCatalogModule } from './MicrosoftGraphOrgEntityProviderCatalogModule'; +import { catalogModuleMicrosoftGraphOrgEntityProvider } from './catalogModuleMicrosoftGraphOrgEntityProvider'; import { MicrosoftGraphOrgEntityProvider } from '../processors'; -describe('awsS3EntityProviderCatalogModule', () => { +describe('catalogModuleMicrosoftGraphOrgEntityProvider', () => { it('should register provider at the catalog extension point', async () => { let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; @@ -71,7 +71,7 @@ describe('awsS3EntityProviderCatalogModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [microsoftGraphOrgEntityProviderCatalogModule()], + features: [catalogModuleMicrosoftGraphOrgEntityProvider()], }); expect(usedSchedule?.frequency).toEqual(Duration.fromISO('PT30M')); diff --git a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts similarity index 91% rename from plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts rename to plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts index 11be567045..7cd8b65f0b 100644 --- a/plugins/catalog-backend-module-msgraph/src/service/MicrosoftGraphOrgEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-msgraph/src/module/catalogModuleMicrosoftGraphOrgEntityProvider.ts @@ -28,11 +28,11 @@ import { import { MicrosoftGraphOrgEntityProvider } from '../processors'; /** - * Options for {@link microsoftGraphOrgEntityProviderCatalogModule}. + * Options for {@link catalogModuleMicrosoftGraphOrgEntityProvider}. * * @alpha */ -export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { +export interface CatalogModuleMicrosoftGraphOrgEntityProviderOptions { /** * The function that transforms a user entry in msgraph to an entity. * Optionally, you can pass separate transformers per provider ID. @@ -59,13 +59,13 @@ export interface MicrosoftGraphOrgEntityProviderCatalogModuleOptions { * * @alpha */ -export const microsoftGraphOrgEntityProviderCatalogModule = createBackendModule( +export const catalogModuleMicrosoftGraphOrgEntityProvider = createBackendModule( { pluginId: 'catalog', moduleId: 'microsoftGraphOrgEntityProvider', register( env, - options?: MicrosoftGraphOrgEntityProviderCatalogModuleOptions, + options?: CatalogModuleMicrosoftGraphOrgEntityProviderOptions, ) { env.registerInit({ deps: { diff --git a/plugins/catalog-backend-module-msgraph/src/module/index.ts b/plugins/catalog-backend-module-msgraph/src/module/index.ts new file mode 100644 index 0000000000..f53f41141c --- /dev/null +++ b/plugins/catalog-backend-module-msgraph/src/module/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModuleMicrosoftGraphOrgEntityProvider } from './catalogModuleMicrosoftGraphOrgEntityProvider'; +export type { CatalogModuleMicrosoftGraphOrgEntityProviderOptions } from './catalogModuleMicrosoftGraphOrgEntityProvider'; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts index 8af327cf27..dccf7ed53d 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts @@ -26,7 +26,7 @@ import { GroupEntity, UserEntity, } from '@backstage/catalog-model'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { MicrosoftGraphClient, MICROSOFT_GRAPH_USER_ID_ANNOTATION, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts index 071fa7f266..3ef02344eb 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts @@ -24,7 +24,7 @@ import { Config } from '@backstage/config'; import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { merge } from 'lodash'; import * as uuid from 'uuid'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 1267648481..2beef51c31 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -20,7 +20,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { GroupTransformer, diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 954eff2c98..8bf478947a 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 691581bf77..fee080d1bf 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md new file mode 100644 index 0000000000..5bc50ae148 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -0,0 +1,15 @@ +# @backstage/plugin-catalog-backend-module-puppetdb + +## 0.1.0-next.0 + +### Minor Changes + +- a1efcf9a658: Initial version of the plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/config@1.0.7-next.0 diff --git a/plugins/catalog-backend-module-puppetdb/alpha-api-report.md b/plugins/catalog-backend-module-puppetdb/alpha-api-report.md new file mode 100644 index 0000000000..0856fdb836 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/alpha-api-report.md @@ -0,0 +1,12 @@ +## API Report File for "@backstage/plugin-catalog-backend-module-puppetdb" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; + +// @alpha +export const catalogModulePuppetDbEntityProvider: () => BackendFeature; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/catalog-backend-module-puppetdb/api-report.md b/plugins/catalog-backend-module-puppetdb/api-report.md index 8764ac1e7c..a4954ce6bd 100644 --- a/plugins/catalog-backend-module-puppetdb/api-report.md +++ b/plugins/catalog-backend-module-puppetdb/api-report.md @@ -4,8 +4,8 @@ ```ts import { Config } from '@backstage/config'; -import { EntityProvider } from '@backstage/plugin-catalog-backend'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { JsonValue } from '@backstage/types'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index b6539dbbe6..252fe21969 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,14 +1,27 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.0.1", + "version": "0.1.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "backend-plugin-module" @@ -35,11 +48,12 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/catalog-backend/src/util/index.ts b/plugins/catalog-backend-module-puppetdb/src/alpha.ts similarity index 84% rename from plugins/catalog-backend/src/util/index.ts rename to plugins/catalog-backend-module-puppetdb/src/alpha.ts index b3bd4d5316..c277a0a680 100644 --- a/plugins/catalog-backend/src/util/index.ts +++ b/plugins/catalog-backend-module-puppetdb/src/alpha.ts @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Backstage Authors + * Copyright 2023 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. @@ -14,4 +14,4 @@ * limitations under the License. */ -export { locationSpecToLocationEntity } from './conversion'; +export * from './module'; diff --git a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts new file mode 100644 index 0000000000..e2745e9268 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.test.ts @@ -0,0 +1,79 @@ +/* + * 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 { coreServices } from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { catalogModulePuppetDbEntityProvider } from './catalogModulePuppetDbEntityProvider'; +import { PuppetDbEntityProvider } from '../providers/PuppetDbEntityProvider'; + +describe('catalogModulePuppetDbEntityProvider', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + puppetdb: { + baseUrl: 'http://puppetdb:8080', + schedule: { + frequency: { minutes: 10 }, + timeout: { minutes: 10 }, + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [coreServices.config, config], + [coreServices.logger, getVoidLogger()], + [coreServices.scheduler, scheduler], + ], + features: [catalogModulePuppetDbEntityProvider()], + }); + + expect(usedSchedule?.frequency).toEqual({ minutes: 10 }); + expect(usedSchedule?.timeout).toEqual({ minutes: 10 }); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'puppetdb-provider:default', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts new file mode 100644 index 0000000000..9a7d279cd3 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/catalogModulePuppetDbEntityProvider.ts @@ -0,0 +1,51 @@ +/* + * 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 { + createBackendModule, + coreServices, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; +import { PuppetDbEntityProvider } from '../providers/PuppetDbEntityProvider'; + +/** + * Registers the `PuppetDbEntityProvider` with the catalog processing extension point. + * + * @alpha + */ +export const catalogModulePuppetDbEntityProvider = createBackendModule({ + pluginId: 'catalog', + moduleId: 'puppetDbEntityProvider', + register(env) { + env.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + config: coreServices.config, + logger: coreServices.logger, + scheduler: coreServices.scheduler, + }, + async init({ catalog, config, logger, scheduler }) { + catalog.addEntityProvider( + PuppetDbEntityProvider.fromConfig(config, { + logger: loggerToWinstonLogger(logger), + scheduler, + }), + ); + }, + }); + }, +}); diff --git a/plugins/catalog-backend-module-puppetdb/src/module/index.ts b/plugins/catalog-backend-module-puppetdb/src/module/index.ts new file mode 100644 index 0000000000..f30f236df4 --- /dev/null +++ b/plugins/catalog-backend-module-puppetdb/src/module/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { catalogModulePuppetDbEntityProvider } from './catalogModulePuppetDbEntityProvider'; diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts index 0ab6fb35b7..ad89e1fd9a 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.test.ts @@ -21,7 +21,7 @@ import { PuppetDbEntityProvider } from './PuppetDbEntityProvider'; import { DeferredEntity, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import * as puppetFunctions from '../puppet/read'; import { ANNOTATION_PUPPET_CERTNAME } from '../puppet'; import { diff --git a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts index b2d2738fd3..8c63baf467 100644 --- a/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts +++ b/plugins/catalog-backend-module-puppetdb/src/providers/PuppetDbEntityProvider.ts @@ -17,7 +17,7 @@ import { EntityProvider, EntityProviderConnection, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { PuppetDbEntityProviderConfig, @@ -116,13 +116,13 @@ export class PuppetDbEntityProvider implements EntityProvider { this.transformer = transformer; } - /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.connect} */ + /** {@inheritdoc @backstage/plugin-catalog-node#EntityProvider.connect} */ async connect(connection: EntityProviderConnection): Promise { this.connection = connection; await this.scheduleFn(); } - /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.getProviderName} */ + /** {@inheritdoc @backstage/plugin-catalog-node#EntityProvider.getProviderName} */ getProviderName(): string { return `puppetdb-provider:${this.config.id}`; } diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index cbb5dd0fd4..1cc3b3620a 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend +## 1.8.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.8.0-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 00c13a31ea..5e7b2dee02 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -12,29 +12,30 @@ import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/p import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; -import { CatalogProcessor } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorEntityResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorErrorResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorLocationResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessor as CatalogProcessor_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorCache as CatalogProcessorCache_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit as CatalogProcessorEmit_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEntityResult as CatalogProcessorEntityResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorErrorResult as CatalogProcessorErrorResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorLocationResult as CatalogProcessorLocationResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorParser as CatalogProcessorParser_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRefreshKeysResult as CatalogProcessorRefreshKeysResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRelationResult as CatalogProcessorRelationResult_2 } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorResult as CatalogProcessorResult_2 } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -import { DeferredEntity } from '@backstage/plugin-catalog-node'; +import { DeferredEntity as DeferredEntity_2 } from '@backstage/plugin-catalog-node'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-node'; -import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { EntityProviderMutation } from '@backstage/plugin-catalog-node'; -import { EntityRelationSpec } from '@backstage/plugin-catalog-node'; +import { EntityProvider as EntityProvider_2 } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection as EntityProviderConnection_2 } from '@backstage/plugin-catalog-node'; +import { EntityProviderMutation as EntityProviderMutation_2 } from '@backstage/plugin-catalog-node'; +import { EntityRelationSpec as EntityRelationSpec_2 } from '@backstage/plugin-catalog-node'; import { GetEntitiesRequest } from '@backstage/catalog-client'; import { JsonValue } from '@backstage/types'; -import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; +import { locationSpecToLocationEntity as locationSpecToLocationEntity_2 } from '@backstage/plugin-catalog-node'; +import { locationSpecToMetadataName as locationSpecToMetadataName_2 } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; @@ -43,7 +44,6 @@ import { PermissionRule } from '@backstage/plugin-permission-node'; import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { processingResult } from '@backstage/plugin-catalog-node'; import { Readable } from 'stream'; import { Router } from 'express'; import { ScmIntegrationRegistry } from '@backstage/integration'; @@ -73,7 +73,7 @@ export type AnalyzeOptions = { }; // @public (undocumented) -export class AnnotateLocationEntityProcessor implements CatalogProcessor { +export class AnnotateLocationEntityProcessor implements CatalogProcessor_2 { constructor(options: { integrations: ScmIntegrationRegistry }); // (undocumented) getProcessorName(): string; @@ -81,13 +81,13 @@ export class AnnotateLocationEntityProcessor implements CatalogProcessor { preProcessEntity( entity: Entity, location: LocationSpec_2, - _: CatalogProcessorEmit, + _: CatalogProcessorEmit_2, originLocation: LocationSpec_2, ): Promise; } // @public (undocumented) -export class AnnotateScmSlugEntityProcessor implements CatalogProcessor { +export class AnnotateScmSlugEntityProcessor implements CatalogProcessor_2 { constructor(opts: { scmIntegrationRegistry: ScmIntegrationRegistry }); // (undocumented) static fromConfig(config: Config): AnnotateScmSlugEntityProcessor; @@ -98,14 +98,14 @@ export class AnnotateScmSlugEntityProcessor implements CatalogProcessor { } // @public (undocumented) -export class BuiltinKindsEntityProcessor implements CatalogProcessor { +export class BuiltinKindsEntityProcessor implements CatalogProcessor_2 { // (undocumented) getProcessorName(): string; // (undocumented) postProcessEntity( entity: Entity, _location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; // (undocumented) validateEntityKind(entity: Entity): Promise; @@ -117,7 +117,7 @@ export class CatalogBuilder { ...policies: Array> ): CatalogBuilder; addEntityProvider( - ...providers: Array> + ...providers: Array> ): CatalogBuilder; addLocationAnalyzers( ...analyzers: Array> @@ -128,18 +128,18 @@ export class CatalogBuilder { > ): this; addProcessor( - ...processors: Array> + ...processors: Array> ): CatalogBuilder; build(): Promise<{ processingEngine: CatalogProcessingEngine; router: Router; }>; static create(env: CatalogEnvironment): CatalogBuilder; - getDefaultProcessors(): CatalogProcessor[]; + getDefaultProcessors(): CatalogProcessor_2[]; replaceEntityPolicies(policies: EntityPolicy[]): CatalogBuilder; - replaceProcessors(processors: CatalogProcessor[]): CatalogBuilder; + replaceProcessors(processors: CatalogProcessor_2[]): CatalogBuilder; setAllowedLocationTypes(allowedLocationTypes: string[]): CatalogBuilder; - setEntityDataParser(parser: CatalogProcessorParser): CatalogBuilder; + setEntityDataParser(parser: CatalogProcessorParser_2): CatalogBuilder; setFieldFormatValidators(validators: Partial): CatalogBuilder; setLocationAnalyzer(locationAnalyzer: LocationAnalyzer): CatalogBuilder; setPlaceholderResolver( @@ -187,28 +187,39 @@ export interface CatalogProcessingEngine { stop(): Promise; } -export { CatalogProcessor }; +// @public @deprecated (undocumented) +export type CatalogProcessor = CatalogProcessor_2; -export { CatalogProcessorCache }; +// @public @deprecated (undocumented) +export type CatalogProcessorCache = CatalogProcessorCache_2; -export { CatalogProcessorEmit }; +// @public @deprecated (undocumented) +export type CatalogProcessorEmit = CatalogProcessorEmit_2; -export { CatalogProcessorEntityResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorEntityResult = CatalogProcessorEntityResult_2; -export { CatalogProcessorErrorResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorErrorResult = CatalogProcessorErrorResult_2; -export { CatalogProcessorLocationResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorLocationResult = CatalogProcessorLocationResult_2; -export { CatalogProcessorParser }; +// @public @deprecated (undocumented) +export type CatalogProcessorParser = CatalogProcessorParser_2; -export { CatalogProcessorRefreshKeysResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorRefreshKeysResult = + CatalogProcessorRefreshKeysResult_2; -export { CatalogProcessorRelationResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorRelationResult = CatalogProcessorRelationResult_2; -export { CatalogProcessorResult }; +// @public @deprecated (undocumented) +export type CatalogProcessorResult = CatalogProcessorResult_2; // @public (undocumented) -export class CodeOwnersProcessor implements CatalogProcessor { +export class CodeOwnersProcessor implements CatalogProcessor_2 { constructor(options: { integrations: ScmIntegrationRegistry; logger: Logger; @@ -304,7 +315,8 @@ export type DefaultCatalogCollatorFactoryOptions = { entityTransformer?: CatalogCollatorEntityTransformer; }; -export { DeferredEntity }; +// @public @deprecated (undocumented) +export type DeferredEntity = DeferredEntity_2; // @public export type EntitiesSearchFilter = { @@ -325,24 +337,28 @@ export type EntityFilter = } | EntitiesSearchFilter; -export { EntityProvider }; +// @public @deprecated (undocumented) +export type EntityProvider = EntityProvider_2; -export { EntityProviderConnection }; +// @public @deprecated (undocumented) +export type EntityProviderConnection = EntityProviderConnection_2; -export { EntityProviderMutation }; +// @public @deprecated (undocumented) +export type EntityProviderMutation = EntityProviderMutation_2; -export { EntityRelationSpec }; +// @public @deprecated (undocumented) +export type EntityRelationSpec = EntityRelationSpec_2; // @public (undocumented) -export class FileReaderProcessor implements CatalogProcessor { +export class FileReaderProcessor implements CatalogProcessor_2 { // (undocumented) getProcessorName(): string; // (undocumented) readLocation( location: LocationSpec_2, optional: boolean, - emit: CatalogProcessorEmit, - parser: CatalogProcessorParser, + emit: CatalogProcessorEmit_2, + parser: CatalogProcessorParser_2, ): Promise; } @@ -354,7 +370,7 @@ export type LocationAnalyzer = { }; // @public (undocumented) -export class LocationEntityProcessor implements CatalogProcessor { +export class LocationEntityProcessor implements CatalogProcessor_2 { constructor(options: LocationEntityProcessorOptions); // (undocumented) getProcessorName(): string; @@ -362,7 +378,7 @@ export class LocationEntityProcessor implements CatalogProcessor { postProcessEntity( entity: Entity, location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; } @@ -374,20 +390,20 @@ export type LocationEntityProcessorOptions = { // @public @deprecated export type LocationSpec = LocationSpec_2; -// @public (undocumented) -export function locationSpecToLocationEntity(opts: { - location: LocationSpec_2; - parentEntity?: Entity; -}): LocationEntityV1alpha1; +// @public @deprecated (undocumented) +export const locationSpecToLocationEntity: typeof locationSpecToLocationEntity_2; + +// @public @deprecated (undocumented) +export const locationSpecToMetadataName: typeof locationSpecToMetadataName_2; // @public (undocumented) export function parseEntityYaml( data: Buffer, location: LocationSpec_2, -): Iterable; +): Iterable; // @public -export class PlaceholderProcessor implements CatalogProcessor { +export class PlaceholderProcessor implements CatalogProcessor_2 { constructor(options: PlaceholderProcessorOptions); // (undocumented) getProcessorName(): string; @@ -395,7 +411,7 @@ export class PlaceholderProcessor implements CatalogProcessor { preProcessEntity( entity: Entity, location: LocationSpec_2, - emit: CatalogProcessorEmit, + emit: CatalogProcessorEmit_2, ): Promise; } @@ -418,7 +434,7 @@ export type PlaceholderResolverParams = { baseUrl: string; read: PlaceholderResolverRead; resolveUrl: PlaceholderResolverResolveUrl; - emit: CatalogProcessorEmit; + emit: CatalogProcessorEmit_2; }; // @public (undocumented) @@ -433,7 +449,28 @@ export type PlaceholderResolverResolveUrl = ( // @public export type ProcessingIntervalFunction = () => number; -export { processingResult }; +// @public @deprecated (undocumented) +export const processingResult: Readonly<{ + readonly notFoundError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly inputError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly generalError: ( + atLocation: LocationSpec_2, + message: string, + ) => CatalogProcessorResult_2; + readonly location: (newLocation: LocationSpec_2) => CatalogProcessorResult_2; + readonly entity: ( + atLocation: LocationSpec_2, + newEntity: Entity, + ) => CatalogProcessorResult_2; + readonly relation: (spec: EntityRelationSpec_2) => CatalogProcessorResult_2; + readonly refresh: (key: string) => CatalogProcessorResult_2; +}>; // @public (undocumented) export type ScmLocationAnalyzer = { @@ -444,7 +481,7 @@ export type ScmLocationAnalyzer = { }; // @public (undocumented) -export class UrlReaderProcessor implements CatalogProcessor { +export class UrlReaderProcessor implements CatalogProcessor_2 { constructor(options: { reader: UrlReader; logger: Logger }); // (undocumented) getProcessorName(): string; @@ -452,9 +489,9 @@ export class UrlReaderProcessor implements CatalogProcessor { readLocation( location: LocationSpec_2, optional: boolean, - emit: CatalogProcessorEmit, - parser: CatalogProcessorParser, - cache: CatalogProcessorCache, + emit: CatalogProcessorEmit_2, + parser: CatalogProcessorParser_2, + cache: CatalogProcessorCache_2, ): Promise; } ``` diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 5d221f2f41..35eac97cc1 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.8.0-next.1", + "version": "1.8.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/src/deprecated.ts b/plugins/catalog-backend/src/deprecated.ts new file mode 100644 index 0000000000..c92ec719b7 --- /dev/null +++ b/plugins/catalog-backend/src/deprecated.ts @@ -0,0 +1,143 @@ +/* + * Copyright 2023 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 { + locationSpecToMetadataName as _locationSpecToMetadataName, + locationSpecToLocationEntity as _locationSpecToLocationEntity, + processingResult as _processingResult, + type DeferredEntity as _DeferredEntity, + type EntityRelationSpec as _EntityRelationSpec, + type CatalogProcessor as _CatalogProcessor, + type CatalogProcessorParser as _CatalogProcessorParser, + type CatalogProcessorCache as _CatalogProcessorCache, + type CatalogProcessorEmit as _CatalogProcessorEmit, + type CatalogProcessorLocationResult as _CatalogProcessorLocationResult, + type CatalogProcessorEntityResult as _CatalogProcessorEntityResult, + type CatalogProcessorRelationResult as _CatalogProcessorRelationResult, + type CatalogProcessorErrorResult as _CatalogProcessorErrorResult, + type CatalogProcessorRefreshKeysResult as _CatalogProcessorRefreshKeysResult, + type CatalogProcessorResult as _CatalogProcessorResult, + type EntityProvider as _EntityProvider, + type EntityProviderConnection as _EntityProviderConnection, + type EntityProviderMutation as _EntityProviderMutation, +} from '@backstage/plugin-catalog-node'; +import { type LocationSpec as _LocationSpec } from '@backstage/plugin-catalog-common'; + +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const locationSpecToMetadataName = _locationSpecToMetadataName; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const locationSpecToLocationEntity = _locationSpecToLocationEntity; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export const processingResult = _processingResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type DeferredEntity = _DeferredEntity; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityRelationSpec = _EntityRelationSpec; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessor = _CatalogProcessor; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorParser = _CatalogProcessorParser; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorCache = _CatalogProcessorCache; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorEmit = _CatalogProcessorEmit; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorLocationResult = _CatalogProcessorLocationResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorEntityResult = _CatalogProcessorEntityResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorRelationResult = _CatalogProcessorRelationResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorErrorResult = _CatalogProcessorErrorResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorRefreshKeysResult = + _CatalogProcessorRefreshKeysResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type CatalogProcessorResult = _CatalogProcessorResult; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProvider = _EntityProvider; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProviderConnection = _EntityProviderConnection; +/** + * @public + * @deprecated import from `@backstage/plugin-catalog-node` instead + */ +export type EntityProviderMutation = _EntityProviderMutation; + +/** + * Holds the entity location information. + * + * @remarks + * + * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. + * This flag is then set to indicate that the file can be not present. + * default value: 'required'. + * + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type LocationSpec = _LocationSpec; diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index e52336f036..b3d2bc95c7 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -20,45 +20,10 @@ * @packageDocumentation */ -export type { - DeferredEntity, - EntityRelationSpec, - CatalogProcessor, - CatalogProcessorParser, - CatalogProcessorCache, - CatalogProcessorEmit, - CatalogProcessorLocationResult, - CatalogProcessorEntityResult, - CatalogProcessorRelationResult, - CatalogProcessorErrorResult, - CatalogProcessorRefreshKeysResult, - CatalogProcessorResult, - EntityProvider, - EntityProviderConnection, - EntityProviderMutation, -} from '@backstage/plugin-catalog-node'; -export { processingResult } from '@backstage/plugin-catalog-node'; - export * from './catalog'; export * from './ingestion'; export * from './modules'; export * from './processing'; export * from './search'; export * from './service'; -export * from './util'; - -import { LocationSpec as NonDeprecatedLocationSpec } from '@backstage/plugin-catalog-common'; - -/** - * Holds the entity location information. - * - * @remarks - * - * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. - * This flag is then set to indicate that the file can be not present. - * default value: 'required'. - * - * @public - * @deprecated use the same type from `@backstage/plugin-catalog-common` instead - */ -export type LocationSpec = NonDeprecatedLocationSpec; +export * from './deprecated'; diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 1b30333d89..654672a156 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + ## 0.0.8-next.1 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index b0b4b7aba3..20ef38355b 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.8-next.1", + "version": "0.0.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 418ae1f83a..bd0a9d7c76 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-graph +## 0.2.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.28-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 2947b62b8c..ab7e7e78a9 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.28-next.1", + "version": "0.2.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index d8eac64d15..0451769b82 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-import +## 0.9.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.9.6-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 6721a5bbd9..baddab4656 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.6-next.1", + "version": "0.9.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/src/api/CatalogImportClient.test.ts b/plugins/catalog-import/src/api/CatalogImportClient.test.ts index e77abc8a85..646a3b7bf9 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.test.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.test.ts @@ -121,7 +121,6 @@ describe('CatalogImportClient', () => { }); afterEach(() => { - jest.restoreAllMocks(); jest.clearAllMocks(); }); diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index d1b629247f..8ed02981ca 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-catalog-node +## 1.3.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + ## 1.3.4-next.1 ### Patch Changes diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 87da0b6944..47a8e66ca9 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -8,6 +8,7 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; +import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; // @public (undocumented) @@ -142,6 +143,15 @@ export type EntityRelationSpec = { // @public @deprecated export type LocationSpec = LocationSpec_2; +// @public +export function locationSpecToLocationEntity(opts: { + location: LocationSpec_2; + parentEntity?: Entity; +}): LocationEntityV1alpha1; + +// @public +export function locationSpecToMetadataName(location: LocationSpec_2): string; + // @public export const processingResult: Readonly<{ readonly notFoundError: ( diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 677463c52b..d5ad3b86ea 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.4-next.1", + "version": "1.3.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/src/conversion.ts b/plugins/catalog-node/src/conversion.ts new file mode 100644 index 0000000000..bbaebc7e35 --- /dev/null +++ b/plugins/catalog-node/src/conversion.ts @@ -0,0 +1,103 @@ +/* + * Copyright 2021 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 { + Entity, + LocationEntityV1alpha1, + ANNOTATION_LOCATION, + ANNOTATION_ORIGIN_LOCATION, + stringifyEntityRef, + stringifyLocationRef, +} from '@backstage/catalog-model'; +import { createHash } from 'crypto'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; + +/** + * A standard way of producing a machine generated name for a location. + * + * @public + */ +export function locationSpecToMetadataName(location: LocationSpec) { + const hash = createHash('sha1') + .update(`${location.type}:${location.target}`) + .digest('hex'); + return `generated-${hash}`; +} + +/** + * A standard way of producing a machine generated Location kind entity for a + * location. + * + * @public + */ +export function locationSpecToLocationEntity(opts: { + location: LocationSpec; + parentEntity?: Entity; +}): LocationEntityV1alpha1 { + const location = opts.location; + const parentEntity = opts.parentEntity; + + let ownLocation: string; + let originLocation: string; + if (parentEntity) { + const maybeOwnLocation = + parentEntity.metadata.annotations?.[ANNOTATION_LOCATION]; + if (!maybeOwnLocation) { + throw new Error( + `Parent entity '${stringifyEntityRef( + parentEntity, + )}' of location '${stringifyLocationRef( + location, + )}' does not have a location annotation`, + ); + } + ownLocation = maybeOwnLocation; + const maybeOriginLocation = + parentEntity.metadata.annotations?.[ANNOTATION_ORIGIN_LOCATION]; + if (!maybeOriginLocation) { + throw new Error( + `Parent entity '${stringifyEntityRef( + parentEntity, + )}' of location '${stringifyLocationRef( + location, + )}' does not have an origin location annotation`, + ); + } + originLocation = maybeOriginLocation; + } else { + ownLocation = stringifyLocationRef(location); + originLocation = ownLocation; + } + + const result: LocationEntityV1alpha1 = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + name: locationSpecToMetadataName(location), + annotations: { + [ANNOTATION_LOCATION]: ownLocation, + [ANNOTATION_ORIGIN_LOCATION]: originLocation, + }, + }, + spec: { + type: location.type, + target: location.target, + presence: location.presence, + }, + }; + + return result; +} diff --git a/plugins/catalog-node/src/index.ts b/plugins/catalog-node/src/index.ts index 6a1accfcbd..2dd8b5fd5a 100644 --- a/plugins/catalog-node/src/index.ts +++ b/plugins/catalog-node/src/index.ts @@ -21,4 +21,5 @@ */ export * from './api'; +export * from './conversion'; export * from './processing'; diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index e1b9da465e..4d8acf0936 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-react +## 1.4.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/integration@1.4.3-next.0 + ## 1.4.0-next.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 81f91374e6..8f0b9627c7 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.4.0-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 0b3ade1136..873c90de07 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog +## 1.9.0-next.2 + +### Minor Changes + +- 23cc40039c0: allow entity switch to render all cases that match the condition + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + ## 1.9.0-next.1 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index c65cfccfaa..c66ae8fb5e 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.9.0-next.1", + "version": "1.9.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx index 8ee44041c8..13e214d823 100644 --- a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx +++ b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.test.tsx @@ -173,6 +173,42 @@ describe('EntitySwitch', () => { expect(screen.getByText('C')).toBeInTheDocument(); }); + it('should render nothing if no default case is set for multiple matches', () => { + const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; + + render( + + + + A

} /> + B

} /> +
+
+
, + ); + + expect(screen.queryByText('A')).not.toBeInTheDocument(); + expect(screen.queryByText('B')).not.toBeInTheDocument(); + }); + + it('should render nothing if no default case is set for default', () => { + const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; + + render( + + + + A

} /> + B

} /> +
+
+
, + ); + + expect(screen.queryByText('A')).not.toBeInTheDocument(); + expect(screen.queryByText('B')).not.toBeInTheDocument(); + }); + it('should switch with async condition that is true', async () => { const entity = { metadata: { name: 'mock' }, kind: 'component' } as Entity; diff --git a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx index 6ad3c66ab3..3cd806faa5 100644 --- a/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx +++ b/plugins/catalog/src/components/EntitySwitch/EntitySwitch.tsx @@ -169,7 +169,7 @@ function AsyncEntitySwitch({ } function getDefaultChildren(results: SwitchCaseResult[]) { - return results.filter(r => r.if === undefined)[0].children ?? null; + return results.filter(r => r.if === undefined)[0]?.children ?? null; } EntitySwitch.Case = EntitySwitchCaseComponent; diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index dc47a327c0..55ec192258 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-cicd-statistics@0.1.18-next.2 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index c5b999fefb..38de7c6799 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 37deb19ea9..97434f99c7 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cicd-statistics +## 0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.18-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 6078d3a641..8262235489 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.18-next.1", + "version": "0.1.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index e91f34eb87..c43162fe14 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-circleci +## 0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 1ba2a8f7b1..55d02ce8bd 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.16-next.1", + "version": "0.3.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index c5c915d5a4..bc5f71d8e1 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cloudbuild +## 0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index f5787447c8..04fa511cb6 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.16-next.1", + "version": "0.3.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 90a9895eac..e98be293b8 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-code-climate +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index b6c2a04942..9890f8b95e 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.16-next.1", + "version": "0.1.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index b425cc02da..74336f32c8 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-code-coverage-backend +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 9a060d1f0f..fca52bdebc 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.9-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 73cabd8ca1..914768f638 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-code-coverage +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index ae2b03416b..cfdddfc6af 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.9-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 610487334c..7390729c48 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-codescene +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index a4b1bf6d75..49cedd3bc4 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index def33080f2..5e0de80621 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-config-schema +## 0.1.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.39-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index bb0b43729b..730265cbea 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.39-next.1", + "version": "0.1.39-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index d673749859..f108804cb6 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cost-insights +## 0.12.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.12.5-next.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index f2a907dfb3..aabd4d340d 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.5-next.1", + "version": "0.12.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 4949fd5e16..402ee43c1e 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-dynatrace +## 3.0.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 3.0.0-next.1 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 49c408fff3..c66ef32c7b 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "3.0.0-next.1", + "version": "3.0.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index f0acfaef30..cac724d7ef 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 9ac805295e..b482fdb212 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 23016c805f..72cb7b272a 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-entity-feedback +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index da0bc0b0ca..760b192440 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index cd37ad05f9..43ecb6527d 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-entity-validation +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 33f0d8fc60..81c13cc46b 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index e80ae855d6..0e5659c538 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/alpha-api-report.md b/plugins/events-backend-module-aws-sqs/alpha-api-report.md index b9f60c4437..e48515a414 100644 --- a/plugins/events-backend-module-aws-sqs/alpha-api-report.md +++ b/plugins/events-backend-module-aws-sqs/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const awsSqsConsumingEventPublisherEventsModule: () => BackendFeature; +export const eventsModuleAwsSqsConsumingEventPublisher: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 050e13a15f..9278099801 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/src/alpha.ts b/plugins/events-backend-module-aws-sqs/src/alpha.ts index 00f08e4417..4f3ae09c42 100644 --- a/plugins/events-backend-module-aws-sqs/src/alpha.ts +++ b/plugins/events-backend-module-aws-sqs/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { awsSqsConsumingEventPublisherEventsModule } from './service/AwsSqsConsumingEventPublisherEventsModule'; +export { eventsModuleAwsSqsConsumingEventPublisher } from './service/eventsModuleAwsSqsConsumingEventPublisher'; diff --git a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts similarity index 92% rename from plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts rename to plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts index 3963b9a8b6..921dc38552 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.test.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts @@ -20,10 +20,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; import { TestEventBroker } from '@backstage/plugin-events-backend-test-utils'; -import { awsSqsConsumingEventPublisherEventsModule } from './AwsSqsConsumingEventPublisherEventsModule'; +import { eventsModuleAwsSqsConsumingEventPublisher } from './eventsModuleAwsSqsConsumingEventPublisher'; import { AwsSqsConsumingEventPublisher } from '../publisher/AwsSqsConsumingEventPublisher'; -describe('awsSqsEventsModule', () => { +describe('eventsModuleAwsSqsConsumingEventPublisher', () => { it('should be correctly wired and set up', async () => { const config = new ConfigReader({ events: { @@ -68,7 +68,7 @@ describe('awsSqsEventsModule', () => { [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], - features: [awsSqsConsumingEventPublisherEventsModule()], + features: [eventsModuleAwsSqsConsumingEventPublisher()], }); expect(addedPublishers).not.toBeUndefined(); diff --git a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts similarity index 92% rename from plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts rename to plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts index 4205bd231b..41ae2d80d7 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/AwsSqsConsumingEventPublisherEventsModule.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts @@ -27,9 +27,9 @@ import { AwsSqsConsumingEventPublisher } from '../publisher/AwsSqsConsumingEvent * * @alpha */ -export const awsSqsConsumingEventPublisherEventsModule = createBackendModule({ +export const eventsModuleAwsSqsConsumingEventPublisher = createBackendModule({ pluginId: 'events', - moduleId: 'awsSqsConsumingEventPublisherEventsModule', + moduleId: 'awsSqsConsumingEventPublisher', register(env) { env.registerInit({ deps: { diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index df7cfc4aa9..159603d965 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/alpha-api-report.md b/plugins/events-backend-module-azure/alpha-api-report.md index e3fed2cab0..1bd568d1df 100644 --- a/plugins/events-backend-module-azure/alpha-api-report.md +++ b/plugins/events-backend-module-azure/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const azureDevOpsEventRouterEventsModule: () => BackendFeature; +export const eventsModuleAzureDevOpsEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index ca0e0e614f..ef00f0f3b9 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/src/alpha.ts b/plugins/events-backend-module-azure/src/alpha.ts index 8eacbd8270..07334fcbda 100644 --- a/plugins/events-backend-module-azure/src/alpha.ts +++ b/plugins/events-backend-module-azure/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { azureDevOpsEventRouterEventsModule } from './service/AzureDevOpsEventRouterEventsModule'; +export { eventsModuleAzureDevOpsEventRouter } from './service/eventsModuleAzureDevOpsEventRouter'; diff --git a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts similarity index 88% rename from plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts rename to plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts index dbd61782ae..1ff756a2d2 100644 --- a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { azureDevOpsEventRouterEventsModule } from './AzureDevOpsEventRouterEventsModule'; +import { eventsModuleAzureDevOpsEventRouter } from './eventsModuleAzureDevOpsEventRouter'; import { AzureDevOpsEventRouter } from '../router/AzureDevOpsEventRouter'; -describe('azureDevOpsEventRouterEventsModule', () => { +describe('eventsModuleAzureDevOpsEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: AzureDevOpsEventRouter | undefined; let addedSubscriber: AzureDevOpsEventRouter | undefined; @@ -35,7 +35,7 @@ describe('azureDevOpsEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [azureDevOpsEventRouterEventsModule()], + features: [eventsModuleAzureDevOpsEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts similarity index 95% rename from plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts rename to plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts index 18851befa4..36f3acada0 100644 --- a/plugins/events-backend-module-azure/src/service/AzureDevOpsEventRouterEventsModule.ts +++ b/plugins/events-backend-module-azure/src/service/eventsModuleAzureDevOpsEventRouter.ts @@ -25,7 +25,7 @@ import { AzureDevOpsEventRouter } from '../router/AzureDevOpsEventRouter'; * * @alpha */ -export const azureDevOpsEventRouterEventsModule = createBackendModule({ +export const eventsModuleAzureDevOpsEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'azureDevOpsEventRouter', register(env) { diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index 5f2a679c67..9cf0d0a70e 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md b/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md index f8e550bf98..5e63ae36c8 100644 --- a/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md +++ b/plugins/events-backend-module-bitbucket-cloud/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const bitbucketCloudEventRouterEventsModule: () => BackendFeature; +export const eventsModuleBitbucketCloudEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 44849ff0fc..fa7dba892e 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts b/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts index e19ff9c9b5..75cda4327d 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { bitbucketCloudEventRouterEventsModule } from './service/BitbucketCloudEventRouterEventsModule'; +export { eventsModuleBitbucketCloudEventRouter } from './service/eventsModuleBitbucketCloudEventRouter'; diff --git a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts similarity index 88% rename from plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts rename to plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts index 60ce5b713e..17d2252c7b 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { bitbucketCloudEventRouterEventsModule } from './BitbucketCloudEventRouterEventsModule'; +import { eventsModuleBitbucketCloudEventRouter } from './eventsModuleBitbucketCloudEventRouter'; import { BitbucketCloudEventRouter } from '../router/BitbucketCloudEventRouter'; -describe('bitbucketCloudEventRouterEventsModule', () => { +describe('eventsModuleBitbucketCloudEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: BitbucketCloudEventRouter | undefined; let addedSubscriber: BitbucketCloudEventRouter | undefined; @@ -35,7 +35,7 @@ describe('bitbucketCloudEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [bitbucketCloudEventRouterEventsModule()], + features: [eventsModuleBitbucketCloudEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts similarity index 95% rename from plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts rename to plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts index 9516651aa3..60a8cc31c8 100644 --- a/plugins/events-backend-module-bitbucket-cloud/src/service/BitbucketCloudEventRouterEventsModule.ts +++ b/plugins/events-backend-module-bitbucket-cloud/src/service/eventsModuleBitbucketCloudEventRouter.ts @@ -25,7 +25,7 @@ import { BitbucketCloudEventRouter } from '../router/BitbucketCloudEventRouter'; * * @alpha */ -export const bitbucketCloudEventRouterEventsModule = createBackendModule({ +export const eventsModuleBitbucketCloudEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'bitbucketCloudEventRouter', register(env) { diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 263fe8ac5b..accd659217 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/alpha-api-report.md b/plugins/events-backend-module-gerrit/alpha-api-report.md index f610d518e7..d1be54730f 100644 --- a/plugins/events-backend-module-gerrit/alpha-api-report.md +++ b/plugins/events-backend-module-gerrit/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gerritEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGerritEventRouter: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 3a407cb786..de5d104781 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/src/alpha.ts b/plugins/events-backend-module-gerrit/src/alpha.ts index 26fd89b14d..788331b998 100644 --- a/plugins/events-backend-module-gerrit/src/alpha.ts +++ b/plugins/events-backend-module-gerrit/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { gerritEventRouterEventsModule } from './service/GerritEventRouterEventsModule'; +export { eventsModuleGerritEventRouter } from './service/eventsModuleGerritEventRouter'; diff --git a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts rename to plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts index 6a8f4f46ff..88ef995966 100644 --- a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { gerritEventRouterEventsModule } from './GerritEventRouterEventsModule'; +import { eventsModuleGerritEventRouter } from './eventsModuleGerritEventRouter'; import { GerritEventRouter } from '../router/GerritEventRouter'; -describe('gerritEventRouterEventsModule', () => { +describe('eventsModuleGerritEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GerritEventRouter | undefined; let addedSubscriber: GerritEventRouter | undefined; @@ -35,7 +35,7 @@ describe('gerritEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [gerritEventRouterEventsModule()], + features: [eventsModuleGerritEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts similarity index 95% rename from plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts rename to plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts index 31f5c9b384..8d490ea0b2 100644 --- a/plugins/events-backend-module-gerrit/src/service/GerritEventRouterEventsModule.ts +++ b/plugins/events-backend-module-gerrit/src/service/eventsModuleGerritEventRouter.ts @@ -25,7 +25,7 @@ import { GerritEventRouter } from '../router/GerritEventRouter'; * * @alpha */ -export const gerritEventRouterEventsModule = createBackendModule({ +export const eventsModuleGerritEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'gerritEventRouter', register(env) { diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index ca28508b5c..b531c5db52 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/alpha-api-report.md b/plugins/events-backend-module-github/alpha-api-report.md index cb95928b17..c233df8634 100644 --- a/plugins/events-backend-module-github/alpha-api-report.md +++ b/plugins/events-backend-module-github/alpha-api-report.md @@ -6,10 +6,10 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const githubEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGithubEventRouter: () => BackendFeature; // @alpha -export const githubWebhookEventsModule: () => BackendFeature; +export const eventsModuleGithubWebhook: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index e19f5a66e1..4a010f5841 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/src/alpha.ts b/plugins/events-backend-module-github/src/alpha.ts index 8a712cacb1..2db8e9d9aa 100644 --- a/plugins/events-backend-module-github/src/alpha.ts +++ b/plugins/events-backend-module-github/src/alpha.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { githubEventRouterEventsModule } from './service/GithubEventRouterEventsModule'; -export { githubWebhookEventsModule } from './service/GithubWebhookEventsModule'; +export { eventsModuleGithubEventRouter } from './service/eventsModuleGithubEventRouter'; +export { eventsModuleGithubWebhook } from './service/eventsModuleGithubWebhook'; diff --git a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts index 0e2ca69366..bfa186c7bc 100644 --- a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { githubEventRouterEventsModule } from './GithubEventRouterEventsModule'; +import { eventsModuleGithubEventRouter } from './eventsModuleGithubEventRouter'; import { GithubEventRouter } from '../router/GithubEventRouter'; -describe('githubEventRouterEventsModule', () => { +describe('eventsModuleGithubEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GithubEventRouter | undefined; let addedSubscriber: GithubEventRouter | undefined; @@ -35,7 +35,7 @@ describe('githubEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [githubEventRouterEventsModule()], + features: [eventsModuleGithubEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts similarity index 95% rename from plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts index 56cc571763..17485098c2 100644 --- a/plugins/events-backend-module-github/src/service/GithubEventRouterEventsModule.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubEventRouter.ts @@ -25,7 +25,7 @@ import { GithubEventRouter } from '../router/GithubEventRouter'; * * @alpha */ -export const githubEventRouterEventsModule = createBackendModule({ +export const eventsModuleGithubEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'githubEventRouter', register(env) { diff --git a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts similarity index 94% rename from plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts index 9e33cac6a0..b8a252aaba 100644 --- a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.test.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts @@ -23,9 +23,9 @@ import { RequestDetails, } from '@backstage/plugin-events-node'; import { sign } from '@octokit/webhooks-methods'; -import { githubWebhookEventsModule } from './GithubWebhookEventsModule'; +import { eventsModuleGithubWebhook } from './eventsModuleGithubWebhook'; -describe('githubWebhookEventsModule', () => { +describe('eventsModuleGithubWebhook', () => { const secret = 'valid-secret'; const payload = { test: 'payload' }; const payloadString = JSON.stringify(payload); @@ -60,7 +60,7 @@ describe('githubWebhookEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [[coreServices.config, config]], - features: [githubWebhookEventsModule()], + features: [eventsModuleGithubWebhook()], }); expect(addedIngress).not.toBeUndefined(); diff --git a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts similarity index 95% rename from plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts rename to plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts index 10cb12e431..7e89ceead7 100644 --- a/plugins/events-backend-module-github/src/service/GithubWebhookEventsModule.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts @@ -28,7 +28,7 @@ import { createGithubSignatureValidator } from '../http/createGithubSignatureVal * * @alpha */ -export const githubWebhookEventsModule = createBackendModule({ +export const eventsModuleGithubWebhook = createBackendModule({ pluginId: 'events', moduleId: 'githubWebhook', register(env) { diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index ea0787ca23..f992585219 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/alpha-api-report.md b/plugins/events-backend-module-gitlab/alpha-api-report.md index 64727cc844..bf61f66a4b 100644 --- a/plugins/events-backend-module-gitlab/alpha-api-report.md +++ b/plugins/events-backend-module-gitlab/alpha-api-report.md @@ -6,10 +6,10 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const gitlabEventRouterEventsModule: () => BackendFeature; +export const eventsModuleGitlabEventRouter: () => BackendFeature; // @alpha -export const gitlabWebhookEventsModule: () => BackendFeature; +export const eventsModuleGitlabWebhook: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 4e9510ad80..917f9fdb89 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/src/alpha.ts b/plugins/events-backend-module-gitlab/src/alpha.ts index 357c9f81ce..65610af96c 100644 --- a/plugins/events-backend-module-gitlab/src/alpha.ts +++ b/plugins/events-backend-module-gitlab/src/alpha.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { gitlabEventRouterEventsModule } from './service/GitlabEventRouterEventsModule'; -export { gitlabWebhookEventsModule } from './service/GitlabWebhookEventsModule'; +export { eventsModuleGitlabEventRouter } from './service/eventsModuleGitlabEventRouter'; +export { eventsModuleGitlabWebhook } from './service/eventsModuleGitlabWebhook'; diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts similarity index 89% rename from plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts index f8b03bc0f3..86a0df6e68 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.test.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.test.ts @@ -16,10 +16,10 @@ import { startTestBackend } from '@backstage/backend-test-utils'; import { eventsExtensionPoint } from '@backstage/plugin-events-node/alpha'; -import { gitlabEventRouterEventsModule } from './GitlabEventRouterEventsModule'; +import { eventsModuleGitlabEventRouter } from './eventsModuleGitlabEventRouter'; import { GitlabEventRouter } from '../router/GitlabEventRouter'; -describe('gitlabEventRouterEventsModule', () => { +describe('eventsModuleGitlabEventRouter', () => { it('should be correctly wired and set up', async () => { let addedPublisher: GitlabEventRouter | undefined; let addedSubscriber: GitlabEventRouter | undefined; @@ -35,7 +35,7 @@ describe('gitlabEventRouterEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [], - features: [gitlabEventRouterEventsModule()], + features: [eventsModuleGitlabEventRouter()], }); expect(addedPublisher).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts index 39ccd5cd60..3425601529 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabEventRouterEventsModule.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabEventRouter.ts @@ -25,7 +25,7 @@ import { GitlabEventRouter } from '../router/GitlabEventRouter'; * * @alpha */ -export const gitlabEventRouterEventsModule = createBackendModule({ +export const eventsModuleGitlabEventRouter = createBackendModule({ pluginId: 'events', moduleId: 'gitlabEventRouter', register(env) { diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts index b42f2c474e..c38233ecfd 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.test.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts @@ -22,7 +22,7 @@ import { HttpPostIngressOptions, RequestDetails, } from '@backstage/plugin-events-node'; -import { gitlabWebhookEventsModule } from './GitlabWebhookEventsModule'; +import { eventsModuleGitlabWebhook } from './eventsModuleGitlabWebhook'; describe('gitlabWebhookEventsModule', () => { const requestWithToken = (token?: string) => { @@ -55,7 +55,7 @@ describe('gitlabWebhookEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [[coreServices.config, config]], - features: [gitlabWebhookEventsModule()], + features: [eventsModuleGitlabWebhook()], }); expect(addedIngress).not.toBeUndefined(); diff --git a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts similarity index 95% rename from plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts rename to plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts index c20e55caa9..0933ef342a 100644 --- a/plugins/events-backend-module-gitlab/src/service/GitlabWebhookEventsModule.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts @@ -30,7 +30,7 @@ import { createGitlabTokenValidator } from '../http/createGitlabTokenValidator'; * * @alpha */ -export const gitlabWebhookEventsModule = createBackendModule({ +export const eventsModuleGitlabWebhook = createBackendModule({ pluginId: 'events', moduleId: 'gitlabWebhook', register(env) { diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 73b92152bd..aaf14aa68b 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.4-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 115645436b..67d6671497 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 9d78dc77c1..82fb0c6fc1 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-events-node@0.2.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.4-next.1 ### Patch Changes diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index cef8ac7330..cf89f389b2 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -186,9 +186,9 @@ import { eventsExtensionPoint } from '@backstage/plugin-events-node'; // [...] -export const yourModuleEventsModule = createBackendModule({ +export const eventsModuleYourFeature = createBackendModule({ pluginId: 'events', - moduleId: 'yourModule', + moduleId: 'yourFeature', register(env) { // [...] env.registerInit({ diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 6e4b1684e5..4a51e56b6a 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.4-next.1", + "version": "0.2.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 0e1853b101..a19d9badc2 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + ## 0.2.4-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index bd473abaa7..76eb1b2bf3 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.4-next.1", + "version": "0.2.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 628d6e419d..edde9b9d54 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @internal/plugin-todo-list-backend +## 1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.0.11-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 562bbc0c7f..5579f748b2 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.11-next.1", + "version": "1.0.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 281928f88a..4739ab303e 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 1.0.11-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index b572bfc215..a7366ce36f 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.11-next.1", + "version": "1.0.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index bb9023f693..7874062954 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-explore-backend +## 0.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.0.5-next.1 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index f16954ad47..dbdab19329 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.5-next.1", + "version": "0.0.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index 135369b215..1f68752e6e 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-explore-react +## 0.0.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.0.27-next.1 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 26d5b8465c..6bb7ad5f0a 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.27-next.1", + "version": "0.0.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 8942e1f286..72d93cf927 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-explore +## 0.4.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-explore-react@0.0.27-next.2 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 15d642af77..c91671c816 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 81e7c9b7c7..1fbf09d8d4 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-firehydrant +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 3f4b86a192..293679c2ea 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index ec2b669edb..af439b6fd0 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-fossa +## 0.2.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.48-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index ff2d936880..1135c76bb1 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.48-next.1", + "version": "0.2.48-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 0f3c21ee25..2460deb73c 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcalendar +## 0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.12-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index fc0c8961f5..83471340b8 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.12-next.1", + "version": "0.3.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 3857a37d0f..ecb3ec60fc 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcp-projects +## 0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.35-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index e62870eb11..1029b37cd0 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.35-next.1", + "version": "0.3.35-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 52b1bfe29e..c97568b076 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-git-release-manager +## 0.3.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + ## 0.3.29-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index ce2577c7b9..0c9507bc24 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.29-next.1", + "version": "0.3.29-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 112d5ff49f..ffec353673 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-github-actions +## 0.5.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + ## 0.5.16-next.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 6d8103b349..d26249218e 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.16-next.1", + "version": "0.5.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 3aa2e656bc..cc8c6a838e 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-deployments +## 0.1.47-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/integration@1.4.3-next.0 + ## 0.1.47-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 2c93cf3bc4..f9019b5029 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.47-next.1", + "version": "0.1.47-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 6a4910e4af..5a440a28f3 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-github-issues +## 0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + ## 0.2.5-next.1 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 6192130475..83e457a606 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.5-next.1", + "version": "0.2.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 38abb67517..ae15428eed 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration@1.4.3-next.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 5872f0608d..ff5393988b 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index a276f24d9e..8522e1e16c 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gitops-profiles +## 0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.34-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index c12c487f24..291b73b308 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.34-next.1", + "version": "0.3.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 68cdfced64..71d7aa3af0 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gocd +## 0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.22-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 9f1f299d29..f9789ffde4 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.22-next.1", + "version": "0.1.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 85e7cf021d..f110d7b813 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-graphiql +## 0.2.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.48-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 27a1ad7e07..a608ecb8db 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.48-next.1", + "version": "0.2.48-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 79405f2635..0ab0918031 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/plugin-catalog-graphql@0.3.19-next.1 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 5293a2dbcb..401119b052 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index 556bff7f8a..982dfec9dc 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-graphql-voyager +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index cfaf9bb449..5d2b809bb3 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index cbab27bfd6..51552a0135 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-home +## 0.4.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.32-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 1c1d7da24d..2957625478 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.32-next.1", + "version": "0.4.32-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 9b672bb3ab..e3d63efd71 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-ilert +## 0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.5-next.1 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index ccfc5dbc3a..cc8183d6cb 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.5-next.1", + "version": "0.2.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 787e930973..f18f75d0a4 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-jenkins-backend +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 6228f6e83e..daf5073792 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 098d3154c4..fe8f1e2d13 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-jenkins +## 0.7.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.7.15-next.1 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 59c3d92f6c..204d88db60 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.15-next.1", + "version": "0.7.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 02c498e3fe..92bcf3de3f 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kafka-backend +## 0.2.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.36-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 61e32c8177..38b1f60fcb 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.36-next.1", + "version": "0.2.36-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index d55d1f74ec..1706f206e7 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka +## 0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 04cb3c0da0..017c14881a 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.16-next.1", + "version": "0.3.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index a502089e13..ac1287f8aa 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-backend +## 0.9.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.9.4-next.1 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 3e45bed285..ee7844c76e 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.9.4-next.1", + "version": "0.9.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index ea6a7f0732..05929a7d46 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes +## 0.7.9-next.2 + +### Patch Changes + +- 8adeb19b37d: GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.7.9-next.1 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 39d4cfdec6..ed806ee521 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.9-next.1", + "version": "0.7.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/src/plugin.ts b/plugins/kubernetes/src/plugin.ts index 124bff831b..e2b13f43fe 100644 --- a/plugins/kubernetes/src/plugin.ts +++ b/plugins/kubernetes/src/plugin.ts @@ -23,6 +23,7 @@ import { createRouteRef, discoveryApiRef, identityApiRef, + gitlabAuthApiRef, googleAuthApiRef, microsoftAuthApiRef, oktaAuthApiRef, @@ -49,18 +50,21 @@ export const kubernetesPlugin = createPlugin({ createApiFactory({ api: kubernetesAuthProvidersApiRef, deps: { + gitlabAuthApi: gitlabAuthApiRef, googleAuthApi: googleAuthApiRef, microsoftAuthApi: microsoftAuthApiRef, oktaAuthApi: oktaAuthApiRef, oneloginAuthApi: oneloginAuthApiRef, }, factory: ({ + gitlabAuthApi, googleAuthApi, microsoftAuthApi, oktaAuthApi, oneloginAuthApi, }) => { const oidcProviders = { + gitlab: gitlabAuthApi, google: googleAuthApi, microsoft: microsoftAuthApi, okta: oktaAuthApi, diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 9eac651564..0caf949bd6 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-lighthouse-backend +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index cb70cc6746..7fa51b3446 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 219a59b025..f326707dfa 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-lighthouse +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 6928c32e6a..3fcb24986d 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index c7ea736e5a..ac922c735b 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-linguist-backend +## 0.2.0-next.2 + +### Patch Changes + +- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.0-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 15d4496bc8..01c4f12afa 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 471fbf4042..3d83855122 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-linguist +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index a26813a1b4..276bb81574 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 6347b1bcf7..69a93bc320 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-microsoft-calendar +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 04f466598e..8d20a5de70 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 0cf1afb2f6..93b27ba385 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 93b3af02d0..9958741b5f 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.9-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 4c319caeed..bd0ef0d06f 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-newrelic +## 0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.34-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index bacfc2e2f1..3ad74b3949 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.34-next.1", + "version": "0.3.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index a9020f76c3..a3743722b8 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-octopus-deploy +## 0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.0-next.1 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index c5cdf1fed4..9ba86f1587 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.1.0-next.1", + "version": "0.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index c67228c438..cb59276110 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-org-react +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 853ba7058d..a2e6623523 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 15cb675035..4728f8be20 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-org +## 0.6.6-next.2 + +### Patch Changes + +- a06fcac4040: Add styling to the `MembersListCard` and `ComponentsGrid` to handle overflow text. +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 08cadc11db..bd7ea9a344 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.6-next.1", + "version": "0.6.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index e6e2519fba..37189de162 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-pagerduty +## 0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.5.9-next.1 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 9f57e8bfcd..0ae7623240 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.9-next.1", + "version": "0.5.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 79c9e4c931..aa43870b1d 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index bc72277f12..11e38bcd36 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.14-next.1", + "version": "0.1.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 6be9142f0e..d41640b55c 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 06d5827ebe..1e7ca292d1 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.14-next.1", + "version": "0.1.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index d9062aa03f..a55c711386 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-backend +## 0.5.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.5.18-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 734e8c63b0..a7202c9672 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.18-next.1", + "version": "0.5.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index c9c0fc5005..59052c2184 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-node +## 0.7.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.7.6-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 1a9dacffa0..92c0a7685a 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.6-next.1", + "version": "0.7.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index ce5346c846..31832e9a83 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-permission-react +## 0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.11-next.1 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index f904830280..1d5d0713b7 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.11-next.1", + "version": "0.4.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 7ababd2832..da2697188a 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-playlist-backend +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 990a651ccb..2d868b950a 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 450fc880f2..bc0263fd00 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-playlist +## 0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 18faa09cc8..445171f9b8 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.7-next.1", + "version": "0.1.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index dc5562369c..8b649c44de 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.37-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 72bbef0750..a7d320c37c 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.37-next.1", + "version": "0.2.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts index b669e82f3f..6912965659 100644 --- a/plugins/proxy-backend/src/service/router.ts +++ b/plugins/proxy-backend/src/service/router.ts @@ -121,6 +121,11 @@ export function buildMiddleware( // Attach the logger to the proxy config fullConfig.logProvider = () => logger; + // http-proxy-middleware uses this log level to check if it should log the + // requests that it proxies. Setting this to the most verbose log level + // ensures that it always logs these requests. Our logger ends up deciding + // if the logs are displayed or not. + fullConfig.logLevel = 'debug'; // Only return the allowed HTTP headers to not forward unwanted secret headers const requestHeaderAllowList = new Set( diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 2e1a515b5d..edda54dcd1 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.40-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 1fcb4d288b..31d802dece 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.40-next.1", + "version": "0.1.40-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index df90e7f8bf..943db21cce 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar +## 0.4.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.4.16-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index ff4e1d3539..a3189c147d 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.16-next.1", + "version": "0.4.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index e7a96b1596..2dcb0eb279 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.18-next.2 + +### Patch Changes + +- 62414770ead: allow container runner to be undefined in cookiecutter plugin +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/README.md b/plugins/scaffolder-backend-module-cookiecutter/README.md index ae34e09c96..0e8e11ef7d 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/README.md +++ b/plugins/scaffolder-backend-module-cookiecutter/README.md @@ -161,3 +161,5 @@ You can do so by including the following lines in the last step of your Dockerfi RUN apt-get update && apt-get install -y python3 python3-pip RUN pip3 install cookiecutter ``` + +In this case, you don't have to include `containerRunner` in the action configuration. diff --git a/plugins/scaffolder-backend-module-cookiecutter/api-report.md b/plugins/scaffolder-backend-module-cookiecutter/api-report.md index 76f2ced66f..2944f5240e 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/api-report.md +++ b/plugins/scaffolder-backend-module-cookiecutter/api-report.md @@ -15,7 +15,7 @@ import { UrlReader } from '@backstage/backend-common'; export function createFetchCookiecutterAction(options: { reader: UrlReader; integrations: ScmIntegrations; - containerRunner: ContainerRunner; + containerRunner?: ContainerRunner; }): TemplateAction<{ url: string; targetPath?: string | undefined; diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index e0f2368664..373320191a 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.18-next.1", + "version": "0.2.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts index f8b049f95f..9d7f06afc8 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts +++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts @@ -223,4 +223,16 @@ describe('fetch:cookiecutter', () => { }), ); }); + + it('should throw error if cookiecutter is not installed and containerRunner is undefined', async () => { + commandExists.mockResolvedValue(false); + const ccAction = createFetchCookiecutterAction({ + integrations, + reader: mockReader, + }); + + await expect(ccAction.handler(mockContext)).rejects.toThrow( + /Invalid state: containerRunner cannot be undefined when cookiecutter is not installed/, + ); + }); }); diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts index 5c69b9dce2..b63a044a20 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts +++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts @@ -33,9 +33,9 @@ import { import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; export class CookiecutterRunner { - private readonly containerRunner: ContainerRunner; + private readonly containerRunner?: ContainerRunner; - constructor({ containerRunner }: { containerRunner: ContainerRunner }) { + constructor({ containerRunner }: { containerRunner?: ContainerRunner }) { this.containerRunner = containerRunner; } @@ -101,6 +101,11 @@ export class CookiecutterRunner { logStream, }); } else { + if (this.containerRunner === undefined) { + throw new Error( + 'Invalid state: containerRunner cannot be undefined when cookiecutter is not installed', + ); + } await this.containerRunner.runContainer({ imageName: imageName ?? 'spotify/backstage-cookiecutter', command: 'cookiecutter', @@ -139,7 +144,7 @@ export class CookiecutterRunner { export function createFetchCookiecutterAction(options: { reader: UrlReader; integrations: ScmIntegrations; - containerRunner: ContainerRunner; + containerRunner?: ContainerRunner; }) { const { reader, containerRunner, integrations } = options; diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index e816de1aa9..5c7fb1dc2d 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.4.11-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 2ba80b2e32..be9d053340 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.11-next.1", + "version": "0.4.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts index 56f85d002e..37d0bcac4a 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts @@ -91,7 +91,7 @@ describe('fetch:rails', () => { beforeEach(() => { mockFs({ [`${mockContext.workspacePath}/result`]: {} }); - jest.restoreAllMocks(); + jest.clearAllMocks(); }); afterEach(() => { diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index e804b6c33b..ae6d8734c9 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index acd7030e29..36f5139b28 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 786a2d1f2b..e87cf64167 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.16-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 82651cf781..01ba3f5eea 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.16-next.1", + "version": "0.2.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 2ffbda38db..65a827797f 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-backend +## 1.12.0-next.2 + +### Patch Changes + +- 860de10fa67: Make identity valid if subject of token is a backstage server-2-server auth token +- 65454876fb2: Minor API report tweaks +- 9968f455921: catalog write action should allow any shape of object +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.1-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.12.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index ca9b3543af..e0f7ddb441 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -11,9 +11,11 @@ import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; +import { Duration } from 'luxon'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; import { GithubCredentialsProvider } from '@backstage/integration'; +import { HumanDuration } from '@backstage/types'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; @@ -527,6 +529,11 @@ export const createTemplateAction: < action: TemplateActionOptions, ) => TemplateAction_2; +// @public +export function createWaitAction(options?: { + maxWaitTime?: Duration | HumanDuration; +}): TemplateAction_2; + // @public export type CreateWorkerOptions = { taskBroker: TaskBroker; @@ -549,6 +556,14 @@ export interface CurrentClaimedTask { // @public export class DatabaseTaskStore implements TaskStore { + // (undocumented) + cancelTask( + options: TaskStoreEmitOptions< + { + message: string; + } & JsonObject + >, + ): Promise; // (undocumented) claimTask(): Promise; // (undocumented) @@ -693,6 +708,8 @@ export type SerializedTaskEvent = { // @public export interface TaskBroker { + // (undocumented) + cancel?(taskId: string): Promise; // (undocumented) claim(): Promise; // (undocumented) @@ -730,6 +747,8 @@ export type TaskCompletionState = 'failed' | 'completed'; // @public export interface TaskContext { + // (undocumented) + cancelSignal: AbortSignal; // (undocumented) complete(result: TaskCompletionState, metadata?: JsonObject): Promise; // (undocumented) @@ -749,16 +768,19 @@ export interface TaskContext { } // @public -export type TaskEventType = 'completion' | 'log'; +export type TaskEventType = 'completion' | 'log' | 'cancelled'; // @public export class TaskManager implements TaskContext { + // (undocumented) + get cancelSignal(): AbortSignal; // (undocumented) complete(result: TaskCompletionState, metadata?: JsonObject): Promise; // (undocumented) static create( task: CurrentClaimedTask, storage: TaskStore, + abortSignal: AbortSignal, logger: Logger, ): TaskManager; // (undocumented) @@ -780,14 +802,16 @@ export type TaskSecrets = TaskSecrets_2; // @public export type TaskStatus = - | 'open' - | 'processing' - | 'failed' | 'cancelled' - | 'completed'; + | 'completed' + | 'failed' + | 'open' + | 'processing'; // @public export interface TaskStore { + // (undocumented) + cancelTask?(options: TaskStoreEmitOptions): Promise; // (undocumented) claimTask(): Promise; // (undocumented) diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index bc4ecb8bf9..e27f3ecead 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.12.0-next.1", + "version": "1.12.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -64,6 +64,7 @@ "@gitbeaker/node": "^35.1.0", "@octokit/webhooks": "^10.0.0", "@types/express": "^4.17.6", + "@types/luxon": "^3.0.0", "azure-devops-node-api": "^11.0.1", "command-exists": "^1.2.9", "compression": "^1.7.4", @@ -109,6 +110,7 @@ "mock-fs": "^5.1.0", "msw": "^1.0.0", "supertest": "^6.1.3", + "wait-for-expect": "^3.0.2", "yaml": "^2.0.0" }, "files": [ diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.ts index aaaf504833..9e823d2574 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/write.ts @@ -70,6 +70,7 @@ export function createCatalogWriteAction() { // TODO: this should reference an zod entity validator if it existed. entity: z .object({}) + .passthrough() .describe( 'You can provide the same values used in the Entity schema.', ), diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index 9ba4a27b1a..d4c8de3604 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -30,7 +30,7 @@ import { } from './catalog'; import { TemplateFilter, TemplateGlobal } from '../../../lib'; -import { createDebugLogAction } from './debug'; +import { createDebugLogAction, createWaitAction } from './debug'; import { createFetchPlainAction, createFetchTemplateAction } from './fetch'; import { createFilesystemDeleteAction, @@ -159,6 +159,7 @@ export const createBuiltinActions = ( config, }), createDebugLogAction(), + createWaitAction(), createCatalogRegisterAction({ catalogClient, integrations }), createFetchCatalogEntityAction({ catalogClient }), createCatalogWriteAction(), diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/index.ts index 8cc50a7eba..3776ce7f03 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/index.ts @@ -15,3 +15,4 @@ */ export { createDebugLogAction } from './log'; +export { createWaitAction } from './wait'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts new file mode 100644 index 0000000000..0d4cdaba4b --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.test.ts @@ -0,0 +1,76 @@ +/* + * Copyright 2021 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 mockFs from 'mock-fs'; +import { createWaitAction } from './wait'; +import { Writable } from 'stream'; +import os from 'os'; + +describe('debug:wait', () => { + const action = createWaitAction(); + + const logStream = { + write: jest.fn(), + } as jest.Mocked> as jest.Mocked; + + const mockTmpDir = os.tmpdir(); + const mockContext = { + input: {}, + baseUrl: 'somebase', + workspacePath: mockTmpDir, + logger: getVoidLogger(), + logStream, + output: jest.fn(), + createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + }; + + beforeEach(() => { + jest.resetAllMocks(); + }); + + afterEach(() => { + mockFs.restore(); + }); + + it('should wait for specified period of time', async () => { + const context = { + ...mockContext, + input: { + milliseconds: 50, + }, + }; + const start = new Date().getTime(); + await action.handler(context); + const end = new Date().getTime(); + expect(end - start).toBeGreaterThanOrEqual(50); + }); + + it('should not allow to set waiting time longer than the max waiting time', async () => { + const context = { + ...mockContext, + input: { + minutes: 11, + }, + }; + + await expect(async () => { + await action.handler(context); + }).rejects.toThrow( + 'Waiting duration is longer than the maximum threshold of 0 hours, 0 minutes, 30 seconds', + ); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.ts new file mode 100644 index 0000000000..02cab239cb --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.ts @@ -0,0 +1,131 @@ +/* + * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { HumanDuration } from '@backstage/types'; +import yaml from 'yaml'; +import { Duration } from 'luxon'; + +const id = 'debug:wait'; + +const MAX_WAIT_TIME_IN_ISO = 'T00:00:30'; + +const examples = [ + { + description: 'Waiting for 5 seconds', + example: yaml.stringify({ + steps: [ + { + action: id, + id: 'wait-5sec', + name: 'Waiting for 5 seconds', + input: { + seconds: 5, + }, + }, + ], + }), + }, + { + description: 'Waiting for 5 minutes', + example: yaml.stringify({ + steps: [ + { + action: id, + id: 'wait-5min', + name: 'Waiting for 5 minutes', + input: { + minutes: 5, + }, + }, + ], + }), + }, +]; + +/** + * Waits for a certain period of time. + * + * @remarks + * + * This task is useful to give some waiting time for manual intervention. + * Has to be used in a combination with other actions. + * + * @public + */ +export function createWaitAction(options?: { + maxWaitTime?: Duration | HumanDuration; +}) { + const toDuration = ( + maxWaitTime: Duration | HumanDuration | undefined, + ): Duration => { + if (maxWaitTime) { + if (maxWaitTime instanceof Duration) { + return maxWaitTime; + } + return Duration.fromObject(maxWaitTime); + } + return Duration.fromISOTime(MAX_WAIT_TIME_IN_ISO); + }; + + return createTemplateAction({ + id, + description: 'Waits for a certain period of time.', + examples, + schema: { + input: { + type: 'object', + properties: { + minutes: { + title: 'Waiting period in minutes.', + type: 'number', + }, + seconds: { + title: 'Waiting period in seconds.', + type: 'number', + }, + milliseconds: { + title: 'Waiting period in milliseconds.', + type: 'number', + }, + }, + }, + }, + async handler(ctx) { + const delayTime = Duration.fromObject(ctx.input); + const maxWait = toDuration(options?.maxWaitTime); + + if (delayTime.minus(maxWait).toMillis() > 0) { + throw new Error( + `Waiting duration is longer than the maximum threshold of ${maxWait.toHuman()}`, + ); + } + + await new Promise(resolve => { + const controller = new AbortController(); + const timeoutHandle = setTimeout(abort, delayTime.toMillis()); + ctx.signal?.addEventListener('abort', abort); + + function abort() { + ctx.signal?.removeEventListener('abort', abort); + clearTimeout(timeoutHandle!); + controller.abort(); + resolve('finished'); + } + }); + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts index 2d2775572f..a2262c1f9f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts @@ -62,7 +62,7 @@ describe('publish:azure', () => { (WebApi as unknown as jest.Mock).mockImplementation(() => mockGitApi); beforeEach(() => { - jest.restoreAllMocks(); + jest.clearAllMocks(); }); it('should throw an error when the repoUrl is not well formed', async () => { @@ -183,7 +183,12 @@ describe('publish:azure', () => { id: '709e891c-dee7-4f91-b963-534713c0737f', })); - await action.handler(mockContext); + await action.handler({ + ...mockContext, + input: { + repoUrl: 'dev.azure.com?repo=bob&owner=owner&organization=org', + }, + }); expect(WebApi).toHaveBeenCalledWith( 'https://dev.azure.com/org', @@ -234,7 +239,7 @@ describe('publish:azure', () => { expect(initRepoAndPush).toHaveBeenCalledWith({ dir: mockContext.workspacePath, remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', - defaultBranch: 'master', + defaultBranch: 'main', auth: { username: 'notempty', password: 'tokenlols' }, logger: mockContext.logger, commitMessage: 'initial commit', diff --git a/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts b/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts index 1929e3b8ac..d9302f4d74 100644 --- a/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/dryrun/createDryRunner.ts @@ -25,7 +25,7 @@ import { SerializedFile, serializeDirectoryContents, } from '../../lib/files'; -import { TemplateFilter, TemplateGlobal } from '../../lib/templating'; +import { TemplateFilter, TemplateGlobal } from '../../lib'; import { TemplateActionRegistry } from '../actions'; import { NunjucksWorkflowRunner } from '../tasks/NunjucksWorkflowRunner'; import { DecoratedActionsRegistry } from './DecoratedActionsRegistry'; @@ -94,6 +94,8 @@ export function createDryRunner(options: TemplateTesterCreateOptions) { try { await deserializeDirectoryContents(contentsPath, input.directoryContents); + const abortSignal = new AbortController().signal; + const result = await workflowRunner.execute({ spec: { ...input.spec, @@ -117,6 +119,7 @@ export function createDryRunner(options: TemplateTesterCreateOptions) { done: false, isDryRun: true, getWorkspaceName: async () => `dry-run-${dryRunId}`, + cancelSignal: abortSignal, async emitLog(message: string, logMetadata?: JsonObject) { if (logMetadata?.stepId === dryRunId) { return; @@ -128,7 +131,7 @@ export function createDryRunner(options: TemplateTesterCreateOptions) { }, }); }, - async complete() { + complete: async () => { throw new Error('Not implemented'); }, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts new file mode 100644 index 0000000000..4c0eb94c82 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.test.ts @@ -0,0 +1,191 @@ +/* + * Copyright 2021 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 { DatabaseManager } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { DatabaseTaskStore } from './DatabaseTaskStore'; +import { TaskSpec } from '@backstage/plugin-scaffolder-common'; +import { ConflictError } from '@backstage/errors'; + +const createStore = async () => { + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { + client: 'better-sqlite3', + connection: ':memory:', + }, + }, + }), + ).forPlugin('scaffolder'); + const store = await DatabaseTaskStore.create({ + database: manager, + }); + return { store, manager }; +}; + +describe('DatabaseTaskStore', () => { + it('should create the database store and run migration', async () => { + const { store, manager } = await createStore(); + expect(store).toBeDefined(); + + const client = await manager.getClient(); + expect(client.schema.hasTable('tasks')).toBeTruthy(); + expect(client.schema.hasTable('task_events')).toBeTruthy(); + }); + + it('should list all created tasks', async () => { + const { store } = await createStore(); + await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + + const { tasks } = await store.list({}); + expect(tasks.length).toBe(1); + expect(tasks[0].createdBy).toBe('me'); + expect(tasks[0].status).toBe('open'); + expect(tasks[0].id).toBeDefined(); + }); + + it('should list filtered created tasks by createdBy', async () => { + const { store } = await createStore(); + + await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + + await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'him', + }); + + const { tasks } = await store.list({ createdBy: 'him' }); + expect(tasks.length).toBe(1); + expect(tasks[0].createdBy).toBe('him'); + expect(tasks[0].status).toBe('open'); + expect(tasks[0].id).toBeDefined(); + }); + + it('should sent an event to start cancelling the task', async () => { + const { store } = await createStore(); + + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + + await store.cancelTask({ + taskId, + body: { + message: `Step 2 has been cancelled.`, + stepId: 2, + status: 'cancelled', + }, + }); + + const { events } = await store.listEvents({ taskId }); + const event = events[0]; + expect(event.taskId).toBe(taskId); + expect(event.body.status).toBe('cancelled'); + }); + + it('should emit a log event', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + await store.emitLogEvent({ + taskId, + body: { + message: 'Step #2 failed', + stepId: 2, + status: 'failed', + }, + }); + const { events } = await store.listEvents({ taskId }); + const event = events[0]; + expect(event.taskId).toBe(taskId); + expect(event.body.status).toBe('failed'); + expect(event.type).toBe('log'); + }); + + it('should complete the task', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + + const message = `This task was marked as stale as it exceeded its timeout`; + await store.completeTask({ + taskId, + status: 'cancelled', + eventBody: { message }, + }); + + const taskAfterCompletion = await store.getTask(taskId); + expect(taskAfterCompletion.status).toBe('cancelled'); + }); + + it('should claim a new task', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + await store.claimTask(); + + const claimedTask = await store.getTask(taskId); + expect(claimedTask.status).toBe('processing'); + }); + + it('should shutdown the running task', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + await store.claimTask(); + await store.shutdownTask({ taskId }); + + const claimedTask = await store.getTask(taskId); + expect(claimedTask.status).toBe('failed'); + }); + + it('should be not possible to shutdown not running task', async () => { + const { store } = await createStore(); + const { taskId } = await store.createTask({ + spec: {} as TaskSpec, + createdBy: 'me', + }); + const task = await store.getTask(taskId); + expect(task.status).toBe('open'); + await expect(async () => { + await store.shutdownTask({ taskId }); + }).rejects.toThrow(ConflictError); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 879b457544..f3cb9b645e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -220,7 +220,7 @@ export class DatabaseTaskStore implements TaskStore { .update({ status: 'processing', last_heartbeat_at: this.db.fn.now(), - // remove the secrets when moving moving to processing state. + // remove the secrets when moving to processing state. secrets: null, }); @@ -287,13 +287,14 @@ export class DatabaseTaskStore implements TaskStore { const { taskId, status, eventBody } = options; let oldStatus: string; - if (status === 'failed' || status === 'completed') { + if (['failed', 'completed', 'cancelled'].includes(status)) { oldStatus = 'processing'; } else { throw new Error( `Invalid status update of run '${taskId}' to status '${status}'`, ); } + await this.db.transaction(async tx => { const [task] = await tx('tasks') .where({ @@ -302,6 +303,40 @@ export class DatabaseTaskStore implements TaskStore { .limit(1) .select(); + const updateTask = async (criteria: { + id: string; + status?: TaskStatus; + }) => { + const updateCount = await tx('tasks') + .where(criteria) + .update({ + status, + }); + + if (updateCount !== 1) { + throw new ConflictError( + `Failed to update status to '${status}' for taskId ${taskId}`, + ); + } + + await tx('task_events').insert({ + task_id: taskId, + event_type: 'completion', + body: JSON.stringify(eventBody), + }); + }; + + if (status === 'cancelled') { + await updateTask({ + id: taskId, + }); + return; + } + + if (task.status === 'cancelled') { + return; + } + if (!task) { throw new Error(`No task with taskId ${taskId} found`); } @@ -311,25 +346,10 @@ export class DatabaseTaskStore implements TaskStore { `as it is currently '${task.status}', expected '${oldStatus}'`, ); } - const updateCount = await tx('tasks') - .where({ - id: taskId, - status: oldStatus, - }) - .update({ - status, - }); - if (updateCount !== 1) { - throw new ConflictError( - `Failed to update status to '${status}' for taskId ${taskId}`, - ); - } - - await tx('task_events').insert({ - task_id: taskId, - event_type: 'completion', - body: JSON.stringify(eventBody), + await updateTask({ + id: taskId, + status: oldStatus, }); }); } @@ -419,4 +439,16 @@ export class DatabaseTaskStore implements TaskStore { }, }); } + + async cancelTask( + options: TaskStoreEmitOptions<{ message: string } & JsonObject>, + ): Promise { + const { taskId, body } = options; + const serializedBody = JSON.stringify(body); + await this.db('task_events').insert({ + task_id: taskId, + event_type: 'cancelled', + body: serializedBody, + }); + } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts index 0d2246ed36..3b6ec54249 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.test.ts @@ -70,6 +70,7 @@ describe('DefaultWorkflowRunner', () => { complete: async () => {}, done: false, emitLog: async () => {}, + cancelSignal: new AbortController().signal, getWorkspaceName: () => Promise.resolve('test-workspace'), }); @@ -166,7 +167,7 @@ describe('DefaultWorkflowRunner', () => { }); await expect(runner.execute(task)).rejects.toThrow( - /Invalid input passed to action jest-validated-action, instance requires property \"foo\"/, + /Invalid input passed to action jest-validated-action, instance requires property "foo"/, ); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 88abe05cad..629c730d48 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -15,7 +15,12 @@ */ import { ScmIntegrations } from '@backstage/integration'; -import { TaskContext, WorkflowResponse, WorkflowRunner } from './types'; +import { + TaskContext, + TaskTrackType, + WorkflowResponse, + WorkflowRunner, +} from './types'; import * as winston from 'winston'; import fs from 'fs-extra'; import path from 'path'; @@ -99,6 +104,7 @@ const createStepLogger = ({ export class NunjucksWorkflowRunner implements WorkflowRunner { constructor(private readonly options: NunjucksWorkflowRunnerOptions) {} + private readonly tracker = scaffoldingTracker(); private isSingleTemplateString(input: string) { @@ -180,6 +186,138 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { }); } + async executeStep( + task: TaskContext, + step: TaskStep, + context: TemplateContext, + renderTemplate: (template: string, values: unknown) => string, + taskTrack: TaskTrackType, + workspacePath: string, + ) { + const stepTrack = await this.tracker.stepStart(task, step); + + if (task.cancelSignal.aborted) { + throw new Error(`Step ${step.name} has been cancelled.`); + } + + try { + if (step.if) { + const ifResult = await this.render(step.if, context, renderTemplate); + if (!isTruthy(ifResult)) { + await stepTrack.skipFalsy(); + return; + } + } + + const action: TemplateAction = + this.options.actionRegistry.get(step.action); + const { taskLogger, streamLogger } = createStepLogger({ task, step }); + + if (task.isDryRun) { + const redactedSecrets = Object.fromEntries( + Object.entries(task.secrets ?? {}).map(secret => [ + secret[0], + '[REDACTED]', + ]), + ); + const debugInput = + (step.input && + this.render( + step.input, + { + ...context, + secrets: redactedSecrets, + }, + renderTemplate, + )) ?? + {}; + taskLogger.info( + `Running ${ + action.id + } in dry-run mode with inputs (secrets redacted): ${JSON.stringify( + debugInput, + undefined, + 2, + )}`, + ); + if (!action.supportsDryRun) { + await taskTrack.skipDryRun(step, action); + const outputSchema = action.schema?.output; + if (outputSchema) { + context.steps[step.id] = { + output: generateExampleOutput(outputSchema) as { + [name in string]: JsonValue; + }, + }; + } else { + context.steps[step.id] = { output: {} }; + } + return; + } + } + + // Secrets are only passed when templating the input to actions for security reasons + const input = + (step.input && + this.render( + step.input, + { ...context, secrets: task.secrets ?? {} }, + renderTemplate, + )) ?? + {}; + + if (action.schema?.input) { + const validateResult = validateJsonSchema(input, action.schema.input); + if (!validateResult.valid) { + const errors = validateResult.errors.join(', '); + throw new InputError( + `Invalid input passed to action ${action.id}, ${errors}`, + ); + } + } + + const tmpDirs = new Array(); + const stepOutput: { [outputName: string]: JsonValue } = {}; + + await action.handler({ + input, + secrets: task.secrets ?? {}, + logger: taskLogger, + logStream: streamLogger, + workspacePath, + createTemporaryDirectory: async () => { + const tmpDir = await fs.mkdtemp(`${workspacePath}_step-${step.id}-`); + tmpDirs.push(tmpDir); + return tmpDir; + }, + output(name: string, value: JsonValue) { + stepOutput[name] = value; + }, + templateInfo: task.spec.templateInfo, + user: task.spec.user, + isDryRun: task.isDryRun, + signal: task.cancelSignal, + }); + + // Remove all temporary directories that were created when executing the action + for (const tmpDir of tmpDirs) { + await fs.remove(tmpDir); + } + + context.steps[step.id] = { output: stepOutput }; + + if (task.cancelSignal.aborted) { + throw new Error(`Step ${step.name} has been cancelled.`); + } + + await stepTrack.markSuccessful(); + } catch (err) { + await taskTrack.markFailed(step, err); + await stepTrack.markFailed(); + throw err; + } + } + async execute(task: TaskContext): Promise { if (!isValidTaskSpec(task.spec)) { throw new InputError( @@ -191,7 +329,12 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { await task.getWorkspaceName(), ); - const { integrations } = this.options; + const { + additionalTemplateFilters, + additionalTemplateGlobals, + integrations, + } = this.options; + const renderTemplate = await SecureTemplater.loadRenderer({ // TODO(blam): let's work out how we can deprecate this. // We shouldn't really need to be exposing these now we can deal with @@ -200,8 +343,8 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { parseRepoUrl(url: string) { return parseRepoUrl(url, integrations); }, - additionalTemplateFilters: this.options.additionalTemplateFilters, - additionalTemplateGlobals: this.options.additionalTemplateGlobals, + additionalTemplateFilters, + additionalTemplateGlobals, }); try { @@ -215,126 +358,14 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { }; for (const step of task.spec.steps) { - const stepTrack = await this.tracker.stepStart(task, step); - try { - if (step.if) { - const ifResult = await this.render( - step.if, - context, - renderTemplate, - ); - if (!isTruthy(ifResult)) { - await stepTrack.skipFalsy(); - continue; - } - } - - const action = this.options.actionRegistry.get(step.action); - const { taskLogger, streamLogger } = createStepLogger({ task, step }); - - if (task.isDryRun) { - const redactedSecrets = Object.fromEntries( - Object.entries(task.secrets ?? {}).map(secret => [ - secret[0], - '[REDACTED]', - ]), - ); - const debugInput = - (step.input && - this.render( - step.input, - { - ...context, - secrets: redactedSecrets, - }, - renderTemplate, - )) ?? - {}; - taskLogger.info( - `Running ${ - action.id - } in dry-run mode with inputs (secrets redacted): ${JSON.stringify( - debugInput, - undefined, - 2, - )}`, - ); - if (!action.supportsDryRun) { - await taskTrack.skipDryRun(step, action); - const outputSchema = action.schema?.output; - if (outputSchema) { - context.steps[step.id] = { - output: generateExampleOutput(outputSchema) as { - [name in string]: JsonValue; - }, - }; - } else { - context.steps[step.id] = { output: {} }; - } - continue; - } - } - - // Secrets are only passed when templating the input to actions for security reasons - const input = - (step.input && - this.render( - step.input, - { ...context, secrets: task.secrets ?? {} }, - renderTemplate, - )) ?? - {}; - - if (action.schema?.input) { - const validateResult = validateJsonSchema( - input, - action.schema.input, - ); - if (!validateResult.valid) { - const errors = validateResult.errors.join(', '); - throw new InputError( - `Invalid input passed to action ${action.id}, ${errors}`, - ); - } - } - - const tmpDirs = new Array(); - const stepOutput: { [outputName: string]: JsonValue } = {}; - - await action.handler({ - input, - secrets: task.secrets ?? {}, - logger: taskLogger, - logStream: streamLogger, - workspacePath, - createTemporaryDirectory: async () => { - const tmpDir = await fs.mkdtemp( - `${workspacePath}_step-${step.id}-`, - ); - tmpDirs.push(tmpDir); - return tmpDir; - }, - output(name: string, value: JsonValue) { - stepOutput[name] = value; - }, - templateInfo: task.spec.templateInfo, - user: task.spec.user, - isDryRun: task.isDryRun, - }); - - // Remove all temporary directories that were created when executing the action - for (const tmpDir of tmpDirs) { - await fs.remove(tmpDir); - } - - context.steps[step.id] = { output: stepOutput }; - - await stepTrack.markSuccessful(); - } catch (err) { - await taskTrack.markFailed(step, err); - await stepTrack.markFailed(); - throw err; - } + await this.executeStep( + task, + step, + context, + renderTemplate, + taskTrack, + workspacePath, + ); } const output = this.render(task.spec.output, context, renderTemplate); @@ -380,7 +411,10 @@ function scaffoldingTracker() { template, }); - async function skipDryRun(step: TaskStep, action: TemplateAction) { + async function skipDryRun( + step: TaskStep, + action: TemplateAction, + ) { task.emitLog(`Skipping because ${action.id} does not support dry-run`, { stepId: step.id, status: 'skipped', @@ -409,8 +443,22 @@ function scaffoldingTracker() { taskTimer({ result: 'failed' }); } + async function markCancelled(step: TaskStep) { + await task.emitLog(`Step ${step.id} has been cancelled.`, { + stepId: step.id, + status: 'cancelled', + }); + taskCount.inc({ + template, + user, + result: 'cancelled', + }); + taskTimer({ result: 'cancelled' }); + } + return { skipDryRun, + markCancelled, markSuccessful, markFailed, }; @@ -441,6 +489,15 @@ function scaffoldingTracker() { stepTimer({ result: 'ok' }); } + async function markCancelled() { + stepCount.inc({ + template, + step: step.name, + result: 'cancelled', + }); + stepTimer({ result: 'cancelled' }); + } + async function markFailed() { stepCount.inc({ template, @@ -459,8 +516,9 @@ function scaffoldingTracker() { } return { - markSuccessful, + markCancelled, markFailed, + markSuccessful, skipFalsy, }; } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index d01351d8ae..fc5a724e47 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -39,8 +39,13 @@ export class TaskManager implements TaskContext { private heartbeatTimeoutId?: ReturnType; - static create(task: CurrentClaimedTask, storage: TaskStore, logger: Logger) { - const agent = new TaskManager(task, storage, logger); + static create( + task: CurrentClaimedTask, + storage: TaskStore, + abortSignal: AbortSignal, + logger: Logger, + ) { + const agent = new TaskManager(task, storage, abortSignal, logger); agent.startTimeout(); return agent; } @@ -49,6 +54,7 @@ export class TaskManager implements TaskContext { private constructor( private readonly task: CurrentClaimedTask, private readonly storage: TaskStore, + private readonly signal: AbortSignal, private readonly logger: Logger, ) {} @@ -56,6 +62,10 @@ export class TaskManager implements TaskContext { return this.task.spec; } + get cancelSignal() { + return this.signal; + } + get secrets() { return this.task.secrets; } @@ -165,6 +175,33 @@ export class StorageTaskBroker implements TaskBroker { private deferredDispatch = defer(); + private async registerCancellable( + taskId: string, + abortController: AbortController, + ) { + let shouldUnsubscribe = false; + const subscription = this.event$({ taskId, after: undefined }).subscribe({ + error: _ => { + subscription.unsubscribe(); + }, + next: ({ events }) => { + for (const event of events) { + if (event.type === 'cancelled') { + abortController.abort(); + shouldUnsubscribe = true; + } + + if (event.type === 'completion') { + shouldUnsubscribe = true; + } + } + if (shouldUnsubscribe) { + subscription.unsubscribe(); + } + }, + }); + } + /** * {@inheritdoc TaskBroker.claim} */ @@ -172,6 +209,8 @@ export class StorageTaskBroker implements TaskBroker { for (;;) { const pendingTask = await this.storage.claimTask(); if (pendingTask) { + const abortController = new AbortController(); + await this.registerCancellable(pendingTask.id, abortController); return TaskManager.create( { taskId: pendingTask.id, @@ -180,6 +219,7 @@ export class StorageTaskBroker implements TaskBroker { createdBy: pendingTask.createdBy, }, this.storage, + abortController.signal, this.logger, ); } @@ -271,4 +311,24 @@ export class StorageTaskBroker implements TaskBroker { this.deferredDispatch.resolve(); this.deferredDispatch = defer(); } + + async cancel(taskId: string) { + const { events } = await this.storage.listEvents({ taskId }); + const currentStepId = + events.length > 0 + ? events + .filter(({ body }) => body?.stepId) + .reduce((prev, curr) => (prev.id > curr.id ? prev : curr)).body + .stepId + : 0; + + await this.storage.cancelTask?.({ + taskId, + body: { + message: `Step ${currentStepId} has been cancelled.`, + stepId: currentStepId, + status: 'cancelled', + }, + }); + } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts index d39671cb67..e886b31369 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.test.ts @@ -15,7 +15,7 @@ */ import os from 'os'; -import { getVoidLogger, DatabaseManager } from '@backstage/backend-common'; +import { DatabaseManager, getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { DatabaseTaskStore } from './DatabaseTaskStore'; import { StorageTaskBroker } from './StorageTaskBroker'; @@ -23,7 +23,14 @@ import { TaskWorker, TaskWorkerOptions } from './TaskWorker'; import { ScmIntegrations } from '@backstage/integration'; import { TemplateActionRegistry } from '../actions'; import { NunjucksWorkflowRunner } from './NunjucksWorkflowRunner'; -import { TaskBroker, TaskContext, WorkflowRunner } from './types'; +import { + SerializedTaskEvent, + TaskBroker, + TaskContext, + WorkflowRunner, +} from './types'; +import ObservableImpl from 'zen-observable'; +import waitForExpect from 'wait-for-expect'; jest.mock('./NunjucksWorkflowRunner'); const MockedNunjucksWorkflowRunner = @@ -198,6 +205,67 @@ describe('Concurrent TaskWorker', () => { }); }); +describe('Cancellable TaskWorker', () => { + let storage: DatabaseTaskStore; + const integrations: ScmIntegrations = {} as ScmIntegrations; + const actionRegistry: TemplateActionRegistry = {} as TemplateActionRegistry; + const workingDirectory = os.tmpdir(); + + let myTask: TaskContext | undefined = undefined; + + const workflowRunner: NunjucksWorkflowRunner = { + execute: (task: TaskContext) => { + myTask = task; + }, + } as unknown as NunjucksWorkflowRunner; + + beforeAll(async () => { + storage = await createStore(); + }); + + beforeEach(() => { + jest.resetAllMocks(); + MockedNunjucksWorkflowRunner.mockImplementation(() => workflowRunner); + }); + + const logger = getVoidLogger(); + + it('should be able to cancel the running task', async () => { + const taskBroker = new StorageTaskBroker(storage, logger); + const taskWorker = await TaskWorker.create({ + logger, + workingDirectory, + integrations, + taskBroker, + actionRegistry, + }); + + const steps = [...Array(10)].map(n => ({ + id: `test${n}`, + name: `test${n}`, + action: 'not-found-action', + })); + + const { taskId } = await taskBroker.dispatch({ + spec: { + apiVersion: 'scaffolder.backstage.io/v1beta3', + steps, + output: { + result: '{{ steps.test.output.testOutput }}', + }, + parameters: {}, + }, + }); + + await taskWorker.start(); + await taskBroker.cancel(taskId); + + await waitForExpect(() => { + expect(myTask?.cancelSignal.aborted).toBeTruthy(); + }); + }); +}); + describe('TaskWorker internals', () => { const TaskWorkerConstructor = TaskWorker as unknown as { new (options: TaskWorkerOptions): TaskWorker; @@ -219,10 +287,24 @@ describe('TaskWorker internals', () => { }, }; + const subscribers = new Set< + ZenObservable.SubscriptionObserver<{ events: SerializedTaskEvent[] }> + >(); + let claimedTaskCount = 0; const taskWorker = new TaskWorkerConstructor({ runners: { workflowRunner }, taskBroker: { + event$() { + return new ObservableImpl<{ events: SerializedTaskEvent[] }>( + subscriber => { + subscribers.add(subscriber); + return () => { + subscribers.delete(subscriber); + }; + }, + ); + }, async claim() { claimedTaskCount++; return { @@ -233,7 +315,7 @@ describe('TaskWorker internals', () => { async complete(_result, _metadata) {}, } as TaskContext; }, - } as TaskBroker, + } as unknown as TaskBroker, concurrentTasksLimit: 2, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts index 82829665a3..5723e7136f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts @@ -21,10 +21,7 @@ import { Logger } from 'winston'; import { TemplateActionRegistry } from '../actions'; import { ScmIntegrations } from '@backstage/integration'; import { assertError } from '@backstage/errors'; -import { - TemplateFilter, - TemplateGlobal, -} from '../../lib/templating/SecureTemplater'; +import { TemplateFilter, TemplateGlobal } from '../../lib'; /** * TaskWorkerOptions diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index 5a91802f3e..112276b9dd 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -15,8 +15,9 @@ */ import { JsonValue, JsonObject, Observable } from '@backstage/types'; -import { TaskSpec } from '@backstage/plugin-scaffolder-common'; +import { TaskSpec, TaskStep } from '@backstage/plugin-scaffolder-common'; import { TaskSecrets } from '@backstage/plugin-scaffolder-node'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; /** * The status of each step of the Task @@ -24,11 +25,11 @@ import { TaskSecrets } from '@backstage/plugin-scaffolder-node'; * @public */ export type TaskStatus = - | 'open' - | 'processing' - | 'failed' | 'cancelled' - | 'completed'; + | 'completed' + | 'failed' + | 'open' + | 'processing'; /** * The state of a completed task. @@ -57,7 +58,7 @@ export type SerializedTask = { * * @public */ -export type TaskEventType = 'completion' | 'log'; +export type TaskEventType = 'completion' | 'log' | 'cancelled'; /** * SerializedTaskEvent @@ -99,13 +100,17 @@ export type TaskBrokerDispatchOptions = { * @public */ export interface TaskContext { + cancelSignal: AbortSignal; spec: TaskSpec; secrets?: TaskSecrets; createdBy?: string; done: boolean; isDryRun?: boolean; - emitLog(message: string, logMetadata?: JsonObject): Promise; + complete(result: TaskCompletionState, metadata?: JsonObject): Promise; + + emitLog(message: string, logMetadata?: JsonObject): Promise; + getWorkspaceName(): Promise; } @@ -115,16 +120,23 @@ export interface TaskContext { * @public */ export interface TaskBroker { + cancel?(taskId: string): Promise; + claim(): Promise; + dispatch( options: TaskBrokerDispatchOptions, ): Promise; + vacuumTasks(options: { timeoutS: number }): Promise; + event$(options: { taskId: string; after: number | undefined; }): Observable<{ events: SerializedTaskEvent[] }>; + get(taskId: string): Promise; + list?(options?: { createdBy?: string }): Promise<{ tasks: SerializedTask[] }>; } @@ -181,30 +193,51 @@ export type TaskStoreCreateTaskResult = { * @public */ export interface TaskStore { + cancelTask?(options: TaskStoreEmitOptions): Promise; + createTask( options: TaskStoreCreateTaskOptions, ): Promise; + getTask(taskId: string): Promise; + claimTask(): Promise; + completeTask(options: { taskId: string; status: TaskStatus; eventBody: JsonObject; }): Promise; + heartbeatTask(taskId: string): Promise; + listStaleTasks(options: { timeoutS: number }): Promise<{ tasks: { taskId: string }[]; }>; + list?(options: { createdBy?: string }): Promise<{ tasks: SerializedTask[] }>; emitLogEvent(options: TaskStoreEmitOptions): Promise; + listEvents( options: TaskStoreListEventsOptions, ): Promise<{ events: SerializedTaskEvent[] }>; + shutdownTask?(options: TaskStoreShutDownTaskOptions): Promise; } export type WorkflowResponse = { output: { [key: string]: JsonValue } }; + export interface WorkflowRunner { execute(task: TaskContext): Promise; } + +export type TaskTrackType = { + markCancelled: (step: TaskStep) => Promise; + markFailed: (step: TaskStep, err: Error) => Promise; + markSuccessful: () => Promise; + skipDryRun: ( + step: TaskStep, + action: TemplateAction, + ) => Promise; +}; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index e40958c778..b2be3e2749 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -94,14 +94,11 @@ function isSupportedTemplate(entity: TemplateEntityV1beta3) { * until someone explicitly passes an IdentityApi. When we have reasonable confidence that most backstage deployments * are using the IdentityApi, we can remove this function. */ -function buildDefaultIdentityClient({ - logger, -}: { - logger: Logger; -}): IdentityApi { +function buildDefaultIdentityClient(options: RouterOptions): IdentityApi { return { getIdentity: async ({ request }: IdentityApiGetIdentityRequest) => { const header = request.headers.authorization; + const { logger } = options; if (!header) { return undefined; @@ -131,6 +128,10 @@ function buildDefaultIdentityClient({ throw new TypeError('Expected string sub claim'); } + if (sub === 'backstage-server') { + return undefined; + } + // Check that it's a valid ref, otherwise this will throw. parseEntityRef(sub); @@ -178,8 +179,7 @@ export async function createRouter( const logger = parentLogger.child({ plugin: 'scaffolder' }); const identity: IdentityApi = - options.identity || buildDefaultIdentityClient({ logger }); - + options.identity || buildDefaultIdentityClient(options); const workingDirectory = await getWorkingDirectory(config, logger); const integrations = ScmIntegrations.fromConfig(config); @@ -414,6 +414,11 @@ export async function createRouter( delete task.secrets; res.status(200).json(task); }) + .post('/v2/tasks/:taskId/cancel', async (req, res) => { + const { taskId } = req.params; + await taskBroker.cancel?.(taskId); + res.status(200).json({ status: 'cancelled' }); + }) .get('/v2/tasks/:taskId/eventstream', async (req, res) => { const { taskId } = req.params; const after = diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 6668baa16e..37b9613524 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-scaffolder-node +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.4.1-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index 89b7171ef9..d5b9b73767 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -30,6 +30,7 @@ export type ActionContext = { entity?: UserEntity; ref?: string; }; + signal?: AbortSignal; }; // @public diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index ddb2f24083..8978c155bf 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/src/actions/types.ts b/plugins/scaffolder-node/src/actions/types.ts index cce149adbe..8827aaf98c 100644 --- a/plugins/scaffolder-node/src/actions/types.ts +++ b/plugins/scaffolder-node/src/actions/types.ts @@ -60,6 +60,11 @@ export type ActionContext = { */ ref?: string; }; + + /** + * Implement the signal to make your custom step abortable https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal + */ + signal?: AbortSignal; }; /** @public */ diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index d81194d2aa..25385e4816 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-react +## 1.2.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- d9893263ba9: scaffolder/next: Fix for steps without properties +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md index 0fbc8d0eed..da8309d5ec 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/api-report.md @@ -113,7 +113,7 @@ export type ListActionsResponse = Array; // @public export type LogEvent = { - type: 'log' | 'completion'; + type: 'log' | 'completion' | 'cancelled'; body: { message: string; stepId?: string; @@ -126,6 +126,7 @@ export type LogEvent = { // @public export interface ScaffolderApi { + cancelTask(taskId: string): Promise; // (undocumented) dryRun?(options: ScaffolderDryRunOptions): Promise; // (undocumented) @@ -266,10 +267,11 @@ export type ScaffolderTaskOutput = { // @public export type ScaffolderTaskStatus = + | 'cancelled' + | 'completed' + | 'failed' | 'open' | 'processing' - | 'failed' - | 'completed' | 'skipped'; // @public @@ -287,6 +289,7 @@ export const SecretsContextProvider: ( // @public export type TaskStream = { + cancelled: boolean; loading: boolean; error?: Error; stepLogs: { diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 2a22881306..4e0cb590e4 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index 0a517e7bff..b39555c14f 100644 --- a/plugins/scaffolder-react/src/api/types.ts +++ b/plugins/scaffolder-react/src/api/types.ts @@ -24,10 +24,11 @@ import { TemplateParameterSchema } from '../types'; * @public */ export type ScaffolderTaskStatus = + | 'cancelled' + | 'completed' + | 'failed' | 'open' | 'processing' - | 'failed' - | 'completed' | 'skipped'; /** @@ -96,7 +97,7 @@ export type ScaffolderTaskOutput = { * @public */ export type LogEvent = { - type: 'log' | 'completion'; + type: 'log' | 'completion' | 'cancelled'; body: { message: string; stepId?: string; @@ -196,6 +197,13 @@ export interface ScaffolderApi { getTask(taskId: string): Promise; + /** + * Sends a signal to a task broker to cancel the running task by taskId. + * + * @param taskId - the id of the task + */ + cancelTask(taskId: string): Promise; + listTasks?(options: { filterByOwnership: 'owned' | 'all'; }): Promise<{ tasks: ScaffolderTask[] }>; diff --git a/plugins/scaffolder-react/src/hooks/useEventStream.ts b/plugins/scaffolder-react/src/hooks/useEventStream.ts index d8c9cf4c1f..ec49911471 100644 --- a/plugins/scaffolder-react/src/hooks/useEventStream.ts +++ b/plugins/scaffolder-react/src/hooks/useEventStream.ts @@ -44,6 +44,7 @@ export type ScaffolderStep = { * @public */ export type TaskStream = { + cancelled: boolean; loading: boolean; error?: Error; stepLogs: { [stepId in string]: string[] }; @@ -66,6 +67,7 @@ type ReducerLogEntry = { type ReducerAction = | { type: 'INIT'; data: ScaffolderTask } + | { type: 'CANCELLED' } | { type: 'LOGS'; data: ReducerLogEntry[] } | { type: 'COMPLETED'; data: ReducerLogEntry } | { type: 'ERROR'; data: Error }; @@ -111,7 +113,7 @@ function reducer(draft: TaskStream, action: ReducerAction) { } if ( - ['cancelled', 'failed', 'completed'].includes(currentStep.status) + ['cancelled', 'completed', 'failed'].includes(currentStep.status) ) { currentStep.endedAt = entry.createdAt; } @@ -131,6 +133,11 @@ function reducer(draft: TaskStream, action: ReducerAction) { return; } + case 'CANCELLED': { + draft.cancelled = true; + return; + } + case 'ERROR': { draft.error = action.data; draft.loading = false; @@ -151,6 +158,7 @@ function reducer(draft: TaskStream, action: ReducerAction) { export const useTaskEventStream = (taskId: string): TaskStream => { const scaffolderApi = useApi(scaffolderApiRef); const [state, dispatch] = useImmerReducer(reducer, { + cancelled: false, loading: true, completed: false, stepLogs: {} as { [stepId in string]: string[] }, @@ -196,6 +204,9 @@ export const useTaskEventStream = (taskId: string): TaskStream => { switch (event.type) { case 'log': return collectedLogEvents.push(event); + case 'cancelled': + dispatch({ type: 'CANCELLED' }); + return undefined; case 'completion': emitLogs(); dispatch({ type: 'COMPLETED', data: event }); diff --git a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.test.tsx b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.test.tsx index 03604881d2..81c5a697e0 100644 --- a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.test.tsx +++ b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.test.tsx @@ -24,10 +24,10 @@ import { act, fireEvent } from '@testing-library/react'; import React from 'react'; import { Workflow } from './Workflow'; import { analyticsApiRef } from '@backstage/core-plugin-api'; -import { ScaffolderApi } from '../../../api/types'; -import { scaffolderApiRef } from '../../../api/ref'; +import { ScaffolderApi, scaffolderApiRef } from '../../../api'; const scaffolderApiMock: jest.Mocked = { + cancelTask: jest.fn(), scaffold: jest.fn(), getTemplateParameterSchema: jest.fn(), getIntegrationsList: jest.fn(), diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index a0a6d7b750..d3c377154e 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder +## 1.12.0-next.2 + +### Minor Changes + +- 0d61fcca9c3: Update `EntityPicker` to use the fully qualified entity ref instead of the humanized version. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- 0aae4596296: Fix the scaffolder validator for arrays when the item is a field in the object +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-scaffolder-react@1.2.0-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/plugin-permission-react@0.4.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.12.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 6b8d6d345f..45d0b2675c 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -360,6 +360,8 @@ export class ScaffolderClient implements ScaffolderApi_2 { useLongPollingLogs?: boolean; }); // (undocumented) + cancelTask(taskId: string): Promise; + // (undocumented) dryRun( options: ScaffolderDryRunOptions_2, ): Promise; diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 8258dceab9..7d939a3d1e 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.12.0-next.1", + "version": "1.12.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index 15bd1925b3..7a3f6c14bb 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -229,24 +229,22 @@ export class ScaffolderClient implements ScaffolderApi { const url = `${baseUrl}/v2/tasks/${encodeURIComponent( taskId, )}/eventstream`; + + const processEvent = (event: any) => { + if (event.data) { + try { + subscriber.next(JSON.parse(event.data)); + } catch (ex) { + subscriber.error(ex); + } + } + }; + const eventSource = new EventSource(url, { withCredentials: true }); - eventSource.addEventListener('log', (event: any) => { - if (event.data) { - try { - subscriber.next(JSON.parse(event.data)); - } catch (ex) { - subscriber.error(ex); - } - } - }); + eventSource.addEventListener('log', processEvent); + eventSource.addEventListener('cancelled', processEvent); eventSource.addEventListener('completion', (event: any) => { - if (event.data) { - try { - subscriber.next(JSON.parse(event.data)); - } catch (ex) { - subscriber.error(ex); - } - } + processEvent(event); eventSource.close(); subscriber.complete(); }); @@ -310,4 +308,19 @@ export class ScaffolderClient implements ScaffolderApi { return await response.json(); } + + async cancelTask(taskId: string): Promise { + const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder'); + const url = `${baseUrl}/v2/tasks/${encodeURIComponent(taskId)}/cancel`; + + const response = await this.fetchApi.fetch(url, { + method: 'POST', + }); + + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + + return await response.json(); + } } diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx index 552d0cea6a..90f6f9b393 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx @@ -25,6 +25,7 @@ import { rootRouteRef } from '../../routes'; const scaffolderApiMock: jest.Mocked = { scaffold: jest.fn(), + cancelTask: jest.fn(), getTemplateParameterSchema: jest.fn(), getIntegrationsList: jest.fn(), getTask: jest.fn(), diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index f78d48e686..78cdc5d935 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -19,11 +19,15 @@ import { Content, ErrorPage, Header, - Page, LogViewer, + Page, Progress, } from '@backstage/core-components'; -import { useRouteRef, useRouteRefParams } from '@backstage/core-plugin-api'; +import { + useApi, + useRouteRef, + useRouteRefParams, +} from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import { Button, @@ -59,6 +63,7 @@ import { scaffolderTaskRouteRef, selectedTemplateRouteRef, } from '../../routes'; +import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; // typings are wrong for this library, so fallback to not parsing types. const humanizeDuration = require('humanize-duration'); @@ -188,9 +193,10 @@ export const TaskStatusStepper = memo( nonLinear > {steps.map((step, index) => { + const isCancelled = step.status === 'cancelled'; + const isActive = step.status === 'processing'; const isCompleted = step.status === 'completed'; const isFailed = step.status === 'failed'; - const isActive = step.status === 'processing'; const isSkipped = step.status === 'skipped'; return ( @@ -199,7 +205,7 @@ export const TaskStatusStepper = memo( { const { loadingText } = props; - const classes = useStyles(); const navigate = useNavigate(); const rootPath = useRouteRef(rootRouteRef); + const scaffolderApi = useApi(scaffolderApiRef); const templateRoute = useRouteRef(selectedTemplateRouteRef); const [userSelectedStepId, setUserSelectedStepId] = useState< string | undefined >(undefined); + const [clickedToCancel, setClickedToCancel] = useState(false); const [lastActiveStepId, setLastActiveStepId] = useState( undefined, ); const { taskId } = useRouteRefParams(scaffolderTaskRouteRef); const taskStream = useTaskEventStream(taskId); const completed = taskStream.completed; + const taskCancelled = taskStream.cancelled; const steps = useMemo( () => taskStream.task?.spec.steps.map(step => ({ @@ -295,9 +302,7 @@ export const TaskPage = (props: TaskPageProps) => { }, [taskStream.stepLogs, currentStepId, loadingText]); const taskNotFound = - taskStream.completed === true && - taskStream.loading === false && - !taskStream.task; + taskStream.completed && !taskStream.loading && !taskStream.task; const { output } = taskStream; @@ -320,6 +325,11 @@ export const TaskPage = (props: TaskPageProps) => { ); }; + const handleCancel = async () => { + setClickedToCancel(true); + await scaffolderApi.cancelTask(taskId); + }; + return (
{ > Start Over + diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.test.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.test.tsx index b4358146fd..344929fa43 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.test.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.test.tsx @@ -47,6 +47,7 @@ jest.mock('react-router-dom', () => { }); const scaffolderApiMock: jest.Mocked = { + cancelTask: jest.fn(), scaffold: jest.fn(), getTemplateParameterSchema: jest.fn(), getIntegrationsList: jest.fn(), @@ -338,10 +339,7 @@ describe('TemplatePage', () => { it('should display a section or property based on a feature flag', async () => { featureFlagsApiMock.isActive.mockImplementation(flag => { - if (flag === 'experimental-feature') { - return true; - } - return false; + return flag === 'experimental-feature'; }); scaffolderApiMock.getTemplateParameterSchema.mockResolvedValue( schemaMockValue, diff --git a/plugins/scaffolder/src/next/OngoingTask/ContextMenu.tsx b/plugins/scaffolder/src/next/OngoingTask/ContextMenu.tsx index d4c771a9f8..985dd98903 100644 --- a/plugins/scaffolder/src/next/OngoingTask/ContextMenu.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/ContextMenu.tsx @@ -23,15 +23,21 @@ import { MenuList, Popover, } from '@material-ui/core'; +import { useAsync } from '@react-hookz/web'; +import Cancel from '@material-ui/icons/Cancel'; import Retry from '@material-ui/icons/Repeat'; import Toc from '@material-ui/icons/Toc'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; +import { useApi } from '@backstage/core-plugin-api'; +import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; type ContextMenuProps = { + cancelEnabled?: boolean; logsVisible?: boolean; - onToggleLogs?: (state: boolean) => void; onStartOver?: () => void; + onToggleLogs?: (state: boolean) => void; + taskId?: string; }; const useStyles = makeStyles((theme: BackstageTheme) => ({ @@ -41,10 +47,18 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ })); export const ContextMenu = (props: ContextMenuProps) => { - const { logsVisible, onToggleLogs, onStartOver } = props; + const { cancelEnabled, logsVisible, onStartOver, onToggleLogs, taskId } = + props; const classes = useStyles(); + const scaffolderApi = useApi(scaffolderApiRef); const [anchorEl, setAnchorEl] = useState(); + const [{ status: cancelStatus }, { execute: cancel }] = useAsync(async () => { + if (taskId) { + await scaffolderApi.cancelTask(taskId); + } + }); + return ( <> { + + + + + + diff --git a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx new file mode 100644 index 0000000000..9e9212b9e8 --- /dev/null +++ b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx @@ -0,0 +1,84 @@ +/* + * 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 { OngoingTask } from './OngoingTask'; +import React from 'react'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; +import { act, fireEvent, waitFor } from '@testing-library/react'; +import { nextRouteRef } from '../routes'; + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useParams: () => ({ taskId: 'my-task' }), +})); + +jest.mock('@backstage/plugin-scaffolder-react', () => ({ + ...jest.requireActual('@backstage/plugin-scaffolder-react'), + useTaskEventStream: () => ({ + cancelled: false, + loading: true, + stepLogs: {}, + completed: false, + steps: {}, + task: { + spec: { + steps: [], + templateInfo: { entity: { metadata: { name: 'my-template' } } }, + }, + }, + }), +})); + +describe('OngoingTask', () => { + const mockScaffolderApi = { + cancelTask: jest.fn(), + getTask: jest.fn().mockImplementation(async () => {}), + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should trigger cancel api on "Cancel" click in context menu', async () => { + const cancelOptionLabel = 'Cancel'; + const rendered = await renderInTestApp( + + + , + { mountedRoutes: { '/': nextRouteRef } }, + ); + const { getByText, getByTestId } = rendered; + + await act(async () => { + fireEvent.click(getByTestId('menu-button')); + }); + expect(getByTestId('cancel-task')).not.toHaveClass('Mui-disabled'); + + await act(async () => { + fireEvent.click(getByText(cancelOptionLabel)); + }); + + expect(mockScaffolderApi.cancelTask).toHaveBeenCalled(); + await act(async () => { + fireEvent.click(getByTestId('menu-button')); + }); + + await waitFor(() => { + expect(getByTestId('cancel-task')).toHaveClass('Mui-disabled'); + }); + }); +}); diff --git a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx index fc1c1a7413..9c64e2179b 100644 --- a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useEffect, useMemo, useState, useCallback } from 'react'; -import { Page, Header, Content, ErrorPanel } from '@backstage/core-components'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { Content, ErrorPanel, Header, Page } from '@backstage/core-components'; import { useNavigate, useParams } from 'react-router-dom'; import { Box, makeStyles, Paper } from '@material-ui/core'; import { @@ -105,6 +105,8 @@ export const OngoingTask = (props: { const templateName = taskStream.task?.spec.templateInfo?.entity?.metadata.name; + const cancelEnabled = !(taskStream.cancelled || taskStream.completed); + return (
diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx index c4f9c75ceb..da4112979c 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx @@ -41,6 +41,7 @@ jest.mock('react-router-dom', () => { }); const scaffolderApiMock: jest.Mocked = { + cancelTask: jest.fn(), scaffold: jest.fn(), getTemplateParameterSchema: jest.fn(), getIntegrationsList: jest.fn(), diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 5e1d423f65..8576e6602c 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.1.4-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.1.4-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 7dbc84251d..6520571ec6 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.1.4-next.1", + "version": "1.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 2284fb17dd..db32c01817 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.5.4-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index a9e09db620..c6513c8e27 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.4-next.1", + "version": "0.5.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 87c8390e7c..5fcd3bd0fa 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-node +## 1.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.1.4-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 593d459cb3..d86be92e92 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.1.4-next.1", + "version": "1.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 29bc3ea9d3..513ee4536a 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend +## 1.2.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-permission-node@0.7.6-next.2 + - @backstage/plugin-search-backend-node@1.1.4-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.2.4-next.1 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index faadd54835..0baecca0a9 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.2.4-next.1", + "version": "1.2.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index e1fb0049bf..9fc158de5d 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-react +## 1.5.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 553f3c95011: Correctly disable next button in `SearchPagination` on last page +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 1.5.1-next.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index edd00ca6cf..355191cb47 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.5.1-next.1", + "version": "1.5.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index e326f19ef4..3d02621576 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search +## 1.1.1-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.1.1-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index e8aab6022d..353981cae1 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.1.1-next.1", + "version": "1.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index abfdb54ce8..89b5d8312a 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sentry +## 0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.5.1-next.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 9893994cf8..1139898926 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.1-next.1", + "version": "0.5.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 4b00e77e28..2360461f73 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-shortcuts +## 0.3.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index bddd20e5b3..eb48088934 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.8-next.1", + "version": "0.3.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index e44e90767b..f60f7bf047 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-sonarqube-backend +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 0a25762ae4..d7de98d307 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md index d3feb6b79d..6c7d5d41f2 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-sonarqube-react +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index 8700254987..d5266cd220 100644 --- a/plugins/sonarqube-react/package.json +++ b/plugins/sonarqube-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-react", - "version": "0.1.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index c632224252..6c6f69aaf8 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.6.5-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-sonarqube-react@0.1.4-next.2 + ## 0.6.5-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 3775f6c30b..48d221e508 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.5-next.1", + "version": "0.6.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 4c36b337e5..830c918ced 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-splunk-on-call +## 0.4.5-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.4.5-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 4da3a55108..97a5357bd0 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.5-next.1", + "version": "0.4.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index c395fe7094..fab1416363 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index b3aa6573df..2dd405dc3b 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index d69e9441b1..050900554d 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-stack-overflow +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/plugin-home@0.4.32-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 3ad363962d..3675593181 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index bbeb51a609..f68c853b7b 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-stackstorm +## 0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.0-next.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 61ac3da384..a1ba109d76 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.0-next.1", + "version": "0.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 3f8e02187c..12e6693589 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.27-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 496cd1ec00..7d60ec0cdc 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 50bdd8f65d..c4e8061f05 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights-backend +## 0.5.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/plugin-tech-insights-node@0.4.1-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.5.9-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index a7f868fbad..e11bf60e0d 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.9-next.1", + "version": "0.5.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index e43a61629d..ed9f3667f0 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-insights-node +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 428341c54d..6a546f86c1 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index a1e75d80b7..e8d57b056f 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights +## 0.3.8-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.3.8-next.1 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 3eb7a5ae90..680641b1b0 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.8-next.1", + "version": "0.3.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 998d703860..4ad21662bd 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-tech-radar +## 0.6.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.6.2-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 6f67def94c..273bd79255 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.2-next.1", + "version": "0.6.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 4396148d7d..35dedb8a0b 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/plugin-techdocs@1.6.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/plugin-catalog@1.9.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/test-utils@1.2.6-next.2 + ## 1.0.11-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 45aa1f6f04..8dc81b2cf7 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.11-next.1", + "version": "1.0.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 0b3b0bad56..8e4be204db 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-techdocs-backend +## 1.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.5.4-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index dbc482db47..c9fff25b70 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.5.4-next.1", + "version": "1.5.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 9c70b13dc7..69fa5d8cfd 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/integration@1.4.3-next.0 + ## 1.0.11-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 9089802b41..b5aebb262c 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.11-next.1", + "version": "1.0.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 5c13883594..28a11e4b57 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-node +## 1.6.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + - @backstage/integration-aws-node@0.1.2-next.0 + ## 1.6.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 7328927307..4c3a4a3496 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.6.0-next.1", + "version": "1.6.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-node/src/stages/generate/helpers.test.ts b/plugins/techdocs-node/src/stages/generate/helpers.test.ts index b24d85430b..6bcdf0d984 100644 --- a/plugins/techdocs-node/src/stages/generate/helpers.test.ts +++ b/plugins/techdocs-node/src/stages/generate/helpers.test.ts @@ -565,7 +565,9 @@ describe('helpers', () => { } = await getMkdocsYml(inputDir, defaultSiteOptions); expect(mkdocsPath).toBe(key); - expect(content).toBe(mkdocsDefaultYml.toString()); + expect(content.split(/[\r\n]+/g)).toEqual( + mkdocsDefaultYml.toString().split(/[\r\n]+/g), + ); expect(configIsTemporary).toBe(true); }); diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 7894f77a44..cbc52cf570 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-techdocs-react +## 1.1.4-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/config@1.0.7-next.0 + ## 1.1.4-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 3d31cc0e17..ae8d7e21ae 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.4-next.1", + "version": "1.1.4-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 60d826f2c4..7ce9542731 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs +## 1.6.0-next.2 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-techdocs-react@1.1.4-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/plugin-search-react@1.5.1-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + - @backstage/integration-react@1.1.11-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 1.6.0-next.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 8f15b11152..88ebb91c1b 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.0-next.1", + "version": "1.6.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index f22ef56503..6abd6c3562 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-todo-backend +## 0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + - @backstage/plugin-catalog-node@1.3.4-next.2 + - @backstage/config@1.0.7-next.0 + - @backstage/integration@1.4.3-next.0 + ## 0.1.40-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index ebd874b3e6..cb37bc5eb5 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.40-next.1", + "version": "0.1.40-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/src/plugin.ts b/plugins/todo-backend/src/plugin.ts index b9a73a84ee..640ea1a0ce 100644 --- a/plugins/todo-backend/src/plugin.ts +++ b/plugins/todo-backend/src/plugin.ts @@ -27,7 +27,7 @@ import { createRouter } from './service/router'; * @public */ export const todoPlugin = createBackendPlugin({ - pluginId: 'todo-backend', + pluginId: 'todo', register(env) { env.registerInit({ deps: { diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 3eb0e8a30b..3e716065a1 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-todo +## 0.2.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 01a0829835..6cc2491a78 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.18-next.1", + "version": "0.2.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 3141c9f8b1..4bcf306e42 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-user-settings-backend +## 0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/backend-plugin-api@0.4.1-next.2 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 833241dc72..a98e0e9313 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.7-next.1", + "version": "0.1.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 1cb2322c4d..435fa2b2d4 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-user-settings +## 0.7.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-app-api@1.6.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.7.1-next.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 01ae0e1134..e49c54687d 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.1-next.1", + "version": "0.7.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index d3717a29e1..31b822c68b 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-vault-backend +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0-next.2 + - @backstage/backend-common@0.18.3-next.2 + - @backstage/config@1.0.7-next.0 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index f9966b2316..336363e9ad 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index df3e5659d1..1f6d8446bd 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-vault +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/plugin-catalog-react@1.4.0-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 20a8e235c0..127c9cf753 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 2ea83d9a11..e9a2023939 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-xcmetrics +## 0.2.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5-next.2 + - @backstage/core-plugin-api@1.5.0-next.2 + ## 0.2.36-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 5e3ffebcba..fb7695e090 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.36-next.1", + "version": "0.2.36-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 2bf9c900df..5c0f64c734 100644 --- a/yarn.lock +++ b/yarn.lock @@ -508,88 +508,48 @@ __metadata: linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.276.0 - resolution: "@aws-sdk/client-sqs@npm:3.276.0" + version: 3.282.0 + resolution: "@aws-sdk/client-sqs@npm:3.282.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.276.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-node": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 + "@aws-sdk/client-sts": 3.282.0 + "@aws-sdk/config-resolver": 3.282.0 + "@aws-sdk/credential-provider-node": 3.282.0 + "@aws-sdk/fetch-http-handler": 3.282.0 "@aws-sdk/hash-node": 3.272.0 "@aws-sdk/invalid-dependency": 3.272.0 "@aws-sdk/md5-js": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 + "@aws-sdk/middleware-content-length": 3.282.0 + "@aws-sdk/middleware-endpoint": 3.282.0 + "@aws-sdk/middleware-host-header": 3.282.0 "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 + "@aws-sdk/middleware-recursion-detection": 3.282.0 + "@aws-sdk/middleware-retry": 3.282.0 "@aws-sdk/middleware-sdk-sqs": 3.272.0 "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.272.0 + "@aws-sdk/middleware-signing": 3.282.0 "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 + "@aws-sdk/middleware-user-agent": 3.282.0 "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 + "@aws-sdk/node-http-handler": 3.282.0 + "@aws-sdk/protocol-http": 3.282.0 + "@aws-sdk/smithy-client": 3.279.0 "@aws-sdk/types": 3.272.0 "@aws-sdk/url-parser": 3.272.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.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 + "@aws-sdk/util-defaults-mode-browser": 3.279.0 + "@aws-sdk/util-defaults-mode-node": 3.282.0 "@aws-sdk/util-endpoints": 3.272.0 "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 + "@aws-sdk/util-user-agent-browser": 3.282.0 + "@aws-sdk/util-user-agent-node": 3.282.0 "@aws-sdk/util-utf8": 3.254.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 88139fde34fa6348e841de13fce5e68b2dfb735c5358c959f9956a8c918048bde8b1ff701e8e701807af5f67f6df129056986b62a7e07096cc7097f3491d36b8 - languageName: node - linkType: hard - -"@aws-sdk/client-sso-oidc@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.272.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: a1ee61c2fc86a74439e06c98aa10c8246e31579eb480b625321f7dfe8fd26af49bd6ead803da2443700c5943eab5ba90dfc33fc4d9f23b1a680850d73526da4d + checksum: d3a2a2abb27313666aa8c9842c91a098b2570878a9853d59bf07d480669723d77b74ad2ca8e5297dc593d8e76578c78c2634f81e4eed84b84b020b06af04c423 languageName: node linkType: hard @@ -633,46 +593,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/client-sso@npm:3.272.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: 7549e813ef8088d22a0a1f9c8a42532d2d2050c932fd6e7d4f717aea2cd554938283f3af0f1fe9597b24724c6b2438947b3089452ed9c0dfafb1efad15f3ac60 - languageName: node - linkType: hard - "@aws-sdk/client-sso@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/client-sso@npm:3.282.0" @@ -713,50 +633,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.276.0": - version: 3.276.0 - resolution: "@aws-sdk/client-sts@npm:3.276.0" - dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-node": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.272.0 - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/middleware-host-header": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.272.0 - "@aws-sdk/middleware-retry": 3.272.0 - "@aws-sdk/middleware-sdk-sts": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.272.0 - "@aws-sdk/util-defaults-mode-node": 3.272.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.272.0 - "@aws-sdk/util-user-agent-node": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 - fast-xml-parser: 4.1.2 - tslib: ^2.3.1 - checksum: 3250322448500789588d24b6fac295b551ab4c1661ab9aa93f173e63b4673260bb2e551c079d811da752115e583b76f5c7ffb16d94b3c66275e75e52a93f35f3 - languageName: node - linkType: hard - "@aws-sdk/client-sts@npm:3.282.0, @aws-sdk/client-sts@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/client-sts@npm:3.282.0" @@ -801,19 +677,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/config-resolver@npm:3.272.0" - dependencies: - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: d2a2fa4f013ad04f50522aec1001efd34c62ababbc809b176d2e31e41828d867de616ff01bfcaa12603b344ca6838ea5946c72d21e5f2573b90828e29bad6e35 - languageName: node - linkType: hard - "@aws-sdk/config-resolver@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/config-resolver@npm:3.282.0" @@ -863,23 +726,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.272.0" - dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.272.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 06c1dfc6bff09472e11dd7e2c295cfdf71c36af11cb6ba33ce0328aaf9d0baee3f99de8ceec32ff473925b55ad190c9f85f125cf43874c25e22c37e8e3c648d3 - languageName: node - linkType: hard - "@aws-sdk/credential-provider-ini@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-ini@npm:3.282.0" @@ -897,24 +743,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.272.0" - dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-ini": 3.272.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.272.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 25c5ab8583821f63c7eb1a5257869dd21159d0b7643ff9a9c094e9b5c78c887bc441f1a2f974eaace62c1879d13e7d590bb3ea2623f5a5de822bf773b1aab100 - languageName: node - linkType: hard - "@aws-sdk/credential-provider-node@npm:3.282.0, @aws-sdk/credential-provider-node@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-node@npm:3.282.0" @@ -945,20 +773,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.272.0" - dependencies: - "@aws-sdk/client-sso": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/token-providers": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: ac1ada61e67f6f0a82ed8507c0218a03fe40e2d1e4ee064578e63573f868195800088dc3e33d58d7d04877e464342987005aceb300e4db9a141080cdc695e46e - languageName: node - linkType: hard - "@aws-sdk/credential-provider-sso@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/credential-provider-sso@npm:3.282.0" @@ -1075,19 +889,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - tslib: ^2.3.1 - checksum: 63d047db7b7ebfee49af8bf42f3a7aa1bea37cc687e7046bc77913c23ed99056e91b5ab77739157428be73b2a2f29783a7a659ccf29a440dd63b750d313d46cc - languageName: node - linkType: hard - "@aws-sdk/fetch-http-handler@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/fetch-http-handler@npm:3.282.0" @@ -1156,11 +957,11 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.276.0 - resolution: "@aws-sdk/lib-storage@npm:3.276.0" + version: 3.282.0 + resolution: "@aws-sdk/lib-storage@npm:3.282.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.272.0 - "@aws-sdk/smithy-client": 3.272.0 + "@aws-sdk/middleware-endpoint": 3.282.0 + "@aws-sdk/smithy-client": 3.279.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -1168,7 +969,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 1e34d3569c8cf2f7c42efdd7966a9faea64bf49f4fe1fcb0ff30ed86670a5ba2361bb14279e7dc1bc110a1ff9e5cec3551bc8a56b3c9c4d19f98ff4842a8de19 + checksum: 14f1f21a653d239721ca488b6d7951511576a2e2652d240f3561ac0255cd4af321bc41531c15c3c6fae4095da062f5e841c6c9b58afd80be9bf105b63a256f72 languageName: node linkType: hard @@ -1196,17 +997,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: e1a9c3e6fec8dcfed90bb44b25a8f4786b4ed0cbd79c6f69e3d8e91d394402ad4f2667231aafdcc05caf136a331434d54fac286a72ab5870dd90705a2e56243b - languageName: node - linkType: hard - "@aws-sdk/middleware-content-length@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-content-length@npm:3.282.0" @@ -1218,22 +1008,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: c3acd1a35d33cff87a43df371ae138faf6c9569497c36b009cafc2fdb1f21e352671df6eb56730634d7f135bef2a47ac588ac7cdd2905676292a418b79a0eab1 - languageName: node - linkType: hard - "@aws-sdk/middleware-endpoint@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-endpoint@npm:3.282.0" @@ -1276,17 +1050,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 3e191fe72de35b517a20fe47f647527579458091d4d66d55ef7e6b08107a4f4d7abe77afdcdd061776db906309d414525ff63e472c2c05d6e2447f41582f64fb - languageName: node - linkType: hard - "@aws-sdk/middleware-host-header@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-host-header@npm:3.282.0" @@ -1318,17 +1081,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: cdc150a4f3cbd5d7c6926befcf7eb49daea1d0ca054dbe7b82e013eb74f3850056b78603f61989c2bb3cdc748798674b6811c3011c6a8c1773e13dfa11ea3ae7 - languageName: node - linkType: hard - "@aws-sdk/middleware-recursion-detection@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-recursion-detection@npm:3.282.0" @@ -1340,21 +1092,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-retry@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/service-error-classification": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - tslib: ^2.3.1 - uuid: ^8.3.2 - checksum: 208e8f1b96f5ee47d28d76d0f7738f0ae7e355cb9aa24dcb88a8c4d9aa35bf833bf333c1ad4a6d11d18ec27b1713cac0ee04e0fdac17462059416a214f366944 - languageName: node - linkType: hard - "@aws-sdk/middleware-retry@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-retry@npm:3.282.0" @@ -1394,20 +1131,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-signing": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: d808f945ae7354ef7102737418794565f26af3ca3241c3873235284400a13faf118242e92eba1831c25fc249d9c6a15f3c16e4ae3101cd6d5ab175a669b70fcb - languageName: node - linkType: hard - "@aws-sdk/middleware-sdk-sts@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-sdk-sts@npm:3.282.0" @@ -1432,20 +1155,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-signing@npm:3.272.0" - dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/signature-v4": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 - tslib: ^2.3.1 - checksum: 0b711de21b0f2b28178b211ae2de962676038ed49ff9247810c2213018b77ca399285278a0b448a0242f92796e1360b83c09aa268fe64a7f153428b9ed919edc - languageName: node - linkType: hard - "@aws-sdk/middleware-signing@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-signing@npm:3.282.0" @@ -1479,17 +1188,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.272.0" - dependencies: - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: a392a8c68509f118f008002e4ef6ba7fea9f93ade97963449e6eec951c0319a7cc8fd40cf77bda1540ff25ebbbe75785a6fc5ed4be63676144e5242892940732 - languageName: node - linkType: hard - "@aws-sdk/middleware-user-agent@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/middleware-user-agent@npm:3.282.0" @@ -1513,19 +1211,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/node-http-handler@npm:3.272.0" - dependencies: - "@aws-sdk/abort-controller": 3.272.0 - "@aws-sdk/protocol-http": 3.272.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: cbcdab82a7611d1d776197e921563ac6248173aa6e5a6f6e6486a735c71763ae69d1d6ae6de8acebcb8020cdfa089a776d9180929397291623db8f11a1f7b8a9 - languageName: node - linkType: hard - "@aws-sdk/node-http-handler@npm:3.282.0, @aws-sdk/node-http-handler@npm:^3.208.0": version: 3.282.0 resolution: "@aws-sdk/node-http-handler@npm:3.282.0" @@ -1559,16 +1244,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/protocol-http@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 59d7c97b1a46bc3c072f56caec365472c9d94638923799ad2418cee52bb0eab945ab080cd63f5351ff45ad943dde9d88b294e096af36524e184c0764b2ea6cc5 - languageName: node - linkType: hard - "@aws-sdk/protocol-http@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/protocol-http@npm:3.282.0" @@ -1646,21 +1321,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/signature-v4@npm:3.272.0" - dependencies: - "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-uri-escape": 3.201.0 - "@aws-sdk/util-utf8": 3.254.0 - tslib: ^2.3.1 - checksum: bdf997ed7779e173797bd31a9ae39bc9860e12cb7d0a734b4a47c76bde435c5c1d5f56dbb3c5f1a2b26a828367fd88f34a4527b8a12d4c1a60b3b0049aacf706 - languageName: node - linkType: hard - "@aws-sdk/signature-v4@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/signature-v4@npm:3.282.0" @@ -1676,17 +1336,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/smithy-client@npm:3.272.0" - dependencies: - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 8ba3c4733a32c7c28ec06735b0fc3dbc33a1657bfc54dc28f6770b021fda74680c693812d8c6db2291197a275f32fd80be909dddda4eb726328bf34e8d18bccc - languageName: node - linkType: hard - "@aws-sdk/smithy-client@npm:3.279.0": version: 3.279.0 resolution: "@aws-sdk/smithy-client@npm:3.279.0" @@ -1698,19 +1347,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/token-providers@npm:3.272.0" - dependencies: - "@aws-sdk/client-sso-oidc": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 8d49846f4ad124707879a9b8adaea089c4d02dfd1c15dcceb083fecd538ecce1db65f1104e6178b13941acb2a4ae275c5cf9eb586d5d25757eb9fb454bdbb70c - languageName: node - linkType: hard - "@aws-sdk/token-providers@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/token-providers@npm:3.282.0" @@ -1807,18 +1443,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.272.0" - dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: 56594cc954c6431ced3646668fd92d8229eb1c20a37d6c66b0ebf3ce88a7f9803c63d432c78412768ebf0d141fdacef01644ea0f3507e6fb295a22c80f728c1a - languageName: node - linkType: hard - "@aws-sdk/util-defaults-mode-browser@npm:3.279.0": version: 3.279.0 resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.279.0" @@ -1831,20 +1455,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.272.0" - dependencies: - "@aws-sdk/config-resolver": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: ee0e44d78d70b6eab73d6e8455972218cb1a15950f47d81d72d094420b2719add34bf46218016f85242a2a155216d2a0542ed5f4e68e171efc09691125fcb6fd - languageName: node - linkType: hard - "@aws-sdk/util-defaults-mode-node@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-defaults-mode-node@npm:3.282.0" @@ -1946,17 +1556,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: e5ac1b88f9af45c2e0dbec40d2aa9c616634df252ac437f2dfd3aeb316fe561a5c09d481c075945843b3a7f5edafbc10ef26741c6ccacc4d435d8be7eeab179c - languageName: node - linkType: hard - "@aws-sdk/util-user-agent-browser@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-user-agent-browser@npm:3.282.0" @@ -1968,22 +1567,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.272.0" - dependencies: - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - peerDependencies: - aws-crt: ">=1.0.0" - peerDependenciesMeta: - aws-crt: - optional: true - checksum: 25d5f39349190e6323f893de4f0e7a931751bf1521808210515ef8d951c1a6a3e5f1dc1773cbd5ca9f999c5d00f3a421ad570b5f79b20dc2692012a9f833ff24 - languageName: node - linkType: hard - "@aws-sdk/util-user-agent-node@npm:3.282.0": version: 3.282.0 resolution: "@aws-sdk/util-user-agent-node@npm:3.282.0" @@ -2075,13 +1658,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-asynciterator-polyfill@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-asynciterator-polyfill@npm:1.0.0" - checksum: b6d3ab3f0ffc0a9f426a1d2cc90b81778730b14d81af7dcab9760c9e241f7c0f6843d45fad572dcd1379232b3fb2cacd76d110a0d54a999ceb1bf0fd9ed39e99 - languageName: node - linkType: hard - "@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0": version: 1.4.0 resolution: "@azure/core-auth@npm:1.4.0" @@ -2107,26 +1683,25 @@ __metadata: languageName: node linkType: hard -"@azure/core-http@npm:^2.0.0": - version: 2.2.4 - resolution: "@azure/core-http@npm:2.2.4" +"@azure/core-http@npm:^3.0.0": + version: 3.0.0 + resolution: "@azure/core-http@npm:3.0.0" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-asynciterator-polyfill": ^1.0.0 "@azure/core-auth": ^1.3.0 "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-util": ^1.1.1 "@azure/logger": ^1.0.0 "@types/node-fetch": ^2.5.0 "@types/tunnel": ^0.0.3 form-data: ^4.0.0 node-fetch: ^2.6.7 process: ^0.11.10 - tough-cookie: ^4.0.0 tslib: ^2.2.0 tunnel: ^0.0.6 uuid: ^8.3.0 xml2js: ^0.4.19 - checksum: abda8c34c6d54f61b77080b1d4c01b3828cf9a344eb100346ebcc5ef9903d8f57651fbc73c0230afad5fe497c5c6da576a77cf43827f87417cecac7d7e612967 + checksum: 9b6885a60a8fdac924cc9544e09d66757ff4ed51ed20ce3c279321e684e21c295c091ad9d45477e02baae5255e3a92c5fbb2ac46687d261d66488c294b32846f languageName: node linkType: hard @@ -2188,12 +1763,13 @@ __metadata: languageName: node linkType: hard -"@azure/core-util@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-util@npm:1.0.0" +"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.1": + version: 1.2.0 + resolution: "@azure/core-util@npm:1.2.0" dependencies: + "@azure/abort-controller": ^1.0.0 tslib: ^2.2.0 - checksum: a0a9cce9452f78babb224fa2ea5566811bd946c55e5c867ca75e6ecd7fcf796b2ec2aa7424e141f03d8e14141e80f048897d0d3c227a7ff0bbaa9ba3d2fc14c9 + checksum: 58c7e3c9e9fda27242c1ab1dbfcf11eab52cc3e6459a2509fa5572a3faebf3f24c6bf9d92883cd80974119fc1e2c16c7bd2c71f20cfbe670405515c73fdb4093 languageName: node linkType: hard @@ -2293,18 +1869,18 @@ __metadata: linkType: hard "@azure/storage-blob@npm:^12.5.0": - version: 12.12.0 - resolution: "@azure/storage-blob@npm:12.12.0" + version: 12.13.0 + resolution: "@azure/storage-blob@npm:12.13.0" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-http": ^2.0.0 + "@azure/core-http": ^3.0.0 "@azure/core-lro": ^2.2.0 "@azure/core-paging": ^1.1.1 "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 events: ^3.0.0 tslib: ^2.2.0 - checksum: bb7f6514a251f8ec337718088b8c9ba80e27b34c786b7fb380fdca19eb3735a0da917dcfcdacef27d0eb256d007a37f89f3d6b08c55405cbcc04685f2a51da3b + checksum: 1509b8904eb46937b76f9acc04e9e0c39e8e9219a3bc3f5c006df7eb4d29ff2ed0ebbecc875f9372b5a349639e79123b30bbfb407864cfe91633dd6871a9bd99 languageName: node linkType: hard @@ -5373,7 +4949,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" @@ -5404,7 +4979,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 @@ -5431,7 +5005,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-bitbucket-cloud-common": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-events-node": "workspace:^" @@ -5455,7 +5028,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@types/node-fetch": ^2.5.12 luxon: ^3.0.0 @@ -5478,7 +5050,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-bitbucket-cloud-common": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 @@ -5501,7 +5073,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@types/fs-extra": ^9.0.1 fs-extra: 10.1.0 @@ -5559,7 +5130,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 @@ -5612,7 +5182,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/ldapjs": ^2.2.0 "@types/lodash": ^4.14.151 @@ -5635,7 +5205,6 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@microsoft/microsoft-graph-types": ^2.6.0 "@types/lodash": ^4.14.151 @@ -5676,13 +5245,14 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-puppetdb@workspace:plugins/catalog-backend-module-puppetdb" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 @@ -8180,6 +7750,7 @@ __metadata: "@types/express": ^4.17.6 "@types/fs-extra": ^9.0.1 "@types/git-url-parse": ^9.0.0 + "@types/luxon": ^3.0.0 "@types/mock-fs": ^4.13.0 "@types/nunjucks": ^3.1.4 "@types/supertest": ^2.0.8 @@ -8214,6 +7785,7 @@ __metadata: supertest: ^6.1.3 uuid: ^8.2.0 vm2: ^3.9.11 + wait-for-expect: ^3.0.2 winston: ^3.2.1 yaml: ^2.0.0 zen-observable: ^0.10.0 @@ -11580,50 +11152,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/console@npm:29.3.1" +"@jest/console@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/console@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 - checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 + checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 languageName: node linkType: hard -"@jest/core@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/core@npm:29.3.1" +"@jest/core@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/core@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/reporters": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/reporters": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.2.0 - jest-config: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-resolve-dependencies: ^29.3.1 - jest-runner: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 - jest-watcher: ^29.3.1 + jest-changed-files: ^29.4.3 + jest-config: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-resolve-dependencies: ^29.4.3 + jest-runner: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + jest-watcher: ^29.4.3 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -11631,7 +11203,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f + checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 languageName: node linkType: hard @@ -11644,15 +11216,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/environment@npm:29.3.1" +"@jest/environment@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/environment@npm:29.4.3" dependencies: - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.3.1 - checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 + jest-mock: ^29.4.3 + checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb languageName: node linkType: hard @@ -11665,60 +11237,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect-utils@npm:29.3.1" +"@jest/expect-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect-utils@npm:29.4.3" dependencies: - jest-get-type: ^29.2.0 - checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + jest-get-type: ^29.4.3 + checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 languageName: node linkType: hard -"@jest/expect@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect@npm:29.3.1" +"@jest/expect@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect@npm:29.4.3" dependencies: - expect: ^29.3.1 - jest-snapshot: ^29.3.1 - checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + expect: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/fake-timers@npm:29.3.1" +"@jest/fake-timers@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/fake-timers@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 - "@sinonjs/fake-timers": ^9.1.2 + "@jest/types": ^29.4.3 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 languageName: node linkType: hard -"@jest/globals@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/globals@npm:29.3.1" +"@jest/globals@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/globals@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/types": ^29.3.1 - jest-mock: ^29.3.1 - checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/types": ^29.4.3 + jest-mock: ^29.4.3 + checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 languageName: node linkType: hard -"@jest/reporters@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/reporters@npm:29.3.1" +"@jest/reporters@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/reporters@npm:29.4.3" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -11731,9 +11303,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -11743,7 +11315,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 + checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a languageName: node linkType: hard @@ -11756,70 +11328,70 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/schemas@npm:29.0.0" +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd languageName: node linkType: hard -"@jest/source-map@npm:^29.2.0": - version: 29.2.0 - resolution: "@jest/source-map@npm:29.2.0" +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" dependencies: "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c languageName: node linkType: hard -"@jest/test-result@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-result@npm:29.3.1" +"@jest/test-result@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-result@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/types": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a + checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-sequencer@npm:29.3.1" +"@jest/test-sequencer@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-sequencer@npm:29.4.3" dependencies: - "@jest/test-result": ^29.3.1 + "@jest/test-result": ^29.4.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.4.3 slash: ^3.0.0 - checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 + checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e languageName: node linkType: hard -"@jest/transform@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/transform@npm:29.3.1" +"@jest/transform@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/transform@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 + jest-haste-map: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 + write-file-atomic: ^4.0.2 + checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 languageName: node linkType: hard @@ -11850,17 +11422,17 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/types@npm:29.3.1" +"@jest/types@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/types@npm:29.4.3" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac languageName: node linkType: hard @@ -13984,6 +13556,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.23 + resolution: "@sinclair/typebox@npm:0.25.23" + checksum: 5720daec6e604be9ac849e6361cfa30d19f4d01934c9b79a3a5f5290dfcefaa300192ea0d384bb5dd0104432d88447bbad27adfacdf0b0f042b510bf15fbd5db + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.0.0": version: 4.0.0 resolution: "@sindresorhus/is@npm:4.0.0" @@ -14009,6 +13588,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.0.2 + resolution: "@sinonjs/fake-timers@npm:10.0.2" + dependencies: + "@sinonjs/commons": ^2.0.0 + checksum: c62aa98e7cefda8dedc101ce227abc888dc46b8ff9706c5f0a8dfd9c3ada97d0a5611384738d9ba0b26b59f99c2ba24efece8e779bb08329e9e87358fa309824 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^7.0.4": version: 7.1.2 resolution: "@sinonjs/fake-timers@npm:7.1.2" @@ -15450,12 +15038,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.0.0": - version: 29.2.6 - resolution: "@types/jest@npm:29.2.6" + version: 29.4.0 + resolution: "@types/jest@npm:29.4.0" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 90190ac830334af1470d255853f9621fe657e5030b4d96773fc1f884833cd303c76580b00c1b86dc38a8db94f1c7141d462190437a10af31852b8845a57c48ba + checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e languageName: node linkType: hard @@ -16195,11 +15783,11 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.8.0 - resolution: "@types/sanitize-html@npm:2.8.0" + version: 2.8.1 + resolution: "@types/sanitize-html@npm:2.8.1" dependencies: htmlparser2: ^8.0.0 - checksum: 6e583cac673832536fac8da53890073f753baf2c49826fd0c2831e615cb5527692d03b2b5ba9eb8caf8694de4bfb1c31fd12398d2b68331725590a6ceb8f82fe + checksum: 9c07d3a9d925e291472f74b097fb179b32659ea01834f728887811e5fc75cf2b17d844e32e97c0e583eba993af86a3f8250c82c8fa3152abf9ff2a8582972906 languageName: node linkType: hard @@ -17424,18 +17012,18 @@ __metadata: languageName: node linkType: hard -"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.3.3": - version: 3.3.3 - resolution: "apollo-reporting-protobuf@npm:3.3.3" +"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.4.0": + version: 3.4.0 + resolution: "apollo-reporting-protobuf@npm:3.4.0" dependencies: "@apollo/protobufjs": 1.2.6 - checksum: 6900db30476ef2e888ecef4c291e26579eba9695dc874ca8b3d1f93064bea307689172790b9d574849e5bdb371953ea38f2caddc5abb51e1ca197197f3d56d28 + checksum: 5bf50e9cecd3c2334cd12e0ebe59be6c4d7b1b9ee443c7d913011ea1b84513f57561fb6c3ceb66083321acb6d1c56f72e2ab0edf378cf742693409eb8dcdc46b languageName: node linkType: hard -"apollo-server-core@npm:^3.11.1": - version: 3.11.1 - resolution: "apollo-server-core@npm:3.11.1" +"apollo-server-core@npm:^3.12.0": + version: 3.12.0 + resolution: "apollo-server-core@npm:3.12.0" dependencies: "@apollo/utils.keyvaluecache": ^1.0.1 "@apollo/utils.logger": ^1.0.0 @@ -17446,11 +17034,11 @@ __metadata: "@graphql-tools/schema": ^8.0.0 "@josephg/resolvable": ^1.0.0 apollo-datasource: ^3.3.2 - apollo-reporting-protobuf: ^3.3.3 + apollo-reporting-protobuf: ^3.4.0 apollo-server-env: ^4.2.1 apollo-server-errors: ^3.3.1 - apollo-server-plugin-base: ^3.7.1 - apollo-server-types: ^3.7.1 + apollo-server-plugin-base: ^3.7.2 + apollo-server-types: ^3.8.0 async-retry: ^1.2.1 fast-json-stable-stringify: ^2.1.0 graphql-tag: ^2.11.0 @@ -17462,7 +17050,7 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: a5cb7cff331680c2a926c64e88f744425b724bcfae46aeb02ae636d0b6f57a605e561eb284e765618bd0b2b5f8c556c92183f69852f2e4f5889368fee6aa38dc + checksum: b7a37a78901d38a330c9df8fe870da3dcf512f43ab60fdf9ab0ba37be03977db5d4b72eabf51a830d2a9dcfb2974d7bfbc5aa8719e3afac113c8bd7222740b8f languageName: node linkType: hard @@ -17484,9 +17072,9 @@ __metadata: languageName: node linkType: hard -"apollo-server-express@npm:^3.0.0, apollo-server-express@npm:^3.11.1": - version: 3.11.1 - resolution: "apollo-server-express@npm:3.11.1" +"apollo-server-express@npm:^3.0.0, apollo-server-express@npm:^3.12.0": + version: 3.12.0 + resolution: "apollo-server-express@npm:3.12.0" dependencies: "@types/accepts": ^1.3.5 "@types/body-parser": 1.19.2 @@ -17494,54 +17082,54 @@ __metadata: "@types/express": 4.17.14 "@types/express-serve-static-core": 4.17.31 accepts: ^1.3.5 - apollo-server-core: ^3.11.1 - apollo-server-types: ^3.7.1 + apollo-server-core: ^3.12.0 + apollo-server-types: ^3.8.0 body-parser: ^1.19.0 cors: ^2.8.5 parseurl: ^1.3.3 peerDependencies: express: ^4.17.1 graphql: ^15.3.0 || ^16.0.0 - checksum: 1db1a77aaa2f760c885233ded249b632e467bb4895d1c3f797df6e197a9ca7021c5b65dd8829e88fd6dbf32d925c7dcf62b48b949a518e2e31072c490302fa60 + checksum: bd4bc213f506e2aeb2be961961de51e431f8774344b349e9b02f475714a623703eb62423ad968a8f8b6859919ae0d1912c40cf15a4df24e6f81b4f4c5653e70b languageName: node linkType: hard -"apollo-server-plugin-base@npm:^3.7.1": - version: 3.7.1 - resolution: "apollo-server-plugin-base@npm:3.7.1" +"apollo-server-plugin-base@npm:^3.7.2": + version: 3.7.2 + resolution: "apollo-server-plugin-base@npm:3.7.2" dependencies: - apollo-server-types: ^3.7.1 + apollo-server-types: ^3.8.0 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: db8c5f658da8c51c067bd6659b31ec2436d4961437b6f6f6b1b2a109d26764bc52a4dbe1bdafcb3c712b0e2f13ca10ed787e90423505685d2043a77363bdfc0b + checksum: d6ea6dbfad8bb82959286eae89878ccccbd09743c3df2b76bf790f470cbf5441ba06dcb6835a25f0bf32f4df05722cce157ae983ce32db4b69de8a72c9949e2e languageName: node linkType: hard -"apollo-server-types@npm:^3.7.1": - version: 3.7.1 - resolution: "apollo-server-types@npm:3.7.1" +"apollo-server-types@npm:^3.8.0": + version: 3.8.0 + resolution: "apollo-server-types@npm:3.8.0" dependencies: "@apollo/utils.keyvaluecache": ^1.0.1 "@apollo/utils.logger": ^1.0.0 - apollo-reporting-protobuf: ^3.3.3 + apollo-reporting-protobuf: ^3.4.0 apollo-server-env: ^4.2.1 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: fe9a0847d0b8ab70dbe407b4ba1f5e506d351ff1f728193f4b308806e73b958f50537478a71edeefdd66fcf3dbf32ec732b6ffe6542860d5b683b1d657a019a2 + checksum: 20accd42b65ceb95819a1610c410488fbe548ee309227d7fa22fd17dd1205e557091ba9c9a20efa532192098a4193e34eb58fc91d762b55fdf31229ac9fc7133 languageName: node linkType: hard "apollo-server@npm:^3.0.0": - version: 3.11.1 - resolution: "apollo-server@npm:3.11.1" + version: 3.12.0 + resolution: "apollo-server@npm:3.12.0" dependencies: "@types/express": 4.17.14 - apollo-server-core: ^3.11.1 - apollo-server-express: ^3.11.1 + apollo-server-core: ^3.12.0 + apollo-server-express: ^3.12.0 express: ^4.17.1 peerDependencies: graphql: ^15.3.0 || ^16.0.0 - checksum: 6d4e981682e3b60313dddfe999c408c683f7e4cdeed5c14b6d6245b708808b94cb14df67ebe1b9df38df6b5193a9291089c41e287d014f2a9f94b2f3ecc9b376 + checksum: 6f3dade76f202f04a890b2385923a0319a859a0ab48121b1636e22d5eae83afe042d7a0a501aff3d8816e67de4f29f8efa598e350814a40f41d079610dee346e languageName: node linkType: hard @@ -18102,20 +17690,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.3.1": - version: 29.3.1 - resolution: "babel-jest@npm:29.3.1" +"babel-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-jest@npm:29.4.3" dependencies: - "@jest/transform": ^29.3.1 + "@jest/transform": ^29.4.3 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.2.0 + babel-preset-jest: ^29.4.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 + checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 languageName: node linkType: hard @@ -18141,15 +17729,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-plugin-jest-hoist@npm:29.2.0" +"babel-plugin-jest-hoist@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-plugin-jest-hoist@npm:29.4.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 + checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 languageName: node linkType: hard @@ -18288,15 +17876,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-preset-jest@npm:29.2.0" +"babel-preset-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-preset-jest@npm:29.4.3" dependencies: - babel-plugin-jest-hoist: ^29.2.0 + babel-plugin-jest-hoist: ^29.4.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc + checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 languageName: node linkType: hard @@ -21539,10 +21127,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.3.1": - version: 29.3.1 - resolution: "diff-sequences@npm:29.3.1" - checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 languageName: node linkType: hard @@ -23452,16 +23040,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.3.1": - version: 29.3.1 - resolution: "expect@npm:29.3.1" +"expect@npm:^29.0.0, expect@npm:^29.4.3": + version: 29.4.3 + resolution: "expect@npm:29.4.3" dependencies: - "@jest/expect-utils": ^29.3.1 - jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 + "@jest/expect-utils": ^29.4.3 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb languageName: node linkType: hard @@ -27050,57 +26638,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-changed-files@npm:29.2.0" +"jest-changed-files@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-changed-files@npm:29.4.3" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 + checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 languageName: node linkType: hard -"jest-circus@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-circus@npm:29.3.1" +"jest-circus@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-circus@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-each: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 p-limit: ^3.1.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 + checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 languageName: node linkType: hard -"jest-cli@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-cli@npm:29.3.1" +"jest-cli@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-cli@npm:29.4.3" dependencies: - "@jest/core": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-config: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -27110,34 +26698,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d + checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 languageName: node linkType: hard -"jest-config@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-config@npm:29.3.1" +"jest-config@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-config@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.3.1 - "@jest/types": ^29.3.1 - babel-jest: ^29.3.1 + "@jest/test-sequencer": ^29.4.3 + "@jest/types": ^29.4.3 + babel-jest: ^29.4.3 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.3.1 - jest-environment-node: ^29.3.1 - jest-get-type: ^29.2.0 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-runner: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-circus: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runner: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -27148,7 +26736,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe + checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 languageName: node linkType: hard @@ -27173,72 +26761,72 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-diff@npm:29.3.1" +"jest-diff@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-diff@npm:29.4.3" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 languageName: node linkType: hard -"jest-docblock@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-docblock@npm:29.2.0" +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" dependencies: detect-newline: ^3.0.0 - checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df languageName: node linkType: hard -"jest-each@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-each@npm:29.3.1" +"jest-each@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-each@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 chalk: ^4.0.0 - jest-get-type: ^29.2.0 - jest-util: ^29.3.1 - pretty-format: ^29.3.1 - checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a + jest-get-type: ^29.4.3 + jest-util: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d languageName: node linkType: hard "jest-environment-jsdom@npm:^29.0.2": - version: 29.3.1 - resolution: "jest-environment-jsdom@npm:29.3.1" + version: 29.4.3 + resolution: "jest-environment-jsdom@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 + checksum: 3fb29bb4b472e05a38fdb235aa936ad469dfa2f6c1cab97fe3d1a7c585351976d05c7bbbd715b9747f070a225dcf10a9166df1461e0fb838ea7a377a8e64bed4 languageName: node linkType: hard -"jest-environment-node@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-environment-node@npm:29.3.1" +"jest-environment-node@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-node@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d languageName: node linkType: hard @@ -27249,43 +26837,43 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-get-type@npm:29.2.0" - checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce languageName: node linkType: hard -"jest-haste-map@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-haste-map@npm:29.3.1" +"jest-haste-map@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-haste-map@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c + checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 languageName: node linkType: hard -"jest-leak-detector@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-leak-detector@npm:29.3.1" +"jest-leak-detector@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-leak-detector@npm:29.4.3" dependencies: - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 languageName: node linkType: hard @@ -27301,15 +26889,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-matcher-utils@npm:29.3.1" +"jest-matcher-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-matcher-utils@npm:29.4.3" dependencies: chalk: ^4.0.0 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d languageName: node linkType: hard @@ -27330,31 +26918,31 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-message-util@npm:29.3.1" +"jest-message-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-message-util@npm:29.4.3" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b + checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced languageName: node linkType: hard -"jest-mock@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-mock@npm:29.3.1" +"jest-mock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-mock@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-util: ^29.3.1 - checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 + jest-util: ^29.4.3 + checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 languageName: node linkType: hard @@ -27370,102 +26958,102 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-regex-util@npm:29.2.0" - checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve-dependencies@npm:29.3.1" +"jest-resolve-dependencies@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve-dependencies@npm:29.4.3" dependencies: - jest-regex-util: ^29.2.0 - jest-snapshot: ^29.3.1 - checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 languageName: node linkType: hard -"jest-resolve@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve@npm:29.3.1" +"jest-resolve@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve@npm:29.4.3" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.4.3 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f + checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc languageName: node linkType: hard -"jest-runner@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runner@npm:29.3.1" +"jest-runner@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runner@npm:29.4.3" dependencies: - "@jest/console": ^29.3.1 - "@jest/environment": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.4.3 + "@jest/environment": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.2.0 - jest-environment-node: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-leak-detector: ^29.3.1 - jest-message-util: ^29.3.1 - jest-resolve: ^29.3.1 - jest-runtime: ^29.3.1 - jest-util: ^29.3.1 - jest-watcher: ^29.3.1 - jest-worker: ^29.3.1 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-leak-detector: ^29.4.3 + jest-message-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runtime: ^29.4.3 + jest-util: ^29.4.3 + jest-watcher: ^29.4.3 + jest-worker: ^29.4.3 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 + checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runtime@npm:29.3.1" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runtime@npm:29.4.3" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/globals": ^29.3.1 - "@jest/source-map": ^29.2.0 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/globals": ^29.4.3 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 + checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 languageName: node linkType: hard -"jest-snapshot@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-snapshot@npm:29.3.1" +"jest-snapshot@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-snapshot@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -27473,25 +27061,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/expect-utils": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.3.1 + expect: ^29.4.3 graceful-fs: ^4.2.9 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - jest-haste-map: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-diff: ^29.4.3 + jest-get-type: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 natural-compare: ^1.4.0 - pretty-format: ^29.3.1 + pretty-format: ^29.4.3 semver: ^7.3.5 - checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae + checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 languageName: node linkType: hard @@ -27509,47 +27097,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-util@npm:29.3.1" +"jest-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-util@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f languageName: node linkType: hard -"jest-validate@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-validate@npm:29.3.1" +"jest-validate@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-validate@npm:29.4.3" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.4.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.2.0 + jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.3.1 - checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c + pretty-format: ^29.4.3 + checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 languageName: node linkType: hard -"jest-watcher@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-watcher@npm:29.3.1" +"jest-watcher@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-watcher@npm:29.4.3" dependencies: - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.3.1 + jest-util: ^29.4.3 string-length: ^4.0.1 - checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 + checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc languageName: node linkType: hard @@ -27584,26 +27172,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-worker@npm:29.3.1" +"jest-worker@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-worker@npm:29.4.3" dependencies: "@types/node": "*" - jest-util: ^29.3.1 + jest-util: ^29.4.3 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b languageName: node linkType: hard "jest@npm:^29.0.2": - version: 29.3.1 - resolution: "jest@npm:29.3.1" + version: 29.4.3 + resolution: "jest@npm:29.4.3" dependencies: - "@jest/core": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.4.3 + "@jest/types": ^29.4.3 import-local: ^3.0.2 - jest-cli: ^29.3.1 + jest-cli: ^29.4.3 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -27611,7 +27199,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a + checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f languageName: node linkType: hard @@ -33286,14 +32874,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.3.1": - version: 29.3.1 - resolution: "pretty-format@npm:29.3.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 languageName: node linkType: hard @@ -35066,10 +34654,10 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d +"resolve.exports@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve.exports@npm:2.0.0" + checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 languageName: node linkType: hard @@ -37332,13 +36920,13 @@ __metadata: linkType: hard "swr@npm:^2.0.0": - version: 2.0.4 - resolution: "swr@npm:2.0.4" + version: 2.1.0 + resolution: "swr@npm:2.1.0" dependencies: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: 2fd26baed9a0ad3ecf24d7a64c4929f9c3be71c942e883ab369c3929aa297a47b0512c29ed8cdfd0ce2e3f5ee3f181d80c16b2b95128a0ae58bc133b4a0ea5a8 + checksum: 7de1799f319c7ebfb996cb843279169144b7087215ce7318dd6011590908341ac7d5bca93a197666557c2450b0297d9efbc610fd069b82dc3387130c619965fc languageName: node linkType: hard @@ -39609,7 +39197,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.1": +"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" dependencies: From 99df676e3241618bf162267edd8e01d95b5ff673 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Thu, 9 Mar 2023 17:06:56 +0200 Subject: [PATCH 047/511] feat: allow adding external links to shortcuts This is behind a new property `allowExternalLinks` to make sure the application developer knows what he is doing. Only http(s) links are allowed. Signed-off-by: Heikki Hellgren --- .changeset/strong-crews-repeat.md | 5 +++ packages/app/src/components/Root/Root.tsx | 2 +- plugins/shortcuts/README.md | 2 + plugins/shortcuts/api-report.md | 2 + plugins/shortcuts/src/AddShortcut.tsx | 10 ++++- plugins/shortcuts/src/EditShortcut.tsx | 10 ++++- plugins/shortcuts/src/ShortcutForm.test.tsx | 44 +++++++++++++++++++++ plugins/shortcuts/src/ShortcutForm.tsx | 26 +++++++++--- plugins/shortcuts/src/ShortcutItem.tsx | 4 +- plugins/shortcuts/src/Shortcuts.tsx | 3 ++ 10 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 .changeset/strong-crews-repeat.md diff --git a/.changeset/strong-crews-repeat.md b/.changeset/strong-crews-repeat.md new file mode 100644 index 0000000000..144c1842c6 --- /dev/null +++ b/.changeset/strong-crews-repeat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-shortcuts': minor +--- + +Allow external links to be added as shortcuts diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 8cec54326a..8b71637773 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -167,7 +167,7 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( - + diff --git a/plugins/shortcuts/README.md b/plugins/shortcuts/README.md index cd79901656..46b878a579 100644 --- a/plugins/shortcuts/README.md +++ b/plugins/shortcuts/README.md @@ -44,6 +44,8 @@ export const SidebarComponent = () => ( ); ``` +To allow external links to be added as shortcut, you can add `allowExternalLinks` property to the `` component. + The plugin exports a `shortcutApiRef` but the plugin includes a default implementation of the `ShortcutApi` that uses `localStorage` to store each user's shortcuts. To overwrite the default implementation add it to the App's `apis.ts`: diff --git a/plugins/shortcuts/api-report.md b/plugins/shortcuts/api-report.md index 1aa1dea003..657db8e2ca 100644 --- a/plugins/shortcuts/api-report.md +++ b/plugins/shortcuts/api-report.md @@ -57,6 +57,8 @@ export const shortcutsPlugin: BackstagePlugin<{}, {}, {}>; // @public export interface ShortcutsProps { + // (undocumented) + allowExternalLinks?: boolean; // (undocumented) icon?: IconComponent; } diff --git a/plugins/shortcuts/src/AddShortcut.tsx b/plugins/shortcuts/src/AddShortcut.tsx index e4b1ba84ce..1e14767531 100644 --- a/plugins/shortcuts/src/AddShortcut.tsx +++ b/plugins/shortcuts/src/AddShortcut.tsx @@ -45,9 +45,16 @@ type Props = { onClose: () => void; anchorEl?: Element; api: ShortcutApi; + + allowExternalLinks?: boolean; }; -export const AddShortcut = ({ onClose, anchorEl, api }: Props) => { +export const AddShortcut = ({ + onClose, + anchorEl, + api, + allowExternalLinks, +}: Props) => { const classes = useStyles(); const alertApi = useApi(alertApiRef); const { pathname } = useLocation(); @@ -114,6 +121,7 @@ export const AddShortcut = ({ onClose, anchorEl, api }: Props) => { onClose={handleClose} onSave={handleSave} formValues={formValues} + allowExternalLinks={allowExternalLinks} /> diff --git a/plugins/shortcuts/src/EditShortcut.tsx b/plugins/shortcuts/src/EditShortcut.tsx index 702275e90e..5336841633 100644 --- a/plugins/shortcuts/src/EditShortcut.tsx +++ b/plugins/shortcuts/src/EditShortcut.tsx @@ -46,9 +46,16 @@ type Props = { onClose: () => void; anchorEl?: Element; api: ShortcutApi; + allowExternalLinks?: boolean; }; -export const EditShortcut = ({ shortcut, onClose, anchorEl, api }: Props) => { +export const EditShortcut = ({ + shortcut, + onClose, + anchorEl, + api, + allowExternalLinks, +}: Props) => { const classes = useStyles(); const alertApi = useApi(alertApiRef); const open = Boolean(anchorEl); @@ -127,6 +134,7 @@ export const EditShortcut = ({ shortcut, onClose, anchorEl, api }: Props) => { formValues={{ url: shortcut.url, title: shortcut.title }} onClose={handleClose} onSave={handleSave} + allowExternalLinks={allowExternalLinks} /> diff --git a/plugins/shortcuts/src/ShortcutForm.test.tsx b/plugins/shortcuts/src/ShortcutForm.test.tsx index 2582148fc7..3a52356b5d 100644 --- a/plugins/shortcuts/src/ShortcutForm.test.tsx +++ b/plugins/shortcuts/src/ShortcutForm.test.tsx @@ -43,6 +43,50 @@ describe('ShortcutForm', () => { }); }); + it('allows external links', async () => { + await renderInTestApp(); + + const urlInput = screen.getByPlaceholderText('Enter a URL'); + const titleInput = screen.getByPlaceholderText('Enter a display name'); + fireEvent.change(urlInput, { + target: { value: 'https://www.backstage.io' }, + }); + fireEvent.change(titleInput, { target: { value: 'Backstage' } }); + + fireEvent.click(screen.getByText('Save')); + await waitFor(() => { + expect(props.onSave).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Backstage', + url: 'https://www.backstage.io', + }), + expect.anything(), + ); + }); + }); + + it('allows relative links when external links are enabled', async () => { + await renderInTestApp(); + + const urlInput = screen.getByPlaceholderText('Enter a URL'); + const titleInput = screen.getByPlaceholderText('Enter a display name'); + fireEvent.change(urlInput, { + target: { value: '/catalog' }, + }); + fireEvent.change(titleInput, { target: { value: 'Catalog' } }); + + fireEvent.click(screen.getByText('Save')); + await waitFor(() => { + expect(props.onSave).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Catalog', + url: '/catalog', + }), + expect.anything(), + ); + }); + }); + it('calls the save handler', async () => { await renderInTestApp( ; onClose: () => void; + allowExternalLinks?: boolean; }; -export const ShortcutForm = ({ formValues, onSave, onClose }: Props) => { +export const ShortcutForm = ({ + formValues, + onSave, + onClose, + allowExternalLinks, +}: Props) => { const classes = useStyles(); - const { handleSubmit, reset, @@ -70,10 +75,19 @@ export const ShortcutForm = ({ formValues, onSave, onClose }: Props) => { control={control} rules={{ required: true, - pattern: { - value: /^\//, - message: 'Must be a relative URL (starts with a /)', - }, + ...(allowExternalLinks + ? { + pattern: { + value: /^(https?:\/\/)|\//, + message: 'Must start with http(s):// or /', + }, + } + : { + pattern: { + value: /^\//, + message: 'Must be a relative URL (starts with a /)', + }, + }), }} render={({ field }) => ( type Props = { shortcut: Shortcut; api: ShortcutApi; + allowExternalLinks?: boolean; }; -export const ShortcutItem = ({ shortcut, api }: Props) => { +export const ShortcutItem = ({ shortcut, api, allowExternalLinks }: Props) => { const classes = useStyles(); const [anchorEl, setAnchorEl] = React.useState(); @@ -100,6 +101,7 @@ export const ShortcutItem = ({ shortcut, api }: Props) => { anchorEl={anchorEl} api={api} shortcut={shortcut} + allowExternalLinks={allowExternalLinks} /> ); diff --git a/plugins/shortcuts/src/Shortcuts.tsx b/plugins/shortcuts/src/Shortcuts.tsx index 28aa33e8f2..6b9ea4d79b 100644 --- a/plugins/shortcuts/src/Shortcuts.tsx +++ b/plugins/shortcuts/src/Shortcuts.tsx @@ -35,6 +35,7 @@ import { IconComponent, useApi } from '@backstage/core-plugin-api'; */ export interface ShortcutsProps { icon?: IconComponent; + allowExternalLinks?: boolean; } export const Shortcuts = (props: ShortcutsProps) => { @@ -62,6 +63,7 @@ export const Shortcuts = (props: ShortcutsProps) => { onClose={handleClose} anchorEl={anchorEl} api={shortcutApi} + allowExternalLinks={props.allowExternalLinks} /> {loading ? ( @@ -71,6 +73,7 @@ export const Shortcuts = (props: ShortcutsProps) => { key={shortcut.id} shortcut={shortcut} api={shortcutApi} + allowExternalLinks={props.allowExternalLinks} /> )) )} From 6a51a49a8100eee8aa4f5f901a284e7d194f7abf Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Thu, 9 Mar 2023 11:18:49 -0500 Subject: [PATCH 048/511] Ensure `` component respects header styles in `columns[*].headerStyle` Signed-off-by: Boris Bera --- .changeset/tidy-pumpkins-clean.md | 5 ++ .../src/components/Table/Table.test.tsx | 57 +++++++++++++++++++ .../src/components/Table/Table.tsx | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 .changeset/tidy-pumpkins-clean.md diff --git a/.changeset/tidy-pumpkins-clean.md b/.changeset/tidy-pumpkins-clean.md new file mode 100644 index 0000000000..c5a067a98c --- /dev/null +++ b/.changeset/tidy-pumpkins-clean.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fix bug where `
` component would not take into account header styles defined in `columns[*].headerStyle`. diff --git a/packages/core-components/src/components/Table/Table.test.tsx b/packages/core-components/src/components/Table/Table.test.tsx index ff17409502..8f27d7f280 100644 --- a/packages/core-components/src/components/Table/Table.test.tsx +++ b/packages/core-components/src/components/Table/Table.test.tsx @@ -17,6 +17,7 @@ import React from 'react'; import { renderInTestApp } from '@backstage/test-utils'; import { Table } from './Table'; +import { prettyDOM } from '@testing-library/react'; const column1 = { title: 'Column 1', @@ -142,6 +143,62 @@ describe('
', () => { }); }); + describe('with style headers', () => { + describe('with CSS properties object', () => { + it('renders styled headers', async () => { + const columns = [ + column1, + { + ...column2, + headerStyle: { + backgroundColor: 'pink', + }, + }, + ]; + + const rendered = await renderInTestApp( +
, + ); + + expect(rendered.getByText(column1.title).closest('th')).not.toHaveStyle( + { + backgroundColor: 'pink', + }, + ); + expect(rendered.getByText(column2.title).closest('th')).toHaveStyle({ + backgroundColor: 'pink', + }); + }); + + it('renders styled headers with highlight', async () => { + const columns = [ + { + ...column1, + highlight: true, + }, + { + ...column2, + highlight: true, + headerStyle: { + backgroundColor: 'pink', + }, + }, + ]; + + const rendered = await renderInTestApp( +
, + ); + + const column1Header = rendered.getByText(column1.title).closest('th'); + expect(column1Header?.style.backgroundColor).toBe(''); + expect(column1Header?.style.color).toBe('rgb(0, 0, 0)'); + const column2Header = rendered.getByText(column2.title).closest('th'); + expect(column2Header?.style.backgroundColor).toBe('pink'); + expect(column2Header?.style.color).toBe('rgb(0, 0, 0)'); + }); + }); + }); + it('renders with subtitle', async () => { const rendered = await renderInTestApp(
, diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index 89a1d69b96..c43345c9d2 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -169,7 +169,7 @@ function convertColumns( theme: BackstageTheme, ): TableColumn[] { return columns.map(column => { - const headerStyle: React.CSSProperties = {}; + const headerStyle: React.CSSProperties = column.headerStyle ?? {}; let cellStyle = column.cellStyle || {}; From ab0e9546a99bf438da479a32c62f236403eed84b Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Thu, 9 Mar 2023 11:22:37 -0500 Subject: [PATCH 049/511] Remove leftover import from testing Signed-off-by: Boris Bera --- packages/core-components/src/components/Table/Table.test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core-components/src/components/Table/Table.test.tsx b/packages/core-components/src/components/Table/Table.test.tsx index 8f27d7f280..ffdca26d98 100644 --- a/packages/core-components/src/components/Table/Table.test.tsx +++ b/packages/core-components/src/components/Table/Table.test.tsx @@ -17,7 +17,6 @@ import React from 'react'; import { renderInTestApp } from '@backstage/test-utils'; import { Table } from './Table'; -import { prettyDOM } from '@testing-library/react'; const column1 = { title: 'Column 1', From 9b8c374ace558489fe2b6b8a3f69e5ac4fc99f9b Mon Sep 17 00:00:00 2001 From: afalco Date: Thu, 9 Mar 2023 10:49:34 -0600 Subject: [PATCH 050/511] Do not show timer for skipped steps Signed-off-by: afalco --- .changeset/mean-emus-hide.md | 5 +++++ .../src/next/components/TaskSteps/TaskSteps.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/mean-emus-hide.md diff --git a/.changeset/mean-emus-hide.md b/.changeset/mean-emus-hide.md new file mode 100644 index 0000000000..955e25d258 --- /dev/null +++ b/.changeset/mean-emus-hide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Remove timer for skipped steps in Scaffolder Next's TaskSteps diff --git a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx index 632500f07e..668306fa9e 100644 --- a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx +++ b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx @@ -80,7 +80,7 @@ export const TaskSteps = (props: TaskStepsProps) => { StepIconComponent={StepIcon} > {step.name} - + {!isSkipped && } From e2e3dd08a5444cf7a4aac96018274a02f2b86199 Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Thu, 9 Mar 2023 22:47:17 +0000 Subject: [PATCH 051/511] Add FireHydrant annotation option Signed-off-by: Dustin Brewer --- .changeset/tidy-planes-unite.md | 5 ++++ plugins/firehydrant/README.md | 8 ++++++ plugins/firehydrant/package.json | 1 + plugins/firehydrant/src/api/index.ts | 5 +++- .../ServiceDetailsCard/ServiceDetailsCard.tsx | 7 ++--- plugins/firehydrant/src/components/hooks.ts | 27 +++++++++++++++++++ .../src/components/serviceDetails.ts | 13 +++++++-- plugins/firehydrant/src/index.ts | 6 ++++- plugins/firehydrant/src/plugin.ts | 3 +++ yarn.lock | 1 + 10 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 .changeset/tidy-planes-unite.md create mode 100644 plugins/firehydrant/src/components/hooks.ts diff --git a/.changeset/tidy-planes-unite.md b/.changeset/tidy-planes-unite.md new file mode 100644 index 0000000000..158498d381 --- /dev/null +++ b/.changeset/tidy-planes-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-firehydrant': minor +--- + +Allow firehydrant to use component annotation diff --git a/plugins/firehydrant/README.md b/plugins/firehydrant/README.md index d7169e08f0..4472536245 100644 --- a/plugins/firehydrant/README.md +++ b/plugins/firehydrant/README.md @@ -56,3 +56,11 @@ proxy: # Supply the token you generated from https://app.firehydrant.io/organizations/bots Authorization: Bearer fhb-e4911b22bcd788c4a4afeb0c111ffbfa ``` + +4. Optionally add an annotation to the yaml config file of a component + +```yaml +metadata: + annotations: + firehydrant.com/service-name: +``` diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 293679c2ea..8084876f69 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -23,6 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", diff --git a/plugins/firehydrant/src/api/index.ts b/plugins/firehydrant/src/api/index.ts index 7101b5dc62..45834d90e9 100644 --- a/plugins/firehydrant/src/api/index.ts +++ b/plugins/firehydrant/src/api/index.ts @@ -30,6 +30,7 @@ export interface FireHydrantAPI { getServiceDetails(options: { serviceName: string; + lookupByName: boolean; }): Promise; getServiceIncidents(options: { @@ -77,10 +78,12 @@ export class FireHydrantAPIClient implements FireHydrantAPI { async getServiceDetails(options: { serviceName: string; + lookupByName: boolean; }): Promise { + const queryOpt = options.lookupByName ? 'name' : 'query'; const proxyUrl = await this.getApiUrl(); const response = await fetch( - `${proxyUrl}/services?query=${options.serviceName}`, + `${proxyUrl}/services?${queryOpt}=${options.serviceName}`, ); if (!response.ok) { diff --git a/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.tsx b/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.tsx index bc2dd46fef..b6bfbcc13b 100644 --- a/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.tsx +++ b/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.tsx @@ -39,6 +39,7 @@ import { ResponseErrorPanel, } from '@backstage/core-components'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { isFireHydrantAvailable, getFireHydrantServiceName } from '../hooks'; const useStyles = makeStyles(theme => ({ button: { @@ -149,14 +150,14 @@ export const ServiceDetailsCard = () => { const startDate = DateTime.now().minus({ days: 30 }).toUTC(); const endDate = DateTime.now().toUTC(); + // The service name is provided by an annotation or a Backstage generated service name. // The Backstage service name in FireHydrant is a unique formatted string // that requires the entity's kind, name, and namespace. - const fireHydrantServiceName = `${entity?.kind}:${ - entity?.metadata?.namespace ?? 'default' - }/${entity?.metadata?.name}`; + const fireHydrantServiceName = getFireHydrantServiceName(entity); const { loading, value, error } = useServiceDetails({ serviceName: fireHydrantServiceName, + lookupByName: isFireHydrantAvailable(entity), }); const activeIncidents: string[] = value?.service?.active_incidents ?? []; diff --git a/plugins/firehydrant/src/components/hooks.ts b/plugins/firehydrant/src/components/hooks.ts new file mode 100644 index 0000000000..e8129e1b28 --- /dev/null +++ b/plugins/firehydrant/src/components/hooks.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2023 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 { Entity } from '@backstage/catalog-model'; + +export const FIREHYDRANT_SERVICE_NAME_ANNOTATION = + 'firehydrant.com/service-name'; +export const isFireHydrantAvailable = (entity: Entity) => + Boolean(entity.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION]); +export const getFireHydrantServiceName = (entity: Entity) => + isFireHydrantAvailable(entity) + ? entity?.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION] ?? '' + : `${entity?.kind}:${entity?.metadata?.namespace ?? 'default'}/${ + entity?.metadata?.name + }`; diff --git a/plugins/firehydrant/src/components/serviceDetails.ts b/plugins/firehydrant/src/components/serviceDetails.ts index 9c12677577..f0ea325419 100644 --- a/plugins/firehydrant/src/components/serviceDetails.ts +++ b/plugins/firehydrant/src/components/serviceDetails.ts @@ -17,13 +17,22 @@ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { fireHydrantApiRef } from '../api'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; -export const useServiceDetails = ({ serviceName }: { serviceName: string }) => { +export const useServiceDetails = ({ + serviceName, + lookupByName, +}: { + serviceName: string; + lookupByName: boolean; +}) => { const api = useApi(fireHydrantApiRef); const errorApi = useApi(errorApiRef); const { loading, value, error, retry } = useAsyncRetry(async () => { try { - return await api.getServiceDetails({ serviceName: serviceName }); + return await api.getServiceDetails({ + serviceName: serviceName, + lookupByName: lookupByName, + }); } catch (e) { errorApi.post(e); return Promise.reject(e); diff --git a/plugins/firehydrant/src/index.ts b/plugins/firehydrant/src/index.ts index f1ef66fd3e..218b944244 100644 --- a/plugins/firehydrant/src/index.ts +++ b/plugins/firehydrant/src/index.ts @@ -20,4 +20,8 @@ * @packageDocumentation */ -export { firehydrantPlugin, FirehydrantCard } from './plugin'; +export { + firehydrantPlugin, + FirehydrantCard, + isFireHydrantAvailable, +} from './plugin'; diff --git a/plugins/firehydrant/src/plugin.ts b/plugins/firehydrant/src/plugin.ts index 6deefe4fce..14a8c53c66 100644 --- a/plugins/firehydrant/src/plugin.ts +++ b/plugins/firehydrant/src/plugin.ts @@ -50,3 +50,6 @@ export const FirehydrantCard = firehydrantPlugin.provide( }, }), ); + +/** @public */ +export { isFireHydrantAvailable } from './components/hooks'; diff --git a/yarn.lock b/yarn.lock index 4ad5e727d0..5d3cd95dbb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6249,6 +6249,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-firehydrant@workspace:plugins/firehydrant" dependencies: + "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/core-components": "workspace:^" From cce21f4cc4a4468f9d63385ea944ac2a4f3c04a0 Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Thu, 9 Mar 2023 23:06:14 +0000 Subject: [PATCH 052/511] Add a few tests Signed-off-by: Dustin Brewer --- .../firehydrant/src/components/hooks.test.ts | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 plugins/firehydrant/src/components/hooks.test.ts diff --git a/plugins/firehydrant/src/components/hooks.test.ts b/plugins/firehydrant/src/components/hooks.test.ts new file mode 100644 index 0000000000..4278911ebb --- /dev/null +++ b/plugins/firehydrant/src/components/hooks.test.ts @@ -0,0 +1,67 @@ +/* + * Copyright 2021 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 { Entity } from '@backstage/catalog-model'; +import { isFireHydrantAvailable, getFireHydrantServiceName } from './hooks'; + +describe('firehydrant-hooks-isFireHydrantAvailable', () => { + it('should find an annotation', () => { + const e: Entity = { + metadata: { + annotations: { + 'firehydrant.com/service-name': 'test-fh-name', + }, + }, + }; + expect(isFireHydrantAvailable(e)).toEqual(true); + }); + + it('should not find an annotation', () => { + const e: Entity = { + metadata: {}, + }; + expect(isFireHydrantAvailable(e)).toEqual(false); + }); +}); + +describe('firehydrant-hooks-getFireHydrantServiceName', () => { + it('should return annotation service name', () => { + const expected = 'test-fh-name'; + const e: Entity = { + kind: 'Component', + metadata: { + namespace: 'default', + name: 'test-fh-name', + annotations: { + 'firehydrant.com/service-name': expected, + }, + }, + }; + expect(getFireHydrantServiceName(e)).toEqual(expected); + }); + + it('should return generated service name', () => { + const expected = 'Component:default/test-fh-name'; + const e: Entity = { + kind: 'Component', + metadata: { + namespace: 'default', + name: 'test-fh-name', + annotations: {}, + }, + }; + expect(getFireHydrantServiceName(e)).toEqual(expected); + }); +}); From 88da0bcff21a9f83b81c49c7eb9b5ac96435a64e Mon Sep 17 00:00:00 2001 From: Kurt King Date: Thu, 9 Mar 2023 16:18:32 -0700 Subject: [PATCH 053/511] add plugId property Signed-off-by: Kurt King --- docs/plugins/feature-flags.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/plugins/feature-flags.md b/docs/plugins/feature-flags.md index a572143d6e..d6847d3f65 100644 --- a/docs/plugins/feature-flags.md +++ b/docs/plugins/feature-flags.md @@ -37,7 +37,12 @@ Defining feature flag in the application is done by adding feature flags in`feat const app = createApp({ // ... featureFlags: [ - { name: 'tech-radar', description: 'Enables the tech radar plugin' }, + // pluginId can be left empty for feature flags used in the application. It is required for feature flags used in plugins + { + pluginId: '', + name: 'tech-radar', + description: 'Enables the tech radar plugin', + }, ], // ... }); From 0708a169de2bb16e787912cef8cc086ddb7e842c Mon Sep 17 00:00:00 2001 From: Kurt King Date: Thu, 9 Mar 2023 16:20:46 -0700 Subject: [PATCH 054/511] move comment after prettier ran Signed-off-by: Kurt King --- docs/plugins/feature-flags.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/plugins/feature-flags.md b/docs/plugins/feature-flags.md index d6847d3f65..7b7a6c1435 100644 --- a/docs/plugins/feature-flags.md +++ b/docs/plugins/feature-flags.md @@ -37,9 +37,8 @@ Defining feature flag in the application is done by adding feature flags in`feat const app = createApp({ // ... featureFlags: [ - // pluginId can be left empty for feature flags used in the application. It is required for feature flags used in plugins { - pluginId: '', + pluginId: '', // pluginId is required for feature flags in plugins. It can be left blank for a feature flag leveraged in the application. name: 'tech-radar', description: 'Enables the tech radar plugin', }, From 392e71fa7fbfea1bc652ca28fe72e135dc04c253 Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Thu, 9 Mar 2023 23:22:54 +0000 Subject: [PATCH 055/511] Correcting Entity in tests Signed-off-by: Dustin Brewer --- plugins/firehydrant/src/components/hooks.test.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/firehydrant/src/components/hooks.test.ts b/plugins/firehydrant/src/components/hooks.test.ts index 4278911ebb..2fbf1e2d57 100644 --- a/plugins/firehydrant/src/components/hooks.test.ts +++ b/plugins/firehydrant/src/components/hooks.test.ts @@ -19,7 +19,11 @@ import { isFireHydrantAvailable, getFireHydrantServiceName } from './hooks'; describe('firehydrant-hooks-isFireHydrantAvailable', () => { it('should find an annotation', () => { const e: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', metadata: { + namespace: 'default', + name: 'test-fh-name', annotations: { 'firehydrant.com/service-name': 'test-fh-name', }, @@ -30,7 +34,12 @@ describe('firehydrant-hooks-isFireHydrantAvailable', () => { it('should not find an annotation', () => { const e: Entity = { - metadata: {}, + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + namespace: 'default', + name: 'test-fh-name', + }, }; expect(isFireHydrantAvailable(e)).toEqual(false); }); @@ -40,6 +49,7 @@ describe('firehydrant-hooks-getFireHydrantServiceName', () => { it('should return annotation service name', () => { const expected = 'test-fh-name'; const e: Entity = { + apiVersion: 'backstage.io/v1alpha1', kind: 'Component', metadata: { namespace: 'default', @@ -55,6 +65,7 @@ describe('firehydrant-hooks-getFireHydrantServiceName', () => { it('should return generated service name', () => { const expected = 'Component:default/test-fh-name'; const e: Entity = { + apiVersion: 'backstage.io/v1alpha1', kind: 'Component', metadata: { namespace: 'default', From ad4840b0f579fee2c724b0cbebaf94cc426c3f3b Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Fri, 10 Mar 2023 00:08:59 +0000 Subject: [PATCH 056/511] Correcting the api-report Signed-off-by: Dustin Brewer --- plugins/firehydrant/api-report.md | 4 ++++ plugins/firehydrant/src/components/hooks.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/plugins/firehydrant/api-report.md b/plugins/firehydrant/api-report.md index 2e3bcf6385..0ff5bbc62a 100644 --- a/plugins/firehydrant/api-report.md +++ b/plugins/firehydrant/api-report.md @@ -6,6 +6,7 @@ /// import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) @@ -19,4 +20,7 @@ export const firehydrantPlugin: BackstagePlugin< {}, {} >; + +// @public (undocumented) +export const isFireHydrantAvailable: (entity: Entity) => boolean; ``` diff --git a/plugins/firehydrant/src/components/hooks.ts b/plugins/firehydrant/src/components/hooks.ts index e8129e1b28..d9145f13f0 100644 --- a/plugins/firehydrant/src/components/hooks.ts +++ b/plugins/firehydrant/src/components/hooks.ts @@ -17,6 +17,7 @@ import { Entity } from '@backstage/catalog-model'; export const FIREHYDRANT_SERVICE_NAME_ANNOTATION = 'firehydrant.com/service-name'; +/** @public */ export const isFireHydrantAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION]); export const getFireHydrantServiceName = (entity: Entity) => From 9d8528eb8d3ee4cf0b8cf5d04a5d478f169164c6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 10 Mar 2023 12:04:28 +0100 Subject: [PATCH 057/511] cli: add node-plugin template Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/new/factories/index.ts | 1 + .../src/lib/new/factories/pluginNode.test.ts | 107 ++++++++++++++++++ .../cli/src/lib/new/factories/pluginNode.ts | 74 ++++++++++++ .../default-node-plugin-package/.eslintrc.js | 1 + .../default-node-plugin-package/README.md.hbs | 5 + .../package.json.hbs | 36 ++++++ .../src/index.ts.hbs | 18 +++ .../src/setupTests.ts | 1 + .../default-node-plugin-package/tsconfig.json | 9 ++ 9 files changed, 252 insertions(+) create mode 100644 packages/cli/src/lib/new/factories/pluginNode.test.ts create mode 100644 packages/cli/src/lib/new/factories/pluginNode.ts create mode 100644 packages/cli/templates/default-node-plugin-package/.eslintrc.js create mode 100644 packages/cli/templates/default-node-plugin-package/README.md.hbs create mode 100644 packages/cli/templates/default-node-plugin-package/package.json.hbs create mode 100644 packages/cli/templates/default-node-plugin-package/src/index.ts.hbs create mode 100644 packages/cli/templates/default-node-plugin-package/src/setupTests.ts create mode 100644 packages/cli/templates/default-node-plugin-package/tsconfig.json diff --git a/packages/cli/src/lib/new/factories/index.ts b/packages/cli/src/lib/new/factories/index.ts index 80a24702e0..9fc69e0ca4 100644 --- a/packages/cli/src/lib/new/factories/index.ts +++ b/packages/cli/src/lib/new/factories/index.ts @@ -18,4 +18,5 @@ export { frontendPlugin } from './frontendPlugin'; export { backendPlugin } from './backendPlugin'; export { webLibraryPackage } from './webLibraryPackage'; export { pluginCommon } from './pluginCommon'; +export { pluginNode } from './pluginNode'; export { scaffolderModule } from './scaffolderModule'; diff --git a/packages/cli/src/lib/new/factories/pluginNode.test.ts b/packages/cli/src/lib/new/factories/pluginNode.test.ts new file mode 100644 index 0000000000..50971ff191 --- /dev/null +++ b/packages/cli/src/lib/new/factories/pluginNode.test.ts @@ -0,0 +1,107 @@ +/* + * Copyright 2021 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 fs from 'fs-extra'; +import mockFs from 'mock-fs'; +import { sep, resolve as resolvePath } from 'path'; +import { paths } from '../../paths'; +import { Task } from '../../tasks'; +import { FactoryRegistry } from '../FactoryRegistry'; +import { createMockOutputStream, mockPaths } from './common/testUtils'; +import { pluginNode } from './pluginNode'; + +describe('pluginNode factory', () => { + beforeEach(() => { + mockPaths({ + targetRoot: '/root', + }); + }); + + afterEach(() => { + mockFs.restore(); + jest.resetAllMocks(); + }); + + it('should create a node plugin package', async () => { + mockFs({ + '/root': { + plugins: mockFs.directory(), + }, + [paths.resolveOwn('templates')]: mockFs.load( + paths.resolveOwn('templates'), + ), + }); + + const options = await FactoryRegistry.populateOptions(pluginNode, { + id: 'test', + }); + + let modified = false; + + const [output, mockStream] = createMockOutputStream(); + jest.spyOn(process, 'stderr', 'get').mockReturnValue(mockStream); + jest.spyOn(Task, 'forCommand').mockResolvedValue(); + + await pluginNode.create(options, { + private: true, + isMonoRepo: true, + defaultVersion: '1.0.0', + markAsModified: () => { + modified = true; + }, + createTemporaryDirectory: () => fs.mkdtemp('test'), + }); + + expect(modified).toBe(true); + + expect(output).toEqual([ + '', + 'Creating Node.js plugin library backstage-plugin-test-node', + 'Checking Prerequisites:', + `availability plugins${sep}test-node`, + 'creating temp dir', + 'Executing Template:', + 'copying .eslintrc.js', + 'templating README.md.hbs', + 'templating package.json.hbs', + 'templating index.ts.hbs', + 'copying setupTests.ts', + 'Installing:', + `moving plugins${sep}test-node`, + ]); + + await expect( + fs.readJson('/root/plugins/test-node/package.json'), + ).resolves.toEqual( + expect.objectContaining({ + name: 'backstage-plugin-test-node', + description: 'Node.js library for the test plugin', + private: true, + version: '1.0.0', + }), + ); + + expect(Task.forCommand).toHaveBeenCalledTimes(2); + expect(Task.forCommand).toHaveBeenCalledWith('yarn install', { + cwd: resolvePath('/root/plugins/test-node'), + optional: true, + }); + expect(Task.forCommand).toHaveBeenCalledWith('yarn lint --fix', { + cwd: resolvePath('/root/plugins/test-node'), + optional: true, + }); + }); +}); diff --git a/packages/cli/src/lib/new/factories/pluginNode.ts b/packages/cli/src/lib/new/factories/pluginNode.ts new file mode 100644 index 0000000000..44dbea9fce --- /dev/null +++ b/packages/cli/src/lib/new/factories/pluginNode.ts @@ -0,0 +1,74 @@ +/* + * Copyright 2021 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 chalk from 'chalk'; +import { paths } from '../../paths'; +import { addCodeownersEntry, getCodeownersFilePath } from '../../codeowners'; +import { createFactory, CreateContext } from '../types'; +import { Task } from '../../tasks'; +import { ownerPrompt, pluginIdPrompt } from './common/prompts'; +import { executePluginPackageTemplate } from './common/tasks'; + +type Options = { + id: string; + owner?: string; + codeOwnersPath?: string; +}; + +export const pluginNode = createFactory({ + name: 'plugin-node', + description: 'A new Node.js library plugin package', + optionsDiscovery: async () => ({ + codeOwnersPath: await getCodeownersFilePath(paths.targetRoot), + }), + optionsPrompts: [pluginIdPrompt(), ownerPrompt()], + async create(options: Options, ctx: CreateContext) { + const { id } = options; + const suffix = `${id}-node`; + const name = ctx.scope + ? `@${ctx.scope}/plugin-${suffix}` + : `backstage-plugin-${suffix}`; + + Task.log(); + Task.log(`Creating Node.js plugin library ${chalk.cyan(name)}`); + + const targetDir = ctx.isMonoRepo + ? paths.resolveTargetRoot('plugins', suffix) + : paths.resolveTargetRoot(`backstage-plugin-${suffix}`); + + await executePluginPackageTemplate(ctx, { + targetDir, + templateName: 'default-node-plugin-package', + values: { + id, + name, + privatePackage: ctx.private, + npmRegistry: ctx.npmRegistry, + pluginVersion: ctx.defaultVersion, + }, + }); + + if (options.owner) { + await addCodeownersEntry(`/plugins/${suffix}`, options.owner); + } + + await Task.forCommand('yarn install', { cwd: targetDir, optional: true }); + await Task.forCommand('yarn lint --fix', { + cwd: targetDir, + optional: true, + }); + }, +}); diff --git a/packages/cli/templates/default-node-plugin-package/.eslintrc.js b/packages/cli/templates/default-node-plugin-package/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/cli/templates/default-node-plugin-package/README.md.hbs b/packages/cli/templates/default-node-plugin-package/README.md.hbs new file mode 100644 index 0000000000..a9fc97935e --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/README.md.hbs @@ -0,0 +1,5 @@ +# {{name}} + +Welcome to the Node.js library package for the {{id}} plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/packages/cli/templates/default-node-plugin-package/package.json.hbs b/packages/cli/templates/default-node-plugin-package/package.json.hbs new file mode 100644 index 0000000000..45becd1bea --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/package.json.hbs @@ -0,0 +1,36 @@ +{ + "name": "{{name}}", + "description": "Node.js library for the {{id}} plugin", + "version": "{{pluginVersion}}", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", +{{#if privatePackage}} + "private": {{privatePackage}}, +{{/if}} + "publishConfig": { +{{#if npmRegistry}} + "registry": "{{npmRegistry}}", +{{/if}} + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "node-library" + }, + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "devDependencies": { + "@backstage/cli": "{{versionQuery '@backstage/cli'}}" + }, + "files": [ + "dist" + ] +} diff --git a/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs b/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs new file mode 100644 index 0000000000..8f5ad37ffb --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs @@ -0,0 +1,18 @@ +/***/ +/** + * Node.js library for the {{id}} plugin. + * + * @packageDocumentation + */ + +// In this package you might for example export functions that +// help other plugins or module interact with your plugin. + +/** + * Does something useful. + * + * @public + */ +export function someFunction() { + // ... +} diff --git a/packages/cli/templates/default-node-plugin-package/src/setupTests.ts b/packages/cli/templates/default-node-plugin-package/src/setupTests.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/src/setupTests.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/cli/templates/default-node-plugin-package/tsconfig.json b/packages/cli/templates/default-node-plugin-package/tsconfig.json new file mode 100644 index 0000000000..5ae9aeb62d --- /dev/null +++ b/packages/cli/templates/default-node-plugin-package/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@backstage/cli/config/tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"], + "compilerOptions": { + "outDir": "dist-types", + "rootDir": "." + } +} From 862267c646827870e88b8632f27ddbf260fbcb0e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 10 Mar 2023 13:36:00 +0100 Subject: [PATCH 058/511] docs/local-dev: fix docs for `new` Signed-off-by: Patrik Oldsberg --- docs/local-dev/cli-commands.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/local-dev/cli-commands.md b/docs/local-dev/cli-commands.md index 174fb3e348..8c1e061237 100644 --- a/docs/local-dev/cli-commands.md +++ b/docs/local-dev/cli-commands.md @@ -212,14 +212,13 @@ backstage-cli new --select plugin --option id=foo ``` This command is typically added as script in the root `package.json` to be -executed with `yarn backstage-create`, using options that are appropriate for -the organization that owns the app repo. For example you may have it set up like -this: +executed with `yarn new`, using options that are appropriate for the organization +that owns the app repo. For example you may have it set up like this: ```json { "scripts": { - "backstage-create": "backstage-cli create --scope internal --no-private --npm-registry https://acme.org/npm" + "new": "backstage-cli new --scope internal --no-private --npm-registry https://acme.org/npm" } } ``` From 09e87a95e25459c7bf03fe125325110be3fad7b4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 10 Mar 2023 13:23:51 +0100 Subject: [PATCH 059/511] cli: add web-plugin template Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/new/factories/index.ts | 1 + .../src/lib/new/factories/pluginWeb.test.ts | 114 ++++++++++++++++++ .../cli/src/lib/new/factories/pluginWeb.ts | 74 ++++++++++++ .../default-react-plugin-package/.eslintrc.js | 1 + .../README.md.hbs | 5 + .../package.json.hbs | 47 ++++++++ .../ExampleComponent.test.tsx | 18 +++ .../ExampleComponent/ExampleComponent.tsx | 29 +++++ .../src/components/ExampleComponent/index.ts | 2 + .../src/components/index.ts | 5 + .../src/hooks/index.ts | 5 + .../src/hooks/useExample/index.ts | 1 + .../src/hooks/useExample/useExample.ts | 15 +++ .../src/index.ts.hbs | 12 ++ .../src/setupTests.ts | 1 + .../tsconfig.json | 11 ++ 16 files changed, 341 insertions(+) create mode 100644 packages/cli/src/lib/new/factories/pluginWeb.test.ts create mode 100644 packages/cli/src/lib/new/factories/pluginWeb.ts create mode 100644 packages/cli/templates/default-react-plugin-package/.eslintrc.js create mode 100644 packages/cli/templates/default-react-plugin-package/README.md.hbs create mode 100644 packages/cli/templates/default-react-plugin-package/package.json.hbs create mode 100644 packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.test.tsx create mode 100644 packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.tsx create mode 100644 packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/index.ts create mode 100644 packages/cli/templates/default-react-plugin-package/src/components/index.ts create mode 100644 packages/cli/templates/default-react-plugin-package/src/hooks/index.ts create mode 100644 packages/cli/templates/default-react-plugin-package/src/hooks/useExample/index.ts create mode 100644 packages/cli/templates/default-react-plugin-package/src/hooks/useExample/useExample.ts create mode 100644 packages/cli/templates/default-react-plugin-package/src/index.ts.hbs create mode 100644 packages/cli/templates/default-react-plugin-package/src/setupTests.ts create mode 100644 packages/cli/templates/default-react-plugin-package/tsconfig.json diff --git a/packages/cli/src/lib/new/factories/index.ts b/packages/cli/src/lib/new/factories/index.ts index 9fc69e0ca4..232e762b91 100644 --- a/packages/cli/src/lib/new/factories/index.ts +++ b/packages/cli/src/lib/new/factories/index.ts @@ -19,4 +19,5 @@ export { backendPlugin } from './backendPlugin'; export { webLibraryPackage } from './webLibraryPackage'; export { pluginCommon } from './pluginCommon'; export { pluginNode } from './pluginNode'; +export { pluginWeb } from './pluginWeb'; export { scaffolderModule } from './scaffolderModule'; diff --git a/packages/cli/src/lib/new/factories/pluginWeb.test.ts b/packages/cli/src/lib/new/factories/pluginWeb.test.ts new file mode 100644 index 0000000000..bcd62f3bcd --- /dev/null +++ b/packages/cli/src/lib/new/factories/pluginWeb.test.ts @@ -0,0 +1,114 @@ +/* + * Copyright 2021 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 fs from 'fs-extra'; +import mockFs from 'mock-fs'; +import { sep, resolve as resolvePath } from 'path'; +import { paths } from '../../paths'; +import { Task } from '../../tasks'; +import { FactoryRegistry } from '../FactoryRegistry'; +import { createMockOutputStream, mockPaths } from './common/testUtils'; +import { pluginWeb } from './pluginWeb'; + +describe('pluginWeb factory', () => { + beforeEach(() => { + mockPaths({ + targetRoot: '/root', + }); + }); + + afterEach(() => { + mockFs.restore(); + jest.resetAllMocks(); + }); + + it('should create a react plugin package', async () => { + mockFs({ + '/root': { + plugins: mockFs.directory(), + }, + [paths.resolveOwn('templates')]: mockFs.load( + paths.resolveOwn('templates'), + ), + }); + + const options = await FactoryRegistry.populateOptions(pluginWeb, { + id: 'test', + }); + + let modified = false; + + const [output, mockStream] = createMockOutputStream(); + jest.spyOn(process, 'stderr', 'get').mockReturnValue(mockStream); + jest.spyOn(Task, 'forCommand').mockResolvedValue(); + + await pluginWeb.create(options, { + private: true, + isMonoRepo: true, + defaultVersion: '1.0.0', + markAsModified: () => { + modified = true; + }, + createTemporaryDirectory: () => fs.mkdtemp('test'), + }); + + expect(modified).toBe(true); + + expect(output).toEqual([ + '', + 'Creating web plugin library backstage-plugin-test-react', + 'Checking Prerequisites:', + `availability plugins${sep}test-react`, + 'creating temp dir', + 'Executing Template:', + 'copying .eslintrc.js', + 'templating README.md.hbs', + 'templating package.json.hbs', + 'templating index.ts.hbs', + 'copying setupTests.ts', + 'copying index.ts', + 'copying ExampleComponent.test.tsx', + 'copying ExampleComponent.tsx', + 'copying index.ts', + 'copying index.ts', + 'copying index.ts', + 'copying useExample.ts', + 'Installing:', + `moving plugins${sep}test-react`, + ]); + + await expect( + fs.readJson('/root/plugins/test-react/package.json'), + ).resolves.toEqual( + expect.objectContaining({ + name: 'backstage-plugin-test-react', + description: 'Web library for the test plugin', + private: true, + version: '1.0.0', + }), + ); + + expect(Task.forCommand).toHaveBeenCalledTimes(2); + expect(Task.forCommand).toHaveBeenCalledWith('yarn install', { + cwd: resolvePath('/root/plugins/test-react'), + optional: true, + }); + expect(Task.forCommand).toHaveBeenCalledWith('yarn lint --fix', { + cwd: resolvePath('/root/plugins/test-react'), + optional: true, + }); + }); +}); diff --git a/packages/cli/src/lib/new/factories/pluginWeb.ts b/packages/cli/src/lib/new/factories/pluginWeb.ts new file mode 100644 index 0000000000..8189654eb2 --- /dev/null +++ b/packages/cli/src/lib/new/factories/pluginWeb.ts @@ -0,0 +1,74 @@ +/* + * Copyright 2021 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 chalk from 'chalk'; +import { paths } from '../../paths'; +import { addCodeownersEntry, getCodeownersFilePath } from '../../codeowners'; +import { createFactory, CreateContext } from '../types'; +import { Task } from '../../tasks'; +import { ownerPrompt, pluginIdPrompt } from './common/prompts'; +import { executePluginPackageTemplate } from './common/tasks'; + +type Options = { + id: string; + owner?: string; + codeOwnersPath?: string; +}; + +export const pluginWeb = createFactory({ + name: 'plugin-react', + description: 'A new web library plugin package', + optionsDiscovery: async () => ({ + codeOwnersPath: await getCodeownersFilePath(paths.targetRoot), + }), + optionsPrompts: [pluginIdPrompt(), ownerPrompt()], + async create(options: Options, ctx: CreateContext) { + const { id } = options; + const suffix = `${id}-react`; + const name = ctx.scope + ? `@${ctx.scope}/plugin-${suffix}` + : `backstage-plugin-${suffix}`; + + Task.log(); + Task.log(`Creating web plugin library ${chalk.cyan(name)}`); + + const targetDir = ctx.isMonoRepo + ? paths.resolveTargetRoot('plugins', suffix) + : paths.resolveTargetRoot(`backstage-plugin-${suffix}`); + + await executePluginPackageTemplate(ctx, { + targetDir, + templateName: 'default-react-plugin-package', + values: { + id, + name, + privatePackage: ctx.private, + npmRegistry: ctx.npmRegistry, + pluginVersion: ctx.defaultVersion, + }, + }); + + if (options.owner) { + await addCodeownersEntry(`/plugins/${suffix}`, options.owner); + } + + await Task.forCommand('yarn install', { cwd: targetDir, optional: true }); + await Task.forCommand('yarn lint --fix', { + cwd: targetDir, + optional: true, + }); + }, +}); diff --git a/packages/cli/templates/default-react-plugin-package/.eslintrc.js b/packages/cli/templates/default-react-plugin-package/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/cli/templates/default-react-plugin-package/README.md.hbs b/packages/cli/templates/default-react-plugin-package/README.md.hbs new file mode 100644 index 0000000000..ab1c36da6b --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/README.md.hbs @@ -0,0 +1,5 @@ +# {{name}} + +Welcome to the web library package for the {{id}} plugin! + +_This plugin was created through the Backstage CLI_ diff --git a/packages/cli/templates/default-react-plugin-package/package.json.hbs b/packages/cli/templates/default-react-plugin-package/package.json.hbs new file mode 100644 index 0000000000..e0ee408eda --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/package.json.hbs @@ -0,0 +1,47 @@ +{ + "name": "{{name}}", + "description": "Web library for the {{id}} plugin", + "version": "{{pluginVersion}}", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", +{{#if privatePackage}} + "private": {{privatePackage}}, +{{/if}} + "publishConfig": { +{{#if npmRegistry}} + "registry": "{{npmRegistry}}", +{{/if}} + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "web-library" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/core-plugin-api": "{{versionQuery '@backstage/core-plugin-api'}}", + "@material-ui/core": "{{versionQuery '@material-ui/core' '4.12.2'}}" + }, + "peerDependencies": { + "react": "{{versionQuery 'react' '^16.13.1 || ^17.0.0'}}" + }, + "devDependencies": { + "@backstage/cli": "{{versionQuery '@backstage/cli'}}", + "@backstage/test-utils": "{{versionQuery '@backstage/test-utils'}}", + "@testing-library/jest-dom": "{{versionQuery '@testing-library/jest-dom' '5.10.1'}}", + "@testing-library/react": "{{versionQuery '@testing-library/react' '12.1.3'}}" + }, + "files": [ + "dist" + ] +} diff --git a/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.test.tsx b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.test.tsx new file mode 100644 index 0000000000..c770cca8cb --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.test.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { screen } from '@testing-library/react'; +import { renderInTestApp } from '@backstage/test-utils'; +import { ExampleComponent } from './ExampleComponent'; + +describe('ExampleComponent', () => { + it('should render', async () => { + await renderInTestApp() + + expect(screen.getByText('Hello World')).toBeInTheDocument(); + }); + + it('should display a custom message', async () => { + await renderInTestApp() + + expect(screen.getByText('Hello Example')).toBeInTheDocument(); + }) +}) diff --git a/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.tsx b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.tsx new file mode 100644 index 0000000000..a1ab0937db --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/ExampleComponent.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { Typography } from '@material-ui/core'; + +/** + * Props for {@link ExampleComponent}. + * + * @public + */ +export interface ExampleComponentProps { + message?: string; +} + +/** + * Displays an example. + * + * @remarks + * + * Longer descriptions should be put after the `@remarks` tag. That way the initial summary + * will show up in the API docs overview section, while the longer description will only be + * displayed on the page for the specific API. + * + * @public + */ +export function ExampleComponent(props: ExampleComponentProps) { + // By destructuring props here rather than in the signature the API docs will look nicer + const { message = 'Hello World' } = props; + + return {message}; +} diff --git a/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/index.ts b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/index.ts new file mode 100644 index 0000000000..9bb2f2c378 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/components/ExampleComponent/index.ts @@ -0,0 +1,2 @@ +export { ExampleComponent } from './ExampleComponent'; +export type { ExampleComponentProps } from './ExampleComponent'; diff --git a/packages/cli/templates/default-react-plugin-package/src/components/index.ts b/packages/cli/templates/default-react-plugin-package/src/components/index.ts new file mode 100644 index 0000000000..0380b8ce5f --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/components/index.ts @@ -0,0 +1,5 @@ +/***/ +// The index file in ./components/ is typically responsible for selecting +// which components are public API and should be exported from the package. + +export * from './ExampleComponent'; diff --git a/packages/cli/templates/default-react-plugin-package/src/hooks/index.ts b/packages/cli/templates/default-react-plugin-package/src/hooks/index.ts new file mode 100644 index 0000000000..cec94f4b04 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/hooks/index.ts @@ -0,0 +1,5 @@ +/***/ +// The index file in ./hooks/ is typically responsible for selecting +// which hooks are public API and should be exported from the package. + +export * from './useExample'; diff --git a/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/index.ts b/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/index.ts new file mode 100644 index 0000000000..f1fd276930 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/index.ts @@ -0,0 +1 @@ +export { useExample } from './useExample'; diff --git a/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/useExample.ts b/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/useExample.ts new file mode 100644 index 0000000000..911d255238 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/hooks/useExample/useExample.ts @@ -0,0 +1,15 @@ +import { useEffect } from 'react'; +import { useApi, alertApiRef } from '@backstage/core-plugin-api'; + +/** + * Shows an example alert. + * + * @public + */ +export function useExample() { + const alertApi = useApi(alertApiRef); + + useEffect(() => { + alertApi.post({ message: 'Hello World!' }); + }, [alertApi]) +} diff --git a/packages/cli/templates/default-react-plugin-package/src/index.ts.hbs b/packages/cli/templates/default-react-plugin-package/src/index.ts.hbs new file mode 100644 index 0000000000..a7ebb26f00 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/index.ts.hbs @@ -0,0 +1,12 @@ +/***/ +/** + * Web library for the {{id}} plugin. + * + * @packageDocumentation + */ + +// In this package you might for example export components or hooks +// that are useful to other plugins or modules. + +export * from './components' +export * from './hooks' diff --git a/packages/cli/templates/default-react-plugin-package/src/setupTests.ts b/packages/cli/templates/default-react-plugin-package/src/setupTests.ts new file mode 100644 index 0000000000..7b0828bfa8 --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/src/setupTests.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/packages/cli/templates/default-react-plugin-package/tsconfig.json b/packages/cli/templates/default-react-plugin-package/tsconfig.json new file mode 100644 index 0000000000..ce3409d31f --- /dev/null +++ b/packages/cli/templates/default-react-plugin-package/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@backstage/cli/config/tsconfig.json", + "include": [ + "src", + ], + "exclude": ["node_modules"], + "compilerOptions": { + "outDir": "dist-types", + "rootDir": "." + } +} From 2011b86052c6d3371a92d62103035b28ec5f0b47 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 10 Mar 2023 13:30:21 +0100 Subject: [PATCH 060/511] changesets: changeset for web and node library templates Signed-off-by: Patrik Oldsberg --- .changeset/cyan-sheep-tap.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cyan-sheep-tap.md diff --git a/.changeset/cyan-sheep-tap.md b/.changeset/cyan-sheep-tap.md new file mode 100644 index 0000000000..7812e6b6c6 --- /dev/null +++ b/.changeset/cyan-sheep-tap.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Added templates for new plugin Web and Node.js libraries. From 5b76423c59b7dbee8919e5340fd3b9c3124dc979 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 13:08:13 +0000 Subject: [PATCH 061/511] fix(deps): update dependency @codemirror/view to v6.9.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 57e53c8a10..663107e961 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9390,13 +9390,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.9.1 - resolution: "@codemirror/view@npm:6.9.1" + version: 6.9.2 + resolution: "@codemirror/view@npm:6.9.2" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: 485d54d338a27ebde6bec489e3008db80a2a801fe27db0d4a3c70181c8739f806f035855ba13d5b311d186ad2b130db07196e8b465ec102b0142df0689bff2f8 + checksum: e6faaf1b2daf9e4605eafd1782a0a6363cf0ee8a6c4e1aa57ebea2b2cc2b402914f07448f12210da0144126860adab052442c51831911a326867a53c745a60cf languageName: node linkType: hard From bf1019508b310f60e735bd52ef59e7572d09dad5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 13:48:52 +0000 Subject: [PATCH 062/511] fix(deps): update dependency @swc/core to v1.3.39 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 86 ++++++++++++++++++++++----------------------- storybook/yarn.lock | 86 ++++++++++++++++++++++----------------------- yarn.lock | 86 ++++++++++++++++++++++----------------------- 3 files changed, 129 insertions(+), 129 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a9db81ead4..078cdc2546 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2623,90 +2623,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-arm64@npm:1.3.38" +"@swc/core-darwin-arm64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-arm64@npm:1.3.39" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-x64@npm:1.3.38" +"@swc/core-darwin-x64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-x64@npm:1.3.39" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.38" +"@swc/core-linux-arm-gnueabihf@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.38" +"@swc/core-linux-arm64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.38" +"@swc/core-linux-arm64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.38" +"@swc/core-linux-x64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-musl@npm:1.3.38" +"@swc/core-linux-x64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-musl@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.38" +"@swc/core-win32-arm64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.38" +"@swc/core-win32-ia32-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.38" +"@swc/core-win32-x64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.36": - version: 1.3.38 - resolution: "@swc/core@npm:1.3.38" + version: 1.3.39 + resolution: "@swc/core@npm:1.3.39" dependencies: - "@swc/core-darwin-arm64": 1.3.38 - "@swc/core-darwin-x64": 1.3.38 - "@swc/core-linux-arm-gnueabihf": 1.3.38 - "@swc/core-linux-arm64-gnu": 1.3.38 - "@swc/core-linux-arm64-musl": 1.3.38 - "@swc/core-linux-x64-gnu": 1.3.38 - "@swc/core-linux-x64-musl": 1.3.38 - "@swc/core-win32-arm64-msvc": 1.3.38 - "@swc/core-win32-ia32-msvc": 1.3.38 - "@swc/core-win32-x64-msvc": 1.3.38 + "@swc/core-darwin-arm64": 1.3.39 + "@swc/core-darwin-x64": 1.3.39 + "@swc/core-linux-arm-gnueabihf": 1.3.39 + "@swc/core-linux-arm64-gnu": 1.3.39 + "@swc/core-linux-arm64-musl": 1.3.39 + "@swc/core-linux-x64-gnu": 1.3.39 + "@swc/core-linux-x64-musl": 1.3.39 + "@swc/core-win32-arm64-msvc": 1.3.39 + "@swc/core-win32-ia32-msvc": 1.3.39 + "@swc/core-win32-x64-msvc": 1.3.39 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -2728,7 +2728,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: c55d30e57638bcd21f788add8490c3f3e71bfe027aa5a8b153e1b1b9686ecddd6deeaaa6a6b17717c7eab4c1e2a232b465b6755b6c891506fc0d03139badfbf7 + checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d languageName: node linkType: hard diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 9c05864306..eb70dadd2f 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.38": - version: 1.3.38 - resolution: "@swc/core-darwin-arm64@npm:1.3.38" +"@swc/core-darwin-arm64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-arm64@npm:1.3.39" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-x64@npm:1.3.38" +"@swc/core-darwin-x64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-x64@npm:1.3.39" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.38" +"@swc/core-linux-arm-gnueabihf@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.38" +"@swc/core-linux-arm64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.38" +"@swc/core-linux-arm64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.38" +"@swc/core-linux-x64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-musl@npm:1.3.38" +"@swc/core-linux-x64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-musl@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.38" +"@swc/core-win32-arm64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.38" +"@swc/core-win32-ia32-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.38" +"@swc/core-win32-x64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.38 - resolution: "@swc/core@npm:1.3.38" + version: 1.3.39 + resolution: "@swc/core@npm:1.3.39" dependencies: - "@swc/core-darwin-arm64": 1.3.38 - "@swc/core-darwin-x64": 1.3.38 - "@swc/core-linux-arm-gnueabihf": 1.3.38 - "@swc/core-linux-arm64-gnu": 1.3.38 - "@swc/core-linux-arm64-musl": 1.3.38 - "@swc/core-linux-x64-gnu": 1.3.38 - "@swc/core-linux-x64-musl": 1.3.38 - "@swc/core-win32-arm64-msvc": 1.3.38 - "@swc/core-win32-ia32-msvc": 1.3.38 - "@swc/core-win32-x64-msvc": 1.3.38 + "@swc/core-darwin-arm64": 1.3.39 + "@swc/core-darwin-x64": 1.3.39 + "@swc/core-linux-arm-gnueabihf": 1.3.39 + "@swc/core-linux-arm64-gnu": 1.3.39 + "@swc/core-linux-arm64-musl": 1.3.39 + "@swc/core-linux-x64-gnu": 1.3.39 + "@swc/core-linux-x64-musl": 1.3.39 + "@swc/core-win32-arm64-msvc": 1.3.39 + "@swc/core-win32-ia32-msvc": 1.3.39 + "@swc/core-win32-x64-msvc": 1.3.39 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -3071,7 +3071,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: c55d30e57638bcd21f788add8490c3f3e71bfe027aa5a8b153e1b1b9686ecddd6deeaaa6a6b17717c7eab4c1e2a232b465b6755b6c891506fc0d03139badfbf7 + checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 663107e961..2f46341024 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13866,90 +13866,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-arm64@npm:1.3.38" +"@swc/core-darwin-arm64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-arm64@npm:1.3.39" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-darwin-x64@npm:1.3.38" +"@swc/core-darwin-x64@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-darwin-x64@npm:1.3.39" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.38" +"@swc/core-linux-arm-gnueabihf@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.38" +"@swc/core-linux-arm64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.38" +"@swc/core-linux-arm64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.38" +"@swc/core-linux-x64-gnu@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-linux-x64-musl@npm:1.3.38" +"@swc/core-linux-x64-musl@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-linux-x64-musl@npm:1.3.39" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.38" +"@swc/core-win32-arm64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.38" +"@swc/core-win32-ia32-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.38": - version: 1.3.38 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.38" +"@swc/core-win32-x64-msvc@npm:1.3.39": + version: 1.3.39 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.38 - resolution: "@swc/core@npm:1.3.38" + version: 1.3.39 + resolution: "@swc/core@npm:1.3.39" dependencies: - "@swc/core-darwin-arm64": 1.3.38 - "@swc/core-darwin-x64": 1.3.38 - "@swc/core-linux-arm-gnueabihf": 1.3.38 - "@swc/core-linux-arm64-gnu": 1.3.38 - "@swc/core-linux-arm64-musl": 1.3.38 - "@swc/core-linux-x64-gnu": 1.3.38 - "@swc/core-linux-x64-musl": 1.3.38 - "@swc/core-win32-arm64-msvc": 1.3.38 - "@swc/core-win32-ia32-msvc": 1.3.38 - "@swc/core-win32-x64-msvc": 1.3.38 + "@swc/core-darwin-arm64": 1.3.39 + "@swc/core-darwin-x64": 1.3.39 + "@swc/core-linux-arm-gnueabihf": 1.3.39 + "@swc/core-linux-arm64-gnu": 1.3.39 + "@swc/core-linux-arm64-musl": 1.3.39 + "@swc/core-linux-x64-gnu": 1.3.39 + "@swc/core-linux-x64-musl": 1.3.39 + "@swc/core-win32-arm64-msvc": 1.3.39 + "@swc/core-win32-ia32-msvc": 1.3.39 + "@swc/core-win32-x64-msvc": 1.3.39 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -13971,7 +13971,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: c55d30e57638bcd21f788add8490c3f3e71bfe027aa5a8b153e1b1b9686ecddd6deeaaa6a6b17717c7eab4c1e2a232b465b6755b6c891506fc0d03139badfbf7 + checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d languageName: node linkType: hard From b37a450fe555f4cc711d05ffb1b2044d145e4c5d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 10 Mar 2023 15:03:31 +0100 Subject: [PATCH 063/511] Update packages/cli/templates/default-node-plugin-package/src/index.ts.hbs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- .../cli/templates/default-node-plugin-package/src/index.ts.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs b/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs index 8f5ad37ffb..355b35c373 100644 --- a/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs +++ b/packages/cli/templates/default-node-plugin-package/src/index.ts.hbs @@ -6,7 +6,7 @@ */ // In this package you might for example export functions that -// help other plugins or module interact with your plugin. +// help other plugins or modules interact with your plugin. /** * Does something useful. From bbd7b4d7687feb2d45d3a7eace56d92e9e08ba69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Fri, 10 Mar 2023 15:39:51 +0100 Subject: [PATCH 064/511] bump the openstack swift sdk to get a newer file-type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/techdocs-node/package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 4c3a4a3496..a247ef483e 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -54,7 +54,7 @@ "@backstage/integration-aws-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@google-cloud/storage": "^6.0.0", - "@trendyol-js/openstack-swift-sdk": "^0.0.5", + "@trendyol-js/openstack-swift-sdk": "^0.0.6", "@types/express": "^4.17.6", "express": "^4.17.1", "fs-extra": "10.1.0", diff --git a/yarn.lock b/yarn.lock index 663107e961..a4ee8b8787 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8620,7 +8620,7 @@ __metadata: "@backstage/integration-aws-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@google-cloud/storage": ^6.0.0 - "@trendyol-js/openstack-swift-sdk": ^0.0.5 + "@trendyol-js/openstack-swift-sdk": ^0.0.6 "@types/express": ^4.17.6 "@types/fs-extra": ^9.0.5 "@types/js-yaml": ^4.0.0 @@ -14177,15 +14177,15 @@ __metadata: languageName: node linkType: hard -"@trendyol-js/openstack-swift-sdk@npm:^0.0.5": - version: 0.0.5 - resolution: "@trendyol-js/openstack-swift-sdk@npm:0.0.5" +"@trendyol-js/openstack-swift-sdk@npm:^0.0.6": + version: 0.0.6 + resolution: "@trendyol-js/openstack-swift-sdk@npm:0.0.6" dependencies: agentkeepalive: ^4.1.4 axios: ^0.21.1 axios-cached-dns-resolve: 0.5.2 - file-type: 16.5.3 - checksum: 35a3c705aa9b3daa44bef590a8aad4ceda89106ca3368b0d1b574be5aa1f064d42fb0c26e0570481e57be2ad3296d416e27ad37303a3d95d2d65f3df0b2446df + file-type: ^16.5.4 + checksum: 999a1afa5f0dc2b1f41c1c13104f68d147c488b7ee5836581cc5acb485b9e963fb822177b6996a901339a06a9900dd8ff78ed7fd8b1d29f2c2f7809c5c54c62a languageName: node linkType: hard @@ -23447,14 +23447,14 @@ __metadata: languageName: node linkType: hard -"file-type@npm:16.5.3": - version: 16.5.3 - resolution: "file-type@npm:16.5.3" +"file-type@npm:^16.5.4": + version: 16.5.4 + resolution: "file-type@npm:16.5.4" dependencies: readable-web-to-node-stream: ^3.0.0 strtok3: ^6.2.4 token-types: ^4.1.1 - checksum: 38a4443d0f7b9b3de8a44a1d75d441f9ddb544a1adbf22ec7bc07d135452c3464000c64daa51220ffec6a38ceec7565a1290337bd81aab2e6273c79db5ed9ef3 + checksum: d983c0f36491c57fcb6cc70fcb02c36d6b53f312a15053263e1924e28ca8314adf0db32170801ad777f09432c32155f31715ceaee66310947731588120d7ec27 languageName: node linkType: hard From bf493710f50c1888bc49642613fa940b4351b00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Fri, 10 Mar 2023 15:42:10 +0100 Subject: [PATCH 065/511] changeset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/cold-plants-boil.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cold-plants-boil.md diff --git a/.changeset/cold-plants-boil.md b/.changeset/cold-plants-boil.md new file mode 100644 index 0000000000..a991601a88 --- /dev/null +++ b/.changeset/cold-plants-boil.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-node': patch +--- + +Update to a newer version of `@trendyol-js/openstack-swift-sdk` From 3ef5fb09ca5017d61a47edd33d7c44d189987204 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Fri, 10 Mar 2023 15:41:08 +0100 Subject: [PATCH 066/511] fix broken stack overflow stories - mock stack overflow api Signed-off-by: Emma Indal --- .changeset/silver-donkeys-eat.md | 5 +++ .../templates/DefaultTemplate.stories.tsx | 32 +++++++++++++++---- plugins/stack-overflow/api-report.md | 11 +++++++ .../src/api/StackOverflowApi.ts | 6 ++++ .../StackOverflowQuestions.stories.tsx | 21 ++++++++++++ plugins/stack-overflow/src/index.ts | 2 ++ 6 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 .changeset/silver-donkeys-eat.md diff --git a/.changeset/silver-donkeys-eat.md b/.changeset/silver-donkeys-eat.md new file mode 100644 index 0000000000..0995a2025c --- /dev/null +++ b/.changeset/silver-donkeys-eat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stack-overflow': patch +--- + +Export api ref and StackOverflowApi type diff --git a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx index 638fe8bc29..9cf2e8ab35 100644 --- a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx +++ b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx @@ -19,7 +19,7 @@ import { HomePageCompanyLogo, HomePageStarredEntities, TemplateBackstageLogo, - TemplateBackstageLogoIcon + TemplateBackstageLogoIcon, } from '@backstage/plugin-home'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { Content, Page, InfoCard } from '@backstage/core-components'; @@ -31,12 +31,12 @@ import { } from '@backstage/plugin-catalog-react'; import { configApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/config'; +import { HomePageSearchBar, searchPlugin } from '@backstage/plugin-search'; import { - HomePageSearchBar, - searchPlugin, -} from '@backstage/plugin-search'; -import { searchApiRef, SearchContextProvider } from '@backstage/plugin-search-react'; -import { HomePageStackOverflowQuestions } from '@backstage/plugin-stack-overflow'; + searchApiRef, + SearchContextProvider, +} from '@backstage/plugin-search-react'; +import { stackOverflowApiRef, HomePageStackOverflowQuestions } from '@backstage/plugin-stack-overflow'; import { Grid, makeStyles } from '@material-ui/core'; import React, { ComponentType } from 'react'; @@ -79,6 +79,25 @@ const mockCatalogApi = { getEntities: async () => ({ items: entities }), }; +const mockStackOverflowApi = { + listQuestions: async () => [ + { + title: 'Customizing Spotify backstage UI', + link: 'stackoverflow.question/1', + answer_count: 0, + tags: ['backstage'], + owner: { 'some owner': 'name' }, + }, + { + title: 'Customizing Spotify backstage UI', + link: 'stackoverflow.question/1', + answer_count: 0, + tags: ['backstage'], + owner: { 'some owner': 'name' }, + }, + ], +}; + const starredEntitiesApi = new MockStarredEntitiesApi(); starredEntitiesApi.toggleStarred('component:default/example-starred-entity'); starredEntitiesApi.toggleStarred('component:default/example-starred-entity-2'); @@ -93,6 +112,7 @@ export default { <> Promise.resolve({ results: [] }) }], diff --git a/plugins/stack-overflow/api-report.md b/plugins/stack-overflow/api-report.md index fe2a970c13..598bd06a04 100644 --- a/plugins/stack-overflow/api-report.md +++ b/plugins/stack-overflow/api-report.md @@ -5,6 +5,7 @@ ```ts /// +import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { CardExtensionProps } from '@backstage/plugin-home'; import { ReactNode } from 'react'; @@ -15,6 +16,16 @@ export const HomePageStackOverflowQuestions: ( props: CardExtensionProps, ) => JSX.Element; +// @public (undocumented) +export type StackOverflowApi = { + listQuestions(options?: { + requestParams: StackOverflowQuestionsRequestParams; + }): Promise; +}; + +// @public (undocumented) +export const stackOverflowApiRef: ApiRef; + // @public export const StackOverflowIcon: () => JSX.Element; diff --git a/plugins/stack-overflow/src/api/StackOverflowApi.ts b/plugins/stack-overflow/src/api/StackOverflowApi.ts index 6e76f51409..d470e879e7 100644 --- a/plugins/stack-overflow/src/api/StackOverflowApi.ts +++ b/plugins/stack-overflow/src/api/StackOverflowApi.ts @@ -20,10 +20,16 @@ import { StackOverflowQuestionsRequestParams, } from '../types'; +/** + * @public + */ export const stackOverflowApiRef = createApiRef({ id: 'plugin.stackoverflow.service', }); +/** + * @public + */ export type StackOverflowApi = { listQuestions(options?: { requestParams: StackOverflowQuestionsRequestParams; diff --git a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx index 35ace44c14..aed1ed25aa 100644 --- a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx +++ b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx @@ -21,6 +21,26 @@ import { ConfigReader } from '@backstage/config'; import { Grid } from '@material-ui/core'; import React, { ComponentType } from 'react'; import { StackOverflowIcon } from '../../icons'; +import { stackOverflowApiRef } from '../../api'; + +const mockStackOverflowApi = { + listQuestions: async () => [ + { + title: 'Customizing Spotify backstage UI', + link: 'stackoverflow.question/1', + answer_count: 0, + tags: ['backstage'], + owner: { 'some owner': 'name' }, + }, + { + title: 'Customizing Spotify backstage UI', + link: 'stackoverflow.question/1', + answer_count: 0, + tags: ['backstage'], + owner: { 'some owner': 'name' }, + }, + ], +}; export default { title: 'Plugins/Home/Components/StackOverflow', @@ -39,6 +59,7 @@ export default { }, }), ], + [stackOverflowApiRef, mockStackOverflowApi], ]} > diff --git a/plugins/stack-overflow/src/index.ts b/plugins/stack-overflow/src/index.ts index 5965d66983..a796f563eb 100644 --- a/plugins/stack-overflow/src/index.ts +++ b/plugins/stack-overflow/src/index.ts @@ -30,3 +30,5 @@ export type { StackOverflowQuestionsContentProps, StackOverflowQuestionsRequestParams, } from './types'; +export { stackOverflowApiRef } from './api'; +export type { StackOverflowApi } from './api'; From 92b495328bd3a3627c2b91b107c3175b10d44ab2 Mon Sep 17 00:00:00 2001 From: Oleg S <97077423+RobotSail@users.noreply.github.com> Date: Mon, 6 Mar 2023 17:00:01 -0500 Subject: [PATCH 067/511] expose the techdocs-backend plugin using the new system Signed-off-by: Oleg S <97077423+RobotSail@users.noreply.github.com> --- .changeset/large-feet-wash.md | 6 ++ packages/backend-next/package.json | 1 + packages/backend-next/src/index.ts | 2 + plugins/techdocs-backend/api-report.md | 4 ++ plugins/techdocs-backend/package.json | 1 + plugins/techdocs-backend/src/index.ts | 1 + plugins/techdocs-backend/src/plugin.ts | 95 ++++++++++++++++++++++++++ yarn.lock | 2 + 8 files changed, 112 insertions(+) create mode 100644 .changeset/large-feet-wash.md create mode 100644 plugins/techdocs-backend/src/plugin.ts diff --git a/.changeset/large-feet-wash.md b/.changeset/large-feet-wash.md new file mode 100644 index 0000000000..15e3c54b42 --- /dev/null +++ b/.changeset/large-feet-wash.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs-backend': minor +'example-backend-next': minor +--- + +Expose the techdocs-backend plugin using the new plugin system diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 9f7ec8306a..5d8a8cb1ec 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -29,6 +29,7 @@ "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", + "@backstage/plugin-techdocs-backend": "workspace:^", "@backstage/plugin-todo-backend": "workspace:^" }, "devDependencies": { diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 8e29244ebf..0f7af110e9 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -19,6 +19,7 @@ import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/ import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; +import { techdocsPlugin } from '@backstage/plugin-techdocs-backend'; const backend = createBackend(); @@ -26,4 +27,5 @@ backend.add(catalogPlugin()); backend.add(catalogModuleTemplateKind()); backend.add(appPlugin({ appPackageName: 'example-app' })); backend.add(todoPlugin()); +backend.add(techdocsPlugin()); backend.start(); diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index 1f6aa1d66a..fe8db9a135 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -5,6 +5,7 @@ ```ts /// +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; @@ -129,5 +130,8 @@ export type TechDocsCollatorOptions = { export { TechDocsDocument }; +// @public +export const techdocsPlugin: () => BackendFeature; + export * from '@backstage/plugin-techdocs-node'; ``` diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index c9fff25b70..6389487eec 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -34,6 +34,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", diff --git a/plugins/techdocs-backend/src/index.ts b/plugins/techdocs-backend/src/index.ts index dc5d87d1b3..06259d3d3c 100644 --- a/plugins/techdocs-backend/src/index.ts +++ b/plugins/techdocs-backend/src/index.ts @@ -37,6 +37,7 @@ export type { TechDocsCollatorFactoryOptions, TechDocsCollatorOptions, } from './search'; +export { techdocsPlugin } from './plugin'; /** * @deprecated Use directly from @backstage/plugin-techdocs-node diff --git a/plugins/techdocs-backend/src/plugin.ts b/plugins/techdocs-backend/src/plugin.ts new file mode 100644 index 0000000000..7cffcc8fbd --- /dev/null +++ b/plugins/techdocs-backend/src/plugin.ts @@ -0,0 +1,95 @@ +/* + * Copyright 2023 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 { + DockerContainerRunner, + loggerToWinstonLogger, + cacheToPluginCacheManager, +} from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; + +import { + Preparers, + Generators, + Publisher, +} from '@backstage/plugin-techdocs-node'; +import Docker from 'dockerode'; +import { createRouter } from './service'; + +/** + * The TechDocs plugin is responsible for serving and building documentation for any entity. + * @public + */ +export const techdocsPlugin = createBackendPlugin({ + pluginId: 'techdocs-backend', + register(env) { + env.registerInit({ + deps: { + config: coreServices.config, + logger: coreServices.logger, + urlReader: coreServices.urlReader, + http: coreServices.httpRouter, + discovery: coreServices.discovery, + cache: coreServices.cache, + }, + async init({ config, logger, urlReader, http, discovery, cache }) { + const winstonLogger = loggerToWinstonLogger(logger); + // Preparers are responsible for fetching source files for documentation. + const preparers = await Preparers.fromConfig(config, { + reader: urlReader, + logger: winstonLogger, + }); + + // Docker client (conditionally) used by the generators, based on techdocs.generators config. + const dockerClient = new Docker(); + const containerRunner = new DockerContainerRunner({ dockerClient }); + + // Generators are used for generating documentation sites. + const generators = await Generators.fromConfig(config, { + logger: winstonLogger, + containerRunner, + }); + + // Publisher is used for + // 1. Publishing generated files to storage + // 2. Fetching files from storage and passing them to TechDocs frontend. + const publisher = await Publisher.fromConfig(config, { + logger: winstonLogger, + discovery: discovery, + }); + + // checks if the publisher is working and logs the result + await publisher.getReadiness(); + + const cacheManager = cacheToPluginCacheManager(cache); + http.use( + await createRouter({ + logger: winstonLogger, + cache: cacheManager, + preparers, + generators, + publisher, + config, + discovery, + }), + ); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index 663107e961..6a8317bfce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8538,6 +8538,7 @@ __metadata: resolution: "@backstage/plugin-techdocs-backend@workspace:plugins/techdocs-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -22870,6 +22871,7 @@ __metadata: "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/plugin-techdocs-backend": "workspace:^" "@backstage/plugin-todo-backend": "workspace:^" languageName: unknown linkType: soft From c041efd53d64b72db7e217acb70f9d367b54bd35 Mon Sep 17 00:00:00 2001 From: Oleg S <97077423+RobotSail@users.noreply.github.com> Date: Wed, 8 Mar 2023 15:30:37 -0500 Subject: [PATCH 068/511] exposes the techdocs plugin as an alpha plugin Signed-off-by: Oleg S <97077423+RobotSail@users.noreply.github.com> --- .changeset/large-feet-wash.md | 3 +-- packages/backend-next/src/index.ts | 2 +- plugins/techdocs-backend/alpha-api-report.md | 12 ++++++++++++ plugins/techdocs-backend/api-report.md | 4 ---- plugins/techdocs-backend/package.json | 15 +++++++++++++++ plugins/techdocs-backend/src/alpha.ts | 16 ++++++++++++++++ plugins/techdocs-backend/src/index.ts | 1 - plugins/techdocs-backend/src/plugin.ts | 4 ++-- 8 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 plugins/techdocs-backend/alpha-api-report.md create mode 100644 plugins/techdocs-backend/src/alpha.ts diff --git a/.changeset/large-feet-wash.md b/.changeset/large-feet-wash.md index 15e3c54b42..d663661725 100644 --- a/.changeset/large-feet-wash.md +++ b/.changeset/large-feet-wash.md @@ -1,6 +1,5 @@ --- '@backstage/plugin-techdocs-backend': minor -'example-backend-next': minor --- -Expose the techdocs-backend plugin using the new plugin system +Added alpha export of the `techdocsPlugin` using the new backend system diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 0f7af110e9..8f8984b192 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -19,7 +19,7 @@ import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/ import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; -import { techdocsPlugin } from '@backstage/plugin-techdocs-backend'; +import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; const backend = createBackend(); diff --git a/plugins/techdocs-backend/alpha-api-report.md b/plugins/techdocs-backend/alpha-api-report.md new file mode 100644 index 0000000000..16db84c216 --- /dev/null +++ b/plugins/techdocs-backend/alpha-api-report.md @@ -0,0 +1,12 @@ +## API Report File for "@backstage/plugin-techdocs-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; + +// @alpha +export const techdocsPlugin: () => BackendFeature; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index fe8db9a135..1f6aa1d66a 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -5,7 +5,6 @@ ```ts /// -import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; @@ -130,8 +129,5 @@ export type TechDocsCollatorOptions = { export { TechDocsDocument }; -// @public -export const techdocsPlugin: () => BackendFeature; - export * from '@backstage/plugin-techdocs-node'; ``` diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 6389487eec..1d2f4400eb 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -10,6 +10,21 @@ "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, "backstage": { "role": "backend-plugin" }, diff --git a/plugins/techdocs-backend/src/alpha.ts b/plugins/techdocs-backend/src/alpha.ts new file mode 100644 index 0000000000..1a36c5a1f5 --- /dev/null +++ b/plugins/techdocs-backend/src/alpha.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export { techdocsPlugin } from './plugin'; diff --git a/plugins/techdocs-backend/src/index.ts b/plugins/techdocs-backend/src/index.ts index 06259d3d3c..dc5d87d1b3 100644 --- a/plugins/techdocs-backend/src/index.ts +++ b/plugins/techdocs-backend/src/index.ts @@ -37,7 +37,6 @@ export type { TechDocsCollatorFactoryOptions, TechDocsCollatorOptions, } from './search'; -export { techdocsPlugin } from './plugin'; /** * @deprecated Use directly from @backstage/plugin-techdocs-node diff --git a/plugins/techdocs-backend/src/plugin.ts b/plugins/techdocs-backend/src/plugin.ts index 7cffcc8fbd..4b0ebbe366 100644 --- a/plugins/techdocs-backend/src/plugin.ts +++ b/plugins/techdocs-backend/src/plugin.ts @@ -30,11 +30,11 @@ import { Publisher, } from '@backstage/plugin-techdocs-node'; import Docker from 'dockerode'; -import { createRouter } from './service'; +import { createRouter } from '@backstage/plugin-techdocs-backend'; /** * The TechDocs plugin is responsible for serving and building documentation for any entity. - * @public + * @alpha */ export const techdocsPlugin = createBackendPlugin({ pluginId: 'techdocs-backend', From a09223a505fd36574d0b57beb340896eddb12702 Mon Sep 17 00:00:00 2001 From: Oleg S <97077423+RobotSail@users.noreply.github.com> Date: Thu, 9 Mar 2023 09:52:33 -0500 Subject: [PATCH 069/511] rename pluginId for todo-backend & techdocs-backend to 'todo' and 'techdocs' Signed-off-by: Oleg S <97077423+RobotSail@users.noreply.github.com> --- .changeset/large-feet-wash.md | 3 ++- plugins/techdocs-backend/src/plugin.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.changeset/large-feet-wash.md b/.changeset/large-feet-wash.md index d663661725..2a55aab2c9 100644 --- a/.changeset/large-feet-wash.md +++ b/.changeset/large-feet-wash.md @@ -1,5 +1,6 @@ --- '@backstage/plugin-techdocs-backend': minor +'@backstage/plugin-todo-backend': patch --- -Added alpha export of the `techdocsPlugin` using the new backend system +Added alpha export of the `techdocsPlugin` using the new backend system. Renamed the `todoPlugin` pluginId from `todo-backend` to `todo`. diff --git a/plugins/techdocs-backend/src/plugin.ts b/plugins/techdocs-backend/src/plugin.ts index 4b0ebbe366..134de2bba6 100644 --- a/plugins/techdocs-backend/src/plugin.ts +++ b/plugins/techdocs-backend/src/plugin.ts @@ -37,7 +37,7 @@ import { createRouter } from '@backstage/plugin-techdocs-backend'; * @alpha */ export const techdocsPlugin = createBackendPlugin({ - pluginId: 'techdocs-backend', + pluginId: 'techdocs', register(env) { env.registerInit({ deps: { From 2f2f5112adad5bd11d923d3aabf850afd00a5e3b Mon Sep 17 00:00:00 2001 From: Oleg S <97077423+RobotSail@users.noreply.github.com> Date: Thu, 9 Mar 2023 11:23:18 -0500 Subject: [PATCH 070/511] spelling Signed-off-by: Oleg S <97077423+RobotSail@users.noreply.github.com> --- .changeset/large-feet-wash.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/large-feet-wash.md b/.changeset/large-feet-wash.md index 2a55aab2c9..88a28f9d60 100644 --- a/.changeset/large-feet-wash.md +++ b/.changeset/large-feet-wash.md @@ -1,6 +1,5 @@ --- '@backstage/plugin-techdocs-backend': minor -'@backstage/plugin-todo-backend': patch --- -Added alpha export of the `techdocsPlugin` using the new backend system. Renamed the `todoPlugin` pluginId from `todo-backend` to `todo`. +Introduced alpha export of the `techdocsPlugin` using the new backend system. From 16d3ba42856fa3b69b77edc3edf69bdb73e3146a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 15:29:35 +0000 Subject: [PATCH 071/511] fix(deps): update dependency terser-webpack-plugin to v5.3.7 Signed-off-by: Renovate Bot --- yarn.lock | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/yarn.lock b/yarn.lock index a4ee8b8787..98493dc1c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11452,7 +11452,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.0.3": +"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 @@ -11476,7 +11476,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 @@ -11493,13 +11493,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.15 - resolution: "@jridgewell/trace-mapping@npm:0.3.15" +"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 38917e9c2b014d469a9f51c016ed506acbe44dd16ec2f6f99b553ebf3764d22abadbf992f2367b6d2b3511f3eae8ed3a8963f6c1030093fda23efd35ecab2bae + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 languageName: node linkType: hard @@ -35412,12 +35412,12 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" +"serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" dependencies: randombytes: ^2.1.0 - checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f languageName: node linkType: hard @@ -37095,14 +37095,14 @@ __metadata: linkType: hard "terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3": - version: 5.3.6 - resolution: "terser-webpack-plugin@npm:5.3.6" + version: 5.3.7 + resolution: "terser-webpack-plugin@npm:5.3.7" dependencies: - "@jridgewell/trace-mapping": ^0.3.14 + "@jridgewell/trace-mapping": ^0.3.17 jest-worker: ^27.4.5 schema-utils: ^3.1.1 - serialize-javascript: ^6.0.0 - terser: ^5.14.1 + serialize-javascript: ^6.0.1 + terser: ^5.16.5 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -37112,13 +37112,13 @@ __metadata: optional: true uglify-js: optional: true - checksum: 8f3448d7fdb0434ce6a0c09d95c462bfd2f4a5a430233d854163337f734a7f5c07c74513d16081e06d4ca33d366d5b1a36f5444219bc41a7403afd6162107bad + checksum: 095e699fdeeb553cdf2c6f75f983949271b396d9c201d7ae9fc633c45c1c1ad14c7257ef9d51ccc62213dd3e97f875870ba31550f6d4f1b6674f2615562da7f7 languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.14.1": - version: 5.14.2 - resolution: "terser@npm:5.14.2" +"terser@npm:^5.10.0, terser@npm:^5.16.5": + version: 5.16.6 + resolution: "terser@npm:5.16.6" dependencies: "@jridgewell/source-map": ^0.3.2 acorn: ^8.5.0 @@ -37126,7 +37126,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: cabb50a640d6c2cfb351e4f43dc7bf7436f649755bb83eb78b2cacda426d5e0979bd44e6f92d713f3ca0f0866e322739b9ced888ebbce6508ad872d08de74fcc + checksum: f763a7bcc7b98cb2bfc41434f7b92bfe8a701a12c92ea6049377736c8e6de328240d654a20dfe15ce170fd783491b9873fad9f4cd8fee4f6c6fb8ca407859dee languageName: node linkType: hard From 8b925744164998e0d3bea832dce1f4f7bf7569fa Mon Sep 17 00:00:00 2001 From: afalco Date: Fri, 10 Mar 2023 09:37:51 -0600 Subject: [PATCH 072/511] Add tests for step timers Signed-off-by: afalco --- .../components/TaskSteps/TaskSteps.test.tsx | 51 +++++++++++++++++++ .../next/components/TaskSteps/TaskSteps.tsx | 1 + 2 files changed, 52 insertions(+) diff --git a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.test.tsx b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.test.tsx index 0945843961..cbc87c2d53 100644 --- a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.test.tsx +++ b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.test.tsx @@ -61,4 +61,55 @@ describe('TaskSteps', () => { expect(getByText(step.name)).toBeInTheDocument(); } }); + it('should only show timer for in progress, failed, and completed steps', async () => { + const steps = [ + { + id: '1', + name: 'Fail', + status: 'failed' as ScaffolderTaskStatus, + + startedAt: Date.now().toLocaleString(), + endedAt: Date.now().toLocaleString(), + action: 'action1', + }, + { + id: '2', + name: 'Process', + status: 'processing' as ScaffolderTaskStatus, + startedAt: Date.now().toLocaleString(), + action: 'action2', + }, + { + id: '3', + name: 'Complete', + status: 'completed' as ScaffolderTaskStatus, + startedAt: Date.now().toLocaleString(), + endedAt: Date.now().toLocaleString(), + action: 'action3', + }, + { + id: '4', + name: 'Skip', + status: 'skipped' as ScaffolderTaskStatus, + startedAt: Date.now().toLocaleString(), + action: 'action4', + }, + { + id: '5', + name: 'Not Started', + status: 'open' as ScaffolderTaskStatus, + action: 'action5', + }, + ]; + + const screen = await renderInTestApp(); + const stepLabels = await screen.findAllByTestId('step-label'); + expect(stepLabels.length).toBe(steps.length); + for (let i = 0; i < steps.length; i++) { + expect(stepLabels[i].textContent?.startsWith(steps[i].name)).toBe(true); + expect(stepLabels[i].textContent?.endsWith('seconds')).toBe( + steps[i].status !== 'skipped' && !!steps[i].startedAt, + ); + } + }); }); diff --git a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx index 668306fa9e..d783351eca 100644 --- a/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx +++ b/plugins/scaffolder-react/src/next/components/TaskSteps/TaskSteps.tsx @@ -78,6 +78,7 @@ export const TaskSteps = (props: TaskStepsProps) => { {step.name} {!isSkipped && } From 078f46ea3269a61faaaab1d21290741c511d199e Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Fri, 10 Mar 2023 15:45:48 +0000 Subject: [PATCH 073/511] Cleanup building FireHydrant service name Remove the reduntant check for the annotation, and utilize stringifyEntityRef as recommended Signed-off-by: Dustin Brewer --- .../ServiceDetailsCard/ServiceDetailsCard.test.tsx | 4 +++- plugins/firehydrant/src/components/hooks.test.ts | 2 +- plugins/firehydrant/src/components/hooks.ts | 9 +++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.test.tsx b/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.test.tsx index 20dbb77e86..ce2b1f5391 100644 --- a/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.test.tsx +++ b/plugins/firehydrant/src/components/ServiceDetailsCard/ServiceDetailsCard.test.tsx @@ -30,7 +30,9 @@ const apis = TestApiRegistry.from([fireHydrantApiRef, mockFireHydrantApi]); jest.mock('@backstage/plugin-catalog-react', () => ({ useEntity: () => { - return { entity: { metadata: { name: 'service-example' } } }; + return { + entity: { kind: 'Component', metadata: { name: 'service-example' } }, + }; }, })); diff --git a/plugins/firehydrant/src/components/hooks.test.ts b/plugins/firehydrant/src/components/hooks.test.ts index 2fbf1e2d57..f35d6774ce 100644 --- a/plugins/firehydrant/src/components/hooks.test.ts +++ b/plugins/firehydrant/src/components/hooks.test.ts @@ -63,7 +63,7 @@ describe('firehydrant-hooks-getFireHydrantServiceName', () => { }); it('should return generated service name', () => { - const expected = 'Component:default/test-fh-name'; + const expected = 'component:default/test-fh-name'; const e: Entity = { apiVersion: 'backstage.io/v1alpha1', kind: 'Component', diff --git a/plugins/firehydrant/src/components/hooks.ts b/plugins/firehydrant/src/components/hooks.ts index d9145f13f0..c4055b1724 100644 --- a/plugins/firehydrant/src/components/hooks.ts +++ b/plugins/firehydrant/src/components/hooks.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; export const FIREHYDRANT_SERVICE_NAME_ANNOTATION = 'firehydrant.com/service-name'; @@ -21,8 +21,5 @@ export const FIREHYDRANT_SERVICE_NAME_ANNOTATION = export const isFireHydrantAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION]); export const getFireHydrantServiceName = (entity: Entity) => - isFireHydrantAvailable(entity) - ? entity?.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION] ?? '' - : `${entity?.kind}:${entity?.metadata?.namespace ?? 'default'}/${ - entity?.metadata?.name - }`; + entity?.metadata.annotations?.[FIREHYDRANT_SERVICE_NAME_ANNOTATION] ?? + stringifyEntityRef(entity); From c5afe933bbbaa6037e42b6516156fc135d11905b Mon Sep 17 00:00:00 2001 From: Dustin Brewer Date: Fri, 10 Mar 2023 16:00:32 +0000 Subject: [PATCH 074/511] Cleanup query string encoding on services API call Signed-off-by: Dustin Brewer --- plugins/firehydrant/src/api/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/firehydrant/src/api/index.ts b/plugins/firehydrant/src/api/index.ts index 45834d90e9..1cbf10ec9b 100644 --- a/plugins/firehydrant/src/api/index.ts +++ b/plugins/firehydrant/src/api/index.ts @@ -81,10 +81,10 @@ export class FireHydrantAPIClient implements FireHydrantAPI { lookupByName: boolean; }): Promise { const queryOpt = options.lookupByName ? 'name' : 'query'; + const query = new URLSearchParams(); + query.set(queryOpt, options.serviceName); const proxyUrl = await this.getApiUrl(); - const response = await fetch( - `${proxyUrl}/services?${queryOpt}=${options.serviceName}`, - ); + const response = await fetch(`${proxyUrl}/services?${query}`); if (!response.ok) { throw new Error( From 21a27f6edc401655c4e5ceab5e11d996a2305fbf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 16:11:05 +0000 Subject: [PATCH 075/511] chore(deps): update dependency better-sqlite3 to v8.2.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 98493dc1c0..b1b60ba15e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18001,13 +18001,13 @@ __metadata: linkType: hard "better-sqlite3@npm:^8.0.0": - version: 8.1.0 - resolution: "better-sqlite3@npm:8.1.0" + version: 8.2.0 + resolution: "better-sqlite3@npm:8.2.0" dependencies: bindings: ^1.5.0 node-gyp: latest prebuild-install: ^7.1.0 - checksum: 7e6b4c33142f4b2ee2e60d3926b4db682feb0d09554efdaf7bea53cd5bef406ca0a5115ab9b411458daa45ba14973252ebd6853a3cdf94e4fd49cc8291730ade + checksum: ab8a00bcc33c4a7467f78fcbb103c784705cf170ecc9c8eb1149a89a2153c03a7f65681064667eb214fa7f555797abd8183380a0396ce04eaf36efef921ce103 languageName: node linkType: hard From ed0f26cf82b1ecdb783ca44ae17b3990baf3e8cd Mon Sep 17 00:00:00 2001 From: Paul Schultz Date: Fri, 10 Mar 2023 10:45:50 -0600 Subject: [PATCH 076/511] Update prism style to vsDark Signed-off-by: Paul Schultz --- .../software-templates/testing-scaffolder-alpha.md | 4 ++-- microsite/docusaurus.config.js | 8 +++++++- microsite/package.json | 1 + microsite/src/css/customTheme.css | 8 ++++++++ microsite/yarn.lock | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md index c0b97e897c..1b0368f29c 100644 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ b/docs/features/software-templates/testing-scaffolder-alpha.md @@ -197,9 +197,9 @@ You will need to change the import for `FieldValidation` to point at the new `re ```ts /* highlight-remove-next-line */ -- import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/core'; /* highlight-add-next-line */ -+ import { FieldValidation } from '@rjsf/utils; +import { FieldValidation } from '@rjsf/utils; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; export const entityNamePickerValidation = ( diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 025c773a9c..8a9fe6fd9b 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -16,6 +16,11 @@ // @ts-check +/** @type{import('prism-react-renderer').PrismTheme} **/ +// @ts-ignore +const prismTheme = require('prism-react-renderer/themes/vsDark'); +prismTheme.plain.backgroundColor = '#232323'; + /** @type {import('@docusaurus/types').Config} */ module.exports = { title: 'Backstage Software Catalog and Developer Platform', @@ -266,10 +271,11 @@ module.exports = { searchParameters: {}, }, prism: { + theme: prismTheme, magicComments: [ // Extend the default highlight class name { - className: 'theme-code-block-highlighted-line', + className: 'code-block-highlight-line', line: 'highlight-next-line', block: { start: 'highlight-start', end: 'highlight-end' }, }, diff --git a/microsite/package.json b/microsite/package.json index cb71d5a25a..70b1aa86ad 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -35,6 +35,7 @@ "@swc/core": "^1.3.36", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.3", + "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2", "sass": "^1.57.1", diff --git a/microsite/src/css/customTheme.css b/microsite/src/css/customTheme.css index 4ba7f1df86..f216762418 100644 --- a/microsite/src/css/customTheme.css +++ b/microsite/src/css/customTheme.css @@ -75,4 +75,12 @@ border-left: 3px solid rgba(255, 0, 0, 0.5); } +.code-block-highlight-line { + background-color: rgba(255, 255, 255, 0.08); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + border-left: 3px solid rgb(255, 255, 255, 0.5); +} + /* #endregion */ diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a9db81ead4..a6393e7386 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -3738,6 +3738,7 @@ __metadata: docusaurus-plugin-sass: ^0.2.3 js-yaml: ^4.1.0 prettier: ^2.6.2 + prism-react-renderer: ^1.3.5 react: ^17.0.2 react-dom: ^17.0.2 replace: ^1.2.2 From cf90b966989babe15a7656195fcb578772db1e1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 Mar 2023 16:48:29 +0000 Subject: [PATCH 077/511] chore(deps): update dependency lint-staged to v13.2.0 Signed-off-by: Renovate Bot --- yarn.lock | 96 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/yarn.lock b/yarn.lock index b1b60ba15e..cdcd999a2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18749,6 +18749,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa + languageName: node + linkType: hard + "chalk@npm:^3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -19430,10 +19437,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:*, commander@npm:^9.1.0, commander@npm:^9.4.1, commander@npm:^9.5.0": - version: 9.5.0 - resolution: "commander@npm:9.5.0" - checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade +"commander@npm:*, commander@npm:^10.0.0": + version: 10.0.0 + resolution: "commander@npm:10.0.0" + checksum: 9f6495651f878213005ac744dd87a85fa3d9f2b8b90d1c19d0866d666bda7f735adfd7c2f10dfff345782e2f80ea258f98bb4efcef58e4e502f25f883940acfd languageName: node linkType: hard @@ -19486,6 +19493,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^9.1.0, commander@npm:^9.5.0": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -22978,20 +22992,20 @@ __metadata: languageName: node linkType: hard -"execa@npm:^6.1.0": - version: 6.1.0 - resolution: "execa@npm:6.1.0" +"execa@npm:^7.0.0": + version: 7.0.0 + resolution: "execa@npm:7.0.0" dependencies: cross-spawn: ^7.0.3 get-stream: ^6.0.1 - human-signals: ^3.0.1 + human-signals: ^4.3.0 is-stream: ^3.0.0 merge-stream: ^2.0.0 npm-run-path: ^5.1.0 onetime: ^6.0.0 signal-exit: ^3.0.7 strip-final-newline: ^3.0.0 - checksum: 1a4af799839134f5c72eb63d525b87304c1114a63aa71676c91d57ccef2e26f2f53e14c11384ab11c4ec479be1efa83d11c8190e00040355c2c5c3364327fa8e + checksum: be7c7b6d1e5473f628e46888b0cf8279da483c1a6000dd494a2059cc26591ded57ba46be1c9bdde1ec895e7eb8b18911174aba425cd971d41d140a9405da9a02 languageName: node linkType: hard @@ -25287,10 +25301,10 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^3.0.1": - version: 3.0.1 - resolution: "human-signals@npm:3.0.1" - checksum: f252a7769c8094a5c9dc6772816bdb417b188820b04c8b42d0fc468e03a0ba905b1dd07afabe9385cc83504af1ccc2b985cd1e4aeeeb8e0029896c5af2e6f354 +"human-signals@npm:^4.3.0": + version: 4.3.0 + resolution: "human-signals@npm:4.3.0" + checksum: 662b976b1063a8afb8fd7fa50bde6975997e17ea6ceba2aad54aacf1dc239a2cd7d14d27b3ceca0c6288627f4b45c56c2c89618455ff52cd9377c02d6328cd7c languageName: node linkType: hard @@ -28301,10 +28315,10 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:2.0.6, lilconfig@npm:^2.0.3": - version: 2.0.6 - resolution: "lilconfig@npm:2.0.6" - checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d +"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 languageName: node linkType: hard @@ -28344,25 +28358,25 @@ __metadata: linkType: hard "lint-staged@npm:^13.0.0": - version: 13.1.2 - resolution: "lint-staged@npm:13.1.2" + version: 13.2.0 + resolution: "lint-staged@npm:13.2.0" dependencies: + chalk: 5.2.0 cli-truncate: ^3.1.0 - colorette: ^2.0.19 - commander: ^9.4.1 + commander: ^10.0.0 debug: ^4.3.4 - execa: ^6.1.0 - lilconfig: 2.0.6 - listr2: ^5.0.5 + execa: ^7.0.0 + lilconfig: 2.1.0 + listr2: ^5.0.7 micromatch: ^4.0.5 normalize-path: ^3.0.0 - object-inspect: ^1.12.2 + object-inspect: ^1.12.3 pidtree: ^0.6.0 string-argv: ^0.3.1 - yaml: ^2.1.3 + yaml: ^2.2.1 bin: lint-staged: bin/lint-staged.js - checksum: f854ad5c88542b8f06e27f3b4046927a4f3d4a451a04e079526559d819a325762268f65bd2df7156bcc0cb5f531f621c42cdb824b403f537c78305adc9e56a54 + checksum: dcaa8fbbde567eb8ac27230a18b3a22f30c278c524c0e27cf7d4110d662d5d33ed68a585a2e1b05075ef1c262e853f557a5ae046188b723603246d63e6b9f07b languageName: node linkType: hard @@ -28408,16 +28422,16 @@ __metadata: languageName: node linkType: hard -"listr2@npm:^5.0.5": - version: 5.0.5 - resolution: "listr2@npm:5.0.5" +"listr2@npm:^5.0.7": + version: 5.0.7 + resolution: "listr2@npm:5.0.7" dependencies: cli-truncate: ^2.1.0 colorette: ^2.0.19 log-update: ^4.0.0 p-map: ^4.0.0 rfdc: ^1.3.0 - rxjs: ^7.5.6 + rxjs: ^7.8.0 through: ^2.3.8 wrap-ansi: ^7.0.0 peerDependencies: @@ -28425,7 +28439,7 @@ __metadata: peerDependenciesMeta: enquirer: optional: true - checksum: 71c44eb648405d2725f248747ef8d5e192dd16938ec81df854c4a7e74ff1b3f4c3149461b1cff31c761bfbdf110f7f2603c9957c908294a1c6db299c9168608c + checksum: 5c2cb6ba3f7a5cfd548f89405febe73dc937acb6060227198c05da0ed5d5285a8107c61fcc4e33884e3bbdd447411aff7580af396bd22b6a11047ceab4950fab languageName: node linkType: hard @@ -30981,10 +30995,10 @@ __metadata: languageName: node linkType: hard -"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 +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db languageName: node linkType: hard @@ -35093,7 +35107,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.0.0, rxjs@npm:^7.2.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5, rxjs@npm:^7.5.6, rxjs@npm:^7.8.0": +"rxjs@npm:^7.0.0, rxjs@npm:^7.2.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5, rxjs@npm:^7.8.0": version: 7.8.0 resolution: "rxjs@npm:7.8.0" dependencies: @@ -39460,10 +39474,10 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3": - version: 2.1.3 - resolution: "yaml@npm:2.1.3" - checksum: 91316062324a93f9cb547469092392e7d004ff8f70c40fecb420f042a4870b2181557350da56c92f07bd44b8f7a252b0be26e6ade1f548e1f4351bdd01c9d3c7 +"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.2.1": + version: 2.2.1 + resolution: "yaml@npm:2.2.1" + checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 languageName: node linkType: hard From 1b9fa3440cd5fa6ae07d5245a87efe8234dc5280 Mon Sep 17 00:00:00 2001 From: Paul Schultz Date: Fri, 10 Mar 2023 11:03:37 -0600 Subject: [PATCH 078/511] Update README Signed-off-by: Paul Schultz --- microsite/README.md | 157 ++++++++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 71 deletions(-) diff --git a/microsite/README.md b/microsite/README.md index 723baa1a54..5c1b0c1678 100644 --- a/microsite/README.md +++ b/microsite/README.md @@ -1,6 +1,6 @@ # Backstage Documentation -This folder holds the service and configuration that runs Backstage's documentation hosted at https://backstage.io. +This folder holds the service and configuration that runs Backstage's documentation hosted at . It pulls content in from the [root `/docs`](../docs/) folder and builds it into the resulting HTML web site. @@ -20,13 +20,13 @@ Testing the web site locally is a great way to see what final website will look ## Installation -``` +```bash $ yarn install ``` ## Local Development -``` +```bash $ yarn start ``` @@ -34,7 +34,7 @@ This command starts a local development server and opens up a browser window. Mo ## Build -``` +```bash $ yarn build ``` @@ -107,30 +107,30 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e 1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`: -```md ---- -id: newly-created-doc -title: This Doc Needs To Be Edited ---- + ```md + --- + id: newly-created-doc + title: This Doc Needs To Be Edited + --- -My new content here.. -``` + My new content here.. + ``` -1. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: +2. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: -```javascript -// Add newly-created-doc to the Getting Started category of docs -{ - "docs": { - "Getting Started": [ - "quick-start", - "newly-created-doc" // new doc here - ], - ... - }, - ... -} -``` + ```javascript + // Add newly-created-doc to the Getting Started category of docs + { + "docs": { + "Getting Started": [ + "quick-start", + "newly-created-doc" // new doc here + ], + ... + }, + ... + } + ``` For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation) @@ -138,30 +138,30 @@ For more information about adding new docs, click [here](https://docusaurus.io/d 1. Make sure there is a header link to your blog in `website/siteConfig.js`: -`website/siteConfig.js` + `website/siteConfig.js` -```javascript -headerLinks: [ - ... - { blog: true, label: 'Blog' }, - ... -] -``` + ```javascript + headerLinks: [ + ... + { blog: true, label: 'Blog' }, + ... + ] + ``` 2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`: -`website/blog/2018-05-21-New-Blog-Post.md` + `website/blog/2018-05-21-New-Blog-Post.md` -```markdown ---- -author: Frank Li -authorURL: https://twitter.com/foobarbaz -authorFBID: 503283835 -title: New Blog Post ---- + ```markdown + --- + author: Frank Li + authorURL: https://twitter.com/foobarbaz + authorFBID: 503283835 + title: New Blog Post + --- -Lorem Ipsum... -``` + Lorem Ipsum... + ``` For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) @@ -169,43 +169,44 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e 1. Add links to docs, custom pages or external links by editing the `headerLinks` field of `website/siteConfig.js`: -`website/siteConfig.js` + `website/siteConfig.js` -```javascript -{ - headerLinks: [ - ... - /* you can add docs */ - { doc: 'my-examples', label: 'Examples' }, - /* you can add custom pages */ - { page: 'help', label: 'Help' }, - /* you can add external links */ - { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, - ... - ], - ... -} -``` + ```javascript + { + headerLinks: [ + ... + /* you can add docs */ + { doc: 'my-examples', label: 'Examples' }, + /* you can add custom pages */ + { page: 'help', label: 'Help' }, + /* you can add external links */ + { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, + ... + ], + ... + } + ``` For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation) ### Adding custom pages 1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`: -1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: -`website/siteConfig.js` +2. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: -```javascript -{ - headerLinks: [ - ... - { page: 'my-new-custom-page', label: 'My New Custom Page' }, - ... - ], - ... -} -``` + `website/siteConfig.js` + + ```javascript + { + headerLinks: [ + ... + { page: 'my-new-custom-page', label: 'My New Custom Page' }, + ... + ], + ... + } + ``` Learn more about [Docusaurus custom pages](https://docusaurus.io/docs/en/custom-pages). @@ -217,3 +218,17 @@ Full documentation can be found on the [Docusaurus website](https://docusaurus.i - If you want to make images zoomable on click, add the `data-zoomable` attribute to your `img` element. - In a docs or blog `.md` file, convert `![This is image](/microsite/static/img/code.png)` syntax to `This is image` + +- Code block line highlighting uses [custom magic comments](https://docusaurus.io/docs/markdown-features/code-blocks#custom-magic-comments). Currently, we have the following magic comments: + - Highlight line(s) + - `highlight-next-line` + - `highlight-start` + - `highlight-end` + - Add line(s) + - `highlight-add-next-line` + - `highlight-add-start` + - `highlight-add-end` + - Remove line(s) + - `highlight-remove-next-line` + - `highlight-remove-start` + - `highlight-remove-end` From b7319793cea6cdeb5d99fb633a02702074191c83 Mon Sep 17 00:00:00 2001 From: Paul Schultz Date: Fri, 10 Mar 2023 11:04:38 -0600 Subject: [PATCH 079/511] Update README Signed-off-by: Paul Schultz --- microsite/README.md | 131 ++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/microsite/README.md b/microsite/README.md index 5c1b0c1678..26c25dc175 100644 --- a/microsite/README.md +++ b/microsite/README.md @@ -107,30 +107,30 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e 1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`: - ```md - --- - id: newly-created-doc - title: This Doc Needs To Be Edited - --- + ```md + --- + id: newly-created-doc + title: This Doc Needs To Be Edited + --- - My new content here.. - ``` + My new content here.. + ``` 2. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: - ```javascript - // Add newly-created-doc to the Getting Started category of docs - { - "docs": { - "Getting Started": [ - "quick-start", - "newly-created-doc" // new doc here - ], - ... - }, - ... - } - ``` + ```javascript + // Add newly-created-doc to the Getting Started category of docs + { + "docs": { + "Getting Started": [ + "quick-start", + "newly-created-doc" // new doc here + ], + ... + }, + ... + } + ``` For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation) @@ -138,30 +138,30 @@ For more information about adding new docs, click [here](https://docusaurus.io/d 1. Make sure there is a header link to your blog in `website/siteConfig.js`: - `website/siteConfig.js` + `website/siteConfig.js` - ```javascript - headerLinks: [ - ... - { blog: true, label: 'Blog' }, - ... - ] - ``` + ```javascript + headerLinks: [ + ... + { blog: true, label: 'Blog' }, + ... + ] + ``` 2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`: - `website/blog/2018-05-21-New-Blog-Post.md` + `website/blog/2018-05-21-New-Blog-Post.md` - ```markdown - --- - author: Frank Li - authorURL: https://twitter.com/foobarbaz - authorFBID: 503283835 - title: New Blog Post - --- + ```markdown + --- + author: Frank Li + authorURL: https://twitter.com/foobarbaz + authorFBID: 503283835 + title: New Blog Post + --- - Lorem Ipsum... - ``` + Lorem Ipsum... + ``` For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) @@ -169,23 +169,23 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e 1. Add links to docs, custom pages or external links by editing the `headerLinks` field of `website/siteConfig.js`: - `website/siteConfig.js` + `website/siteConfig.js` - ```javascript - { - headerLinks: [ - ... - /* you can add docs */ - { doc: 'my-examples', label: 'Examples' }, - /* you can add custom pages */ - { page: 'help', label: 'Help' }, - /* you can add external links */ - { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, - ... - ], - ... - } - ``` + ```javascript + { + headerLinks: [ + ... + /* you can add docs */ + { doc: 'my-examples', label: 'Examples' }, + /* you can add custom pages */ + { page: 'help', label: 'Help' }, + /* you can add external links */ + { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, + ... + ], + ... + } + ``` For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation) @@ -195,18 +195,18 @@ For more information about the navigation bar, click [here](https://docusaurus.i 2. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: - `website/siteConfig.js` + `website/siteConfig.js` - ```javascript - { - headerLinks: [ - ... - { page: 'my-new-custom-page', label: 'My New Custom Page' }, - ... - ], - ... - } - ``` + ```javascript + { + headerLinks: [ + ... + { page: 'my-new-custom-page', label: 'My New Custom Page' }, + ... + ], + ... + } + ``` Learn more about [Docusaurus custom pages](https://docusaurus.io/docs/en/custom-pages). @@ -217,6 +217,7 @@ Full documentation can be found on the [Docusaurus website](https://docusaurus.i ## Additional notes - If you want to make images zoomable on click, add the `data-zoomable` attribute to your `img` element. + - In a docs or blog `.md` file, convert `![This is image](/microsite/static/img/code.png)` syntax to `This is image` - Code block line highlighting uses [custom magic comments](https://docusaurus.io/docs/markdown-features/code-blocks#custom-magic-comments). Currently, we have the following magic comments: From edecccabe47b23c5c78118ee46def576afbb8e6d Mon Sep 17 00:00:00 2001 From: zjpersc Date: Fri, 10 Mar 2023 14:01:24 -0600 Subject: [PATCH 080/511] Updating the feature doc for techdocs-cli Signed-off-by: zjpersc --- docs/features/techdocs/cli.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md index b174896d6a..76589de5a8 100644 --- a/docs/features/techdocs/cli.md +++ b/docs/features/techdocs/cli.md @@ -200,6 +200,15 @@ Options: -h, --help display help for command ``` +#### Publishing from behind a proxy + +For users attempting to publish TechDocs content behind a proxy, the TechDocs CLI leverages `global-agent` to navigate the proxy to successfully connect to that location. To enable `global-agent`, the following variables need to be set prior to running the techdocs-cli command: + +```bash +export GLOBAL_AGENT_HTTPS_PROXY=${HTTP_PROXY} +export GLOBAL_AGENT_NO_PROXY=${NO_PROXY} +``` + ### Migrate content for case-insensitive access Prior to the beta version of TechDocs (`v[0.11.0]`), TechDocs were stored in From 21e9c235b94da6e4da9925bcc70f9ce0def40efb Mon Sep 17 00:00:00 2001 From: Claire Casey Date: Fri, 10 Mar 2023 16:25:47 -0500 Subject: [PATCH 081/511] add zod as dependency to specify version Signed-off-by: Claire Casey --- .../plugin-authors/03-adding-a-resource-permission-check.md | 2 +- plugins/example-todo-list-backend/package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index e714301ded..d405c2ac4f 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -91,7 +91,7 @@ This enables decisions based on characteristics of the resource, but it's import Install the missing module: ```bash -$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod +$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node ``` Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code: diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 5579f748b2..11c7b849e1 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -34,7 +34,8 @@ "express-promise-router": "^4.1.0", "uuid": "^8.3.2", "winston": "^3.2.1", - "yn": "^4.0.0" + "yn": "^4.0.0", + "zod": "~3.18.0" }, "devDependencies": { "@backstage/cli": "workspace:^", From 1b3ab31a2be25f7deda63a2f3449540da550fbd1 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Fri, 10 Mar 2023 23:49:46 +0100 Subject: [PATCH 082/511] removed microservice-next leftovers Signed-off-by: Bogdan Nechyporenko --- .../src/components/simpleCard/simpleCard.tsx | 17 ---- .../src/pages/on-demand/_onDemandCard.tsx | 66 ---------------- microsite-next/src/pages/on-demand/index.tsx | 78 ------------------- .../src/pages/on-demand/onDemand.module.scss | 44 ----------- .../src/util/truncateDescription.tsx | 11 --- 5 files changed, 216 deletions(-) delete mode 100644 microsite-next/src/components/simpleCard/simpleCard.tsx delete mode 100644 microsite-next/src/pages/on-demand/_onDemandCard.tsx delete mode 100644 microsite-next/src/pages/on-demand/index.tsx delete mode 100644 microsite-next/src/pages/on-demand/onDemand.module.scss delete mode 100644 microsite-next/src/util/truncateDescription.tsx diff --git a/microsite-next/src/components/simpleCard/simpleCard.tsx b/microsite-next/src/components/simpleCard/simpleCard.tsx deleted file mode 100644 index 77be566f18..0000000000 --- a/microsite-next/src/components/simpleCard/simpleCard.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; - -export interface ICardData { - header: React.ReactNode; - body: React.ReactNode; - footer: React.ReactNode; -} - -export const SimpleCard = ({ header, body, footer }: ICardData) => ( -
-
{header}
- -
{body}
- -
{footer}
-
-); diff --git a/microsite-next/src/pages/on-demand/_onDemandCard.tsx b/microsite-next/src/pages/on-demand/_onDemandCard.tsx deleted file mode 100644 index e203c80f9a..0000000000 --- a/microsite-next/src/pages/on-demand/_onDemandCard.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import Link from '@docusaurus/Link'; -import { SimpleCard } from '@site/src/components/simpleCard/simpleCard'; -import React from 'react'; - -export interface IOnDemandData { - title: string; - category: string; - description: string; - date: string; - youtubeUrl: string; - youtubeImgUrl: string; - rsvpUrl: string; - eventUrl: string; -} - -export const OnDemandCard = ({ - title, - category, - description, - date, - youtubeUrl, - youtubeImgUrl, - rsvpUrl, - eventUrl, -}: IOnDemandData) => ( - -

{title}

- -

on {date}

- - {category} - - {title} - - } - body={

{description}

} - footer={ - category.toLowerCase() === 'upcoming' ? ( - <> - - Event page - - - - Remind me - - - ) : ( - - Watch on YouTube - - ) - } - /> -); diff --git a/microsite-next/src/pages/on-demand/index.tsx b/microsite-next/src/pages/on-demand/index.tsx deleted file mode 100644 index 7262005f70..0000000000 --- a/microsite-next/src/pages/on-demand/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import Layout from '@theme/Layout'; -import clsx from 'clsx'; -import React from 'react'; - -import { IOnDemandData, OnDemandCard } from './_onDemandCard'; -import pluginsStyles from './onDemand.module.scss'; -import { truncateDescription } from '@site/src/util/truncateDescription'; -import Link from '@docusaurus/Link'; - -//#region Plugin data import -const onDemandContext = require.context( - '../../../../microsite/data/on-demand', - false, - /\.ya?ml/, -); - -const onDemandData = onDemandContext.keys().reduce( - (acum, id) => { - const pluginData: IOnDemandData = onDemandContext(id).default; - - acum[ - pluginData.category === 'Upcoming' ? 'upcomingEvents' : 'onDemandEvents' - ].push(truncateDescription(pluginData)); - - return acum; - }, - { - upcomingEvents: [] as IOnDemandData[], - onDemandEvents: [] as IOnDemandData[], - }, -); -//#endregion - -const Plugins = () => ( - -
-
-
-

Community sessions

- -

- Upcoming events and recorded sessions about updates, demos and - discussions. -

-
- - - Add an event or recording - -
- -
- -

Upcoming live events

- -
- {onDemandData.upcomingEvents.map(eventData => ( - - ))} -
- -

Community on demand

- -
- {onDemandData.onDemandEvents.map(eventData => ( - - ))} -
-
-
-); - -export default Plugins; diff --git a/microsite-next/src/pages/on-demand/onDemand.module.scss b/microsite-next/src/pages/on-demand/onDemand.module.scss deleted file mode 100644 index fba051ec97..0000000000 --- a/microsite-next/src/pages/on-demand/onDemand.module.scss +++ /dev/null @@ -1,44 +0,0 @@ -.onDemandPage { - :global(.marketplaceBanner) { - display: flex; - align-items: center; - } - - :global(.marketplaceContent) { - flex: 1; - } - - :global(.card) { - max-width: 100%; - } - - :global(.card .card__header) { - display: grid; - row-gap: 0.25rem; - column-gap: 1rem; - justify-items: start; - - > * { - margin: 0; - } - - :global(img) { - width: 250px; - max-width: 100%; - justify-self: center; - } - } - - :global(.card .card__footer) { - gap: 1rem; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); - } - - :global(.cardsContainer) { - gap: 1rem; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - justify-items: start; - } -} diff --git a/microsite-next/src/util/truncateDescription.tsx b/microsite-next/src/util/truncateDescription.tsx deleted file mode 100644 index dc661cbd49..0000000000 --- a/microsite-next/src/util/truncateDescription.tsx +++ /dev/null @@ -1,11 +0,0 @@ -export const maxDescLength = 160; - -export const truncateDescription = ( - itemData: T, -) => - itemData.description.length > maxDescLength - ? { - ...itemData, - description: itemData.description.slice(0, maxDescLength) + '...', - } - : itemData; From 03ebad97d224c7a598a87bc897901be98dd7c8fb Mon Sep 17 00:00:00 2001 From: Tracey Date: Fri, 10 Mar 2023 17:36:40 -0800 Subject: [PATCH 083/511] adding new action confluence to markdown for GitHub repos onboarded onto techdocs Signed-off-by: Tracey --- .../.eslintrc.js | 1 + .../README.md | 126 +++++++ .../package.json | 49 +++ .../confluence/confluenceToMarkdown.test.ts | 316 ++++++++++++++++++ .../confluence/confluenceToMarkdown.ts | 187 +++++++++++ .../src/actions/confluence/helpers.ts | 142 ++++++++ .../src/actions/confluence/index.ts | 16 + .../src/actions/index.ts | 16 + .../src/index.ts | 23 ++ yarn.lock | 107 +++++- 10 files changed, 973 insertions(+), 10 deletions(-) create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js b/plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md b/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md new file mode 100644 index 0000000000..61cc1efe13 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md @@ -0,0 +1,126 @@ +# @backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn + +Welcome to the `transform:confluence-to-markdown` action for the `scaffolder-backend`. + +## Getting started + +You need to configure the action in your backend: + +## From your Backstage root directory + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn +``` + +Configure the action: +(you can check the [docs](https://backstage.io/docs/features/software-templates/writing-custom-actions#registering-custom-actions) to see all options): + +```typescript +// packages/backend/src/plugins/scaffolder.ts + +import { createBuiltinActions } from '@backstage/plugin-scaffolder-backend'; +import { ScmIntegrations } from '@backstage/integration'; +import { createConfluenceToMarkdownAction } from '@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn'; + +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const catalogClient = new CatalogClient({ discoveryApi: env.discovery }); + const integrations = ScmIntegrations.fromConfig(env.config); + + const builtInActions = createBuiltinActions({ + integrations, + catalogClient, + config: env.config, + reader: env.reader, + }); + + const actions = [ + ...builtInActions, + createConfluenceToMarkdownAction({ + integrations, + config: env.config, + reader: env.reader, + }), + ]; + + return createRouter({ + actions, + catalogClient: catalogClient, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, + }); +} +``` + +You will also need an access token for authorization with `Read` permissions. You can create a Personal Access Token (PAT) in confluence and add the PAT to your `app-config.yaml` + +``` +confluence: + baseUrl: ${CONFLUENCE_BASE_URL} + token: ${CONFLUENCE_TOKEN} + +``` + +After that you can use the action in your template: + +``` +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: confluence-to-markdown + title: Confluence to Markdown + description: This template converts a single confluence document to Markdown for Techdocs and adds it to a given GitHub repo. + tags: + - do-not-use + - poc +spec: + owner: + type: service + parameters: + - title: Confluence and Github Repo Information + properties: + confluenceUrls: + type: array + description: Urls for confluence doc to be converted to markdown. In format /display// or /pages/viewpage.action?spacekey=&title= + items: + type: string + default: confluence url + ui:options: + addable: true + minItems: 1 + maxItems: 5 + repoUrl: + type: string + title: GitHub url mkdocs.yaml link + description: The GitHub repo url to your mkdocs.yaml file. Example + steps: + - id: create-docs + name: Get markdown file created and update markdown.yaml file + action: transform:confluence-to-markdown + input: + confluenceUrls: ${{ parameters.confluenceUrls }} + repoUrl: ${{ parameters.repoUrl }} + - id: publish + name: Publish PR to GitHub + action: publish:github:pull-request + input: + repoUrl: ?repo=${{ steps['create-docs'].output.repo }}&owner=${{ steps['create-docs'].output.owner }} + branchName: confluence-to-markdown + title: Confluence to Markdown + description: PR for converting confluence page to mkdocs + - id: merge + name: Merge PR + action: publish:github:merge-pull-request + input: + prUrl: ${{ steps['publish'].output.remoteUrl }} + forceAdmin: true + +``` + +Replace `` with your GitHub url without `https://`. + +You can find a list of all registred actions including their parameters at the /create/actions route in your Backstage application. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json new file mode 100644 index 0000000000..cc445108c3 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json @@ -0,0 +1,49 @@ +{ + "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn", + "description": "The confluence-to-markdowwn module for @backstage/plugin-scaffolder-backend", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "help": "backstage-cli help" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/plugin-scaffolder-backend": "workspace:^", + "@backstage/plugin-scaffolder-node": "workspace:^", + "@backstage/types": "workspace:^", + "fs": "^0.0.1-security", + "fs-extra": "^11.1.0", + "git-url-parse": "^13.1.0", + "node-fetch": "2.6.7", + "node-html-markdown": "^1.3.0", + "yaml": "^2.2.1" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "mock-fs": "^5.2.0", + "os": "^0.1.2" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts new file mode 100644 index 0000000000..6a3a497d99 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts @@ -0,0 +1,316 @@ +/* + * Copyright 2023 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 { PassThrough } from 'stream'; +import { createConfluenceToMarkdownAction } from './confluenceToMarkdown'; +import { getVoidLogger } from '@backstage/backend-common'; +import { UrlReader } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import mockFs from 'mock-fs'; +import os from 'os'; +import fetch from 'node-fetch'; +import type { ActionContext } from '@backstage/plugin-scaffolder-node'; +import { readFile, writeFile } from 'fs-extra'; +import { Readable } from 'stream'; + +jest.mock('node-fetch'); +jest.mock('fs-extra', () => ({ + mkdirSync: jest.fn(), + readFile: jest.fn().mockResolvedValue('File contents'), + writeFile: jest.fn().mockImplementation(() => { + return Promise.resolve(); + }), + outputFile: jest.fn(), + openSync: jest.fn(), + createWriteStream: jest.fn().mockReturnValue(new PassThrough()), + writeStream: jest.fn(), +})); +const { Response } = jest.requireActual('node-fetch'); + +describe('transform:confluence-to-markdown', () => { + const config = new ConfigReader({ + confluence: { + baseUrl: 'https://nodomain.confluence.com/', + token: 'fake_token', + }, + }); + + const integrations = ScmIntegrations.fromConfig( + new ConfigReader({ + integrations: { + github: [{ host: 'github.com', token: 'token' }], + }, + }), + ); + + let reader: UrlReader; + let mockContext: ActionContext<{ + confluenceUrls: string[]; + repoUrl: string; + }>; + + const logger = getVoidLogger(); + jest.spyOn(logger, 'info'); + + const mockTmpDir = os.tmpdir(); + + beforeEach(() => { + reader = { + readUrl: jest.fn(), + readTree: jest.fn().mockResolvedValue({ + dir: jest.fn(), + }), + search: jest.fn(), + }; + mockContext = { + input: { + confluenceUrls: [ + 'https://nodomain.confluence.com/display/testing/mkdocs', + ], + repoUrl: 'https://notreal.github.com/space/backstage/mkdocs.yml', + }, + workspacePath: '/tmp', + logger, + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn().mockResolvedValue(mockTmpDir), + }; + mockFs({ [`${mockTmpDir}/src/docs`]: {} }); + }); + afterEach(() => { + jest.clearAllMocks(); + mockFs.restore(); + }); + + it('should call confluence to markdown action successfully with results array', async () => { + const options = { + reader, + integrations, + config, + }; + const responseBody = { + results: [ + { + id: '4444444', + type: 'page', + title: 'Testing', + body: { + export_view: { + value: '

hello world

', + }, + }, + }, + ], + }; + const responseBodyTwo = { + results: [ + { + id: '4444444', + type: 'attachment', + title: 'testing.pdf', + metadata: { + mediaType: 'application/pdf', + }, + _links: { + download: '/download/attachments/4444444/testing.pdf', + }, + }, + ], + }; + + (fetch as jest.MockedFunction) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBody), { + status: 200, + statusText: 'OK', + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBodyTwo), { + status: 200, + statusText: 'OK', + }), + ) + .mockResolvedValueOnce( + new Response(Readable.from('Hello world'), { + status: 200, + statusText: 'OK', + }), + ); + + const mockCreateWriteStream = jest.fn().mockReturnValue({ + on: jest.fn(), + once: jest.fn((_event, callback) => { + callback(); + }), + }); + jest.mock('fs', () => ({ + openSync: jest.fn(), + createWriteStream: jest.fn().mockReturnValue(mockCreateWriteStream), + })); + const action = createConfluenceToMarkdownAction(options); + + await action.handler(mockContext); + + expect(logger.info).toHaveBeenCalledWith( + `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, + ); + expect(logger.info).toHaveBeenCalledTimes(5); + + expect(fetch).toHaveBeenCalledTimes(3); + expect(readFile).toHaveBeenCalledTimes(1); + expect(writeFile).toHaveBeenCalledTimes(1); + }); + + it('should call confluence to markdown action successfully with empty results array', async () => { + const options = { + reader, + integrations, + config, + }; + const responseBody = { + results: [ + { + id: '4444444', + type: 'page', + title: 'Testing', + body: { + export_view: { + value: '

hello world

', + }, + }, + }, + ], + }; + const responseBodyTwo = { + results: [], + }; + + (fetch as jest.MockedFunction) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBody), { + status: 200, + statusText: 'OK', + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBodyTwo), { + status: 200, + statusText: 'OK', + }), + ); + + jest.mock('fs-extra', () => ({ + readFile: jest.fn().mockResolvedValue('File contents'), + })); + const action = createConfluenceToMarkdownAction(options); + + await action.handler(mockContext); + + expect(logger.info).toHaveBeenCalledWith( + `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, + ); + expect(logger.info).toHaveBeenCalledTimes(5); + + expect(fetch).toHaveBeenCalledTimes(2); + expect(readFile).toHaveBeenCalledTimes(1); + expect(writeFile).toHaveBeenCalledTimes(1); + }); + + it('shoud fail on the first fetch call with response.ok set to false', async () => { + const options = { + reader, + integrations, + config, + }; + const responseBody = {}; + (fetch as jest.MockedFunction).mockResolvedValueOnce( + new Response(JSON.stringify(responseBody), { + status: 401, + statusText: 'npot', + ok: false, + }), + ); + const action = createConfluenceToMarkdownAction(options); + await expect(async () => { + await action.handler(mockContext); + }).rejects.toThrow('Request failed with 401 Error'); + }); + + it('should return nothing in results from the first api call and fail', async () => { + const options = { + reader, + integrations, + config, + }; + const responseBody = { + results: [], + }; + (fetch as jest.MockedFunction).mockResolvedValueOnce( + new Response(JSON.stringify(responseBody), { + status: 200, + statusText: 'ok', + }), + ); + const action = createConfluenceToMarkdownAction(options); + await expect(async () => { + await action.handler(mockContext); + }).rejects.toThrow( + 'Could not find document https://nodomain.confluence.com/display/testing/mkdocs. Please check your input.', + ); + }); + + it('should fail on the second fetch call to confluence', async () => { + const options = { + reader, + integrations, + config, + }; + const responseBody = { + results: [ + { + id: '4444444', + type: 'page', + title: 'Testing', + body: { + export_view: { + value: '

hello world

', + }, + }, + }, + ], + }; + const responseBodyTwo = {}; + + (fetch as jest.MockedFunction) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBody), { + status: 200, + statusText: 'OK', + }), + ) + .mockResolvedValueOnce( + new Response(JSON.stringify(responseBodyTwo), { + status: 404, + statusText: 'notok', + }), + ); + const action = createConfluenceToMarkdownAction(options); + await expect(async () => { + await action.handler(mockContext); + }).rejects.toThrow('Request failed with 404 Error'); + }); +}); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts new file mode 100644 index 0000000000..792d1f088b --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts @@ -0,0 +1,187 @@ +/* + * Copyright 2023 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 { Config } from '@backstage/config'; +import { UrlReader } from '@backstage/backend-common'; +import { ScmIntegrations } from '@backstage/integration'; +import { createFetchPlainAction } from '@backstage/plugin-scaffolder-backend'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { InputError, ConflictError } from '@backstage/errors'; +import { NodeHtmlMarkdown } from 'node-html-markdown'; +import fs from 'fs-extra'; +import parseGitUrl from 'git-url-parse'; +import { + parseFromYaml, + readFileAsString, + transformToYaml, + updateFile, + fetchConfluence, + getAndWriteAttachments, + createConfluenceVariables, +} from './helpers'; + +export const createConfluenceToMarkdownAction = (options: { + reader: UrlReader; + integrations: ScmIntegrations; + config: Config; +}) => { + const { config, reader, integrations } = options; + const fetchPlainAction = createFetchPlainAction({ reader, integrations }); + type Obj = { + [key: string]: string; + }; + + return createTemplateAction<{ + confluenceUrls: string[]; + repoUrl: string; + }>({ + id: 'transform:confluence-to-markdown', + schema: { + input: { + properties: { + confluenceUrls: { + type: 'array', + title: 'Confluence URL', + description: + 'Paste your confluence url. Ensure it follows this format: https://{confluence+base+url}/display/{spacekey}/{page+title}', + items: { + type: 'string', + default: 'Confluence URL', + }, + }, + repoUrl: { + type: 'string', + title: 'GitHub Repo Url', + description: + 'mkdocs.yml file location inside the github repo you want to store the document', + }, + }, + }, + }, + async handler(ctx) { + const { confluenceUrls, repoUrl } = ctx.input; + const parsedRepoUrl = parseGitUrl(`${repoUrl}`); + const filePathToMkdocs = parsedRepoUrl.filepath.substring( + 0, + parsedRepoUrl.filepath.lastIndexOf('/') + 1, + ); + const dirPath = ctx.workspacePath; + let productArray: string[][] = []; + + ctx.logger.info(`Fetching the mkdocs.yml catalog from ${repoUrl}`); + ctx.logger.info(confluenceUrls); + const params = new URL(confluenceUrls[0]); + ctx.logger.info(params.searchParams); + // This grabs the files from Github + const repoFileDir = `${dirPath}/${parsedRepoUrl.filepath}`; + await fetchPlainAction.handler({ + ...ctx, + input: { + url: `https://${parsedRepoUrl.resource}/${parsedRepoUrl.owner}/${parsedRepoUrl.name}`, + targetPath: dirPath, + }, + }); + + for (let p = 0; p < confluenceUrls.length; p++) { + const confluenceUrl = confluenceUrls[p]; + + const { spacekey, title, titleWithSpaces } = + await createConfluenceVariables(confluenceUrl); + ctx.logger.info(spacekey); + ctx.logger.info(title); + ctx.logger.info(titleWithSpaces); + + // This calls confluence to get the page html and page id + const getConfluenceDoc = await fetchConfluence( + `/rest/api/content?title=${title}&spaceKey=${spacekey}&expand=body.export_view`, + config, + ); + if (getConfluenceDoc.results.length === 0) { + throw new InputError( + `Could not find document ${confluenceUrl}. Please check your input.`, + ); + } + // This gets attachements for the confluence page if they exist + const getDocAttachments = await fetchConfluence( + `/rest/api/content/${getConfluenceDoc.results[0].id}/child/attachment`, + config, + ); + + if (getDocAttachments.results.length) { + fs.mkdirSync(`${dirPath}/${filePathToMkdocs}docs/img`, { + recursive: true, + }); + productArray = await getAndWriteAttachments( + getDocAttachments, + dirPath, + config, + filePathToMkdocs, + ); + } + + ctx.logger.info( + `starting action for converting ${titleWithSpaces} from Confluence To Markdown`, + ); + + // This reads mkdocs.yml file + const mkdocsFileContent = await readFileAsString(repoFileDir); + const mkdocsFile = parseFromYaml(mkdocsFileContent); + ctx.logger.info( + `Adding new file - ${titleWithSpaces} to the current mkdocs.yml file`, + ); + + // This modifies the mkdocs.yml file + if (mkdocsFile !== undefined && mkdocsFile.hasOwnProperty('nav')) { + const { nav } = mkdocsFile; + if (!nav.some((i: Obj) => i.hasOwnProperty(titleWithSpaces))) { + nav.push({ + [titleWithSpaces]: `${titleWithSpaces.replace(/\s+/g, '-')}.md`, + }); + mkdocsFile.nav = nav; + } else { + throw new ConflictError( + 'This document looks to exist inside the GitHub repo. Will end the action.', + ); + } + } + const newTemplateFileContent = transformToYaml(mkdocsFile); + await updateFile(newTemplateFileContent, repoFileDir); + + // This grabs the confluence html and converts it to markdown and adds attachments + const html = getConfluenceDoc.results[0].body.export_view.value; + const markdownToPublish = NodeHtmlMarkdown.translate(html); + let newString: string = markdownToPublish; + productArray.map((product: string[]) => { + const regex = product[1].includes('pdf') + ? new RegExp(`(\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi') + : new RegExp(`(\\!\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi'); + newString = newString.replace(regex, `$1./img/${product[1]}$3`); + }); + + ctx.logger.info(`Adding new file to repo.`); + await fs.outputFile( + `${dirPath}/${filePathToMkdocs}docs/${titleWithSpaces.replace( + /\s+/g, + '-', + )}.md`, + newString, + ); + } + + ctx.output('repo', parsedRepoUrl.name); + ctx.output('owner', parsedRepoUrl.owner); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts new file mode 100644 index 0000000000..d0125b5a0d --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts @@ -0,0 +1,142 @@ +/* + * Copyright 2023 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 { Config } from '@backstage/config'; +import { ResponseError, ConflictError, InputError } from '@backstage/errors'; +import fs from 'fs-extra'; +import YAML from 'yaml'; +import fetch, { Response } from 'node-fetch'; + +interface Links { + webui: string; + download: string; + thumbnail: string; + self: string; +} + +interface Metadata { + mediaType: string; +} + +export interface Result { + id: string; + type: string; + status: string; + title: string; + metadata: Metadata; + _links: Links; +} + +export interface Results { + results: Result[]; +} + +export const readFileAsString = async (fileDir: string) => { + const content = await fs.readFile(fileDir, 'utf-8'); + return content.toString(); +}; + +export const parseFromYaml = (content: string) => { + return YAML.parse(content); +}; + +export const transformToYaml = (content: any) => { + return YAML.stringify(content); +}; + +export const updateFile = async (content: string, file: string) => { + await fs.writeFile(file, content); +}; + +export const fetchConfluence = async (relativeUrl: string, config: Config) => { + const baseUrl = config.getString('confluence.baseUrl'); + const token = config.getString('confluence.token'); + const response: Response = await fetch(`${baseUrl}${relativeUrl}`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + }, + }); + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + + return response.json() as Promise; +}; + +export const getAndWriteAttachments = async ( + arr: Results, + workspace: string, + config: Config, + mkdocsDir: string, +) => { + const productArr: string[][] = []; + const baseUrl = config.getString('confluence.baseUrl'); + const token = config.getString('confluence.token'); + await Promise.all( + await arr.results.map(async (result: Result) => { + const downloadLink = result._links.download; + const downloadTitle = result.title.replace(/ /g, '-'); + if (result.metadata.mediaType !== 'application/gliffy+json') { + productArr.push([result.title.replace(/ /g, '%20'), downloadTitle]); + } + + const res = await fetch(`${baseUrl}${downloadLink}`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + }, + }); + // console.log(`${workspace}/${mkdocsDir}docs/img/${downloadTitle}`) + if (!res.ok) { + throw ResponseError.fromResponse(res); + } else if (res.body !== null) { + fs.openSync(`${workspace}/${mkdocsDir}docs/img/${downloadTitle}`, 'w'); + const writeStream = fs.createWriteStream( + `${workspace}/${mkdocsDir}docs/img/${downloadTitle}`, + ); + res.body.pipe(writeStream); + await new Promise((resolve, reject) => { + writeStream.on('finish', () => { + resolve(`${workspace}/${mkdocsDir}docs/img/${downloadTitle}`); + }); + writeStream.on('error', reject); + }); + } else { + throw new ConflictError( + 'No Body on the response. Can not save images from Confluence Doc', + ); + } + }), + ); + return productArr; +}; + +export const createConfluenceVariables = async (url: string) => { + let spacekey: string | null = null; + let title: string | null = null; + let titleWithSpaces: string | null = ''; + const params = new URL(url); + if (url.includes('display')) { + spacekey = params.pathname.split('/')[2]; + title = params.pathname.split('/')[3]; + titleWithSpaces = title?.replace(/\+/g, ' '); + return { spacekey, title, titleWithSpaces }; + } + throw new InputError( + 'The Url format for Confluence is incorrect. Acceptable format is `/display//`', + ); +}; diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts new file mode 100644 index 0000000000..00f00eabda --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export { createConfluenceToMarkdownAction } from './confluenceToMarkdown'; diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts new file mode 100644 index 0000000000..3d3a6c73a0 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export * from './confluence'; diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts new file mode 100644 index 0000000000..e38cee3557 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2023 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. + */ + +/** + * The confluence-to-markdowwn module for @backstage/plugin-scaffolder-backend. + * + * @packageDocumentation + */ + +export * from './actions'; diff --git a/yarn.lock b/yarn.lock index b1b60ba15e..3585d449fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7651,6 +7651,29 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn": + version: 0.0.0-use.local + resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" + "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/plugin-scaffolder-node": "workspace:^" + "@backstage/types": "workspace:^" + fs: ^0.0.1-security + fs-extra: ^11.1.0 + git-url-parse: ^13.1.0 + mock-fs: ^5.2.0 + node-fetch: 2.6.7 + node-html-markdown: ^1.3.0 + os: ^0.1.2 + yaml: ^2.2.1 + languageName: unknown + linkType: soft + "@backstage/plugin-scaffolder-backend-module-cookiecutter@workspace:plugins/scaffolder-backend-module-cookiecutter": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-cookiecutter@workspace:plugins/scaffolder-backend-module-cookiecutter" @@ -20175,6 +20198,19 @@ __metadata: languageName: node linkType: hard +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + "css-to-react-native@npm:^3.0.0": version: 3.0.0 resolution: "css-to-react-native@npm:3.0.0" @@ -20229,6 +20265,13 @@ __metadata: languageName: node linkType: hard +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe + languageName: node + linkType: hard + "css.escape@npm:1.5.1, css.escape@npm:^1.5.1": version: 1.5.1 resolution: "css.escape@npm:1.5.1" @@ -23898,6 +23941,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + "fs-extra@npm:^7.0.1, fs-extra@npm:~7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -23955,6 +24009,13 @@ __metadata: languageName: node linkType: hard +"fs@npm:^0.0.1-security": + version: 0.0.1-security + resolution: "fs@npm:0.0.1-security" + checksum: 53c6230e1faae9fa32c1df82c16a84b51b1243d20f3da2b64bd110bb472b73b9185169b703e008356e3cdc92d155088b617d9d39a63b5227a30b3621baad7f5d + languageName: node + linkType: hard + "fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" @@ -24228,7 +24289,7 @@ __metadata: languageName: node linkType: hard -"git-url-parse@npm:^13.0.0": +"git-url-parse@npm:^13.0.0, git-url-parse@npm:^13.1.0": version: 13.1.0 resolution: "git-url-parse@npm:13.1.0" dependencies: @@ -24900,7 +24961,7 @@ __metadata: languageName: node linkType: hard -"he@npm:^1.2.0": +"he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -30598,6 +30659,25 @@ __metadata: languageName: node linkType: hard +"node-html-markdown@npm:^1.3.0": + version: 1.3.0 + resolution: "node-html-markdown@npm:1.3.0" + dependencies: + node-html-parser: ^6.1.1 + checksum: 303affd75bf11e92f004047e283aa05da5c8ae8696c1f28f811e9f61762c55b4480e0e5986a9a4b399791485b835380af8ab0554ebf867d6cf9be362abedcf5d + languageName: node + linkType: hard + +"node-html-parser@npm:^6.1.1": + version: 6.1.5 + resolution: "node-html-parser@npm:6.1.5" + dependencies: + css-select: ^5.1.0 + he: 1.2.0 + checksum: b54257b31954be17d473c86a2fede53d5e238708f3d88577c98881c28ab66013fd37044903f6f3cd662b56d882681fb511bca75a80a80b62f7111b32b39eebae + languageName: node + linkType: hard + "node-int64@npm:^0.4.0": version: 0.4.0 resolution: "node-int64@npm:0.4.0" @@ -30898,12 +30978,12 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.0": - version: 2.0.1 - resolution: "nth-check@npm:2.0.1" +"nth-check@npm:^2.0.0, nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" dependencies: boolbase: ^1.0.0 - checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 languageName: node linkType: hard @@ -31278,6 +31358,13 @@ __metadata: languageName: node linkType: hard +"os@npm:^0.1.2": + version: 0.1.2 + resolution: "os@npm:0.1.2" + checksum: dc2d99759eef13f5dc47ddb12c67b9760a7196fd83a35a7aec2d75b82f91163ca1d4e8872238f8c2a35f4cddd5adf5ce6638a234c0563c748d3cd1d69a9f7153 + languageName: node + linkType: hard + "ospath@npm:^1.2.2": version: 1.2.2 resolution: "ospath@npm:1.2.2" @@ -39460,10 +39547,10 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3": - version: 2.1.3 - resolution: "yaml@npm:2.1.3" - checksum: 91316062324a93f9cb547469092392e7d004ff8f70c40fecb420f042a4870b2181557350da56c92f07bd44b8f7a252b0be26e6ade1f548e1f4351bdd01c9d3c7 +"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3, yaml@npm:^2.2.1": + version: 2.2.1 + resolution: "yaml@npm:2.2.1" + checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 languageName: node linkType: hard From 1b49a18bf8de23e8b702a929935ec97d0f2c80b5 Mon Sep 17 00:00:00 2001 From: Tracey Date: Fri, 10 Mar 2023 17:41:49 -0800 Subject: [PATCH 084/511] adding changeset Signed-off-by: Tracey --- .changeset/new-pigs-jam.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/new-pigs-jam.md diff --git a/.changeset/new-pigs-jam.md b/.changeset/new-pigs-jam.md new file mode 100644 index 0000000000..ed9c39297a --- /dev/null +++ b/.changeset/new-pigs-jam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn': patch +--- + +Created new action for converting confluence docs to Markdown, to be pushed to GitHub repos onboarded onto Techdocs From a231e7e8fef6118723eb4239a963ea6714c00957 Mon Sep 17 00:00:00 2001 From: Tracey Date: Fri, 10 Mar 2023 18:02:51 -0800 Subject: [PATCH 085/511] removing logs that broke tests Signed-off-by: Tracey --- .../src/actions/confluence/confluenceToMarkdown.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts index 792d1f088b..1ded6e90f3 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts @@ -81,9 +81,7 @@ export const createConfluenceToMarkdownAction = (options: { let productArray: string[][] = []; ctx.logger.info(`Fetching the mkdocs.yml catalog from ${repoUrl}`); - ctx.logger.info(confluenceUrls); - const params = new URL(confluenceUrls[0]); - ctx.logger.info(params.searchParams); + // This grabs the files from Github const repoFileDir = `${dirPath}/${parsedRepoUrl.filepath}`; await fetchPlainAction.handler({ @@ -99,9 +97,6 @@ export const createConfluenceToMarkdownAction = (options: { const { spacekey, title, titleWithSpaces } = await createConfluenceVariables(confluenceUrl); - ctx.logger.info(spacekey); - ctx.logger.info(title); - ctx.logger.info(titleWithSpaces); // This calls confluence to get the page html and page id const getConfluenceDoc = await fetchConfluence( From 9ee82deef366c01008485e7a2b22d8f14f77a160 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 11 Mar 2023 14:01:50 +0100 Subject: [PATCH 086/511] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index b2582ecd31..bff9631b93 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -1,6 +1,6 @@ # Project Areas -The Backstage project is divided into several project areas, each covering particular parts of the project. The main driver for each area is ownership of code in the main Backstage repository, as well as other repositories in the Backstage GitHub organization. Each area has a set of maintainers and repository content that they own. There may be no overlap in ownership between areas, which is defined as multiple owners for a single line in the GitHub code owners file. Each area is represented by a team in the Backstage GitHub organization. Apart from certain project-wide concerns, such as the release process, each area is self-governing and chooses their own ways of working. Project areas may also have special interest groups (SIGs) related to their area, but this is not required. +The Backstage project is divided into several project areas, each covering particular parts of the project. The main driver for each area is ownership of code in the main Backstage repository, as well as other repositories in the Backstage GitHub organization. Each area has a set of maintainers and repository content that they own. There may be no overlap in ownership between areas, which means that any given line in the GitHub code owners file should have only one owner specified. Each area is represented by a team in the Backstage GitHub organization. Apart from certain project-wide concerns, such as the release process, each area is self-governing and chooses their own ways of working. Project areas may also have special interest groups (SIGs) related to their area, but this is not required. The project areas as well as their maintainers are listed in the [OWNERS.md](./OWNERS.md) file. @@ -41,11 +41,11 @@ A Contributor contributes directly to the project and adds value to it. Contribu - Report and sometimes resolve issues - Occasionally submit PRs - Contribute to the documentation -- Show up at meetings, takes notes +- Show up at meetings, take notes - Answer questions from other community members - Submit feedback on issues and PRs - Test releases and patches and submit reviews -- Run or helps run events +- Run or help run events - Promote the project in public ## Organization Member @@ -71,7 +71,7 @@ An Organization Member must meet the responsibilities and has the requirements o ### Becoming an Organization Member -Open an issue towards https://github.com/backstage/community using the [org membership request template](#TODO). +Open an issue towards [the community repository](https://github.com/backstage/community) using the [org membership request template](#TODO). ### Privileges @@ -79,9 +79,9 @@ Open an issue towards https://github.com/backstage/community using the [org memb ## Plugin Maintainer -A Plugin Maintainer is responsible for maintaining an individual Backstage plugin or module. This includes reviewing contributions and respond to issues towards an individual plugin, as well as keeping the plugin up to date. +A Plugin Maintainer is responsible for maintaining an individual Backstage plugin or module. This includes reviewing contributions and responding to issues towards an individual plugin, as well as keeping the plugin up to date. -Plugin Maintainer is a lightweight form of ownership that is primarily reflected though code owners of the plugin packages in the [CODEOWNERS.md](./.github/CODEOWNERS) file. Each plugin can have one or more maintainers. If a plugin becomes a significant part of the Backstage ecosystem, it may be promoted to be a distinct project area instead. +Plugin Maintainer is a lightweight form of ownership that is primarily reflected though code owners of the plugin packages in the [CODEOWNERS](./.github/CODEOWNERS) file. Each plugin can have one or more maintainers. If a plugin becomes a significant part of the Backstage ecosystem, it may be promoted to be a distinct project area instead. A Plugin Maintainer has all the rights and responsibilities of an Organization Member. @@ -90,7 +90,7 @@ A Plugin Maintainer has all the rights and responsibilities of an Organization M - Review the majority of PRs towards the plugin - Respond to GitHub issues related to the plugin - Keep the plugin up-to-date with Backstage libraries and other dependencies -- Follow the [reviewing guide](https://github.com/backstage/backstage/blob/master/REVIEWING.md) +- Follow the [reviewing guide](REVIEWING.md) ### Requirements @@ -117,7 +117,7 @@ A Project Area Maintainer has all the rights and responsibilities of an Organiza ### Responsibilities - Review PRs towards their project area. Project area maintainers are expected to review at least 20 PRs per year, or the majority of all PRs towards the area -- Follow the [reviewing guide](https://github.com/backstage/backstage/blob/master/REVIEWING.md) +- Follow the [reviewing guide](REVIEWING.md) - Triage and respond to issues related to their project area - Mentor new project area maintainers - Write refactoring PRs @@ -142,7 +142,7 @@ A Project Area Maintainer has all the rights and responsibilities of an Organiza If you are interested in becoming a project area maintainer, reach out to the existing maintainers for that area. If you wish to become a maintainer for a new area, reach out to the core maintainers. -Any current project area maintainer or core maintainer may nominate a new project area maintainer by opening a PR towards the [OWNERS.md](https://github.com/backstage/backstage/blob/master/OWNERS.md) file. A majority of the project area maintainers for that area must approve the PR. If there are no existing maintainers for that area, the PR must be approved by a majority of the core maintainers. +Any current project area maintainer or core maintainer may nominate a new project area maintainer by opening a PR towards the [OWNERS.md](OWNERS.md) file. A majority of the project area maintainers for that area must approve the PR. If there are no existing maintainers for that area, the PR must be approved by a majority of the core maintainers. ## Core Maintainer @@ -178,7 +178,7 @@ A Core Maintainer have all the rights and responsibilities of a Project Area Mai ### Becoming a Core Maintainer -Any core maintainer or end user sponsor may nominate a new core maintainer by opening a PR towards the [OWNERS.md](https://github.com/backstage/backstage/blob/master/OWNERS.md) file. Core maintainers must be approved by a majority of the existing core maintainers and end user sponsors. +Any core maintainer or end user sponsor may nominate a new core maintainer by opening a PR towards the [OWNERS.md](OWNERS.md) file. Core maintainers must be approved by a majority of the existing core maintainers and end user sponsors. ## End User Sponsors @@ -207,7 +207,7 @@ In all cases in this document where voting is mentioned, the voting process is a ## Inactivity -It is important for contributors to be and stay active to set an example and show commitment to the project. Inactivity is harmful to the project as it may lead to unexpected delays, contributor attrition, and a lost of trust in the project. +It is important for contributors to be and stay active to set an example and show commitment to the project. Inactivity is harmful to the project as it may lead to unexpected delays, contributor attrition, and a loss of trust in the project. Inactivity is measured by periods of no contributions for longer than: From 09d9c07199e74a9ff5561d8b03a4f2c2e2badea3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 Mar 2023 16:49:49 +0000 Subject: [PATCH 087/511] chore(deps): update dependency @tsconfig/docusaurus to v1.0.7 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a9db81ead4..81b78f043b 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2756,9 +2756,9 @@ __metadata: linkType: hard "@tsconfig/docusaurus@npm:^1.0.6": - version: 1.0.6 - resolution: "@tsconfig/docusaurus@npm:1.0.6" - checksum: fb0d7965c01fe64fc6369a72695b903d654bd5fb145f373d707c2bae3c2d828703517d812cef1c041ae44b108f44e52778b9d9837a54fdf782e68e6619a90a4d + version: 1.0.7 + resolution: "@tsconfig/docusaurus@npm:1.0.7" + checksum: 8f5b14005d90b2008f10daf03a5edec86d2a7603e5641c579ea936a5c2d165a8c3007a72254fc4c2adb0554d73062f52bb97b30ff818f01c9215957822f3c4db languageName: node linkType: hard From 80a75f03fc950a32ac90f966604293f3ba2234a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Mar 2023 03:42:21 +0000 Subject: [PATCH 088/511] chore(deps): update react-router monorepo to v6.9.0 Signed-off-by: Renovate Bot --- yarn.lock | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index b1b60ba15e..41da512bc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13152,6 +13152,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.4.0": + version: 1.4.0 + resolution: "@remix-run/router@npm:1.4.0" + checksum: 707dce35a2b8138005cf19e63f6fd3c4da05b4b892e9e9118e8b727c3b95953efe27307ca2df35084044df30fa1fc367cf0bbc98d1ded9020c82e61e6242caaf + languageName: node + linkType: hard + "@repeaterjs/repeater@npm:3.0.4": version: 3.0.4 resolution: "@repeaterjs/repeater@npm:3.0.4" @@ -33789,7 +33796,7 @@ __metadata: languageName: node linkType: hard -"react-router-dom-stable@npm:react-router-dom@^6.3.0, react-router-dom@npm:^6.3.0": +"react-router-dom-stable@npm:react-router-dom@^6.3.0": version: 6.8.1 resolution: "react-router-dom@npm:6.8.1" dependencies: @@ -33802,6 +33809,19 @@ __metadata: languageName: node linkType: hard +"react-router-dom@npm:^6.3.0": + version: 6.9.0 + resolution: "react-router-dom@npm:6.9.0" + dependencies: + "@remix-run/router": 1.4.0 + react-router: 6.9.0 + peerDependencies: + react: ">=16.8" + react-dom: ">=16.8" + checksum: 4d593491ab8db5611feda70002c62902baebb84d5c1c5e5b6172496f31f91130deee132bf4240dea634a88cb86c76d6da348f15b9cd5e5197be455efd88edf72 + languageName: node + linkType: hard + "react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.8.1": version: 6.8.1 resolution: "react-router@npm:6.8.1" @@ -33813,6 +33833,17 @@ __metadata: languageName: node linkType: hard +"react-router@npm:6.9.0": + version: 6.9.0 + resolution: "react-router@npm:6.9.0" + dependencies: + "@remix-run/router": 1.4.0 + peerDependencies: + react: ">=16.8" + checksum: b2a5f42e042bee7a7f116ca7817b0e58359e5353d84887c9fe7a633d7490c03b1e0ae37cd01830c2a381e3d1e7d501bb4751e53cc3d491e25f36582d3f6e0546 + languageName: node + linkType: hard + "react-side-effect@npm:^2.1.0": version: 2.1.0 resolution: "react-side-effect@npm:2.1.0" From 86d9e2a7389590b8d56179562ea7f12ef9566917 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Mar 2023 04:27:53 +0000 Subject: [PATCH 089/511] chore(deps): update dependency @types/archiver to v5.3.2 Signed-off-by: Renovate Bot --- yarn.lock | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 41da512bc6..ee6c14da1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14262,11 +14262,11 @@ __metadata: linkType: hard "@types/archiver@npm:^5.1.0, @types/archiver@npm:^5.3.1": - version: 5.3.1 - resolution: "@types/archiver@npm:5.3.1" + version: 5.3.2 + resolution: "@types/archiver@npm:5.3.2" dependencies: - "@types/glob": "*" - checksum: 1c6babc7f50acf5bf7fa3d5fa76bb68702e4463e6a412d259cdddff611dbbb9832ea4b2f41d675fd95ac1aa8b087daa882423073e41db9e296f14d41f2ea88e6 + "@types/readdir-glob": "*" + checksum: 9db5b4fdc1740fa07d08340ed827598cc6eda97406ac18a06a158670c7124d4120650a3b9cd660e9e39b42f033cf8f052566da32681e8ad91163473df88a3c4c languageName: node linkType: hard @@ -15688,6 +15688,15 @@ __metadata: languageName: node linkType: hard +"@types/readdir-glob@npm:*": + version: 1.1.0 + resolution: "@types/readdir-glob@npm:1.1.0" + dependencies: + "@types/node": "*" + checksum: 98cabfac6beddd3aeb3624e05d57b8dd1354431e436e9e795aaf74ddf2f1c23342d7b8df7586cc3d1374ceeee0d7975638fae97cb1739572d8a4067ebebb91d9 + languageName: node + linkType: hard + "@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": version: 1.8.23 resolution: "@types/recharts@npm:1.8.23" From 4a44c97bfa133c4c8920b805ceb22badbc98e30f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Mar 2023 05:17:32 +0000 Subject: [PATCH 090/511] chore(deps): update dependency aws-sdk-client-mock to v2.1.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ee6c14da1c..78ceb0fba1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17574,13 +17574,13 @@ __metadata: linkType: hard "aws-sdk-client-mock@npm:^2.0.0": - version: 2.1.0 - resolution: "aws-sdk-client-mock@npm:2.1.0" + version: 2.1.1 + resolution: "aws-sdk-client-mock@npm:2.1.1" dependencies: "@types/sinon": ^10.0.10 sinon: ^14.0.2 tslib: ^2.1.0 - checksum: c6179c5528709ff1ad7e7308d03c74850fb5b973ca3d63836ca9973ca70de0c3dd7846fcbd3fd02bf4dabe6cae1095683b38c4202878458c8369e7e837962cd2 + checksum: 8330b88cdaeae401390ece094344ed727db0b007369d862a88afc0a29249828b95cce809faa0c2289c1af99528af0e765b4aba8156b948d01a12299390195cea languageName: node linkType: hard From c8ded0d4192d6d9f60f7ab32b3f4a0b5ebb76b8f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Mar 2023 06:09:17 +0000 Subject: [PATCH 091/511] chore(deps): update dependency aws-sdk-client-mock-jest to v2.1.1 Signed-off-by: Renovate Bot --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 78ceb0fba1..d7597a4bfc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17562,14 +17562,14 @@ __metadata: linkType: hard "aws-sdk-client-mock-jest@npm:^2.0.0": - version: 2.1.0 - resolution: "aws-sdk-client-mock-jest@npm:2.1.0" + version: 2.1.1 + resolution: "aws-sdk-client-mock-jest@npm:2.1.1" dependencies: "@types/jest": ^28.1.3 tslib: ^2.1.0 peerDependencies: - aws-sdk-client-mock: 2.1.0 - checksum: 567e2084d71c90f71e5bfa82f2a4b592fec5ea818cb4edf3586f922454cee4fec1403d4161d3d91a3db3ccebe1db5babe069754d76204c7f6986ab71bafb1084 + aws-sdk-client-mock: 2.1.1 + checksum: 4b5ca96bbcaa60ea3ea947821c7ff1f073c1342a12ce5c778b70832bdcc6106e10591e98e09b22c5b0d83dfc6fe554e8a08d5df5cf067a7eaadb804087b891ed languageName: node linkType: hard From e262738b8a0cd43ce4cfea116adc05aef8c9061c Mon Sep 17 00:00:00 2001 From: Adi Krhan Date: Mon, 13 Mar 2023 09:23:59 +0100 Subject: [PATCH 092/511] Handle token difference in Microsoft provider Signed-off-by: Adi Krhan --- .changeset/many-carpets-act.md | 5 +++++ plugins/auth-backend/src/providers/microsoft/provider.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/many-carpets-act.md diff --git a/.changeset/many-carpets-act.md b/.changeset/many-carpets-act.md new file mode 100644 index 0000000000..5285eeebbd --- /dev/null +++ b/.changeset/many-carpets-act.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Handle difference in expiration time between Microsoft session and Backstage session which caused the Backstage token to be invalid during a time frame. diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index fd2a1529a7..9b14a3c91b 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -50,6 +50,8 @@ import { import { Logger } from 'winston'; import fetch from 'node-fetch'; +const BACKSTAGE_SESSION_EXPIRATION = 3600; + type PrivateInfo = { refreshToken: string; }; @@ -145,12 +147,17 @@ export class MicrosoftAuthProvider implements OAuthHandlers { const { profile } = await this.authHandler(result, this.resolverContext); + const expiresInSeconds = + result.params.expires_in === undefined + ? BACKSTAGE_SESSION_EXPIRATION + : Math.min(result.params.expires_in, BACKSTAGE_SESSION_EXPIRATION); + const response: OAuthResponse = { providerInfo: { idToken: result.params.id_token, accessToken: result.accessToken, scope: result.params.scope, - expiresInSeconds: result.params.expires_in, + expiresInSeconds, }, profile, }; From 46fe170c05366378f5b25ea016c18aab28a9e65c Mon Sep 17 00:00:00 2001 From: drodil Date: Mon, 13 Mar 2023 13:16:53 +0200 Subject: [PATCH 093/511] Update .changeset/strong-crews-repeat.md Co-authored-by: Patrik Oldsberg Signed-off-by: drodil --- .changeset/strong-crews-repeat.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/strong-crews-repeat.md b/.changeset/strong-crews-repeat.md index 144c1842c6..1e772ae036 100644 --- a/.changeset/strong-crews-repeat.md +++ b/.changeset/strong-crews-repeat.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-shortcuts': minor +'@backstage/plugin-shortcuts': patch --- Allow external links to be added as shortcuts From c630360631f67ac7e05eef99f61391364d6635c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 13 Mar 2023 13:36:06 +0100 Subject: [PATCH 094/511] catalog-client: getEntitiesByRefs should return undefined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/tidy-ties-guess.md | 5 +++++ packages/catalog-client/src/CatalogClient.test.ts | 2 +- packages/catalog-client/src/CatalogClient.ts | 6 ++++-- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 .changeset/tidy-ties-guess.md diff --git a/.changeset/tidy-ties-guess.md b/.changeset/tidy-ties-guess.md new file mode 100644 index 0000000000..63247c3819 --- /dev/null +++ b/.changeset/tidy-ties-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': patch +--- + +Ensure that `getEntitiesByRefs` returns `undefined` instead of `null` for missing items diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index c235ff1592..53bb55b95f 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -249,7 +249,7 @@ describe('CatalogClient', () => { { token }, ); - expect(response).toEqual({ items: [entity, null] }); + expect(response).toEqual({ items: [entity, undefined] }); }); }); diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 4984d394d4..be4ae6289d 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -199,9 +199,11 @@ export class CatalogClient implements CatalogApi { throw await ResponseError.fromResponse(response); } - const { items } = await response.json(); + const { items } = (await response.json()) as { + items: Array; + }; - return { items }; + return { items: items.map(i => i ?? undefined) }; } /** From 7af12854970a51f6f88fc9788b8557f4def54d39 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Thu, 2 Mar 2023 14:22:31 +0200 Subject: [PATCH 095/511] feat: add scaffolder action to get multiple entities uses the catalog client getEntitiesByRefs to return the entities for the template Signed-off-by: Heikki Hellgren --- .changeset/sharp-hairs-arrive.md | 5 + plugins/scaffolder-backend/api-report.md | 3 +- .../actions/builtin/catalog/fetch.test.ts | 132 +++++++++++++++--- .../actions/builtin/catalog/fetch.ts | 85 ++++++++--- 4 files changed, 188 insertions(+), 37 deletions(-) create mode 100644 .changeset/sharp-hairs-arrive.md diff --git a/.changeset/sharp-hairs-arrive.md b/.changeset/sharp-hairs-arrive.md new file mode 100644 index 0000000000..a7f922566a --- /dev/null +++ b/.changeset/sharp-hairs-arrive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Extended scaffolder action `catalog:fetch` to fetch multiple catalog entities by entity references. diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 293ff7ed29..3a409a39e2 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -85,7 +85,8 @@ export function createDebugLogAction(): TemplateAction_2<{ export function createFetchCatalogEntityAction(options: { catalogClient: CatalogApi; }): TemplateAction_2<{ - entityRef: string; + entityRef?: string | undefined; + entityRefs?: string[] | undefined; optional?: boolean | undefined; }>; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts index 52c76c8769..1cce7d66cb 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts @@ -23,8 +23,11 @@ import { createFetchCatalogEntityAction } from './fetch'; describe('catalog:fetch', () => { const getEntityByRef = jest.fn(); + const getEntitiesByRefs = jest.fn(); + const catalogClient = { getEntityByRef: getEntityByRef, + getEntitiesByRefs: getEntitiesByRefs, }; const action = createFetchCatalogEntityAction({ @@ -71,25 +74,6 @@ describe('catalog:fetch', () => { }); }); - it('should return null if entity not in catalog and optional is true', async () => { - getEntityByRef.mockImplementationOnce(() => { - throw new Error('Not found'); - }); - - await action.handler({ - ...mockContext, - input: { - entityRef: 'component:default/test', - optional: true, - }, - }); - - expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { - token: 'secret', - }); - expect(mockContext.output).toHaveBeenCalledWith('entity', null); - }); - it('should throw error if entity fetch fails from catalog and optional is false', async () => { getEntityByRef.mockImplementationOnce(() => { throw new Error('Not found'); @@ -127,4 +111,114 @@ describe('catalog:fetch', () => { }); expect(mockContext.output).not.toHaveBeenCalled(); }); + + it('should return entities from catalog', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + ], + }); + + await action.handler({ + ...mockContext, + input: { + entityRefs: ['component:default/test'], + }, + }); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).toHaveBeenCalledWith('entities', [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + }, + ]); + }); + + it('should throw error if undefined is returned for some entity', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + undefined, + ], + }); + + await expect( + action.handler({ + ...mockContext, + input: { + entityRefs: ['component:default/test', 'component:default/test2'], + optional: false, + }, + }), + ).rejects.toThrow('Entity component:default/test2 not found'); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test', 'component:default/test2'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).not.toHaveBeenCalled(); + }); + + it('should return null in case some of the entities not found and optional is true', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + undefined, + ], + }); + + await action.handler({ + ...mockContext, + input: { + entityRefs: ['component:default/test', 'component:default/test2'], + optional: true, + }, + }); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test', 'component:default/test2'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).toHaveBeenCalledWith('entities', [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + }, + null, + ]); + }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts index 17e510ce64..1bcbfa0006 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts @@ -36,10 +36,26 @@ const examples = [ ], }), }, + { + description: 'Fetch multiple entities by referencse', + example: yaml.stringify({ + steps: [ + { + action: id, + id: 'fetchMultiple', + name: 'Fetch catalog entities', + input: { + entityRefs: ['component:default/name'], + }, + }, + ], + }), + }, ]; /** - * Returns entity from the catalog by entity reference. + * Returns entity or entities from the catalog by entity reference(s). + * * @public */ export function createFetchCatalogEntityAction(options: { @@ -47,13 +63,17 @@ export function createFetchCatalogEntityAction(options: { }) { const { catalogClient } = options; - return createTemplateAction<{ entityRef: string; optional?: boolean }>({ + return createTemplateAction<{ + entityRef?: string; + entityRefs?: string[]; + optional?: boolean; + }>({ id, - description: 'Returns entity from the catalog by entity reference', + description: + 'Returns entity or entities from the catalog by entity reference(s)', examples, schema: { input: { - required: ['entityRef'], type: 'object', properties: { entityRef: { @@ -61,10 +81,15 @@ export function createFetchCatalogEntityAction(options: { title: 'Entity reference', description: 'Entity reference of the entity to get', }, + entityRefs: { + type: 'array', + title: 'Entity references', + description: 'Entity references of the entities to get', + }, optional: { title: 'Optional', description: - 'Permit the entity to optionally exist. Default: false', + 'Allow the entity or entities to optionally exist. Default: false', type: 'boolean', }, }, @@ -76,29 +101,55 @@ export function createFetchCatalogEntityAction(options: { title: 'Entity found by the entity reference', type: 'object', description: - 'Object containing same values used in the Entity schema.', + 'Object containing same values used in the Entity schema. Only when used with `entityRef` parameter.', + }, + entities: { + title: 'Entities found by the entity references', + type: 'array', + items: { type: 'object' }, + description: + 'Array containing objects with same values used in the Entity schema. Only when used with `entityRefs` parameter.', }, }, }, }, async handler(ctx) { - const { entityRef, optional } = ctx.input; - let entity; - try { - entity = await catalogClient.getEntityByRef(entityRef, { + const { entityRef, entityRefs, optional } = ctx.input; + if (!entityRef && !entityRefs) { + if (optional) { + return; + } + throw new Error('Missing entity reference or references'); + } + + if (entityRef) { + const entity = await catalogClient.getEntityByRef(entityRef, { token: ctx.secrets?.backstageToken, }); - } catch (e) { - if (!optional) { - throw e; + + if (!entity && !optional) { + throw new Error(`Entity ${entityRef} not found`); } + ctx.output('entity', entity ?? null); } - if (!entity && !optional) { - throw new Error(`Entity ${entityRef} not found`); - } + if (entityRefs) { + const entities = await catalogClient.getEntitiesByRefs( + { entityRefs }, + { + token: ctx.secrets?.backstageToken, + }, + ); - ctx.output('entity', entity ?? null); + const finalEntities = entities.items.map((e, i) => { + if (!e && !optional) { + throw new Error(`Entity ${entityRefs[i]} not found`); + } + return e ?? null; + }); + + ctx.output('entities', finalEntities); + } }, }); } From e6ac8e69b5b779444817d32f6782aa93740193b1 Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Mon, 13 Mar 2023 09:27:50 -0700 Subject: [PATCH 096/511] fix(shortcuts): client handles state updates from storageApi Signed-off-by: Alec Jacobs --- .../src/api/LocalStoredShortcuts.test.ts | 3 +- .../shortcuts/src/api/LocalStoredShortcuts.ts | 54 +++++++++++++------ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/plugins/shortcuts/src/api/LocalStoredShortcuts.test.ts b/plugins/shortcuts/src/api/LocalStoredShortcuts.test.ts index dbea91863c..86890fc75b 100644 --- a/plugins/shortcuts/src/api/LocalStoredShortcuts.test.ts +++ b/plugins/shortcuts/src/api/LocalStoredShortcuts.test.ts @@ -36,8 +36,9 @@ describe('LocalStoredShortcuts', () => { resolve(); }, }); - shortcutApi.add(shortcut); }); + observerNextHandler.mockClear(); // handler is called with current state to start + await shortcutApi.add(shortcut); expect(observerNextHandler).toHaveBeenCalledTimes(1); expect(observerNextHandler).toHaveBeenCalledWith( diff --git a/plugins/shortcuts/src/api/LocalStoredShortcuts.ts b/plugins/shortcuts/src/api/LocalStoredShortcuts.ts index 65aeb86e3f..44f7364f69 100644 --- a/plugins/shortcuts/src/api/LocalStoredShortcuts.ts +++ b/plugins/shortcuts/src/api/LocalStoredShortcuts.ts @@ -16,10 +16,10 @@ import { pageTheme } from '@backstage/theme'; import { v4 as uuid } from 'uuid'; -import { ShortcutApi } from './ShortcutApi'; -import { Shortcut } from '../types'; -import { StorageApi } from '@backstage/core-plugin-api'; -import Observable from 'zen-observable'; +import { ShortcutApi, type Shortcut } from '@backstage/plugin-shortcuts'; +import type { StorageApi } from '@backstage/core-plugin-api'; +import type { Observable } from '@backstage/types'; +import ObservableImpl from 'zen-observable'; /** * Implementation of the ShortcutApi that uses the StorageApi to store shortcuts. @@ -27,27 +27,41 @@ import Observable from 'zen-observable'; * @public */ export class LocalStoredShortcuts implements ShortcutApi { - private readonly shortcuts: Observable; + private shortcuts: Shortcut[]; + private readonly subscribers = new Set< + ZenObservable.SubscriptionObserver + >(); + + private readonly observable = new ObservableImpl(subscriber => { + // forward the the latest value + subscriber.next(this.shortcuts); + + this.subscribers.add(subscriber); + return () => { + this.subscribers.delete(subscriber); + }; + }); constructor(private readonly storageApi: StorageApi) { - this.shortcuts = Observable.from( - this.storageApi.observe$('items'), - ).map(snapshot => snapshot.value ?? []); + this.shortcuts = this.storageApi.snapshot('items').value ?? []; + this.storageApi.observe$('items').subscribe({ + next: next => { + this.shortcuts = next.value ?? []; + this.notifyChanges(); + }, + }); } - shortcut$() { - return this.shortcuts; + shortcut$(): Observable { + return this.observable; } get() { - return Array.from( - this.storageApi.snapshot('items').value ?? [], - ).sort((a, b) => (a.title >= b.title ? 1 : -1)); + return this.shortcuts; } async add(shortcut: Omit) { - const shortcuts = this.get(); - shortcuts.push({ ...shortcut, id: uuid() }); + const shortcuts = this.sort([...this.get(), { ...shortcut, id: uuid() }]); await this.storageApi.set('items', shortcuts); } @@ -78,4 +92,14 @@ export class LocalStoredShortcuts implements ShortcutApi { catalog: 'home', docs: 'documentation', }; + + private sort(shortcuts: Shortcut[]): Shortcut[] { + return shortcuts.slice().sort((a, b) => (a.title >= b.title ? 1 : -1)); + } + + private notifyChanges() { + for (const subscription of this.subscribers) { + subscription.next(this.shortcuts); + } + } } From 7c38e565d1fba9bb68d93a856d69bafa0c3b1cd7 Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Mon, 13 Mar 2023 09:34:20 -0700 Subject: [PATCH 097/511] docs(changeset): add patch changeset Signed-off-by: Alec Jacobs --- .changeset/pink-apples-design.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/pink-apples-design.md diff --git a/.changeset/pink-apples-design.md b/.changeset/pink-apples-design.md new file mode 100644 index 0000000000..411786370a --- /dev/null +++ b/.changeset/pink-apples-design.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-shortcuts': patch +--- + +Fixed bug in LocalStoredShortcuts client where adding new Shortcut results in replacing entire shortcut list. + +Refactored LocalStoredShortcuts client to listen to `storageApi` updates to ensure that local state is always up to date. From f538b9c5b83a67bf22b587e43d44071e9bfcb35f Mon Sep 17 00:00:00 2001 From: Miguel Alexandre Date: Mon, 13 Mar 2023 17:59:54 +0100 Subject: [PATCH 098/511] Include the failureMetadata and successMetadata in TechInsightsApi Signed-off-by: Miguel Alexandre --- .changeset/lazy-monkeys-worry.md | 5 ++++ plugins/tech-insights/src/api/types.ts | 37 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 .changeset/lazy-monkeys-worry.md diff --git a/.changeset/lazy-monkeys-worry.md b/.changeset/lazy-monkeys-worry.md new file mode 100644 index 0000000000..2c7e2ba4a2 --- /dev/null +++ b/.changeset/lazy-monkeys-worry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': minor +--- + +The Check class now includes the failureMetadata and successMetadata as returned by the runChecks call. diff --git a/plugins/tech-insights/src/api/types.ts b/plugins/tech-insights/src/api/types.ts index ac1f2e44ee..aa073dcbc4 100644 --- a/plugins/tech-insights/src/api/types.ts +++ b/plugins/tech-insights/src/api/types.ts @@ -22,11 +22,48 @@ import { JsonValue } from '@backstage/types'; * @public */ export type Check = { + /** + * Unique identifier of the check + * + * Used to identify which checks to use when running checks. + */ id: string; + + /** + * Type identifier for the check. + * Can be used to determine storage options, logical routing to correct FactChecker implementation + * or to help frontend render correct component types based on this + */ type: string; + + /** + * Human readable name of the check, may be displayed in the UI + */ name: string; + + /** + * Human readable description of the check, may be displayed in the UI + */ description: string; + + /** + * A collection of string referencing fact rows that a check will be run against. + * + * References the fact container, aka fact retriever itself which may or may not contain multiple individual facts and values + */ factIds: string[]; + + /** + * Metadata to be returned in case a check has been successfully evaluated + * Can contain links, description texts or other actionable items + */ + successMetadata?: Record; + + /** + * Metadata to be returned in case a check evaluation has ended in failure + * Can contain links, description texts or other actionable items + */ + failureMetadata?: Record; }; /** From c5a57d15e29a53a796fbfc27ca018d673b62427e Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Mon, 13 Mar 2023 10:28:38 -0700 Subject: [PATCH 099/511] docs(shortcuts): regen api-report.md Signed-off-by: Alec Jacobs --- plugins/shortcuts/api-report.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/shortcuts/api-report.md b/plugins/shortcuts/api-report.md index 1aa1dea003..19c0035a55 100644 --- a/plugins/shortcuts/api-report.md +++ b/plugins/shortcuts/api-report.md @@ -9,24 +9,25 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { Observable } from '@backstage/types'; -import { default as Observable_2 } from 'zen-observable'; -import { StorageApi } from '@backstage/core-plugin-api'; +import { Shortcut as Shortcut_2 } from '@backstage/plugin-shortcuts'; +import { ShortcutApi as ShortcutApi_2 } from '@backstage/plugin-shortcuts'; +import type { StorageApi } from '@backstage/core-plugin-api'; // @public -export class LocalStoredShortcuts implements ShortcutApi { +export class LocalStoredShortcuts implements ShortcutApi_2 { constructor(storageApi: StorageApi); // (undocumented) - add(shortcut: Omit): Promise; + add(shortcut: Omit): Promise; // (undocumented) - get(): Shortcut[]; + get(): Shortcut_2[]; // (undocumented) getColor(url: string): string; // (undocumented) remove(id: string): Promise; // (undocumented) - shortcut$(): Observable_2; + shortcut$(): Observable; // (undocumented) - update(shortcut: Shortcut): Promise; + update(shortcut: Shortcut_2): Promise; } // @public (undocumented) From 2d20ea246518fca3c5de9a517faa82ec422f5c05 Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Mon, 13 Mar 2023 10:47:06 -0700 Subject: [PATCH 100/511] build(shortcuts): move @types/zen-observable to devDependencies Signed-off-by: Alec Jacobs --- plugins/shortcuts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index eb48088934..22c0456342 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -30,7 +30,6 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "@types/zen-observable": "^0.8.2", "react-hook-form": "^7.12.2", "react-use": "^17.2.4", "uuid": "^8.3.2", @@ -49,6 +48,7 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", + "@types/zen-observable": "^0.8.2", "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, From c1ee073a82b5c7294a3f243ad86834c8c4518cb1 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Mon, 13 Mar 2023 16:06:08 -0400 Subject: [PATCH 101/511] feat: add lastModifiedAt to UrlReader methods Signed-off-by: Andrew Thauer --- .changeset/sharp-rings-cry.md | 6 ++ packages/backend-common/api-report.md | 2 + .../src/reading/AwsS3UrlReader.test.ts | 42 +++++++++- .../src/reading/AwsS3UrlReader.ts | 30 ++++---- .../src/reading/AzureUrlReader.ts | 1 + .../reading/BitbucketCloudUrlReader.test.ts | 77 +++++++++++++++++++ .../src/reading/BitbucketCloudUrlReader.ts | 10 ++- .../src/reading/BitbucketServerUrlReader.ts | 10 ++- .../src/reading/BitbucketUrlReader.test.ts | 77 +++++++++++++++++++ .../src/reading/BitbucketUrlReader.ts | 10 ++- .../src/reading/FetchUrlReader.test.ts | 25 +++++- .../src/reading/FetchUrlReader.ts | 7 ++ .../src/reading/GiteaUrlReader.test.ts | 48 +++++++++++- .../src/reading/GiteaUrlReader.ts | 4 + .../src/reading/GithubUrlReader.test.ts | 8 +- .../src/reading/GithubUrlReader.ts | 8 ++ .../src/reading/GitlabUrlReader.test.ts | 38 ++++++++- .../src/reading/GitlabUrlReader.ts | 10 ++- .../src/reading/ReadUrlResponseFactory.ts | 1 + .../src/reading/tree/ReadableArrayResponse.ts | 1 + .../reading/tree/TarArchiveResponse.test.ts | 5 ++ .../reading/tree/ZipArchiveResponse.test.ts | 5 ++ .../src/reading/tree/ZipArchiveResponse.ts | 3 + packages/backend-common/src/reading/types.ts | 7 ++ packages/backend-common/src/reading/util.ts | 23 ++++++ packages/backend-plugin-api/api-report.md | 4 + .../services/definitions/UrlReaderService.ts | 42 ++++++++++ 27 files changed, 477 insertions(+), 27 deletions(-) create mode 100644 .changeset/sharp-rings-cry.md create mode 100644 packages/backend-common/src/reading/util.ts diff --git a/.changeset/sharp-rings-cry.md b/.changeset/sharp-rings-cry.md new file mode 100644 index 0000000000..9e32a53526 --- /dev/null +++ b/.changeset/sharp-rings-cry.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-common': minor +'@backstage/backend-plugin-api': minor +--- + +Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index ebdd7315c9..f1d8a74dbe 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -301,6 +301,7 @@ export class FetchUrlReader implements UrlReader { export type FromReadableArrayOptions = Array<{ data: Readable; path: string; + lastModifiedAt?: Date; }>; // @public @@ -635,6 +636,7 @@ export class ReadUrlResponseFactory { // @public export type ReadUrlResponseFactoryFromStreamOptions = { etag?: string; + lastModifiedAt?: Date; }; // @public diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index 0bd4d2636f..b37a052c1d 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -297,23 +297,26 @@ describe('AwsS3UrlReader', () => { ), ), ETag: '123abc', + LastModified: new Date('2020-01-01T00:00:00Z'), }); }); it('returns contents of an object in a bucket via buffer', async () => { - const { buffer, etag } = await reader.readUrl( + const { buffer, etag, lastModifiedAt } = await reader.readUrl( 'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml', ); expect(etag).toBe('123abc'); + expect(lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); const response = await buffer(); expect(response.toString().trim()).toBe('site_name: Test'); }); it('returns contents of an object in a bucket via stream', async () => { - const { buffer, etag } = await reader.readUrl( + const { buffer, etag, lastModifiedAt } = await reader.readUrl( 'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml', ); expect(etag).toBe('123abc'); + expect(lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); const response = await buffer(); expect(response.toString().trim()).toBe('site_name: Test'); }); @@ -403,6 +406,41 @@ describe('AwsS3UrlReader', () => { }); }); + describe('readUrl with lastModifiedAfter', () => { + const [{ reader }] = createReader({ + integrations: { + awsS3: [ + { + host: 'amazonaws.com', + accessKeyId: 'fake-access-key', + secretAccessKey: 'fake-secret-key', + }, + ], + }, + }); + + beforeEach(() => { + s3Client.reset(); + const t = new S3ServiceException({ + name: '304', + $fault: 'client', + $metadata: { httpStatusCode: 304 }, + }); + s3Client.on(GetObjectCommand).rejects(t); + }); + + it('returns contents of an object in a bucket', async () => { + await expect( + reader.readUrl!( + 'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml', + { + lastModifiedAfter: new Date('2020-01-01T00:00:00Z'), + }, + ), + ).rejects.toThrow(NotModifiedError); + }); + }); + describe('readTree', () => { let awsS3UrlReader: AwsS3UrlReader; diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.ts b/packages/backend-common/src/reading/AwsS3UrlReader.ts index d06e2d0ad6..4d4c28071f 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.ts @@ -41,6 +41,7 @@ import { ListObjectsV2Command, ListObjectsV2CommandOutput, GetObjectCommand, + GetObjectCommandInput, } from '@aws-sdk/client-s3'; import { AbortController } from '@aws-sdk/abort-controller'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; @@ -253,6 +254,8 @@ export class AwsS3UrlReader implements UrlReader { url: string, options?: ReadUrlOptions, ): Promise { + const { etag, lastModifiedAfter } = options ?? {}; + try { const { path, bucket, region } = parseUrl(url, this.integration.config); const s3Client = await this.buildS3Client( @@ -262,19 +265,15 @@ export class AwsS3UrlReader implements UrlReader { ); const abortController = new AbortController(); - let params; - if (options?.etag) { - params = { - Bucket: bucket, - Key: path, - IfNoneMatch: options.etag, - }; - } else { - params = { - Bucket: bucket, - Key: path, - }; - } + const params: GetObjectCommandInput = { + Bucket: bucket, + Key: path, + ...(etag && { IfNoneMatch: etag }), + ...(lastModifiedAfter && { + IfModifiedSince: lastModifiedAfter, + }), + }; + options?.signal?.addEventListener('abort', () => abortController.abort()); const getObjectCommand = new GetObjectCommand(params); const response = await s3Client.send(getObjectCommand, { @@ -284,10 +283,10 @@ export class AwsS3UrlReader implements UrlReader { const s3ObjectData = await this.retrieveS3ObjectData( response.Body as Readable, ); - const etag = response.ETag; return ReadUrlResponseFactory.fromReadable(s3ObjectData, { - etag: etag, + etag: response.ETag, + lastModifiedAt: response.LastModified, }); } catch (e) { if (e.$metadata && e.$metadata.httpStatusCode === 304) { @@ -347,6 +346,7 @@ export class AwsS3UrlReader implements UrlReader { responses.push({ data: s3ObjectData, path: String(allObjects[i]), + lastModifiedAt: response?.LastModified ?? undefined, }); } diff --git a/packages/backend-common/src/reading/AzureUrlReader.ts b/packages/backend-common/src/reading/AzureUrlReader.ts index 08e3917b38..90cf8f29bd 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.ts @@ -192,6 +192,7 @@ export class AzureUrlReader implements UrlReader { base: url, }), content: file.content, + lastModifiedAt: file.lastModifiedAt, })), }; } diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts index ca6e15a005..c00aeba124 100644 --- a/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts @@ -156,6 +156,83 @@ describe('BitbucketCloudUrlReader', () => { expect(buffer.toString()).toBe('foo'); expect(result.etag).toBe('new-etag-value'); }); + + it('should be able to readUrl via buffer without If-Modified-Since', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-None-Match')).toBeNull(); + return res( + ctx.status(200), + ctx.body('foo'), + ctx.set('ETag', 'etag-value'), + ctx.set( + 'Last-Modified', + new Date('2020-01-01T00:00:00Z').toUTCString(), + ), + ); + }, + ), + ); + + const result = await reader.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + ); + const buffer = await result.buffer(); + expect(result.lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); + expect(buffer.toString()).toBe('foo'); + }); + + it('should be throw not modified when If-Modified-Since returns a 304', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-Modified-Since')).toBe( + new Date('1999 12 31 23:59:59 GMT').toUTCString(), + ); + return res(ctx.status(304)); + }, + ), + ); + + await expect( + reader.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + { lastModifiedAfter: new Date('1999 12 31 23:59:59 GMT') }, + ), + ).rejects.toThrow(NotModifiedError); + }); + + it('should be able to readUrl when If-Modified-Since is before Last-Modified', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-Modified-Since')).toBe( + new Date('1999 12 31 23:59:59 GMT').toUTCString(), + ); + return res( + ctx.status(200), + ctx.set( + 'Last-Modified', + new Date('2020-01-01T00:00:00Z').toUTCString(), + ), + ctx.body('foo'), + ); + }, + ), + ); + + const result = await reader.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + { lastModifiedAfter: new Date('1999 12 31 23:59:59 GMT') }, + ); + const buffer = await result.buffer(); + expect(buffer.toString()).toBe('foo'); + expect(result.lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); + }); }); describe('read', () => { diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts b/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts index b83e012423..1522b7678d 100644 --- a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts @@ -40,6 +40,7 @@ import { UrlReader, } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket Cloud. @@ -80,7 +81,7 @@ export class BitbucketCloudUrlReader implements UrlReader { url: string, options?: ReadUrlOptions, ): Promise { - const { etag, signal } = options ?? {}; + const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketCloudFileFetchUrl( url, this.integration.config, @@ -95,6 +96,9 @@ export class BitbucketCloudUrlReader implements UrlReader { headers: { ...requestOptions.headers, ...(etag && { 'If-None-Match': etag }), + ...(lastModifiedAfter && { + 'If-Modified-Since': lastModifiedAfter.toUTCString(), + }), }, // TODO(freben): The signal cast is there because pre-3.x versions of // node-fetch have a very slightly deviating AbortSignal type signature. @@ -115,6 +119,9 @@ export class BitbucketCloudUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } @@ -184,6 +191,7 @@ export class BitbucketCloudUrlReader implements UrlReader { base: url, }), content: file.content, + lastModifiedAt: file.lastModifiedAt, })), }; } diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts index a97c3b39bb..2b6b5a1f8f 100644 --- a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts @@ -39,6 +39,7 @@ import { UrlReader, } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket Server APIs. @@ -71,7 +72,7 @@ export class BitbucketServerUrlReader implements UrlReader { url: string, options?: ReadUrlOptions, ): Promise { - const { etag, signal } = options ?? {}; + const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketServerFileFetchUrl( url, this.integration.config, @@ -86,6 +87,9 @@ export class BitbucketServerUrlReader implements UrlReader { headers: { ...requestOptions.headers, ...(etag && { 'If-None-Match': etag }), + ...(lastModifiedAfter && { + 'If-Modified-Since': lastModifiedAfter.toUTCString(), + }), }, // TODO(freben): The signal cast is there because pre-3.x versions of // node-fetch have a very slightly deviating AbortSignal type signature. @@ -106,6 +110,9 @@ export class BitbucketServerUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } @@ -175,6 +182,7 @@ export class BitbucketServerUrlReader implements UrlReader { base: url, }), content: file.content, + lastModifiedAt: file.lastModifiedAt, })), }; } diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts index 922480f8e7..15e007d516 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts @@ -204,6 +204,83 @@ describe('BitbucketUrlReader', () => { expect(buffer.toString()).toBe('foo'); expect(result.etag).toBe('new-etag-value'); }); + + it('should be able to readUrl via buffer without If-Modified-Since', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-None-Match')).toBeNull(); + return res( + ctx.status(200), + ctx.body('foo'), + ctx.set('ETag', 'etag-value'), + ctx.set( + 'Last-Modified', + new Date('2020-01-01T00:00:00Z').toUTCString(), + ), + ); + }, + ), + ); + + const result = await bitbucketProcessor.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + ); + const buffer = await result.buffer(); + expect(result.lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); + expect(buffer.toString()).toBe('foo'); + }); + + it('should be throw not modified when If-Modified-Since returns a 304', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-Modified-Since')).toBe( + new Date('1999 12 31 23:59:59 GMT').toUTCString(), + ); + return res(ctx.status(304)); + }, + ), + ); + + await expect( + bitbucketProcessor.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + { lastModifiedAfter: new Date('1999 12 31 23:59:59 GMT') }, + ), + ).rejects.toThrow(NotModifiedError); + }); + + it('should be able to readUrl when If-Modified-Since is before Last-Modified', async () => { + worker.use( + rest.get( + 'https://api.bitbucket.org/2.0/repositories/backstage-verification/test-template/src/master/template.yaml', + (req, res, ctx) => { + expect(req.headers.get('If-Modified-Since')).toBe( + new Date('1999 12 31 23:59:59 GMT').toUTCString(), + ); + return res( + ctx.status(200), + ctx.set( + 'Last-Modified', + new Date('2020-01-01T00:00:00Z').toUTCString(), + ), + ctx.body('foo'), + ); + }, + ), + ); + + const result = await bitbucketProcessor.readUrl( + 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', + { lastModifiedAfter: new Date('1999 12 31 23:59:59 GMT') }, + ); + const buffer = await result.buffer(); + expect(buffer.toString()).toBe('foo'); + expect(result.lastModifiedAt).toEqual(new Date('2020-01-01T00:00:00Z')); + }); }); describe('read', () => { diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.ts b/packages/backend-common/src/reading/BitbucketUrlReader.ts index 01539594dd..3a34c725c6 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.ts @@ -41,6 +41,7 @@ import { UrlReader, } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files from Bitbucket v1 and v2 APIs, such @@ -96,7 +97,7 @@ export class BitbucketUrlReader implements UrlReader { url: string, options?: ReadUrlOptions, ): Promise { - const { etag, signal } = options ?? {}; + const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketFileFetchUrl(url, this.integration.config); const requestOptions = getBitbucketRequestOptions(this.integration.config); @@ -106,6 +107,9 @@ export class BitbucketUrlReader implements UrlReader { headers: { ...requestOptions.headers, ...(etag && { 'If-None-Match': etag }), + ...(lastModifiedAfter && { + 'If-Modified-Since': lastModifiedAfter.toUTCString(), + }), }, // TODO(freben): The signal cast is there because pre-3.x versions of // node-fetch have a very slightly deviating AbortSignal type signature. @@ -126,6 +130,9 @@ export class BitbucketUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } @@ -195,6 +202,7 @@ export class BitbucketUrlReader implements UrlReader { base: url, }), content: file.content, + lastModifiedAt: file.lastModifiedAt, })), }; } diff --git a/packages/backend-common/src/reading/FetchUrlReader.test.ts b/packages/backend-common/src/reading/FetchUrlReader.test.ts index e45117a106..ad834c64ef 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.test.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.test.ts @@ -45,6 +45,21 @@ describe('FetchUrlReader', () => { ); } + if ( + req.headers.get('if-modified-since') && + new Date(req.headers.get('if-modified-since') ?? '') < + new Date('2021-01-01T00:00:00Z') + ) { + return res( + ctx.status(304), + ctx.set('Content-Type', 'text/plain'), + ctx.set( + 'last-modified', + new Date('2021-01-01T00:00:00Z').toUTCString(), + ), + ); + } + return res( ctx.status(200), ctx.set('Content-Type', 'text/plain'), @@ -192,7 +207,7 @@ describe('FetchUrlReader', () => { }); describe('readUrl', () => { - it('should throw NotModified if server responds with 304', async () => { + it('should throw NotModified if server responds with 304 from etag', async () => { await expect( fetchUrlReader.readUrl('https://backstage.io/some-resource', { etag: 'foo', @@ -200,6 +215,14 @@ describe('FetchUrlReader', () => { ).rejects.toThrow(NotModifiedError); }); + it('should throw NotModified if server responds with 304 from lastModifiedAfter', async () => { + await expect( + fetchUrlReader.readUrl('https://backstage.io/some-resource', { + lastModifiedAfter: new Date('2020-01-01T00:00:00Z'), + }), + ).rejects.toThrow(NotModifiedError); + }); + it('should return etag from the response', async () => { const response = await fetchUrlReader.readUrl( 'https://backstage.io/some-resource', diff --git a/packages/backend-common/src/reading/FetchUrlReader.ts b/packages/backend-common/src/reading/FetchUrlReader.ts index 20b78d63c3..90c1cf6c26 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.ts @@ -26,6 +26,7 @@ import { } from './types'; import path from 'path'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; const isInRange = (num: number, [start, end]: [number, number]) => { return num >= start && num <= end; @@ -127,6 +128,9 @@ export class FetchUrlReader implements UrlReader { response = await fetch(url, { headers: { ...(options?.etag && { 'If-None-Match': options.etag }), + ...(options?.lastModifiedAfter && { + 'If-Modified-Since': options.lastModifiedAfter.toUTCString(), + }), }, // TODO(freben): The signal cast is there because pre-3.x versions of // node-fetch have a very slightly deviating AbortSignal type signature. @@ -147,6 +151,9 @@ export class FetchUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } diff --git a/packages/backend-common/src/reading/GiteaUrlReader.test.ts b/packages/backend-common/src/reading/GiteaUrlReader.test.ts index 6c8722d2e5..1860d9f461 100644 --- a/packages/backend-common/src/reading/GiteaUrlReader.test.ts +++ b/packages/backend-common/src/reading/GiteaUrlReader.test.ts @@ -25,7 +25,7 @@ import { UrlReaderPredicateTuple } from './types'; import { DefaultReadTreeResponseFactory } from './tree'; import getRawBody from 'raw-body'; import { GiteaUrlReader } from './GiteaUrlReader'; -import { NotFoundError } from '@backstage/errors'; +import { NotFoundError, NotModifiedError } from '@backstage/errors'; const treeResponseFactory = DefaultReadTreeResponseFactory.create({ config: new ConfigReader({}), @@ -200,5 +200,51 @@ describe('GiteaUrlReader', () => { 'https://gitea.com/owner/project/src/branch/branch2/LICENSE could not be read as https://gitea.com/api/v1/repos/owner/project/contents/LICENSE?ref=branch2, 500 Error!!!', ); }); + + it('should throw NotModified if server responds with 304 from etag', async () => { + worker.use( + rest.get( + 'https://gitea.com/api/v1/repos/owner/project/contents/LICENSE', + (_, res, ctx) => { + return res(ctx.set('ETag', 'foo'), ctx.status(304, 'Error!!!')); + }, + ), + ); + + await expect( + giteaProcessor.readUrl( + 'https://gitea.com/owner/project/src/branch/branch2/LICENSE', + { + etag: 'foo', + }, + ), + ).rejects.toThrow(NotModifiedError); + }); + + it('should throw NotModified if server responds with 304 from lastModifiedAfter', async () => { + worker.use( + rest.get( + 'https://gitea.com/api/v1/repos/owner/project/contents/LICENSE', + (_, res, ctx) => { + return res( + ctx.set( + 'Last-Modified', + new Date('2020-01-01T00:00:00Z').toUTCString(), + ), + ctx.status(304, 'Error!!!'), + ); + }, + ), + ); + + await expect( + giteaProcessor.readUrl( + 'https://gitea.com/owner/project/src/branch/branch2/LICENSE', + { + lastModifiedAfter: new Date('2020-01-01T00:00:00Z'), + }, + ), + ).rejects.toThrow(NotModifiedError); + }); }); }); diff --git a/packages/backend-common/src/reading/GiteaUrlReader.ts b/packages/backend-common/src/reading/GiteaUrlReader.ts index 1471bab608..34542e878e 100644 --- a/packages/backend-common/src/reading/GiteaUrlReader.ts +++ b/packages/backend-common/src/reading/GiteaUrlReader.ts @@ -34,6 +34,7 @@ import { NotModifiedError, } from '@backstage/errors'; import { Readable } from 'stream'; +import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for the Gitea v1 api. @@ -86,6 +87,9 @@ export class GiteaUrlReader implements UrlReader { Readable.from(Buffer.from(content, 'base64')), { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }, ); } diff --git a/packages/backend-common/src/reading/GithubUrlReader.test.ts b/packages/backend-common/src/reading/GithubUrlReader.test.ts index 2315d1f9e8..1ee25920f2 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.test.ts +++ b/packages/backend-common/src/reading/GithubUrlReader.test.ts @@ -247,7 +247,7 @@ describe('GithubUrlReader', () => { ).rejects.toThrow(/rate limit exceeded/); }); - it('should return etag from the response', async () => { + it('should return etag and last-modified from the response', async () => { (mockCredentialsProvider.getCredentials as jest.Mock).mockResolvedValue({ headers: { Authorization: 'bearer blah', @@ -261,6 +261,11 @@ describe('GithubUrlReader', () => { return res( ctx.status(200), ctx.set('Etag', 'foo'), + ctx.set( + 'Last-Modified', + new Date('2021-01-01T00:00:00Z').toUTCString(), + ), + ctx.body('bar'), ); }, @@ -271,6 +276,7 @@ describe('GithubUrlReader', () => { 'https://github.com/backstage/mock/tree/blob/main', ); expect(response.etag).toBe('foo'); + expect(response.lastModifiedAt).toEqual(new Date('2021-01-01T00:00:00Z')); }); }); diff --git a/packages/backend-common/src/reading/GithubUrlReader.ts b/packages/backend-common/src/reading/GithubUrlReader.ts index d91c35621d..ee781daf0b 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.ts +++ b/packages/backend-common/src/reading/GithubUrlReader.ts @@ -40,6 +40,7 @@ import { ReadUrlResponse, } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; export type GhRepoResponse = RestEndpointMethodTypes['repos']['get']['response']['data']; @@ -109,6 +110,9 @@ export class GithubUrlReader implements UrlReader { headers: { ...credentials?.headers, ...(options?.etag && { 'If-None-Match': options.etag }), + ...(options?.lastModifiedAfter && { + 'If-Modified-Since': options.lastModifiedAfter.toUTCString(), + }), Accept: 'application/vnd.github.v3.raw', }, // TODO(freben): The signal cast is there because pre-3.x versions of @@ -130,6 +134,9 @@ export class GithubUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } @@ -290,6 +297,7 @@ export class GithubUrlReader implements UrlReader { return files.map(file => ({ url: pathToUrl(file.path), content: file.content, + lastModifiedAt: file.lastModifiedAt, })); } diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 3751ee868e..d926b2be9b 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -184,7 +184,7 @@ describe('GitlabUrlReader', () => { treeResponseFactory, }); - it('should throw NotModified on HTTP 304', async () => { + it('should throw NotModified on HTTP 304 from etag', async () => { worker.use( rest.get('*/api/v4/projects/:name', (_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })), @@ -205,13 +205,44 @@ describe('GitlabUrlReader', () => { ).rejects.toThrow(NotModifiedError); }); - it('should return etag in response', async () => { + it('should throw NotModified on HTTP 304 from lastModifiedAt', async () => { + worker.use( + rest.get('*/api/v4/projects/:name', (_, res, ctx) => + res(ctx.status(200), ctx.json({ id: 12345 })), + ), + rest.get('*', (req, res, ctx) => { + expect(req.headers.get('If-Modified-Since')).toBe( + new Date('2019 12 31 23:59:59 GMT').toUTCString(), + ); + return res(ctx.status(304)); + }), + ); + + await expect( + reader.readUrl!( + 'https://gitlab.com/groupA/teams/teamA/subgroupA/repoA/-/blob/branch/my/path/to/file.yaml', + { + lastModifiedAfter: new Date('2019 12 31 23:59:59 GMT'), + }, + ), + ).rejects.toThrow(NotModifiedError); + }); + + it('should return etag and last-modified in response', async () => { worker.use( rest.get('*/api/v4/projects/:name', (_, res, ctx) => res(ctx.status(200), ctx.json({ id: 12345 })), ), rest.get('*', (_req, res, ctx) => { - return res(ctx.status(200), ctx.set('ETag', '999'), ctx.body('foo')); + return res( + ctx.status(200), + ctx.set('ETag', '999'), + ctx.set( + 'Last-Modified', + new Date('2020 01 01 00:0:00 GMT').toUTCString(), + ), + ctx.body('foo'), + ); }), ); @@ -219,6 +250,7 @@ describe('GitlabUrlReader', () => { 'https://gitlab.com/groupA/teams/teamA/subgroupA/repoA/-/blob/branch/my/path/to/file.yaml', ); expect(result.etag).toBe('999'); + expect(result.lastModifiedAt).toEqual(new Date('2020 01 01 00:0:00 GMT')); const content = await result.buffer(); expect(content.toString()).toBe('foo'); }); diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index bebc7453d0..df8441c1f7 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -40,6 +40,7 @@ import { } from './types'; import { trimEnd, trimStart } from 'lodash'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +import { parseLastModified } from './util'; /** * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for files on GitLab. @@ -72,7 +73,7 @@ export class GitlabUrlReader implements UrlReader { url: string, options?: ReadUrlOptions, ): Promise { - const { etag, signal } = options ?? {}; + const { etag, lastModifiedAfter, signal } = options ?? {}; const builtUrl = await this.getGitlabFetchUrl(url); let response: Response; @@ -81,6 +82,9 @@ export class GitlabUrlReader implements UrlReader { headers: { ...getGitLabRequestOptions(this.integration.config).headers, ...(etag && { 'If-None-Match': etag }), + ...(lastModifiedAfter && { + 'If-Modified-Since': lastModifiedAfter.toUTCString(), + }), }, // TODO(freben): The signal cast is there because pre-3.x versions of // node-fetch have a very slightly deviating AbortSignal type signature. @@ -101,6 +105,9 @@ export class GitlabUrlReader implements UrlReader { if (response.ok) { return ReadUrlResponseFactory.fromNodeJSReadable(response.body, { etag: response.headers.get('ETag') ?? undefined, + lastModifiedAt: parseLastModified( + response.headers.get('Last-Modified'), + ), }); } @@ -247,6 +254,7 @@ export class GitlabUrlReader implements UrlReader { files: files.map(file => ({ url: this.integration.resolveUrl({ url: `/${file.path}`, base: url }), content: file.content, + lastModifiedAt: file.lastModifiedAt, })), }; } diff --git a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts b/packages/backend-common/src/reading/ReadUrlResponseFactory.ts index 91d1939c24..69b9c6c16a 100644 --- a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts +++ b/packages/backend-common/src/reading/ReadUrlResponseFactory.ts @@ -61,6 +61,7 @@ export class ReadUrlResponseFactory { return stream; }, etag: options?.etag, + lastModifiedAt: options?.lastModifiedAt, }; } diff --git a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts b/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts index eabaa3bc56..1429931142 100644 --- a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts +++ b/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts @@ -63,6 +63,7 @@ export class ReadableArrayResponse implements ReadTreeResponse { files.push({ path: this.stream[i].path, content: () => getRawBody(this.stream[i].data), + lastModifiedAt: this.stream[i]?.lastModifiedAt, }); } } diff --git a/packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts b/packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts index f0cbc6a612..1765a41156 100644 --- a/packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts +++ b/packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts @@ -45,10 +45,12 @@ describe('TarArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: undefined, }, { path: 'docs/index.md', content: expect.any(Function), + lastModifiedAt: undefined, }, ]); const contents = await Promise.all(files.map(f => f.content())); @@ -70,6 +72,7 @@ describe('TarArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: undefined, }, ]); const content = await files[0].content(); @@ -93,10 +96,12 @@ describe('TarArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: undefined, }, { path: 'docs/index.md', content: expect.any(Function), + lastModifiedAt: undefined, }, ]); const contents = await Promise.all(files.map(f => f.content())); diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts index e45a25db66..0b010565dd 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts @@ -59,10 +59,12 @@ describe('ZipArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: expect.any(Date), }, { path: 'docs/index.md', content: expect.any(Function), + lastModifiedAt: expect.any(Date), }, ]); @@ -85,6 +87,7 @@ describe('ZipArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: expect.any(Date), }, ]); const content = await files[0].content(); @@ -108,10 +111,12 @@ describe('ZipArchiveResponse', () => { { path: 'mkdocs.yml', content: expect.any(Function), + lastModifiedAt: expect.any(Date), }, { path: 'docs/index.md', content: expect.any(Function), + lastModifiedAt: expect.any(Date), }, ]); const contents = await Promise.all(files.map(f => f.content())); diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts index 5a1c5f9688..1e55150310 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts +++ b/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts @@ -146,6 +146,9 @@ export class ZipArchiveResponse implements ReadTreeResponse { files.push({ path: this.getInnerPath(entry.fileName), content: async () => await streamToBuffer(content), + lastModifiedAt: entry.lastModFileTime + ? new Date(entry.lastModFileTime) + : undefined, }); }); diff --git a/packages/backend-common/src/reading/types.ts b/packages/backend-common/src/reading/types.ts index 35380029e2..7f4d407fd0 100644 --- a/packages/backend-common/src/reading/types.ts +++ b/packages/backend-common/src/reading/types.ts @@ -65,6 +65,7 @@ export type ReaderFactory = (options: { */ export type ReadUrlResponseFactoryFromStreamOptions = { etag?: string; + lastModifiedAt?: Date; }; /** @@ -95,10 +96,16 @@ export type FromReadableArrayOptions = Array<{ * The raw data itself. */ data: Readable; + /** * The filepath of the data. */ path: string; + + /** + * Last modified date of the file contents. + */ + lastModifiedAt?: Date; }>; /** diff --git a/packages/backend-common/src/reading/util.ts b/packages/backend-common/src/reading/util.ts new file mode 100644 index 0000000000..3d65c2c527 --- /dev/null +++ b/packages/backend-common/src/reading/util.ts @@ -0,0 +1,23 @@ +/* + * 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. + */ + +export function parseLastModified(value: string | null | undefined) { + if (!value) { + return undefined; + } + + return new Date(value); +} diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 5e64502b78..7dc6ae97b3 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -359,11 +359,13 @@ export type ReadTreeResponseDirOptions = { export type ReadTreeResponseFile = { path: string; content(): Promise; + lastModifiedAt?: Date; }; // @public export type ReadUrlOptions = { etag?: string; + lastModifiedAfter?: Date; signal?: AbortSignal; }; @@ -372,6 +374,7 @@ export type ReadUrlResponse = { buffer(): Promise; stream?(): Readable; etag?: string; + lastModifiedAt?: Date; }; // @public (undocumented) @@ -420,6 +423,7 @@ export type SearchResponse = { export type SearchResponseFile = { url: string; content(): Promise; + lastModifiedAt?: Date; }; // @public (undocumented) diff --git a/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts b/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts index ef825a7fcd..c189b4a339 100644 --- a/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts +++ b/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts @@ -64,6 +64,26 @@ export type ReadUrlOptions = { */ etag?: string; + /** + * A date which can be provided to check whether a + * {@link UrlReaderService.readUrl} response has changed since the lastModifiedAt. + * + * @remarks + * + * In the {@link UrlReaderService.readUrl} response, an lastModifiedAt is returned + * along with data. The lastModifiedAt date represents the last time the data + * was modified. + * + * When an lastModifiedAfter is given in ReadUrlOptions, {@link UrlReaderService.readUrl} + * will compare the lastModifiedAfter against the lastModifiedAt of the target. If + * the data has not been modified since this date, the {@link UrlReaderService.readUrl} + * will throw a {@link @backstage/errors#NotModifiedError} indicating that the + * response does not contain any new data. If they do not match, + * {@link UrlReaderService.readUrl} will return the rest of the response along with new + * lastModifiedAt date. + */ + lastModifiedAfter?: Date; + /** * An abort signal to pass down to the underlying request. * @@ -102,6 +122,11 @@ export type ReadUrlResponse = { * Can be used to compare and cache responses when doing subsequent calls. */ etag?: string; + + /** + * Last modified date of the file contents. + */ + lastModifiedAt?: Date; }; /** @@ -213,8 +238,20 @@ export type ReadTreeResponse = { * @public */ export type ReadTreeResponseFile = { + /** + * The filepath of the data. + */ path: string; + + /** + * The binary contents of the file. + */ content(): Promise; + + /** + * The last modified timestamp of the data. + */ + lastModifiedAt?: Date; }; /** @@ -278,4 +315,9 @@ export type SearchResponseFile = { * The binary contents of the file. */ content(): Promise; + + /** + * The last modified timestamp of the data. + */ + lastModifiedAt?: Date; }; From 13226881189232e2b3e77ecd0bc06f03645a7cfe Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 9 Feb 2023 09:09:33 +0100 Subject: [PATCH 102/511] cli: Add admin skeleton command Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/command.ts | 31 ++++++++++++++++++++++ packages/cli/src/commands/admin/index.ts | 17 ++++++++++++ packages/cli/src/commands/index.ts | 8 ++++++ 3 files changed, 56 insertions(+) create mode 100644 packages/cli/src/commands/admin/command.ts create mode 100644 packages/cli/src/commands/admin/index.ts diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts new file mode 100644 index 0000000000..3539ddc40c --- /dev/null +++ b/packages/cli/src/commands/admin/command.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2023 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 chalk from 'chalk'; +import inquirer from 'inquirer'; +import { Task } from '../../lib/tasks'; + +export async function command(): Promise { + const answers = await inquirer.prompt<{ github: boolean }>([ + { + type: 'confirm', + name: 'github', + message: chalk.blue('Do you want to set up GitHub Authentication?'), + }, + ]); + + Task.log(answers.github ? 'Ok!' : 'Maybe next time'); +} diff --git a/packages/cli/src/commands/admin/index.ts b/packages/cli/src/commands/admin/index.ts new file mode 100644 index 0000000000..4c23ea6e48 --- /dev/null +++ b/packages/cli/src/commands/admin/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export { command } from './command'; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index ddec5c6a4a..2baf1aac9b 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -25,6 +25,13 @@ const configOption = [ Array(), ] as const; +export function registerAdminCommand(program: Command) { + program + .command('admin') + .description('Get help setting up your Backstage App.') + .action(lazy(() => import('./admin').then(m => m.command))); +} + export function registerRepoCommand(program: Command) { const command = program .command('repo [command]') @@ -360,6 +367,7 @@ export function registerCommands(program: Command) { registerRepoCommand(program); registerScriptCommand(program); registerMigrateCommand(program); + registerAdminCommand(program); program .command('versions:bump') From 7af6c36adfea09e08dbb9a95c307e5c2c272e7e8 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 9 Feb 2023 14:33:17 +0100 Subject: [PATCH 103/511] cli: Expand admin command to setup basic authenticaton for gihub Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/command.ts | 54 ++++++++++- packages/cli/src/commands/admin/file.ts | 48 ++++++++++ packages/cli/src/commands/admin/github.ts | 104 +++++++++++++++++++++ 3 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 packages/cli/src/commands/admin/file.ts create mode 100644 packages/cli/src/commands/admin/github.ts diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts index 3539ddc40c..5e8256c14f 100644 --- a/packages/cli/src/commands/admin/command.ts +++ b/packages/cli/src/commands/admin/command.ts @@ -17,15 +17,61 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../lib/tasks'; +import { github } from './github'; +import { updateConfigFile, updateEnvFile } from './file'; export async function command(): Promise { - const answers = await inquirer.prompt<{ github: boolean }>([ + const answers = await inquirer.prompt<{ + shouldSetupAuth: boolean; + useEnvForSecrets?: boolean; + provider?: string; + }>([ { type: 'confirm', - name: 'github', - message: chalk.blue('Do you want to set up GitHub Authentication?'), + name: 'shouldSetupAuth', + message: chalk.blue( + 'Do you want to set up Authentication for this project?', + ), + }, + { + type: 'confirm', + name: 'useEnvForSecrets', + message: + 'Would you like to store sensitive configuration details such as secrets as environment variables? (recommended)', + when: ({ shouldSetupAuth }) => shouldSetupAuth, + }, + { + type: 'list', + name: 'provider', + message: 'Please select a provider:', + choices: ['github'], + when: ({ shouldSetupAuth }) => shouldSetupAuth, }, ]); - Task.log(answers.github ? 'Ok!' : 'Maybe next time'); + if (!answers.shouldSetupAuth) { + // TODO(eide): Can we add a Task.warning() method? + console.log( + chalk.yellow( + 'If you change your mind, feel free to re-run this command.', + ), + ); + process.exit(1); + } + + switch (answers.provider) { + case 'github': { + const { useEnvForSecrets } = answers; + const config = await github(useEnvForSecrets); + await updateConfigFile(config); + if (useEnvForSecrets) { + await updateEnvFile(config); + } + break; + } + default: + throw new Error(`Provider ${answers.provider} not implemented yet.`); + } + + Task.log(`Done setting up ${answers.provider}!`); } diff --git a/packages/cli/src/commands/admin/file.ts b/packages/cli/src/commands/admin/file.ts new file mode 100644 index 0000000000..52a55c3776 --- /dev/null +++ b/packages/cli/src/commands/admin/file.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2023 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 * as path from 'path'; +import * as fs from 'fs-extra'; +import yaml from 'yaml'; +import { findPaths } from '@backstage/cli-common'; +import { GithubAuthConfig } from './github'; + +/* eslint-disable-next-line no-restricted-syntax */ +const { targetRoot } = findPaths(__dirname); +const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.development.yaml'); +const ENV_CONFIG_FILE = path.join(targetRoot, '.env.development'); + +// export const readAppConfig = async (file: string) => { +// return yaml.parse(await fs.readFile(file, 'utf8')); +// }; + +export const updateConfigFile = async (config: GithubAuthConfig) => { + return await fs.writeFile( + APP_CONFIG_FILE, + yaml.stringify(config, { + indent: 2, + }), + 'utf8', + ); +}; + +export const updateEnvFile = async (config: GithubAuthConfig) => { + const content = ` +AUTH_GITHUB_CLIENT_ID=${config.auth.providers.github.clientId} +AUTH_GITHUB_CLIENT_SECRET=${config.auth.providers.github.clientId}`; + + return await fs.writeFile(ENV_CONFIG_FILE, content, 'utf8'); +}; diff --git a/packages/cli/src/commands/admin/github.ts b/packages/cli/src/commands/admin/github.ts new file mode 100644 index 0000000000..5b359ecb33 --- /dev/null +++ b/packages/cli/src/commands/admin/github.ts @@ -0,0 +1,104 @@ +/* + * Copyright 2023 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 chalk from 'chalk'; +import inquirer from 'inquirer'; +import { Task } from '../../lib/tasks'; + +export type GithubAuthConfig = { + auth: { + providers: { + github: { + clientId: string; + clientSecret: string; + enterpriseInstanceUrl?: string; + }; + }; + }; +}; + +export const github = async ( + useEnvForSecrets?: boolean, +): Promise => { + Task.log(` + To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( + 'https://github.com/settings/developers', + )} + The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. + + You can find the full documentation page here: ${chalk.blue( + 'https://backstage.io/docs/auth/github/provider', + )} + `); + + const answers = await inquirer.prompt<{ + clientSecret: string; + clientId: string; + hasGithubEnterprise: boolean; + enterpriseInstanceUrl?: string; + }>([ + { + type: 'input', + name: 'clientSecret', + message: 'What is your Client Secret?', + // TODO(eide): Is there another way to validate? + // validate(input) { + // if (/([a-f0-9]{40})/g.test(input)) { + // return true; + // } + + // throw Error('Please provide a valid client secret.'); + // }, + }, + { + type: 'input', + name: 'clientId', + message: 'What is your Client Id?', + }, + { + type: 'confirm', + name: 'hasGithubEnterprise', + message: 'Are you using Github Enterprise?', + }, + { + type: 'input', + name: 'enterpriseInstanceUrl', + message: 'What is your URL for Github Enterprise?', + when: ({ hasGithubEnterprise }) => hasGithubEnterprise, + validate(input: string) { + return Boolean(new URL(input)); + }, + }, + ]); + + return { + auth: { + providers: { + github: { + clientId: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_ID}' + : answers.clientId, + clientSecret: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_SECRET}' + : answers.clientSecret, + ...(answers.hasGithubEnterprise && { + enterpriseInstanceUrl: answers.enterpriseInstanceUrl, + }), + }, + }, + }, + }; +}; From e1754adefa7f34b67d47bfe4b8f504177dbf6540 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 9 Feb 2023 14:38:42 +0100 Subject: [PATCH 104/511] cli: Set admin command to hidden Signed-off-by: Marcus Eide --- packages/cli/src/commands/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 2baf1aac9b..df0689b4b5 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -27,7 +27,7 @@ const configOption = [ export function registerAdminCommand(program: Command) { program - .command('admin') + .command('admin', { hidden: true }) .description('Get help setting up your Backstage App.') .action(lazy(() => import('./admin').then(m => m.command))); } From 29534d24534c5aa37ed3b3b2e27fbee4b8b1d15c Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 9 Feb 2023 17:37:44 +0100 Subject: [PATCH 105/511] Add gh-auth Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/admin/gh-auth.ts | 30 +++++++++++++++++++ .../GithubCreateAppServer.ts | 5 +++- .../src/commands/create-github-app/index.ts | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 packages/cli/src/commands/admin/gh-auth.ts diff --git a/packages/cli/src/commands/admin/gh-auth.ts b/packages/cli/src/commands/admin/gh-auth.ts new file mode 100644 index 0000000000..da3036d087 --- /dev/null +++ b/packages/cli/src/commands/admin/gh-auth.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2023 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 chalk from 'chalk'; +import inquirer from 'inquirer'; +import createGithubApp from '../create-github-app'; + +export default async () => { + // TODO: Make the GitHub Org optional + const input = await inquirer.prompt<{ org: string }>([ + { + type: 'input', + name: 'org', + message: chalk.blue('Enter a GitHub Org [required]'), + }, + ]); + await createGithubApp(input.org); +}; diff --git a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts index 70b8c0ca53..ca5eb2c02a 100644 --- a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts +++ b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts @@ -117,8 +117,11 @@ export class GithubCreateAppServer { ...(this.permissions.includes('members') && { members: 'read' }), ...(this.permissions.includes('read') && { contents: 'read' }), ...(this.permissions.includes('write') && { + administration: 'write', contents: 'write', - actions: 'write', + pull_requests: 'write', + issues: 'write', + workflows: 'write', }), }, name: 'Backstage-', diff --git a/packages/cli/src/commands/create-github-app/index.ts b/packages/cli/src/commands/create-github-app/index.ts index 6b3e732f18..e04e39fdf6 100644 --- a/packages/cli/src/commands/create-github-app/index.ts +++ b/packages/cli/src/commands/create-github-app/index.ts @@ -26,6 +26,7 @@ import openBrowser from 'react-dev-utils/openBrowser'; // due to lacking support for creating apps from manifests. // https://docs.github.com/en/free-pro-team@latest/developers/apps/creating-a-github-app-from-a-manifest export default async (org: string) => { + // Why is the Org check not done here? const answers: Answers = await inquirer.prompt({ name: 'appType', type: 'checkbox', From 250fb2af40eb01e96d58235460963a54bb8090a9 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 10 Feb 2023 13:43:16 +0100 Subject: [PATCH 106/511] Add GHA option to auth flow Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/admin/command.ts | 26 ++- packages/cli/src/commands/admin/gh-auth.ts | 7 +- .../GithubCreateAppServer.ts | 2 +- .../src/commands/create-github-app/index.ts | 160 +++++++++++++----- 4 files changed, 141 insertions(+), 54 deletions(-) diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts index 5e8256c14f..d7ea348571 100644 --- a/packages/cli/src/commands/admin/command.ts +++ b/packages/cli/src/commands/admin/command.ts @@ -19,6 +19,7 @@ import inquirer from 'inquirer'; import { Task } from '../../lib/tasks'; import { github } from './github'; import { updateConfigFile, updateEnvFile } from './file'; +import ghAuth from './gh-auth'; export async function command(): Promise { const answers = await inquirer.prompt<{ @@ -44,7 +45,7 @@ export async function command(): Promise { type: 'list', name: 'provider', message: 'Please select a provider:', - choices: ['github'], + choices: ['GitHub OAuth', 'GitHub App'], when: ({ shouldSetupAuth }) => shouldSetupAuth, }, ]); @@ -59,9 +60,10 @@ export async function command(): Promise { process.exit(1); } + const { useEnvForSecrets } = answers; + switch (answers.provider) { - case 'github': { - const { useEnvForSecrets } = answers; + case 'GitHub OAuth': { const config = await github(useEnvForSecrets); await updateConfigFile(config); if (useEnvForSecrets) { @@ -69,6 +71,24 @@ export async function command(): Promise { } break; } + case 'GitHub App': { + const config = await ghAuth(); + // TODO(tudi2d): Also change integrations + if (useEnvForSecrets) { + await updateEnvFile({ + auth: config.auth, + }); + config.auth.providers.github.clientId = '${AUTH_GITHUB_CLIENT_ID}'; + config.auth.providers.github.clientSecret = + '${AUTH_GITHUB_CLIENT_SECRET}'; + await updateConfigFile({ + auth: config.auth, + }); + } else { + await updateConfigFile({ auth: config.auth }); + } + break; + } default: throw new Error(`Provider ${answers.provider} not implemented yet.`); } diff --git a/packages/cli/src/commands/admin/gh-auth.ts b/packages/cli/src/commands/admin/gh-auth.ts index da3036d087..ee5bbfb2c6 100644 --- a/packages/cli/src/commands/admin/gh-auth.ts +++ b/packages/cli/src/commands/admin/gh-auth.ts @@ -15,10 +15,11 @@ */ import chalk from 'chalk'; import inquirer from 'inquirer'; -import createGithubApp from '../create-github-app'; +import { adminCli } from '../create-github-app'; +// TODO(tudi2d): Wrapper for admin CLI around `create-github-app` - potentially to be removed export default async () => { - // TODO: Make the GitHub Org optional + // TODO(tudi2d): Make the GitHub Org optional const input = await inquirer.prompt<{ org: string }>([ { type: 'input', @@ -26,5 +27,5 @@ export default async () => { message: chalk.blue('Enter a GitHub Org [required]'), }, ]); - await createGithubApp(input.org); + return await adminCli(input.org); }; diff --git a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts index ca5eb2c02a..cb2613c691 100644 --- a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts +++ b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts @@ -33,7 +33,7 @@ const FORM_PAGE = ` `; -type GithubAppConfig = { +export type GithubAppConfig = { appId: number; slug?: string; name?: string; diff --git a/packages/cli/src/commands/create-github-app/index.ts b/packages/cli/src/commands/create-github-app/index.ts index e04e39fdf6..16cb921ce4 100644 --- a/packages/cli/src/commands/create-github-app/index.ts +++ b/packages/cli/src/commands/create-github-app/index.ts @@ -14,62 +14,26 @@ * limitations under the License. */ -import fs from 'fs-extra'; import chalk from 'chalk'; -import { stringify as stringifyYaml } from 'yaml'; -import inquirer, { Question, Answers } from 'inquirer'; -import { paths } from '../../lib/paths'; -import { GithubCreateAppServer } from './GithubCreateAppServer'; +import fs from 'fs-extra'; +import inquirer, { Question } from 'inquirer'; import fetch from 'node-fetch'; import openBrowser from 'react-dev-utils/openBrowser'; +import { stringify as stringifyYaml } from 'yaml'; +import { GithubAppConfig } from '@backstage/integration'; + +import { paths } from '../../lib/paths'; +import { GithubCreateAppServer } from './GithubCreateAppServer'; + // This is an experimental command that at this point does not support GitHub Enterprise // due to lacking support for creating apps from manifests. // https://docs.github.com/en/free-pro-team@latest/developers/apps/creating-a-github-app-from-a-manifest export default async (org: string) => { - // Why is the Org check not done here? - const answers: Answers = await inquirer.prompt({ - name: 'appType', - type: 'checkbox', - message: - 'Select permissions [required] (these can be changed later but then require approvals in all installations)', - choices: [ - { - name: 'Read access to content (required by Software Catalog to ingest data from repositories)', - value: 'read', - checked: true, - }, - { - name: 'Read access to members (required by Software Catalog to ingest GitHub teams)', - value: 'members', - checked: true, - }, - { - name: 'Read and Write to content and actions (required by Software Templates to create new repositories)', - value: 'write', - }, - ], - }); - - if (answers.appType.length === 0) { - console.log(chalk.red('You must select at least one permission')); - process.exit(1); - } - + // TODO(tudi2d): Why is the Org check not done here? + const answers = await permissionAnswers(); await verifyGithubOrg(org); - const { slug, name, ...config } = await GithubCreateAppServer.run({ - org, - permissions: answers.appType, - }); + const { fileName } = await createGHAYaml(org, answers.appType); - const fileName = `github-app-${slug}-credentials.yaml`; - const content = `# Name: ${name}\n${stringifyYaml(config)}`; - await fs.writeFile(paths.resolveTargetRoot(fileName), content); - console.log(`GitHub App configuration written to ${chalk.cyan(fileName)}`); - console.log( - chalk.yellow( - 'This file contains sensitive credentials, it should not be committed to version control and handled with care!', - ), - ); console.log( "Here's an example on how to update the integrations section in app-config.yaml", ); @@ -83,6 +47,42 @@ integrations: ); }; +/** + * + * @param org string: GitHub Organisation + * @returns Promise: Partial App Config for Admin CLI + */ +export async function adminCli(org: string) { + await verifyGithubOrg(org); + const answers = await permissionAnswers({ + read: true, + members: true, + write: true, + }); + const { fileName, config } = await createGHAYaml(org, answers.appType); + const auth = { + providers: { + github: { + clientId: config.clientId, + clientSecret: config.clientSecret, + }, + }, + }; + const integration = { + github: { + host: 'github.com', + apps: { + $include: `${fileName}`, + }, + }, + }; + + return { + auth, + integration, + }; +} + async function verifyGithubOrg(org: string): Promise { let response; @@ -121,6 +121,7 @@ async function verifyGithubOrg(org: string): Promise { openBrowser('https://github.com/account/organizations/new'); + // TODO(tudi2d): Could we maybe re-run the command rather than exit? console.log( chalk.yellow( 'Please re-run this command when you have created your new organization', @@ -130,3 +131,68 @@ async function verifyGithubOrg(org: string): Promise { process.exit(0); } } + +async function permissionAnswers( + checked: { read: boolean; members: boolean; write: boolean } = { + read: true, + members: true, + write: false, + }, +) { + const answers = await inquirer.prompt<{ appType: string[] }>({ + name: 'appType', + type: 'checkbox', + message: + 'Select permissions [required] (these can be changed later but then require approvals in all installations)', + choices: [ + { + name: 'Read access to content (required by Software Catalog to ingest data from repositories)', + value: 'read', + checked: checked.read, + }, + { + name: 'Read access to members (required by Software Catalog to ingest GitHub teams)', + value: 'members', + checked: checked.members, + }, + { + name: 'Read and Write to content and actions (required by Software Templates to create new repositories)', + value: 'write', + checked: checked.write, + }, + ], + }); + + if (answers.appType.length === 0) { + console.log(chalk.red('You must select at least one permission')); + // TODO(tudi2d): Maybe re-do input rather than exit? + process.exit(1); + } + + return answers; +} + +async function createGHAYaml( + org: string, + permissions: string[], +): Promise<{ fileName: string; config: GithubAppConfig }> { + const { slug, name, ...config } = await GithubCreateAppServer.run({ + org, + permissions, + }); + + const fileName = `github-app-${slug}-credentials.yaml`; + const content = `# Name: ${name}\n${stringifyYaml(config)}`; + await fs.writeFile(paths.resolveTargetRoot(fileName), content); + console.log(`GitHub App configuration written to ${chalk.cyan(fileName)}`); + console.log( + chalk.yellow( + 'This file contains sensitive credentials, it should not be committed to version control and handled with care!', + ), + ); + + return { + fileName, + config, + }; +} From d844a31fc414bf0b8ff06aa5da9fbfeab3f66cd4 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Fri, 10 Feb 2023 14:08:43 +0100 Subject: [PATCH 107/511] cli: Add validation for github credentials Signed-off-by: Marcus Eide --- packages/cli/package.json | 1 + packages/cli/src/commands/admin/command.ts | 5 +- packages/cli/src/commands/admin/github.ts | 83 +++++++++++++++------- yarn.lock | 40 +++-------- 4 files changed, 66 insertions(+), 63 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 8c76c7888b..8a0848a243 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -39,6 +39,7 @@ "@backstage/types": "workspace:^", "@esbuild-kit/cjs-loader": "^2.4.1", "@manypkg/get-packages": "^1.1.3", + "@octokit/oauth-app": "^4.2.0", "@octokit/request": "^6.0.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@rollup/plugin-commonjs": "^23.0.0", diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts index d7ea348571..eb0ba0b512 100644 --- a/packages/cli/src/commands/admin/command.ts +++ b/packages/cli/src/commands/admin/command.ts @@ -30,9 +30,7 @@ export async function command(): Promise { { type: 'confirm', name: 'shouldSetupAuth', - message: chalk.blue( - 'Do you want to set up Authentication for this project?', - ), + message: 'Do you want to set up Authentication for this project?', }, { type: 'confirm', @@ -51,7 +49,6 @@ export async function command(): Promise { ]); if (!answers.shouldSetupAuth) { - // TODO(eide): Can we add a Task.warning() method? console.log( chalk.yellow( 'If you change your mind, feel free to re-run this command.', diff --git a/packages/cli/src/commands/admin/github.ts b/packages/cli/src/commands/admin/github.ts index 5b359ecb33..0cb900c85d 100644 --- a/packages/cli/src/commands/admin/github.ts +++ b/packages/cli/src/commands/admin/github.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../lib/tasks'; @@ -22,14 +23,41 @@ export type GithubAuthConfig = { auth: { providers: { github: { - clientId: string; - clientSecret: string; - enterpriseInstanceUrl?: string; + development: { + clientId: string; + clientSecret: string; + enterpriseInstanceUrl?: string; + }; }; }; }; }; +const validateCredentials = async (clientId: string, clientSecret: string) => { + try { + const app = new OAuthApp({ + clientId, + clientSecret, + }); + await app.createToken({ + code: '%NOT-VALID-CODE%', + }); + } catch (error) { + // @octokit/request returns a error.response object when a request is rejected. + // We can check it to see what kind of error we received. + + // If error.response is successful we can double-check that the error itself was due to the bad code. + // If that's the case then we can assume that the client id and secret exists as we otherwise would + // have gotten a 400/404. + if ( + error.response.status !== 200 && + error.response.data.error !== 'bad_verification_code' + ) { + throw new Error(`Validating Github Credentials failed.`); + } + } +}; + export const github = async ( useEnvForSecrets?: boolean, ): Promise => { @@ -39,6 +67,11 @@ export const github = async ( )} The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. + Settings for local development: + ${chalk.cyan(` + Homepage URL: http://localhost:3000 + Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame`)} + You can find the full documentation page here: ${chalk.blue( 'https://backstage.io/docs/auth/github/provider', )} @@ -52,21 +85,15 @@ export const github = async ( }>([ { type: 'input', - name: 'clientSecret', - message: 'What is your Client Secret?', - // TODO(eide): Is there another way to validate? - // validate(input) { - // if (/([a-f0-9]{40})/g.test(input)) { - // return true; - // } - - // throw Error('Please provide a valid client secret.'); - // }, + name: 'clientId', + message: 'What is your Client Id?', + validate: (input: string) => (input.length ? true : false), }, { type: 'input', - name: 'clientId', - message: 'What is your Client Id?', + name: 'clientSecret', + message: 'What is your Client Secret?', + validate: (input: string) => (input.length ? true : false), }, { type: 'confirm', @@ -78,25 +105,27 @@ export const github = async ( name: 'enterpriseInstanceUrl', message: 'What is your URL for Github Enterprise?', when: ({ hasGithubEnterprise }) => hasGithubEnterprise, - validate(input: string) { - return Boolean(new URL(input)); - }, + validate: (input: string) => Boolean(new URL(input)), }, ]); + await validateCredentials(answers.clientId, answers.clientSecret); + return { auth: { providers: { github: { - clientId: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_ID}' - : answers.clientId, - clientSecret: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_SECRET}' - : answers.clientSecret, - ...(answers.hasGithubEnterprise && { - enterpriseInstanceUrl: answers.enterpriseInstanceUrl, - }), + development: { + clientId: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_ID}' + : answers.clientId, + clientSecret: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_SECRET}' + : answers.clientSecret, + ...(answers.hasGithubEnterprise && { + enterpriseInstanceUrl: answers.enterpriseInstanceUrl, + }), + }, }, }, }, diff --git a/yarn.lock b/yarn.lock index cd69bd547b..f867cadce5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3678,6 +3678,7 @@ __metadata: "@backstage/types": "workspace:^" "@esbuild-kit/cjs-loader": ^2.4.1 "@manypkg/get-packages": ^1.1.3 + "@octokit/oauth-app": ^4.2.0 "@octokit/request": ^6.0.0 "@pmmmwh/react-refresh-webpack-plugin": ^0.5.7 "@rollup/plugin-commonjs": ^23.0.0 @@ -12534,9 +12535,9 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6": - version: 4.0.6 - resolution: "@octokit/oauth-app@npm:4.0.6" +"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.2.0": + version: 4.2.0 + resolution: "@octokit/oauth-app@npm:4.2.0" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -12545,13 +12546,9 @@ __metadata: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/oauth-methods": ^2.0.0 "@types/aws-lambda": ^8.10.83 - aws-lambda: ^1.0.7 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - dependenciesMeta: - aws-lambda: - optional: true - checksum: 0d7ceadda4668748a436f52f6c4ae3160a4a5c81a92592c0a6cfc75b0a065ed480880d8861efcabc6ca41b3ccf753d1c1044782a6c8d5fb481d6e8a0acf6d32e + checksum: 6cf5638d27e589daa577653177f2b135c0c346c8f74cc420d9fd0dc0f559a84040073eee147bd555a55bb5756bd0940e6dc4c3a6b3a508a818e3d5bee3837095 languageName: node linkType: hard @@ -17536,20 +17533,6 @@ __metadata: languageName: node linkType: hard -"aws-lambda@npm:^1.0.7": - version: 1.0.7 - resolution: "aws-lambda@npm:1.0.7" - dependencies: - aws-sdk: ^2.814.0 - commander: ^3.0.2 - js-yaml: ^3.14.1 - watchpack: ^2.0.0-beta.10 - bin: - lambda: bin/lambda - checksum: 11316e87b5c4fc36e6bd0495742a3c0ed13befc9527a7b251a58180d141d9afd68b684f37aeb3b53d117d3c2f96747eace31826b683543f1edddc03f392865fd - languageName: node - linkType: hard - "aws-os-connection@npm:^0.2.0": version: 0.2.0 resolution: "aws-os-connection@npm:0.2.0" @@ -17596,7 +17579,7 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:^2.1231.0, aws-sdk@npm:^2.814.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": +"aws-sdk@npm:^2.1231.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": version: 2.1279.0 resolution: "aws-sdk@npm:2.1279.0" dependencies: @@ -19475,13 +19458,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^3.0.2": - version: 3.0.2 - resolution: "commander@npm:3.0.2" - checksum: 6d14ad030d1904428139487ed31febcb04c1604db2b8d9fae711f60ee6718828dc0e11602249e91c8a97b0e721e9c6d53edbc166bad3cde1596851d59a8f824d - languageName: node - linkType: hard - "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -27320,7 +27296,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -38736,7 +38712,7 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.0.0-beta.10, watchpack@npm:^2.4.0": +"watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" dependencies: From 184602db0af82e8b0481502cde16b77e5fcd7222 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Fri, 10 Feb 2023 14:09:47 +0100 Subject: [PATCH 108/511] cli: Handle appending config when setting up github auth Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/file.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/commands/admin/file.ts b/packages/cli/src/commands/admin/file.ts index 52a55c3776..6135c53ebf 100644 --- a/packages/cli/src/commands/admin/file.ts +++ b/packages/cli/src/commands/admin/file.ts @@ -22,17 +22,21 @@ import { GithubAuthConfig } from './github'; /* eslint-disable-next-line no-restricted-syntax */ const { targetRoot } = findPaths(__dirname); -const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.development.yaml'); +const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); const ENV_CONFIG_FILE = path.join(targetRoot, '.env.development'); -// export const readAppConfig = async (file: string) => { -// return yaml.parse(await fs.readFile(file, 'utf8')); -// }; +const readConfigFile = async (file: string) => { + return yaml.parse(await fs.readFile(file, 'utf8')); +}; export const updateConfigFile = async (config: GithubAuthConfig) => { + const content = fs.existsSync(APP_CONFIG_FILE) + ? { ...(await readConfigFile(APP_CONFIG_FILE)), ...config } + : config; + return await fs.writeFile( APP_CONFIG_FILE, - yaml.stringify(config, { + yaml.stringify(content, { indent: 2, }), 'utf8', @@ -41,8 +45,12 @@ export const updateConfigFile = async (config: GithubAuthConfig) => { export const updateEnvFile = async (config: GithubAuthConfig) => { const content = ` -AUTH_GITHUB_CLIENT_ID=${config.auth.providers.github.clientId} -AUTH_GITHUB_CLIENT_SECRET=${config.auth.providers.github.clientId}`; +AUTH_GITHUB_CLIENT_ID=${config.auth.providers.github.development.clientId} +AUTH_GITHUB_CLIENT_SECRET=${config.auth.providers.github.development.clientId}`; + + if (fs.existsSync(ENV_CONFIG_FILE)) { + await fs.appendFile(ENV_CONFIG_FILE, content, 'utf8'); + } return await fs.writeFile(ENV_CONFIG_FILE, content, 'utf8'); }; From d9893cb7942bd728a4f7cf56743e09757ef3f478 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Fri, 10 Feb 2023 14:10:42 +0100 Subject: [PATCH 109/511] cli: Fix github auth not including environment key Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/command.ts | 5 +++-- packages/cli/src/commands/create-github-app/index.ts | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts index eb0ba0b512..33dd7bd20f 100644 --- a/packages/cli/src/commands/admin/command.ts +++ b/packages/cli/src/commands/admin/command.ts @@ -75,8 +75,9 @@ export async function command(): Promise { await updateEnvFile({ auth: config.auth, }); - config.auth.providers.github.clientId = '${AUTH_GITHUB_CLIENT_ID}'; - config.auth.providers.github.clientSecret = + config.auth.providers.github.development.clientId = + '${AUTH_GITHUB_CLIENT_ID}'; + config.auth.providers.github.development.clientSecret = '${AUTH_GITHUB_CLIENT_SECRET}'; await updateConfigFile({ auth: config.auth, diff --git a/packages/cli/src/commands/create-github-app/index.ts b/packages/cli/src/commands/create-github-app/index.ts index 16cb921ce4..606e982bd4 100644 --- a/packages/cli/src/commands/create-github-app/index.ts +++ b/packages/cli/src/commands/create-github-app/index.ts @@ -63,8 +63,10 @@ export async function adminCli(org: string) { const auth = { providers: { github: { - clientId: config.clientId, - clientSecret: config.clientSecret, + development: { + clientId: config.clientId, + clientSecret: config.clientSecret, + }, }, }, }; From ba46a192328b7c488c99e9c9d425407f4e32ecc5 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Mon, 13 Feb 2023 13:02:10 +0100 Subject: [PATCH 110/511] cli: Move to folder and split up into different questions Signed-off-by: Marcus Eide --- .../cli/src/commands/admin/{ => auth}/file.ts | 15 ++++- .../admin/{gh-auth.ts => auth/github/app.ts} | 4 +- .../src/commands/admin/auth/github/index.ts | 64 +++++++++++++++++++ .../admin/{github.ts => auth/github/oauth.ts} | 23 +------ packages/cli/src/commands/admin/auth/index.ts | 45 +++++++++++++ packages/cli/src/commands/admin/command.ts | 56 +--------------- 6 files changed, 130 insertions(+), 77 deletions(-) rename packages/cli/src/commands/admin/{ => auth}/file.ts (88%) rename packages/cli/src/commands/admin/{gh-auth.ts => auth/github/app.ts} (92%) create mode 100644 packages/cli/src/commands/admin/auth/github/index.ts rename packages/cli/src/commands/admin/{github.ts => auth/github/oauth.ts} (90%) create mode 100644 packages/cli/src/commands/admin/auth/index.ts diff --git a/packages/cli/src/commands/admin/file.ts b/packages/cli/src/commands/admin/auth/file.ts similarity index 88% rename from packages/cli/src/commands/admin/file.ts rename to packages/cli/src/commands/admin/auth/file.ts index 6135c53ebf..14a8a151f8 100644 --- a/packages/cli/src/commands/admin/file.ts +++ b/packages/cli/src/commands/admin/auth/file.ts @@ -18,7 +18,20 @@ import * as path from 'path'; import * as fs from 'fs-extra'; import yaml from 'yaml'; import { findPaths } from '@backstage/cli-common'; -import { GithubAuthConfig } from './github'; + +export type GithubAuthConfig = { + auth: { + providers: { + github: { + development: { + clientId: string; + clientSecret: string; + enterpriseInstanceUrl?: string; + }; + }; + }; + }; +}; /* eslint-disable-next-line no-restricted-syntax */ const { targetRoot } = findPaths(__dirname); diff --git a/packages/cli/src/commands/admin/gh-auth.ts b/packages/cli/src/commands/admin/auth/github/app.ts similarity index 92% rename from packages/cli/src/commands/admin/gh-auth.ts rename to packages/cli/src/commands/admin/auth/github/app.ts index ee5bbfb2c6..234f8d1e29 100644 --- a/packages/cli/src/commands/admin/gh-auth.ts +++ b/packages/cli/src/commands/admin/auth/github/app.ts @@ -15,10 +15,10 @@ */ import chalk from 'chalk'; import inquirer from 'inquirer'; -import { adminCli } from '../create-github-app'; +import { adminCli } from '../../../create-github-app'; // TODO(tudi2d): Wrapper for admin CLI around `create-github-app` - potentially to be removed -export default async () => { +export const app = async () => { // TODO(tudi2d): Make the GitHub Org optional const input = await inquirer.prompt<{ org: string }>([ { diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts new file mode 100644 index 0000000000..8ea7e63bc9 --- /dev/null +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2023 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 inquirer from 'inquirer'; +import { GithubAuthConfig, updateConfigFile, updateEnvFile } from '../file'; +import { app } from './app'; +import { oauth } from './oauth'; + +export const github = async () => { + const answers = await inquirer.prompt<{ + useEnvForSecrets: boolean; + type: string; + }>([ + { + type: 'confirm', + name: 'useEnvForSecrets', + message: + 'Would you like to store sensitive configuration details such as secrets as environment variables? (recommended)', + }, + { + type: 'list', + name: 'type', + message: 'Do you want to use a Github App or a Github OAuth?', + choices: ['GitHub OAuth', 'GitHub App'], + }, + ]); + + const { type, useEnvForSecrets } = answers; + + switch (type) { + case 'GitHub OAuth': { + const config: GithubAuthConfig = await oauth(useEnvForSecrets); + await updateConfigFile(config); + if (useEnvForSecrets) { + await updateEnvFile(config); + } + break; + } + case 'GitHub App': { + const { auth }: GithubAuthConfig = await app(); + // TODO(tudi2d): Also change integrations + await updateConfigFile({ auth }); + if (useEnvForSecrets) { + await updateEnvFile({ auth }); + } + break; + } + default: + throw new Error(`Unknown selection: ${type}.`); + } +}; diff --git a/packages/cli/src/commands/admin/github.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts similarity index 90% rename from packages/cli/src/commands/admin/github.ts rename to packages/cli/src/commands/admin/auth/github/oauth.ts index 0cb900c85d..4daccdfd8c 100644 --- a/packages/cli/src/commands/admin/github.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -17,21 +17,7 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; -import { Task } from '../../lib/tasks'; - -export type GithubAuthConfig = { - auth: { - providers: { - github: { - development: { - clientId: string; - clientSecret: string; - enterpriseInstanceUrl?: string; - }; - }; - }; - }; -}; +import { Task } from '../../../../lib/tasks'; const validateCredentials = async (clientId: string, clientSecret: string) => { try { @@ -58,9 +44,7 @@ const validateCredentials = async (clientId: string, clientSecret: string) => { } }; -export const github = async ( - useEnvForSecrets?: boolean, -): Promise => { +export const oauth = async (useEnvForSecrets?: boolean) => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( 'https://github.com/settings/developers', @@ -74,8 +58,7 @@ export const github = async ( You can find the full documentation page here: ${chalk.blue( 'https://backstage.io/docs/auth/github/provider', - )} - `); + )}`); const answers = await inquirer.prompt<{ clientSecret: string; diff --git a/packages/cli/src/commands/admin/auth/index.ts b/packages/cli/src/commands/admin/auth/index.ts new file mode 100644 index 0000000000..9af145dcf3 --- /dev/null +++ b/packages/cli/src/commands/admin/auth/index.ts @@ -0,0 +1,45 @@ +/* + * Copyright 2023 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 inquirer from 'inquirer'; +import { Task } from '../../../lib/tasks'; +import { github } from './github'; + +export async function auth(): Promise { + const answers = await inquirer.prompt<{ + provider?: string; + }>([ + { + type: 'list', + name: 'provider', + message: 'Please select a provider:', + choices: ['Github'], + }, + ]); + + const { provider } = answers; + + switch (provider) { + case 'Github': { + await github(); + break; + } + default: + throw new Error(`Provider ${provider} not implemented yet.`); + } + + Task.log(`Done setting up ${provider}!`); +} diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/admin/command.ts index 33dd7bd20f..4c49631a80 100644 --- a/packages/cli/src/commands/admin/command.ts +++ b/packages/cli/src/commands/admin/command.ts @@ -16,15 +16,11 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; -import { Task } from '../../lib/tasks'; -import { github } from './github'; -import { updateConfigFile, updateEnvFile } from './file'; -import ghAuth from './gh-auth'; +import { auth } from './auth'; export async function command(): Promise { const answers = await inquirer.prompt<{ shouldSetupAuth: boolean; - useEnvForSecrets?: boolean; provider?: string; }>([ { @@ -32,20 +28,6 @@ export async function command(): Promise { name: 'shouldSetupAuth', message: 'Do you want to set up Authentication for this project?', }, - { - type: 'confirm', - name: 'useEnvForSecrets', - message: - 'Would you like to store sensitive configuration details such as secrets as environment variables? (recommended)', - when: ({ shouldSetupAuth }) => shouldSetupAuth, - }, - { - type: 'list', - name: 'provider', - message: 'Please select a provider:', - choices: ['GitHub OAuth', 'GitHub App'], - when: ({ shouldSetupAuth }) => shouldSetupAuth, - }, ]); if (!answers.shouldSetupAuth) { @@ -57,39 +39,5 @@ export async function command(): Promise { process.exit(1); } - const { useEnvForSecrets } = answers; - - switch (answers.provider) { - case 'GitHub OAuth': { - const config = await github(useEnvForSecrets); - await updateConfigFile(config); - if (useEnvForSecrets) { - await updateEnvFile(config); - } - break; - } - case 'GitHub App': { - const config = await ghAuth(); - // TODO(tudi2d): Also change integrations - if (useEnvForSecrets) { - await updateEnvFile({ - auth: config.auth, - }); - config.auth.providers.github.development.clientId = - '${AUTH_GITHUB_CLIENT_ID}'; - config.auth.providers.github.development.clientSecret = - '${AUTH_GITHUB_CLIENT_SECRET}'; - await updateConfigFile({ - auth: config.auth, - }); - } else { - await updateConfigFile({ auth: config.auth }); - } - break; - } - default: - throw new Error(`Provider ${answers.provider} not implemented yet.`); - } - - Task.log(`Done setting up ${answers.provider}!`); + await auth(); } From e3e0b14ec45125f7689a56e687fe48dfe1c3b3e4 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Mon, 13 Feb 2023 13:40:21 +0100 Subject: [PATCH 111/511] cli: Move file logic to each type of github auth to simplify logic Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/auth/file.ts | 10 +++--- .../cli/src/commands/admin/auth/github/app.ts | 14 ++++++-- .../src/commands/admin/auth/github/index.ts | 13 ++----- .../src/commands/admin/auth/github/oauth.ts | 36 ++++++++++--------- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/packages/cli/src/commands/admin/auth/file.ts b/packages/cli/src/commands/admin/auth/file.ts index 14a8a151f8..baafacc8c6 100644 --- a/packages/cli/src/commands/admin/auth/file.ts +++ b/packages/cli/src/commands/admin/auth/file.ts @@ -19,7 +19,7 @@ import * as fs from 'fs-extra'; import yaml from 'yaml'; import { findPaths } from '@backstage/cli-common'; -export type GithubAuthConfig = { +type GithubAuthConfig = { auth: { providers: { github: { @@ -36,7 +36,7 @@ export type GithubAuthConfig = { /* eslint-disable-next-line no-restricted-syntax */ const { targetRoot } = findPaths(__dirname); const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -const ENV_CONFIG_FILE = path.join(targetRoot, '.env.development'); +const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); const readConfigFile = async (file: string) => { return yaml.parse(await fs.readFile(file, 'utf8')); @@ -56,10 +56,10 @@ export const updateConfigFile = async (config: GithubAuthConfig) => { ); }; -export const updateEnvFile = async (config: GithubAuthConfig) => { +export const updateEnvFile = async (clientId: string, clientSecret: string) => { const content = ` -AUTH_GITHUB_CLIENT_ID=${config.auth.providers.github.development.clientId} -AUTH_GITHUB_CLIENT_SECRET=${config.auth.providers.github.development.clientId}`; +AUTH_GITHUB_CLIENT_ID=${clientId} +AUTH_GITHUB_CLIENT_SECRET=${clientSecret}`; if (fs.existsSync(ENV_CONFIG_FILE)) { await fs.appendFile(ENV_CONFIG_FILE, content, 'utf8'); diff --git a/packages/cli/src/commands/admin/auth/github/app.ts b/packages/cli/src/commands/admin/auth/github/app.ts index 234f8d1e29..8ab067989f 100644 --- a/packages/cli/src/commands/admin/auth/github/app.ts +++ b/packages/cli/src/commands/admin/auth/github/app.ts @@ -16,9 +16,10 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; import { adminCli } from '../../../create-github-app'; +import { updateConfigFile, updateEnvFile } from '../file'; // TODO(tudi2d): Wrapper for admin CLI around `create-github-app` - potentially to be removed -export const app = async () => { +export const app = async (useEnvForSecrets: boolean) => { // TODO(tudi2d): Make the GitHub Org optional const input = await inquirer.prompt<{ org: string }>([ { @@ -27,5 +28,14 @@ export const app = async () => { message: chalk.blue('Enter a GitHub Org [required]'), }, ]); - return await adminCli(input.org); + + const { auth } = await adminCli(input.org); + + await updateConfigFile({ auth }); + if (useEnvForSecrets) { + await updateEnvFile( + auth.providers.github.development.clientId, + auth.providers.github.development.clientSecret, + ); + } }; diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts index 8ea7e63bc9..f8348d554d 100644 --- a/packages/cli/src/commands/admin/auth/github/index.ts +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -15,7 +15,6 @@ */ import inquirer from 'inquirer'; -import { GithubAuthConfig, updateConfigFile, updateEnvFile } from '../file'; import { app } from './app'; import { oauth } from './oauth'; @@ -42,20 +41,12 @@ export const github = async () => { switch (type) { case 'GitHub OAuth': { - const config: GithubAuthConfig = await oauth(useEnvForSecrets); - await updateConfigFile(config); - if (useEnvForSecrets) { - await updateEnvFile(config); - } + await oauth(useEnvForSecrets); break; } case 'GitHub App': { - const { auth }: GithubAuthConfig = await app(); // TODO(tudi2d): Also change integrations - await updateConfigFile({ auth }); - if (useEnvForSecrets) { - await updateEnvFile({ auth }); - } + await app(useEnvForSecrets); break; } default: diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index 4daccdfd8c..159592bc2c 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -18,6 +18,7 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; +import { updateConfigFile, updateEnvFile } from '../file'; const validateCredentials = async (clientId: string, clientSecret: string) => { try { @@ -44,7 +45,7 @@ const validateCredentials = async (clientId: string, clientSecret: string) => { } }; -export const oauth = async (useEnvForSecrets?: boolean) => { +export const oauth = async (useEnvForSecrets: boolean) => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( 'https://github.com/settings/developers', @@ -94,23 +95,26 @@ export const oauth = async (useEnvForSecrets?: boolean) => { await validateCredentials(answers.clientId, answers.clientSecret); - return { - auth: { - providers: { - github: { - development: { - clientId: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_ID}' - : answers.clientId, - clientSecret: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_SECRET}' - : answers.clientSecret, - ...(answers.hasGithubEnterprise && { - enterpriseInstanceUrl: answers.enterpriseInstanceUrl, - }), - }, + const auth = { + providers: { + github: { + development: { + clientId: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_ID}' + : answers.clientId, + clientSecret: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_SECRET}' + : answers.clientSecret, + ...(answers.hasGithubEnterprise && { + enterpriseInstanceUrl: answers.enterpriseInstanceUrl, + }), }, }, }, }; + + await updateConfigFile({ auth }); + if (useEnvForSecrets) { + await updateEnvFile(answers.clientId, answers.clientSecret); + } }; From 67c693c6b2b38f7131ae1a4f942f94d89bae8f4c Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 16 Feb 2023 13:50:56 +0100 Subject: [PATCH 112/511] cli: Add ability to patch existing files Signed-off-by: Marcus Eide --- .../admin/auth/{file.ts => config.ts} | 32 ++++---- packages/cli/src/commands/admin/auth/files.ts | 34 +++++++++ .../cli/src/commands/admin/auth/github/app.ts | 11 ++- .../src/commands/admin/auth/github/diffs.ts | 76 +++++++++++++++++++ .../src/commands/admin/auth/github/index.ts | 3 +- .../src/commands/admin/auth/github/oauth.ts | 38 ++++++---- packages/cli/src/commands/admin/auth/patch.ts | 25 ++++++ 7 files changed, 184 insertions(+), 35 deletions(-) rename packages/cli/src/commands/admin/auth/{file.ts => config.ts} (59%) create mode 100644 packages/cli/src/commands/admin/auth/files.ts create mode 100644 packages/cli/src/commands/admin/auth/github/diffs.ts create mode 100644 packages/cli/src/commands/admin/auth/patch.ts diff --git a/packages/cli/src/commands/admin/auth/file.ts b/packages/cli/src/commands/admin/auth/config.ts similarity index 59% rename from packages/cli/src/commands/admin/auth/file.ts rename to packages/cli/src/commands/admin/auth/config.ts index baafacc8c6..d358e8e89d 100644 --- a/packages/cli/src/commands/admin/auth/file.ts +++ b/packages/cli/src/commands/admin/auth/config.ts @@ -14,10 +14,8 @@ * limitations under the License. */ -import * as path from 'path'; import * as fs from 'fs-extra'; import yaml from 'yaml'; -import { findPaths } from '@backstage/cli-common'; type GithubAuthConfig = { auth: { @@ -33,22 +31,20 @@ type GithubAuthConfig = { }; }; -/* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot } = findPaths(__dirname); -const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); - -const readConfigFile = async (file: string) => { +const readYaml = async (file: string) => { return yaml.parse(await fs.readFile(file, 'utf8')); }; -export const updateConfigFile = async (config: GithubAuthConfig) => { - const content = fs.existsSync(APP_CONFIG_FILE) - ? { ...(await readConfigFile(APP_CONFIG_FILE)), ...config } +export const updateConfigFile = async ( + file: string, + config: GithubAuthConfig, +) => { + const content = fs.existsSync(file) + ? { ...(await readYaml(file)), ...config } : config; return await fs.writeFile( - APP_CONFIG_FILE, + file, yaml.stringify(content, { indent: 2, }), @@ -56,14 +52,18 @@ export const updateConfigFile = async (config: GithubAuthConfig) => { ); }; -export const updateEnvFile = async (clientId: string, clientSecret: string) => { +export const updateEnvFile = async ( + file: string, + clientId: string, + clientSecret: string, +) => { const content = ` AUTH_GITHUB_CLIENT_ID=${clientId} AUTH_GITHUB_CLIENT_SECRET=${clientSecret}`; - if (fs.existsSync(ENV_CONFIG_FILE)) { - await fs.appendFile(ENV_CONFIG_FILE, content, 'utf8'); + if (fs.existsSync(file)) { + return await fs.appendFile(file, content, 'utf8'); } - return await fs.writeFile(ENV_CONFIG_FILE, content, 'utf8'); + return await fs.writeFile(file, content, 'utf8'); }; diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/admin/auth/files.ts new file mode 100644 index 0000000000..479cda0472 --- /dev/null +++ b/packages/cli/src/commands/admin/auth/files.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2023 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 { findPaths } from '@backstage/cli-common'; +import * as path from 'path'; + +/* eslint-disable-next-line no-restricted-syntax */ +const { targetRoot, resolveTargetRoot } = findPaths(__dirname); +export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); +export const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); +export const APP_TSX_FILE = path.join( + resolveTargetRoot('packages/app'), + 'src', + 'App.tsx', +); +export const AUTH_BACKEND_PLUGIN_FILE = path.join( + resolveTargetRoot('packages/backend'), + 'src', + 'plugins', + 'auth.ts', +); diff --git a/packages/cli/src/commands/admin/auth/github/app.ts b/packages/cli/src/commands/admin/auth/github/app.ts index 8ab067989f..d78fe2a3d2 100644 --- a/packages/cli/src/commands/admin/auth/github/app.ts +++ b/packages/cli/src/commands/admin/auth/github/app.ts @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import chalk from 'chalk'; + import inquirer from 'inquirer'; import { adminCli } from '../../../create-github-app'; -import { updateConfigFile, updateEnvFile } from '../file'; +import { updateConfigFile, updateEnvFile } from '../config'; +import { APP_CONFIG_FILE, ENV_CONFIG_FILE } from '../files'; // TODO(tudi2d): Wrapper for admin CLI around `create-github-app` - potentially to be removed export const app = async (useEnvForSecrets: boolean) => { @@ -25,15 +26,17 @@ export const app = async (useEnvForSecrets: boolean) => { { type: 'input', name: 'org', - message: chalk.blue('Enter a GitHub Org [required]'), + message: 'Enter a GitHub Org [required]', }, ]); const { auth } = await adminCli(input.org); - await updateConfigFile({ auth }); + // TODO(tudi2d): Also change integrations + await updateConfigFile(APP_CONFIG_FILE, { auth }); if (useEnvForSecrets) { await updateEnvFile( + ENV_CONFIG_FILE, auth.providers.github.development.clientId, auth.providers.github.development.clientSecret, ); diff --git a/packages/cli/src/commands/admin/auth/github/diffs.ts b/packages/cli/src/commands/admin/auth/github/diffs.ts new file mode 100644 index 0000000000..43b6013d4e --- /dev/null +++ b/packages/cli/src/commands/admin/auth/github/diffs.ts @@ -0,0 +1,76 @@ +/* + * Copyright 2023 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. + */ + +export const addSignInPageDiff = + '@@ -32,11 +32,27 @@\n' + + " import { AppRouter, FlatRoutes } from '@backstage/core-app-api';\n" + + " import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';\n" + + " import { RequirePermission } from '@backstage/plugin-permission-react';\n" + + " import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\n" + + "+import { githubAuthApiRef } from '@backstage/core-plugin-api';\n" + + "+import { SignInPage } from '@backstage/core-components';\n" + + ' \n' + + ' const app = createApp({\n' + + ' apis,\n' + + '+ components: {\n' + + '+ SignInPage: props => (\n' + + '+ \n' + + '+ ),\n' + + '+ },\n' + + ' bindRoutes({ bind }) {\n' + + ' bind(catalogPlugin.externalRoutes, {\n' + + ' createComponent: scaffolderPlugin.routes.root,\n' + + ' viewTechDoc: techdocsPlugin.routes.docRoot,\n'; + +export const replaceSignInResolverDiff = + '@@ -36,18 +36,18 @@\n' + + ' //\n' + + ' // https://backstage.io/docs/auth/identity-resolver\n' + + ' github: providers.github.create({\n' + + ' signIn: {\n' + + '- resolver(_, ctx) {\n' + + "- const userRef = 'user:default/guest'; // Must be a full entity reference\n" + + '- return ctx.issueToken({\n' + + '- claims: {\n' + + "- sub: userRef, // The user's own identity\n" + + '- ent: [userRef], // A list of identities that the user claims ownership through\n' + + '- },\n' + + '- });\n' + + '- },\n' + + '- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(),\n' + + '+ // resolver(_, ctx) {\n' + + "+ // const userRef = 'user:default/guest'; // Must be a full entity reference\n" + + '+ // return ctx.issueToken({\n' + + '+ // claims: {\n' + + "+ // sub: userRef, // The user's own identity\n" + + '+ // ent: [userRef], // A list of identities that the user claims ownership through\n' + + '+ // },\n' + + '+ // });\n' + + '+ // },\n' + + '+ resolver: providers.github.resolvers.usernameMatchingUserEntityName(),\n' + + ' },\n' + + ' }),\n' + + ' },\n' + + ' });\n'; diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts index f8348d554d..d140b98dd3 100644 --- a/packages/cli/src/commands/admin/auth/github/index.ts +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -32,7 +32,7 @@ export const github = async () => { { type: 'list', name: 'type', - message: 'Do you want to use a Github App or a Github OAuth?', + message: 'Do you want to use a Github App or Github OAuth?', choices: ['GitHub OAuth', 'GitHub App'], }, ]); @@ -45,7 +45,6 @@ export const github = async () => { break; } case 'GitHub App': { - // TODO(tudi2d): Also change integrations await app(useEnvForSecrets); break; } diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index 159592bc2c..27dbe24f74 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -18,7 +18,15 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; -import { updateConfigFile, updateEnvFile } from '../file'; +import { updateConfigFile, updateEnvFile } from '../config'; +import { + APP_CONFIG_FILE, + APP_TSX_FILE, + AUTH_BACKEND_PLUGIN_FILE, + ENV_CONFIG_FILE, +} from '../files'; +import { patch } from '../patch'; +import { addSignInPageDiff, replaceSignInResolverDiff } from './diffs'; const validateCredentials = async (clientId: string, clientSecret: string) => { try { @@ -64,7 +72,7 @@ export const oauth = async (useEnvForSecrets: boolean) => { const answers = await inquirer.prompt<{ clientSecret: string; clientId: string; - hasGithubEnterprise: boolean; + hasEnterprise: boolean; enterpriseInstanceUrl?: string; }>([ { @@ -81,40 +89,44 @@ export const oauth = async (useEnvForSecrets: boolean) => { }, { type: 'confirm', - name: 'hasGithubEnterprise', + name: 'hasEnterprise', message: 'Are you using Github Enterprise?', }, { type: 'input', name: 'enterpriseInstanceUrl', message: 'What is your URL for Github Enterprise?', - when: ({ hasGithubEnterprise }) => hasGithubEnterprise, + when: ({ hasEnterprise }) => hasEnterprise, validate: (input: string) => Boolean(new URL(input)), }, ]); - await validateCredentials(answers.clientId, answers.clientSecret); + const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = + answers; + + await validateCredentials(clientId, clientSecret); const auth = { providers: { github: { development: { - clientId: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_ID}' - : answers.clientId, + clientId: useEnvForSecrets ? '${AUTH_GITHUB_CLIENT_ID}' : clientId, clientSecret: useEnvForSecrets ? '${AUTH_GITHUB_CLIENT_SECRET}' - : answers.clientSecret, - ...(answers.hasGithubEnterprise && { - enterpriseInstanceUrl: answers.enterpriseInstanceUrl, + : clientSecret, + ...(hasEnterprise && { + enterpriseInstanceUrl: enterpriseInstanceUrl, }), }, }, }, }; - await updateConfigFile({ auth }); + await updateConfigFile(APP_CONFIG_FILE, { auth }); if (useEnvForSecrets) { - await updateEnvFile(answers.clientId, answers.clientSecret); + await updateEnvFile(ENV_CONFIG_FILE, clientId, clientSecret); } + + await patch(APP_TSX_FILE, addSignInPageDiff); + await patch(AUTH_BACKEND_PLUGIN_FILE, replaceSignInResolverDiff); }; diff --git a/packages/cli/src/commands/admin/auth/patch.ts b/packages/cli/src/commands/admin/auth/patch.ts new file mode 100644 index 0000000000..2a4eccdb9e --- /dev/null +++ b/packages/cli/src/commands/admin/auth/patch.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 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 * as fs from 'fs-extra'; +import * as differ from 'diff'; + +export const patch = async (file: string, diff: string) => { + const oldContent = await fs.readFile(file, 'utf8'); + const newContent = differ.applyPatch(oldContent, diff); + + return await fs.writeFile(file, newContent, 'utf8'); +}; From 2f851a3945de3e5bb80ffe15e7ecd939d72d67e3 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 16 Feb 2023 14:05:16 +0100 Subject: [PATCH 113/511] cli: Add minimal instructions for how to try locally Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/cli/src/commands/admin/README.md diff --git a/packages/cli/src/commands/admin/README.md b/packages/cli/src/commands/admin/README.md new file mode 100644 index 0000000000..d2a6e10256 --- /dev/null +++ b/packages/cli/src/commands/admin/README.md @@ -0,0 +1,23 @@ +# admin tool + +## Local dev + +```bash +# Checkout the branch +cd backstage +git fetch +git checkout goa/cli-admin-command + +# Create a new app +cd .. +npx @backstage/create-app +cd new-backstage-app + +# Run the modded cli in the new app +../github/backstage/packages/cli/bin/backstage-cli admin +? Do you want to set up Authentication for this project? (Y/n) +... + +# Try the app with the new changes +yarn dev +``` From 5663de4a3737d51615ceb5d2b5a9802fe21355a0 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Thu, 16 Feb 2023 16:18:22 +0100 Subject: [PATCH 114/511] cli: Add user entity to local catalog in auth flow Signed-off-by: Marcus Eide --- .../cli/src/commands/admin/auth/config.ts | 31 +++++++ packages/cli/src/commands/admin/auth/files.ts | 2 + .../src/commands/admin/auth/github/oauth.ts | 86 +++++++++++++------ packages/cli/src/commands/admin/auth/index.ts | 2 + 4 files changed, 96 insertions(+), 25 deletions(-) diff --git a/packages/cli/src/commands/admin/auth/config.ts b/packages/cli/src/commands/admin/auth/config.ts index d358e8e89d..659c356360 100644 --- a/packages/cli/src/commands/admin/auth/config.ts +++ b/packages/cli/src/commands/admin/auth/config.ts @@ -29,6 +29,13 @@ type GithubAuthConfig = { }; }; }; + catalog?: { + locations: Array<{ + type: string; + target: string; + rules: Array<{ allow: Array }>; + }>; + }; }; const readYaml = async (file: string) => { @@ -67,3 +74,27 @@ AUTH_GITHUB_CLIENT_SECRET=${clientSecret}`; return await fs.writeFile(file, content, 'utf8'); }; + +export const addUserEntity = async (file: string, username: string) => { + const content = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'User', + metadata: { + name: username, + annotations: { + 'github.com/user-login': username, + }, + }, + spec: { + memberOf: [], + }, + }; + + return await fs.writeFile( + file, + yaml.stringify(content, { + indent: 2, + }), + 'utf8', + ); +}; diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/admin/auth/files.ts index 479cda0472..ad9b53a894 100644 --- a/packages/cli/src/commands/admin/auth/files.ts +++ b/packages/cli/src/commands/admin/auth/files.ts @@ -21,6 +21,8 @@ import * as path from 'path'; const { targetRoot, resolveTargetRoot } = findPaths(__dirname); export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); export const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); +export const USER_ENTITY_FILE = path.join(targetRoot, 'user-info.yaml'); + export const APP_TSX_FILE = path.join( resolveTargetRoot('packages/app'), 'src', diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index 27dbe24f74..64abf520cf 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -17,13 +17,15 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; +import fetch from 'node-fetch'; import { Task } from '../../../../lib/tasks'; -import { updateConfigFile, updateEnvFile } from '../config'; +import { addUserEntity, updateConfigFile, updateEnvFile } from '../config'; import { APP_CONFIG_FILE, APP_TSX_FILE, AUTH_BACKEND_PLUGIN_FILE, ENV_CONFIG_FILE, + USER_ENTITY_FILE, } from '../files'; import { patch } from '../patch'; import { addSignInPageDiff, replaceSignInResolverDiff } from './diffs'; @@ -53,6 +55,46 @@ const validateCredentials = async (clientId: string, clientSecret: string) => { } }; +const getConfig = (answers: Answers, useEnvForSecrets: boolean) => { + const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = + answers; + + return { + auth: { + providers: { + github: { + development: { + clientId: useEnvForSecrets ? '${AUTH_GITHUB_CLIENT_ID}' : clientId, + clientSecret: useEnvForSecrets + ? '${AUTH_GITHUB_CLIENT_SECRET}' + : clientSecret, + ...(hasEnterprise && { + enterpriseInstanceUrl: enterpriseInstanceUrl, + }), + }, + }, + }, + }, + catalog: { + locations: [ + { + type: 'file', + target: '../../user-info.yaml', + rules: [{ allow: ['User'] }], + }, + ], + }, + }; +}; + +type Answers = { + username: string; + clientSecret: string; + clientId: string; + hasEnterprise: boolean; + enterpriseInstanceUrl?: string; +}; + export const oauth = async (useEnvForSecrets: boolean) => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( @@ -69,12 +111,19 @@ export const oauth = async (useEnvForSecrets: boolean) => { 'https://backstage.io/docs/auth/github/provider', )}`); - const answers = await inquirer.prompt<{ - clientSecret: string; - clientId: string; - hasEnterprise: boolean; - enterpriseInstanceUrl?: string; - }>([ + const answers = await inquirer.prompt([ + { + type: 'input', + name: 'username', + message: 'What is your Github username?', + validate: async (input: string) => { + const response = await fetch(`https://api.github.com/users/${input}`); + if (!response.ok) { + return chalk.red('Unknown user. Please try again.'); + } + return true; + }, + }, { type: 'input', name: 'clientId', @@ -101,32 +150,19 @@ export const oauth = async (useEnvForSecrets: boolean) => { }, ]); - const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = - answers; + const { username, clientId, clientSecret } = answers; await validateCredentials(clientId, clientSecret); - const auth = { - providers: { - github: { - development: { - clientId: useEnvForSecrets ? '${AUTH_GITHUB_CLIENT_ID}' : clientId, - clientSecret: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_SECRET}' - : clientSecret, - ...(hasEnterprise && { - enterpriseInstanceUrl: enterpriseInstanceUrl, - }), - }, - }, - }, - }; + const config = getConfig(answers, useEnvForSecrets); + await updateConfigFile(APP_CONFIG_FILE, config); - await updateConfigFile(APP_CONFIG_FILE, { auth }); if (useEnvForSecrets) { await updateEnvFile(ENV_CONFIG_FILE, clientId, clientSecret); } + await addUserEntity(USER_ENTITY_FILE, username); + await patch(APP_TSX_FILE, addSignInPageDiff); await patch(AUTH_BACKEND_PLUGIN_FILE, replaceSignInResolverDiff); }; diff --git a/packages/cli/src/commands/admin/auth/index.ts b/packages/cli/src/commands/admin/auth/index.ts index 9af145dcf3..ce39748b09 100644 --- a/packages/cli/src/commands/admin/auth/index.ts +++ b/packages/cli/src/commands/admin/auth/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../lib/tasks'; import { github } from './github'; @@ -42,4 +43,5 @@ export async function auth(): Promise { } Task.log(`Done setting up ${provider}!`); + Task.log(`You can now start you app with ${chalk.inverse('yarn dev')}`); } From eaece17af0b751acc8b0c25a39a048e2eacd9647 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 20 Feb 2023 12:59:18 +0100 Subject: [PATCH 115/511] Remove GHA approach for now Signed-off-by: Philipp Hugenroth --- .../cli/src/commands/admin/auth/github/app.ts | 44 ------------------- .../src/commands/admin/auth/github/index.ts | 22 +--------- packages/cli/src/commands/admin/auth/index.ts | 4 +- 3 files changed, 4 insertions(+), 66 deletions(-) delete mode 100644 packages/cli/src/commands/admin/auth/github/app.ts diff --git a/packages/cli/src/commands/admin/auth/github/app.ts b/packages/cli/src/commands/admin/auth/github/app.ts deleted file mode 100644 index d78fe2a3d2..0000000000 --- a/packages/cli/src/commands/admin/auth/github/app.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2023 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 inquirer from 'inquirer'; -import { adminCli } from '../../../create-github-app'; -import { updateConfigFile, updateEnvFile } from '../config'; -import { APP_CONFIG_FILE, ENV_CONFIG_FILE } from '../files'; - -// TODO(tudi2d): Wrapper for admin CLI around `create-github-app` - potentially to be removed -export const app = async (useEnvForSecrets: boolean) => { - // TODO(tudi2d): Make the GitHub Org optional - const input = await inquirer.prompt<{ org: string }>([ - { - type: 'input', - name: 'org', - message: 'Enter a GitHub Org [required]', - }, - ]); - - const { auth } = await adminCli(input.org); - - // TODO(tudi2d): Also change integrations - await updateConfigFile(APP_CONFIG_FILE, { auth }); - if (useEnvForSecrets) { - await updateEnvFile( - ENV_CONFIG_FILE, - auth.providers.github.development.clientId, - auth.providers.github.development.clientSecret, - ); - } -}; diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts index d140b98dd3..fa22cacef8 100644 --- a/packages/cli/src/commands/admin/auth/github/index.ts +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -15,7 +15,6 @@ */ import inquirer from 'inquirer'; -import { app } from './app'; import { oauth } from './oauth'; export const github = async () => { @@ -29,26 +28,9 @@ export const github = async () => { message: 'Would you like to store sensitive configuration details such as secrets as environment variables? (recommended)', }, - { - type: 'list', - name: 'type', - message: 'Do you want to use a Github App or Github OAuth?', - choices: ['GitHub OAuth', 'GitHub App'], - }, ]); - const { type, useEnvForSecrets } = answers; + const { useEnvForSecrets } = answers; - switch (type) { - case 'GitHub OAuth': { - await oauth(useEnvForSecrets); - break; - } - case 'GitHub App': { - await app(useEnvForSecrets); - break; - } - default: - throw new Error(`Unknown selection: ${type}.`); - } + await oauth(useEnvForSecrets); }; diff --git a/packages/cli/src/commands/admin/auth/index.ts b/packages/cli/src/commands/admin/auth/index.ts index ce39748b09..ce8e55556b 100644 --- a/packages/cli/src/commands/admin/auth/index.ts +++ b/packages/cli/src/commands/admin/auth/index.ts @@ -27,14 +27,14 @@ export async function auth(): Promise { type: 'list', name: 'provider', message: 'Please select a provider:', - choices: ['Github'], + choices: ['GitHub'], }, ]); const { provider } = answers; switch (provider) { - case 'Github': { + case 'GitHub': { await github(); break; } From 0a60451b6f3816e7a0f234416f3a8085dbf98031 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 20 Feb 2023 13:08:35 +0100 Subject: [PATCH 116/511] Revert create-github-app changes Signed-off-by: Philipp Hugenroth --- .../GithubCreateAppServer.ts | 7 +- .../src/commands/create-github-app/index.ts | 161 +++++------------- 2 files changed, 48 insertions(+), 120 deletions(-) diff --git a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts index cb2613c691..70b8c0ca53 100644 --- a/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts +++ b/packages/cli/src/commands/create-github-app/GithubCreateAppServer.ts @@ -33,7 +33,7 @@ const FORM_PAGE = ` `; -export type GithubAppConfig = { +type GithubAppConfig = { appId: number; slug?: string; name?: string; @@ -117,11 +117,8 @@ export class GithubCreateAppServer { ...(this.permissions.includes('members') && { members: 'read' }), ...(this.permissions.includes('read') && { contents: 'read' }), ...(this.permissions.includes('write') && { - administration: 'write', contents: 'write', - pull_requests: 'write', - issues: 'write', - workflows: 'write', + actions: 'write', }), }, name: 'Backstage-', diff --git a/packages/cli/src/commands/create-github-app/index.ts b/packages/cli/src/commands/create-github-app/index.ts index 606e982bd4..6b3e732f18 100644 --- a/packages/cli/src/commands/create-github-app/index.ts +++ b/packages/cli/src/commands/create-github-app/index.ts @@ -14,26 +14,61 @@ * limitations under the License. */ -import chalk from 'chalk'; import fs from 'fs-extra'; -import inquirer, { Question } from 'inquirer'; -import fetch from 'node-fetch'; -import openBrowser from 'react-dev-utils/openBrowser'; +import chalk from 'chalk'; import { stringify as stringifyYaml } from 'yaml'; -import { GithubAppConfig } from '@backstage/integration'; - +import inquirer, { Question, Answers } from 'inquirer'; import { paths } from '../../lib/paths'; import { GithubCreateAppServer } from './GithubCreateAppServer'; - +import fetch from 'node-fetch'; +import openBrowser from 'react-dev-utils/openBrowser'; // This is an experimental command that at this point does not support GitHub Enterprise // due to lacking support for creating apps from manifests. // https://docs.github.com/en/free-pro-team@latest/developers/apps/creating-a-github-app-from-a-manifest export default async (org: string) => { - // TODO(tudi2d): Why is the Org check not done here? - const answers = await permissionAnswers(); - await verifyGithubOrg(org); - const { fileName } = await createGHAYaml(org, answers.appType); + const answers: Answers = await inquirer.prompt({ + name: 'appType', + type: 'checkbox', + message: + 'Select permissions [required] (these can be changed later but then require approvals in all installations)', + choices: [ + { + name: 'Read access to content (required by Software Catalog to ingest data from repositories)', + value: 'read', + checked: true, + }, + { + name: 'Read access to members (required by Software Catalog to ingest GitHub teams)', + value: 'members', + checked: true, + }, + { + name: 'Read and Write to content and actions (required by Software Templates to create new repositories)', + value: 'write', + }, + ], + }); + if (answers.appType.length === 0) { + console.log(chalk.red('You must select at least one permission')); + process.exit(1); + } + + await verifyGithubOrg(org); + const { slug, name, ...config } = await GithubCreateAppServer.run({ + org, + permissions: answers.appType, + }); + + const fileName = `github-app-${slug}-credentials.yaml`; + const content = `# Name: ${name}\n${stringifyYaml(config)}`; + await fs.writeFile(paths.resolveTargetRoot(fileName), content); + console.log(`GitHub App configuration written to ${chalk.cyan(fileName)}`); + console.log( + chalk.yellow( + 'This file contains sensitive credentials, it should not be committed to version control and handled with care!', + ), + ); console.log( "Here's an example on how to update the integrations section in app-config.yaml", ); @@ -47,44 +82,6 @@ integrations: ); }; -/** - * - * @param org string: GitHub Organisation - * @returns Promise: Partial App Config for Admin CLI - */ -export async function adminCli(org: string) { - await verifyGithubOrg(org); - const answers = await permissionAnswers({ - read: true, - members: true, - write: true, - }); - const { fileName, config } = await createGHAYaml(org, answers.appType); - const auth = { - providers: { - github: { - development: { - clientId: config.clientId, - clientSecret: config.clientSecret, - }, - }, - }, - }; - const integration = { - github: { - host: 'github.com', - apps: { - $include: `${fileName}`, - }, - }, - }; - - return { - auth, - integration, - }; -} - async function verifyGithubOrg(org: string): Promise { let response; @@ -123,7 +120,6 @@ async function verifyGithubOrg(org: string): Promise { openBrowser('https://github.com/account/organizations/new'); - // TODO(tudi2d): Could we maybe re-run the command rather than exit? console.log( chalk.yellow( 'Please re-run this command when you have created your new organization', @@ -133,68 +129,3 @@ async function verifyGithubOrg(org: string): Promise { process.exit(0); } } - -async function permissionAnswers( - checked: { read: boolean; members: boolean; write: boolean } = { - read: true, - members: true, - write: false, - }, -) { - const answers = await inquirer.prompt<{ appType: string[] }>({ - name: 'appType', - type: 'checkbox', - message: - 'Select permissions [required] (these can be changed later but then require approvals in all installations)', - choices: [ - { - name: 'Read access to content (required by Software Catalog to ingest data from repositories)', - value: 'read', - checked: checked.read, - }, - { - name: 'Read access to members (required by Software Catalog to ingest GitHub teams)', - value: 'members', - checked: checked.members, - }, - { - name: 'Read and Write to content and actions (required by Software Templates to create new repositories)', - value: 'write', - checked: checked.write, - }, - ], - }); - - if (answers.appType.length === 0) { - console.log(chalk.red('You must select at least one permission')); - // TODO(tudi2d): Maybe re-do input rather than exit? - process.exit(1); - } - - return answers; -} - -async function createGHAYaml( - org: string, - permissions: string[], -): Promise<{ fileName: string; config: GithubAppConfig }> { - const { slug, name, ...config } = await GithubCreateAppServer.run({ - org, - permissions, - }); - - const fileName = `github-app-${slug}-credentials.yaml`; - const content = `# Name: ${name}\n${stringifyYaml(config)}`; - await fs.writeFile(paths.resolveTargetRoot(fileName), content); - console.log(`GitHub App configuration written to ${chalk.cyan(fileName)}`); - console.log( - chalk.yellow( - 'This file contains sensitive credentials, it should not be committed to version control and handled with care!', - ), - ); - - return { - fileName, - config, - }; -} From ed89e409653ab678f1191c9d67ee4faf7d3de2f7 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Mon, 20 Feb 2023 14:44:48 +0100 Subject: [PATCH 117/511] cli: Use .patch files instead Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/auth/files.ts | 20 ++++- .../src/commands/admin/auth/github/diffs.ts | 76 ------------------- .../src/commands/admin/auth/github/oauth.ts | 57 ++++++++++---- packages/cli/src/commands/admin/auth/index.ts | 4 +- packages/cli/src/commands/admin/auth/patch.ts | 5 +- .../auth/patches/01-github.App.tsx.patch | 24 ++++++ .../auth/patches/02-github.auth.ts.patch | 12 +++ 7 files changed, 100 insertions(+), 98 deletions(-) delete mode 100644 packages/cli/src/commands/admin/auth/github/diffs.ts create mode 100644 packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch create mode 100644 packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/admin/auth/files.ts index ad9b53a894..166538335f 100644 --- a/packages/cli/src/commands/admin/auth/files.ts +++ b/packages/cli/src/commands/admin/auth/files.ts @@ -18,19 +18,33 @@ import { findPaths } from '@backstage/cli-common'; import * as path from 'path'; /* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot, resolveTargetRoot } = findPaths(__dirname); +const { targetRoot, ownDir, resolveTargetRoot } = findPaths(__dirname); export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); export const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); export const USER_ENTITY_FILE = path.join(targetRoot, 'user-info.yaml'); -export const APP_TSX_FILE = path.join( +const APP_TSX_FILE = path.join( resolveTargetRoot('packages/app'), 'src', 'App.tsx', ); -export const AUTH_BACKEND_PLUGIN_FILE = path.join( +const AUTH_BACKEND_PLUGIN_FILE = path.join( resolveTargetRoot('packages/backend'), 'src', 'plugins', 'auth.ts', ); + +export const PATCH_FOLDER = path.join( + ownDir, + 'src', + 'commands', + 'admin', + 'auth', + 'patches', +); + +export const patchMap: Record = { + 'App.tsx': APP_TSX_FILE, + 'auth.ts': AUTH_BACKEND_PLUGIN_FILE, +}; diff --git a/packages/cli/src/commands/admin/auth/github/diffs.ts b/packages/cli/src/commands/admin/auth/github/diffs.ts deleted file mode 100644 index 43b6013d4e..0000000000 --- a/packages/cli/src/commands/admin/auth/github/diffs.ts +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2023 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. - */ - -export const addSignInPageDiff = - '@@ -32,11 +32,27 @@\n' + - " import { AppRouter, FlatRoutes } from '@backstage/core-app-api';\n" + - " import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';\n" + - " import { RequirePermission } from '@backstage/plugin-permission-react';\n" + - " import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\n" + - "+import { githubAuthApiRef } from '@backstage/core-plugin-api';\n" + - "+import { SignInPage } from '@backstage/core-components';\n" + - ' \n' + - ' const app = createApp({\n' + - ' apis,\n' + - '+ components: {\n' + - '+ SignInPage: props => (\n' + - '+ \n' + - '+ ),\n' + - '+ },\n' + - ' bindRoutes({ bind }) {\n' + - ' bind(catalogPlugin.externalRoutes, {\n' + - ' createComponent: scaffolderPlugin.routes.root,\n' + - ' viewTechDoc: techdocsPlugin.routes.docRoot,\n'; - -export const replaceSignInResolverDiff = - '@@ -36,18 +36,18 @@\n' + - ' //\n' + - ' // https://backstage.io/docs/auth/identity-resolver\n' + - ' github: providers.github.create({\n' + - ' signIn: {\n' + - '- resolver(_, ctx) {\n' + - "- const userRef = 'user:default/guest'; // Must be a full entity reference\n" + - '- return ctx.issueToken({\n' + - '- claims: {\n' + - "- sub: userRef, // The user's own identity\n" + - '- ent: [userRef], // A list of identities that the user claims ownership through\n' + - '- },\n' + - '- });\n' + - '- },\n' + - '- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(),\n' + - '+ // resolver(_, ctx) {\n' + - "+ // const userRef = 'user:default/guest'; // Must be a full entity reference\n" + - '+ // return ctx.issueToken({\n' + - '+ // claims: {\n' + - "+ // sub: userRef, // The user's own identity\n" + - '+ // ent: [userRef], // A list of identities that the user claims ownership through\n' + - '+ // },\n' + - '+ // });\n' + - '+ // },\n' + - '+ resolver: providers.github.resolvers.usernameMatchingUserEntityName(),\n' + - ' },\n' + - ' }),\n' + - ' },\n' + - ' });\n'; diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index 64abf520cf..fe05b6431a 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -18,17 +18,18 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import inquirer from 'inquirer'; import fetch from 'node-fetch'; +import * as fs from 'fs-extra'; +import * as path from 'path'; import { Task } from '../../../../lib/tasks'; import { addUserEntity, updateConfigFile, updateEnvFile } from '../config'; import { APP_CONFIG_FILE, - APP_TSX_FILE, - AUTH_BACKEND_PLUGIN_FILE, ENV_CONFIG_FILE, + patchMap, + PATCH_FOLDER, USER_ENTITY_FILE, } from '../files'; import { patch } from '../patch'; -import { addSignInPageDiff, replaceSignInResolverDiff } from './diffs'; const validateCredentials = async (clientId: string, clientSecret: string) => { try { @@ -50,7 +51,7 @@ const validateCredentials = async (clientId: string, clientSecret: string) => { error.response.status !== 200 && error.response.data.error !== 'bad_verification_code' ) { - throw new Error(`Validating Github Credentials failed.`); + throw new Error(`Validating GitHub Credentials failed.`); } } }; @@ -109,13 +110,14 @@ export const oauth = async (useEnvForSecrets: boolean) => { You can find the full documentation page here: ${chalk.blue( 'https://backstage.io/docs/auth/github/provider', - )}`); + )} + `); const answers = await inquirer.prompt([ { type: 'input', name: 'username', - message: 'What is your Github username?', + message: 'What is your GitHub username?', validate: async (input: string) => { const response = await fetch(`https://api.github.com/users/${input}`); if (!response.ok) { @@ -139,30 +141,53 @@ export const oauth = async (useEnvForSecrets: boolean) => { { type: 'confirm', name: 'hasEnterprise', - message: 'Are you using Github Enterprise?', + message: 'Are you using GitHub Enterprise?', }, { type: 'input', name: 'enterpriseInstanceUrl', - message: 'What is your URL for Github Enterprise?', + message: 'What is your URL for GitHub Enterprise?', when: ({ hasEnterprise }) => hasEnterprise, validate: (input: string) => Boolean(new URL(input)), }, ]); const { username, clientId, clientSecret } = answers; - - await validateCredentials(clientId, clientSecret); - const config = getConfig(answers, useEnvForSecrets); - await updateConfigFile(APP_CONFIG_FILE, config); + Task.log('Setting up GitHub Authentication for you...'); + + await Task.forItem( + 'Validating', + 'credentials', + async () => await validateCredentials(clientId, clientSecret), + ); + await Task.forItem( + 'Updating', + APP_CONFIG_FILE, + async () => await updateConfigFile(APP_CONFIG_FILE, config), + ); if (useEnvForSecrets) { - await updateEnvFile(ENV_CONFIG_FILE, clientId, clientSecret); + await Task.forItem( + 'Updating', + ENV_CONFIG_FILE, + async () => await updateEnvFile(ENV_CONFIG_FILE, clientId, clientSecret), + ); } + await Task.forItem( + 'Creating', + USER_ENTITY_FILE, + async () => await addUserEntity(USER_ENTITY_FILE, username), + ); - await addUserEntity(USER_ENTITY_FILE, username); + const patches = await fs.readdir(PATCH_FOLDER); + for (const patchFile of patches) { + const target = patchFile + .replace(/[0-9]+-github\./, '') + .replace('.patch', ''); - await patch(APP_TSX_FILE, addSignInPageDiff); - await patch(AUTH_BACKEND_PLUGIN_FILE, replaceSignInResolverDiff); + await Task.forItem('Pactching', target, async () => { + await patch(patchMap[target], path.join(PATCH_FOLDER, patchFile)); + }); + } }; diff --git a/packages/cli/src/commands/admin/auth/index.ts b/packages/cli/src/commands/admin/auth/index.ts index ce8e55556b..728a2ffc2c 100644 --- a/packages/cli/src/commands/admin/auth/index.ts +++ b/packages/cli/src/commands/admin/auth/index.ts @@ -43,5 +43,7 @@ export async function auth(): Promise { } Task.log(`Done setting up ${provider}!`); - Task.log(`You can now start you app with ${chalk.inverse('yarn dev')}`); + Task.log( + `You can now start you app with ${chalk.inverse(chalk.italic('yarn dev'))}`, + ); } diff --git a/packages/cli/src/commands/admin/auth/patch.ts b/packages/cli/src/commands/admin/auth/patch.ts index 2a4eccdb9e..cf466f9408 100644 --- a/packages/cli/src/commands/admin/auth/patch.ts +++ b/packages/cli/src/commands/admin/auth/patch.ts @@ -17,9 +17,10 @@ import * as fs from 'fs-extra'; import * as differ from 'diff'; -export const patch = async (file: string, diff: string) => { +export const patch = async (file: string, patchFile: string) => { + const patchContent = await fs.readFile(patchFile, 'utf8'); const oldContent = await fs.readFile(file, 'utf8'); - const newContent = differ.applyPatch(oldContent, diff); + const newContent = differ.applyPatch(oldContent, patchContent); return await fs.writeFile(file, newContent, 'utf8'); }; diff --git a/packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch b/packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch new file mode 100644 index 0000000000..a7e0c150a5 --- /dev/null +++ b/packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch @@ -0,0 +1,24 @@ +@@ -30 +30,5 @@ import { Root } from './components/Root'; +-import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; ++import { ++ AlertDisplay, ++ OAuthRequestDialog, ++ SignInPage, ++} from '@backstage/core-components'; +@@ -35,0 +40 @@ import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/ ++import { githubAuthApiRef } from '@backstage/core-plugin-api'; +@@ -38,0 +44,14 @@ const app = createApp({ ++ components: { ++ SignInPage: props => ( ++ ++ ), ++ }, \ No newline at end of file diff --git a/packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch b/packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch new file mode 100644 index 0000000000..e6e65e7b74 --- /dev/null +++ b/packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch @@ -0,0 +1,12 @@ +@@ -40,10 +40 @@ export default async function createPlugin( +- resolver(_, ctx) { +- const userRef = 'user:default/guest'; // Must be a full entity reference +- return ctx.issueToken({ +- claims: { +- sub: userRef, // The user's own identity +- ent: [userRef], // A list of identities that the user claims ownership through +- }, +- }); +- }, +- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(), ++ resolver: providers.github.resolvers.usernameMatchingUserEntityName(), \ No newline at end of file From 20fc4735683b51bb81714757d018d31f6448b3d6 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Tue, 21 Feb 2023 13:22:57 +0100 Subject: [PATCH 118/511] Don't use environment variables Signed-off-by: Philipp Hugenroth --- .../cli/src/commands/admin/auth/config.ts | 16 ------------ packages/cli/src/commands/admin/auth/files.ts | 1 - .../src/commands/admin/auth/github/index.ts | 19 +------------- .../src/commands/admin/auth/github/oauth.ts | 26 ++++++------------- 4 files changed, 9 insertions(+), 53 deletions(-) diff --git a/packages/cli/src/commands/admin/auth/config.ts b/packages/cli/src/commands/admin/auth/config.ts index 659c356360..54c103cdf8 100644 --- a/packages/cli/src/commands/admin/auth/config.ts +++ b/packages/cli/src/commands/admin/auth/config.ts @@ -59,22 +59,6 @@ export const updateConfigFile = async ( ); }; -export const updateEnvFile = async ( - file: string, - clientId: string, - clientSecret: string, -) => { - const content = ` -AUTH_GITHUB_CLIENT_ID=${clientId} -AUTH_GITHUB_CLIENT_SECRET=${clientSecret}`; - - if (fs.existsSync(file)) { - return await fs.appendFile(file, content, 'utf8'); - } - - return await fs.writeFile(file, content, 'utf8'); -}; - export const addUserEntity = async (file: string, username: string) => { const content = { apiVersion: 'backstage.io/v1alpha1', diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/admin/auth/files.ts index 166538335f..f84c77fe60 100644 --- a/packages/cli/src/commands/admin/auth/files.ts +++ b/packages/cli/src/commands/admin/auth/files.ts @@ -20,7 +20,6 @@ import * as path from 'path'; /* eslint-disable-next-line no-restricted-syntax */ const { targetRoot, ownDir, resolveTargetRoot } = findPaths(__dirname); export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -export const ENV_CONFIG_FILE = path.join(targetRoot, '.env.local'); export const USER_ENTITY_FILE = path.join(targetRoot, 'user-info.yaml'); const APP_TSX_FILE = path.join( diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts index fa22cacef8..cc2653bc05 100644 --- a/packages/cli/src/commands/admin/auth/github/index.ts +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -14,23 +14,6 @@ * limitations under the License. */ -import inquirer from 'inquirer'; import { oauth } from './oauth'; -export const github = async () => { - const answers = await inquirer.prompt<{ - useEnvForSecrets: boolean; - type: string; - }>([ - { - type: 'confirm', - name: 'useEnvForSecrets', - message: - 'Would you like to store sensitive configuration details such as secrets as environment variables? (recommended)', - }, - ]); - - const { useEnvForSecrets } = answers; - - await oauth(useEnvForSecrets); -}; +export const github = async () => await oauth(); diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index fe05b6431a..00bfbef23d 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -16,15 +16,14 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; +import * as fs from 'fs-extra'; import inquirer from 'inquirer'; import fetch from 'node-fetch'; -import * as fs from 'fs-extra'; import * as path from 'path'; import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile, updateEnvFile } from '../config'; +import { addUserEntity, updateConfigFile } from '../config'; import { APP_CONFIG_FILE, - ENV_CONFIG_FILE, patchMap, PATCH_FOLDER, USER_ENTITY_FILE, @@ -56,7 +55,7 @@ const validateCredentials = async (clientId: string, clientSecret: string) => { } }; -const getConfig = (answers: Answers, useEnvForSecrets: boolean) => { +const getConfig = (answers: Answers) => { const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = answers; @@ -65,12 +64,10 @@ const getConfig = (answers: Answers, useEnvForSecrets: boolean) => { providers: { github: { development: { - clientId: useEnvForSecrets ? '${AUTH_GITHUB_CLIENT_ID}' : clientId, - clientSecret: useEnvForSecrets - ? '${AUTH_GITHUB_CLIENT_SECRET}' - : clientSecret, + clientId, + clientSecret, ...(hasEnterprise && { - enterpriseInstanceUrl: enterpriseInstanceUrl, + enterpriseInstanceUrl, }), }, }, @@ -96,7 +93,7 @@ type Answers = { enterpriseInstanceUrl?: string; }; -export const oauth = async (useEnvForSecrets: boolean) => { +export const oauth = async () => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( 'https://github.com/settings/developers', @@ -153,7 +150,7 @@ export const oauth = async (useEnvForSecrets: boolean) => { ]); const { username, clientId, clientSecret } = answers; - const config = getConfig(answers, useEnvForSecrets); + const config = getConfig(answers); Task.log('Setting up GitHub Authentication for you...'); @@ -167,13 +164,6 @@ export const oauth = async (useEnvForSecrets: boolean) => { APP_CONFIG_FILE, async () => await updateConfigFile(APP_CONFIG_FILE, config), ); - if (useEnvForSecrets) { - await Task.forItem( - 'Updating', - ENV_CONFIG_FILE, - async () => await updateEnvFile(ENV_CONFIG_FILE, clientId, clientSecret), - ); - } await Task.forItem( 'Creating', USER_ENTITY_FILE, From 977a5c8f96ab98d999eec729ab84bd72b37166a3 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Tue, 21 Feb 2023 15:17:52 +0100 Subject: [PATCH 119/511] cli: Simplify patching by reading target file from path Signed-off-by: Marcus Eide --- packages/cli/src/commands/admin/auth/files.ts | 20 +------------------ .../src/commands/admin/auth/github/oauth.ts | 16 +++------------ packages/cli/src/commands/admin/auth/patch.ts | 19 ++++++++++++++---- ...x.patch => 01-github.Add-SignInPage.patch} | 2 ++ ...ch => 02-github.Use-signIn-resolver.patch} | 2 ++ 5 files changed, 23 insertions(+), 36 deletions(-) rename packages/cli/src/commands/admin/auth/patches/{01-github.App.tsx.patch => 01-github.Add-SignInPage.patch} (92%) rename packages/cli/src/commands/admin/auth/patches/{02-github.auth.ts.patch => 02-github.Use-signIn-resolver.patch} (87%) diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/admin/auth/files.ts index f84c77fe60..6ce58dc527 100644 --- a/packages/cli/src/commands/admin/auth/files.ts +++ b/packages/cli/src/commands/admin/auth/files.ts @@ -18,22 +18,9 @@ import { findPaths } from '@backstage/cli-common'; import * as path from 'path'; /* eslint-disable-next-line no-restricted-syntax */ -const { targetRoot, ownDir, resolveTargetRoot } = findPaths(__dirname); +const { targetRoot, ownDir } = findPaths(__dirname); export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); export const USER_ENTITY_FILE = path.join(targetRoot, 'user-info.yaml'); - -const APP_TSX_FILE = path.join( - resolveTargetRoot('packages/app'), - 'src', - 'App.tsx', -); -const AUTH_BACKEND_PLUGIN_FILE = path.join( - resolveTargetRoot('packages/backend'), - 'src', - 'plugins', - 'auth.ts', -); - export const PATCH_FOLDER = path.join( ownDir, 'src', @@ -42,8 +29,3 @@ export const PATCH_FOLDER = path.join( 'auth', 'patches', ); - -export const patchMap: Record = { - 'App.tsx': APP_TSX_FILE, - 'auth.ts': AUTH_BACKEND_PLUGIN_FILE, -}; diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts index 00bfbef23d..1de6b2a4c4 100644 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ b/packages/cli/src/commands/admin/auth/github/oauth.ts @@ -19,15 +19,9 @@ import chalk from 'chalk'; import * as fs from 'fs-extra'; import inquirer from 'inquirer'; import fetch from 'node-fetch'; -import * as path from 'path'; import { Task } from '../../../../lib/tasks'; import { addUserEntity, updateConfigFile } from '../config'; -import { - APP_CONFIG_FILE, - patchMap, - PATCH_FOLDER, - USER_ENTITY_FILE, -} from '../files'; +import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; import { patch } from '../patch'; const validateCredentials = async (clientId: string, clientSecret: string) => { @@ -172,12 +166,8 @@ export const oauth = async () => { const patches = await fs.readdir(PATCH_FOLDER); for (const patchFile of patches) { - const target = patchFile - .replace(/[0-9]+-github\./, '') - .replace('.patch', ''); - - await Task.forItem('Pactching', target, async () => { - await patch(patchMap[target], path.join(PATCH_FOLDER, patchFile)); + await Task.forItem('Patching', patchFile, async () => { + await patch(patchFile); }); } }; diff --git a/packages/cli/src/commands/admin/auth/patch.ts b/packages/cli/src/commands/admin/auth/patch.ts index cf466f9408..2333275064 100644 --- a/packages/cli/src/commands/admin/auth/patch.ts +++ b/packages/cli/src/commands/admin/auth/patch.ts @@ -15,12 +15,23 @@ */ import * as fs from 'fs-extra'; +import * as path from 'path'; import * as differ from 'diff'; +import { PATCH_FOLDER } from './files'; +import { findPaths } from '@backstage/cli-common'; -export const patch = async (file: string, patchFile: string) => { - const patchContent = await fs.readFile(patchFile, 'utf8'); - const oldContent = await fs.readFile(file, 'utf8'); +/* eslint-disable-next-line no-restricted-syntax */ +const { targetRoot } = findPaths(__dirname); + +export const patch = async (patchFile: string) => { + const patchContent = await fs.readFile( + path.join(PATCH_FOLDER, patchFile), + 'utf8', + ); + const targetName = patchContent.split('\n')[0].replace('--- a', ''); + const targetFile = path.join(targetRoot, targetName); + const oldContent = await fs.readFile(targetFile, 'utf8'); const newContent = differ.applyPatch(oldContent, patchContent); - return await fs.writeFile(file, newContent, 'utf8'); + return await fs.writeFile(targetFile, newContent, 'utf8'); }; diff --git a/packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch b/packages/cli/src/commands/admin/auth/patches/01-github.Add-SignInPage.patch similarity index 92% rename from packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch rename to packages/cli/src/commands/admin/auth/patches/01-github.Add-SignInPage.patch index a7e0c150a5..8a3401fea1 100644 --- a/packages/cli/src/commands/admin/auth/patches/01-github.App.tsx.patch +++ b/packages/cli/src/commands/admin/auth/patches/01-github.Add-SignInPage.patch @@ -1,3 +1,5 @@ +--- a/packages/app/src/App.tsx ++++ b/packages/app/src/App.tsx @@ -30 +30,5 @@ import { Root } from './components/Root'; -import { AlertDisplay, OAuthRequestDialog } from '@backstage/core-components'; +import { diff --git a/packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch b/packages/cli/src/commands/admin/auth/patches/02-github.Use-signIn-resolver.patch similarity index 87% rename from packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch rename to packages/cli/src/commands/admin/auth/patches/02-github.Use-signIn-resolver.patch index e6e65e7b74..2baaff7cf9 100644 --- a/packages/cli/src/commands/admin/auth/patches/02-github.auth.ts.patch +++ b/packages/cli/src/commands/admin/auth/patches/02-github.Use-signIn-resolver.patch @@ -1,3 +1,5 @@ +--- a/packages/backend/src/plugins/auth.ts ++++ b/packages/backend/src/plugins/auth.ts @@ -40,10 +40 @@ export default async function createPlugin( - resolver(_, ctx) { - const userRef = 'user:default/guest'; // Must be a full entity reference From 4e4a0507ca83cb4f309152e7265a14b48506d416 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Tue, 21 Feb 2023 15:22:27 +0100 Subject: [PATCH 120/511] cli: Consolidate oauth.ts into index.ts Signed-off-by: Marcus Eide --- .../src/commands/admin/auth/github/index.ts | 158 +++++++++++++++- .../src/commands/admin/auth/github/oauth.ts | 173 ------------------ 2 files changed, 156 insertions(+), 175 deletions(-) delete mode 100644 packages/cli/src/commands/admin/auth/github/oauth.ts diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/admin/auth/github/index.ts index cc2653bc05..def97bf619 100644 --- a/packages/cli/src/commands/admin/auth/github/index.ts +++ b/packages/cli/src/commands/admin/auth/github/index.ts @@ -14,6 +14,160 @@ * limitations under the License. */ -import { oauth } from './oauth'; +import { OAuthApp } from '@octokit/oauth-app'; +import chalk from 'chalk'; +import * as fs from 'fs-extra'; +import inquirer from 'inquirer'; +import fetch from 'node-fetch'; +import { Task } from '../../../../lib/tasks'; +import { addUserEntity, updateConfigFile } from '../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; +import { patch } from '../patch'; -export const github = async () => await oauth(); +const validateCredentials = async (clientId: string, clientSecret: string) => { + try { + const app = new OAuthApp({ + clientId, + clientSecret, + }); + await app.createToken({ + code: '%NOT-VALID-CODE%', + }); + } catch (error) { + // @octokit/request returns a error.response object when a request is rejected. + // We can check it to see what kind of error we received. + + // If error.response is successful we can double-check that the error itself was due to the bad code. + // If that's the case then we can assume that the client id and secret exists as we otherwise would + // have gotten a 400/404. + if ( + error.response.status !== 200 && + error.response.data.error !== 'bad_verification_code' + ) { + throw new Error(`Validating GitHub Credentials failed.`); + } + } +}; + +const getConfig = (answers: Answers) => { + const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = + answers; + + return { + auth: { + providers: { + github: { + development: { + clientId, + clientSecret, + ...(hasEnterprise && { + enterpriseInstanceUrl, + }), + }, + }, + }, + }, + catalog: { + locations: [ + { + type: 'file', + target: '../../user-info.yaml', + rules: [{ allow: ['User'] }], + }, + ], + }, + }; +}; + +type Answers = { + username: string; + clientSecret: string; + clientId: string; + hasEnterprise: boolean; + enterpriseInstanceUrl?: string; +}; + +export const github = async () => { + Task.log(` + To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( + 'https://github.com/settings/developers', + )} + The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. + + Settings for local development: + ${chalk.cyan(` + Homepage URL: http://localhost:3000 + Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame`)} + + You can find the full documentation page here: ${chalk.blue( + 'https://backstage.io/docs/auth/github/provider', + )} + `); + + const answers = await inquirer.prompt([ + { + type: 'input', + name: 'username', + message: 'What is your GitHub username?', + validate: async (input: string) => { + const response = await fetch(`https://api.github.com/users/${input}`); + if (!response.ok) { + return chalk.red('Unknown user. Please try again.'); + } + return true; + }, + }, + { + type: 'input', + name: 'clientId', + message: 'What is your Client Id?', + validate: (input: string) => (input.length ? true : false), + }, + { + type: 'input', + name: 'clientSecret', + message: 'What is your Client Secret?', + validate: (input: string) => (input.length ? true : false), + }, + { + type: 'confirm', + name: 'hasEnterprise', + message: 'Are you using GitHub Enterprise?', + }, + { + type: 'input', + name: 'enterpriseInstanceUrl', + message: 'What is your URL for GitHub Enterprise?', + when: ({ hasEnterprise }) => hasEnterprise, + validate: (input: string) => Boolean(new URL(input)), + }, + ]); + + const { username, clientId, clientSecret } = answers; + const config = getConfig(answers); + + Task.log('Setting up GitHub Authentication for you...'); + + await Task.forItem( + 'Validating', + 'credentials', + async () => await validateCredentials(clientId, clientSecret), + ); + await Task.forItem( + 'Updating', + APP_CONFIG_FILE, + async () => await updateConfigFile(APP_CONFIG_FILE, config), + ); + await Task.forItem( + 'Creating', + USER_ENTITY_FILE, + async () => await addUserEntity(USER_ENTITY_FILE, username), + ); + + const patches = await fs.readdir(PATCH_FOLDER); + for (const patchFile of patches) { + await Task.forItem('Patching', patchFile, async () => { + await patch(patchFile); + }); + } +}; diff --git a/packages/cli/src/commands/admin/auth/github/oauth.ts b/packages/cli/src/commands/admin/auth/github/oauth.ts deleted file mode 100644 index 1de6b2a4c4..0000000000 --- a/packages/cli/src/commands/admin/auth/github/oauth.ts +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2023 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 { OAuthApp } from '@octokit/oauth-app'; -import chalk from 'chalk'; -import * as fs from 'fs-extra'; -import inquirer from 'inquirer'; -import fetch from 'node-fetch'; -import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile } from '../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; -import { patch } from '../patch'; - -const validateCredentials = async (clientId: string, clientSecret: string) => { - try { - const app = new OAuthApp({ - clientId, - clientSecret, - }); - await app.createToken({ - code: '%NOT-VALID-CODE%', - }); - } catch (error) { - // @octokit/request returns a error.response object when a request is rejected. - // We can check it to see what kind of error we received. - - // If error.response is successful we can double-check that the error itself was due to the bad code. - // If that's the case then we can assume that the client id and secret exists as we otherwise would - // have gotten a 400/404. - if ( - error.response.status !== 200 && - error.response.data.error !== 'bad_verification_code' - ) { - throw new Error(`Validating GitHub Credentials failed.`); - } - } -}; - -const getConfig = (answers: Answers) => { - const { clientId, clientSecret, hasEnterprise, enterpriseInstanceUrl } = - answers; - - return { - auth: { - providers: { - github: { - development: { - clientId, - clientSecret, - ...(hasEnterprise && { - enterpriseInstanceUrl, - }), - }, - }, - }, - }, - catalog: { - locations: [ - { - type: 'file', - target: '../../user-info.yaml', - rules: [{ allow: ['User'] }], - }, - ], - }, - }; -}; - -type Answers = { - username: string; - clientSecret: string; - clientId: string; - hasEnterprise: boolean; - enterpriseInstanceUrl?: string; -}; - -export const oauth = async () => { - Task.log(` - To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( - 'https://github.com/settings/developers', - )} - The Homepage URL should point to Backstage's frontend, while the Authorization callback URL will point to the auth backend. - - Settings for local development: - ${chalk.cyan(` - Homepage URL: http://localhost:3000 - Authorization callback URL: http://localhost:7007/api/auth/github/handler/frame`)} - - You can find the full documentation page here: ${chalk.blue( - 'https://backstage.io/docs/auth/github/provider', - )} - `); - - const answers = await inquirer.prompt([ - { - type: 'input', - name: 'username', - message: 'What is your GitHub username?', - validate: async (input: string) => { - const response = await fetch(`https://api.github.com/users/${input}`); - if (!response.ok) { - return chalk.red('Unknown user. Please try again.'); - } - return true; - }, - }, - { - type: 'input', - name: 'clientId', - message: 'What is your Client Id?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'input', - name: 'clientSecret', - message: 'What is your Client Secret?', - validate: (input: string) => (input.length ? true : false), - }, - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your URL for GitHub Enterprise?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); - - const { username, clientId, clientSecret } = answers; - const config = getConfig(answers); - - Task.log('Setting up GitHub Authentication for you...'); - - await Task.forItem( - 'Validating', - 'credentials', - async () => await validateCredentials(clientId, clientSecret), - ); - await Task.forItem( - 'Updating', - APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), - ); - await Task.forItem( - 'Creating', - USER_ENTITY_FILE, - async () => await addUserEntity(USER_ENTITY_FILE, username), - ); - - const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches) { - await Task.forItem('Patching', patchFile, async () => { - await patch(patchFile); - }); - } -}; From e1771deebb82cf83b7efda65d9a3ce5456f4adf5 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Tue, 21 Feb 2023 15:27:53 +0100 Subject: [PATCH 121/511] cli: Rename command to onboard Signed-off-by: Marcus Eide --- packages/cli/src/commands/index.ts | 8 ++++---- packages/cli/src/commands/{admin => onboard}/README.md | 0 .../cli/src/commands/{admin => onboard}/auth/config.ts | 0 .../cli/src/commands/{admin => onboard}/auth/files.ts | 2 +- .../src/commands/{admin => onboard}/auth/github/index.ts | 0 .../cli/src/commands/{admin => onboard}/auth/index.ts | 0 .../cli/src/commands/{admin => onboard}/auth/patch.ts | 0 .../auth/patches/01-github.Add-SignInPage.patch | 0 .../auth/patches/02-github.Use-signIn-resolver.patch | 0 packages/cli/src/commands/{admin => onboard}/command.ts | 0 packages/cli/src/commands/{admin => onboard}/index.ts | 0 11 files changed, 5 insertions(+), 5 deletions(-) rename packages/cli/src/commands/{admin => onboard}/README.md (100%) rename packages/cli/src/commands/{admin => onboard}/auth/config.ts (100%) rename packages/cli/src/commands/{admin => onboard}/auth/files.ts (98%) rename packages/cli/src/commands/{admin => onboard}/auth/github/index.ts (100%) rename packages/cli/src/commands/{admin => onboard}/auth/index.ts (100%) rename packages/cli/src/commands/{admin => onboard}/auth/patch.ts (100%) rename packages/cli/src/commands/{admin => onboard}/auth/patches/01-github.Add-SignInPage.patch (100%) rename packages/cli/src/commands/{admin => onboard}/auth/patches/02-github.Use-signIn-resolver.patch (100%) rename packages/cli/src/commands/{admin => onboard}/command.ts (100%) rename packages/cli/src/commands/{admin => onboard}/index.ts (100%) diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index df0689b4b5..ba11a53cfd 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -25,11 +25,11 @@ const configOption = [ Array(), ] as const; -export function registerAdminCommand(program: Command) { +export function registerOnboardCommand(program: Command) { program - .command('admin', { hidden: true }) + .command('onboard', { hidden: true }) .description('Get help setting up your Backstage App.') - .action(lazy(() => import('./admin').then(m => m.command))); + .action(lazy(() => import('./onboard').then(m => m.command))); } export function registerRepoCommand(program: Command) { @@ -367,7 +367,7 @@ export function registerCommands(program: Command) { registerRepoCommand(program); registerScriptCommand(program); registerMigrateCommand(program); - registerAdminCommand(program); + registerOnboardCommand(program); program .command('versions:bump') diff --git a/packages/cli/src/commands/admin/README.md b/packages/cli/src/commands/onboard/README.md similarity index 100% rename from packages/cli/src/commands/admin/README.md rename to packages/cli/src/commands/onboard/README.md diff --git a/packages/cli/src/commands/admin/auth/config.ts b/packages/cli/src/commands/onboard/auth/config.ts similarity index 100% rename from packages/cli/src/commands/admin/auth/config.ts rename to packages/cli/src/commands/onboard/auth/config.ts diff --git a/packages/cli/src/commands/admin/auth/files.ts b/packages/cli/src/commands/onboard/auth/files.ts similarity index 98% rename from packages/cli/src/commands/admin/auth/files.ts rename to packages/cli/src/commands/onboard/auth/files.ts index 6ce58dc527..af07ef254b 100644 --- a/packages/cli/src/commands/admin/auth/files.ts +++ b/packages/cli/src/commands/onboard/auth/files.ts @@ -25,7 +25,7 @@ export const PATCH_FOLDER = path.join( ownDir, 'src', 'commands', - 'admin', + 'onboard', 'auth', 'patches', ); diff --git a/packages/cli/src/commands/admin/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/github/index.ts similarity index 100% rename from packages/cli/src/commands/admin/auth/github/index.ts rename to packages/cli/src/commands/onboard/auth/github/index.ts diff --git a/packages/cli/src/commands/admin/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts similarity index 100% rename from packages/cli/src/commands/admin/auth/index.ts rename to packages/cli/src/commands/onboard/auth/index.ts diff --git a/packages/cli/src/commands/admin/auth/patch.ts b/packages/cli/src/commands/onboard/auth/patch.ts similarity index 100% rename from packages/cli/src/commands/admin/auth/patch.ts rename to packages/cli/src/commands/onboard/auth/patch.ts diff --git a/packages/cli/src/commands/admin/auth/patches/01-github.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch similarity index 100% rename from packages/cli/src/commands/admin/auth/patches/01-github.Add-SignInPage.patch rename to packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch diff --git a/packages/cli/src/commands/admin/auth/patches/02-github.Use-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch similarity index 100% rename from packages/cli/src/commands/admin/auth/patches/02-github.Use-signIn-resolver.patch rename to packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch diff --git a/packages/cli/src/commands/admin/command.ts b/packages/cli/src/commands/onboard/command.ts similarity index 100% rename from packages/cli/src/commands/admin/command.ts rename to packages/cli/src/commands/onboard/command.ts diff --git a/packages/cli/src/commands/admin/index.ts b/packages/cli/src/commands/onboard/index.ts similarity index 100% rename from packages/cli/src/commands/admin/index.ts rename to packages/cli/src/commands/onboard/index.ts From c07c3b7364bcfa3e1f861997e61c9717fa8a2c27 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 22 Feb 2023 09:49:14 +0100 Subject: [PATCH 122/511] cli: Add changeset Signed-off-by: Marcus Eide --- .changeset/sour-dragons-cheat.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sour-dragons-cheat.md diff --git a/.changeset/sour-dragons-cheat.md b/.changeset/sour-dragons-cheat.md new file mode 100644 index 0000000000..1b577d85f7 --- /dev/null +++ b/.changeset/sour-dragons-cheat.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Add `onboard` command. While still in development, this command aims to guide users in setting up their Backstage App. From 284810a0a1c4e0d76cf98b7390bf2daaea6ff1c1 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 22 Feb 2023 10:45:17 +0100 Subject: [PATCH 123/511] cli: Add better error message if a patch failed Signed-off-by: Marcus Eide --- packages/cli/src/commands/onboard/auth/patch.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/cli/src/commands/onboard/auth/patch.ts b/packages/cli/src/commands/onboard/auth/patch.ts index 2333275064..2ebca2aab2 100644 --- a/packages/cli/src/commands/onboard/auth/patch.ts +++ b/packages/cli/src/commands/onboard/auth/patch.ts @@ -32,6 +32,12 @@ export const patch = async (patchFile: string) => { const targetFile = path.join(targetRoot, targetName); const oldContent = await fs.readFile(targetFile, 'utf8'); const newContent = differ.applyPatch(oldContent, patchContent); + if (!newContent) { + throw new Error( + `Patch ${patchFile} was not applied correctly. + Did you change ${targetName} manually before running this command?`, + ); + } return await fs.writeFile(targetFile, newContent, 'utf8'); }; From ff8bffb063ec36d72fc3bf959c3fc1a881238fa4 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 22 Feb 2023 10:46:25 +0100 Subject: [PATCH 124/511] cli: Remove unused answer variable Signed-off-by: Marcus Eide --- packages/cli/src/commands/onboard/command.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/commands/onboard/command.ts b/packages/cli/src/commands/onboard/command.ts index 4c49631a80..5bad1211ab 100644 --- a/packages/cli/src/commands/onboard/command.ts +++ b/packages/cli/src/commands/onboard/command.ts @@ -21,7 +21,6 @@ import { auth } from './auth'; export async function command(): Promise { const answers = await inquirer.prompt<{ shouldSetupAuth: boolean; - provider?: string; }>([ { type: 'confirm', From 711f8c427290547f680fef3b26306ce895fc85b9 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 22 Feb 2023 10:57:26 +0100 Subject: [PATCH 125/511] cli: Fix typo Signed-off-by: Marcus Eide --- packages/cli/src/commands/onboard/auth/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts index 728a2ffc2c..279a8cea7d 100644 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ b/packages/cli/src/commands/onboard/auth/index.ts @@ -42,8 +42,11 @@ export async function auth(): Promise { throw new Error(`Provider ${provider} not implemented yet.`); } - Task.log(`Done setting up ${provider}!`); + Task.log(`Done setting up ${provider} Authentication!`); + Task.log(); Task.log( - `You can now start you app with ${chalk.inverse(chalk.italic('yarn dev'))}`, + `You can now start your app with ${chalk.inverse( + chalk.italic('yarn dev'), + )}`, ); } From c24703bd5aeda4feb606fe753ab37e621d7c914d Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Fri, 24 Feb 2023 15:28:02 +0100 Subject: [PATCH 126/511] cli: Add GitLab option to setting up auth Signed-off-by: Marcus Eide --- .../cli/src/commands/onboard/auth/config.ts | 43 +++--- .../src/commands/onboard/auth/github/index.ts | 16 +-- .../src/commands/onboard/auth/gitlab/index.ts | 126 ++++++++++++++++++ .../cli/src/commands/onboard/auth/index.ts | 7 +- .../patches/01-github.Add-SignInPage.patch | 1 - .../patches/03-gitlab.Add-SignInPage.patch | 25 ++++ .../04-gitlab.Use-signIn-resolver.patch | 27 ++++ 7 files changed, 215 insertions(+), 30 deletions(-) create mode 100644 packages/cli/src/commands/onboard/auth/gitlab/index.ts create mode 100644 packages/cli/src/commands/onboard/auth/patches/03-gitlab.Add-SignInPage.patch create mode 100644 packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch diff --git a/packages/cli/src/commands/onboard/auth/config.ts b/packages/cli/src/commands/onboard/auth/config.ts index 54c103cdf8..01afc5f96c 100644 --- a/packages/cli/src/commands/onboard/auth/config.ts +++ b/packages/cli/src/commands/onboard/auth/config.ts @@ -14,28 +14,35 @@ * limitations under the License. */ +import { UserEntity } from '@backstage/catalog-model'; import * as fs from 'fs-extra'; import yaml from 'yaml'; -type GithubAuthConfig = { +type AuthConfig = { auth: { providers: { - github: { + [key: string]: { development: { clientId: string; clientSecret: string; enterpriseInstanceUrl?: string; + audience?: string; }; }; }; }; - catalog?: { - locations: Array<{ - type: string; - target: string; - rules: Array<{ allow: Array }>; - }>; - }; +}; + +const catalogUserLocation = { + catalog: { + locations: [ + { + type: 'file', + target: '../../user-info.yaml', + rules: [{ allow: ['User'] }], + }, + ], + }, }; const readYaml = async (file: string) => { @@ -44,11 +51,11 @@ const readYaml = async (file: string) => { export const updateConfigFile = async ( file: string, - config: GithubAuthConfig, + authConfig: AuthConfig, ) => { const content = fs.existsSync(file) - ? { ...(await readYaml(file)), ...config } - : config; + ? { ...(await readYaml(file)), ...authConfig, ...catalogUserLocation } + : { ...authConfig, ...catalogUserLocation }; return await fs.writeFile( file, @@ -59,15 +66,17 @@ export const updateConfigFile = async ( ); }; -export const addUserEntity = async (file: string, username: string) => { - const content = { +export const addUserEntity = async ( + file: string, + username: string, + annotations?: Record, +) => { + const content: UserEntity = { apiVersion: 'backstage.io/v1alpha1', kind: 'User', metadata: { name: username, - annotations: { - 'github.com/user-login': username, - }, + annotations: { ...annotations }, }, spec: { memberOf: [], diff --git a/packages/cli/src/commands/onboard/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/github/index.ts index def97bf619..c1789fa64d 100644 --- a/packages/cli/src/commands/onboard/auth/github/index.ts +++ b/packages/cli/src/commands/onboard/auth/github/index.ts @@ -67,15 +67,6 @@ const getConfig = (answers: Answers) => { }, }, }, - catalog: { - locations: [ - { - type: 'file', - target: '../../user-info.yaml', - rules: [{ allow: ['User'] }], - }, - ], - }, }; }; @@ -161,11 +152,14 @@ export const github = async () => { await Task.forItem( 'Creating', USER_ENTITY_FILE, - async () => await addUserEntity(USER_ENTITY_FILE, username), + async () => + await addUserEntity(USER_ENTITY_FILE, username, { + 'github.com/user-login': username, + }), ); const patches = await fs.readdir(PATCH_FOLDER); - for (const patchFile of patches) { + for (const patchFile of patches.filter(p => p.includes('github'))) { await Task.forItem('Patching', patchFile, async () => { await patch(patchFile); }); diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/gitlab/index.ts new file mode 100644 index 0000000000..4fa77f6b02 --- /dev/null +++ b/packages/cli/src/commands/onboard/auth/gitlab/index.ts @@ -0,0 +1,126 @@ +/* + * Copyright 2023 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 chalk from 'chalk'; +import * as fs from 'fs-extra'; +import inquirer from 'inquirer'; +import { Task } from '../../../../lib/tasks'; +import { addUserEntity, updateConfigFile } from '../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; +import { patch } from '../patch'; + +const getConfig = (answers: Answers) => { + const { clientId, clientSecret, hasAudience, audience } = answers; + + return { + auth: { + providers: { + gitlab: { + development: { + clientId, + clientSecret, + ...(hasAudience && { + audience, + }), + }, + }, + }, + }, + }; +}; + +type Answers = { + username: string; + clientSecret: string; + clientId: string; + hasAudience: boolean; + audience?: string; +}; + +export const gitlab = async () => { + Task.log(` + To add GitLub authentication, you must create an Application from the GitLab Settings: ${chalk.blue( + 'https://gitlab.com/-/profile/applications', + )} + The Redirect URI should point to your Backstage backend auth handler. + + Settings for local development: + ${chalk.cyan(` + Name: Backstage (or your custom app name) + Redirect URI: http://localhost:7007/api/auth/gitlab/handler/frame + Scopes: read_api and read_user`)} + + You can find the full documentation page here: ${chalk.blue( + 'https://backstage.io/docs/auth/gitlab/provider', + )} + `); + + const answers = await inquirer.prompt([ + { + type: 'input', + name: 'username', + message: 'What is your GitLab username?', + validate: (input: string) => (input.length ? true : false), + }, + { + type: 'input', + name: 'clientId', + message: 'What is your Application Id?', + validate: (input: string) => (input.length ? true : false), + }, + { + type: 'input', + name: 'clientSecret', + message: 'What is your Application Secret?', + validate: (input: string) => (input.length ? true : false), + }, + { + type: 'confirm', + name: 'hasAudience', + message: 'Do you have a self-hosted instance of GitLab?', + }, + { + type: 'input', + name: 'audience', + message: 'What is the URL for your GitLab instance?', + when: ({ hasAudience }) => hasAudience, + validate: (input: string) => Boolean(new URL(input)), + }, + ]); + + const { username } = answers; + const config = getConfig(answers); + + Task.log('Setting up GitLab Authentication for you...'); + + await Task.forItem( + 'Updating', + APP_CONFIG_FILE, + async () => await updateConfigFile(APP_CONFIG_FILE, config), + ); + await Task.forItem( + 'Creating', + USER_ENTITY_FILE, + async () => await addUserEntity(USER_ENTITY_FILE, username), + ); + + const patches = await fs.readdir(PATCH_FOLDER); + for (const patchFile of patches.filter(p => p.includes('gitlab'))) { + await Task.forItem('Patching', patchFile, async () => { + await patch(patchFile); + }); + } +}; diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts index 279a8cea7d..df9471e1db 100644 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ b/packages/cli/src/commands/onboard/auth/index.ts @@ -18,6 +18,7 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../lib/tasks'; import { github } from './github'; +import { gitlab } from './gitlab'; export async function auth(): Promise { const answers = await inquirer.prompt<{ @@ -27,7 +28,7 @@ export async function auth(): Promise { type: 'list', name: 'provider', message: 'Please select a provider:', - choices: ['GitHub'], + choices: ['GitHub', 'GitLab'], }, ]); @@ -38,6 +39,10 @@ export async function auth(): Promise { await github(); break; } + case 'GitLab': { + await gitlab(); + break; + } default: throw new Error(`Provider ${provider} not implemented yet.`); } diff --git a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch index 8a3401fea1..db9f5228e8 100644 --- a/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch +++ b/packages/cli/src/commands/onboard/auth/patches/01-github.Add-SignInPage.patch @@ -14,7 +14,6 @@ + SignInPage: props => ( + ( ++ ++ ), ++ }, \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch new file mode 100644 index 0000000000..04b432c179 --- /dev/null +++ b/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch @@ -0,0 +1,27 @@ +--- a/packages/backend/src/plugins/auth.ts ++++ b/packages/backend/src/plugins/auth.ts +@@ -38 +38 @@ export default async function createPlugin( +- github: providers.github.create({ ++ gitlab: providers.gitlab.create({ +@@ -40,8 +40,11 @@ export default async function createPlugin( +- resolver(_, ctx) { +- const userRef = 'user:default/guest'; // Must be a full entity reference +- return ctx.issueToken({ +- claims: { +- sub: userRef, // The user's own identity +- ent: [userRef], // A list of identities that the user claims ownership through +- }, +- }); ++ async resolver(info, ctx) { ++ const { fullProfile } = info.result; ++ ++ const userId = fullProfile.username; ++ if (!userId) { ++ throw new Error( ++ `GitLab user profile does not contain a username`, ++ ); ++ } ++ ++ return ctx.signInWithCatalogUser({ entityRef: { name: userId } }); +@@ -49 +51,0 @@ export default async function createPlugin( +- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(), \ No newline at end of file From 55f802caa65afe8505f0d83b70de525f9aecb045 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 27 Feb 2023 19:00:45 +0100 Subject: [PATCH 127/511] Add GitHub integration to Onboard CLI Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/onboard/command.ts | 64 +++++++++++----- .../onboard/integrations/github/index.ts | 73 +++++++++++++++++++ .../commands/onboard/integrations/index.ts | 49 +++++++++++++ 3 files changed, 168 insertions(+), 18 deletions(-) create mode 100644 packages/cli/src/commands/onboard/integrations/github/index.ts create mode 100644 packages/cli/src/commands/onboard/integrations/index.ts diff --git a/packages/cli/src/commands/onboard/command.ts b/packages/cli/src/commands/onboard/command.ts index 5bad1211ab..1cfaabed12 100644 --- a/packages/cli/src/commands/onboard/command.ts +++ b/packages/cli/src/commands/onboard/command.ts @@ -17,26 +17,54 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; import { auth } from './auth'; +import { integrations } from './integrations'; export async function command(): Promise { - const answers = await inquirer.prompt<{ - shouldSetupAuth: boolean; - }>([ - { - type: 'confirm', - name: 'shouldSetupAuth', - message: 'Do you want to set up Authentication for this project?', - }, - ]); + try { + // TODO(tudi2d): Is there a way to make this cleaner? + const answers = await inquirer.prompt<{ + shouldSetupAuth: boolean; + }>([ + { + type: 'confirm', + name: 'shouldSetupAuth', + message: 'Do you want to set up Authentication for this project?', + default: true, + }, + ]); - if (!answers.shouldSetupAuth) { - console.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - process.exit(1); + if (!answers.shouldSetupAuth) { + console.log( + chalk.yellow( + 'If you change your mind, feel free to re-run this command.', + ), + ); + } else { + await auth(); + } + + // TODO(tudi2d): Select "Core Features" here such that we can determin if the integrations need to be setup for either Catalog, Scaffollder or both + await inquirer + .prompt<{ + setupScaffolder: boolean; + }>([ + { + type: 'confirm', + name: 'setupScaffolder', + message: 'Do you want to setup Sofware Templates?', + default: true, + }, + ]) + .then(async ({ setupScaffolder }) => + setupScaffolder + ? await integrations() + : console.log( + chalk.yellow( + 'If you change your mind, feel free to re-run this command.', + ), + ), + ); + } catch (err) { + process.exit(-1); } - - await auth(); } diff --git a/packages/cli/src/commands/onboard/integrations/github/index.ts b/packages/cli/src/commands/onboard/integrations/github/index.ts new file mode 100644 index 0000000000..73416699e4 --- /dev/null +++ b/packages/cli/src/commands/onboard/integrations/github/index.ts @@ -0,0 +1,73 @@ +/* + * Copyright 2023 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 chalk from 'chalk'; +import inquirer from 'inquirer'; +import { Task } from '../../../../lib/tasks'; + +export const github = async () => { + const host = 'https://github.com'; + const answers = await inquirer.prompt<{ hasEnterprise: boolean }>([ + { + type: 'confirm', + name: 'hasEnterprise', + message: 'Are you using GitHub Enterprise?', + }, + ]); + + if (answers.hasEnterprise) { + await inquirer.prompt<{ hasEnterprise: boolean }>([ + { + type: 'confirm', + name: 'hasEnterprise', + message: 'Are you using GitHub Enterprise?', + }, + { + type: 'input', + name: 'enterpriseInstanceUrl', + message: 'What is your GitHub Enterprise URL (e.g. ghe.example.net)?', + when: ({ hasEnterprise }) => hasEnterprise, + validate: (input: string) => Boolean(new URL(input)), + }, + ]); + } + + Task.log(` + To create new repositories in GitHub using Software Templates you first need to create a personal access token: ${chalk.blue( + `${host}/settings/tokens/new', + )} + + Select the following scopes: + + Reading software components:${chalk.cyan(` + - "repo"`)} + + Reading organization data:${chalk.cyan(` + - "read:org" + - "read:user" + - "user:email"`)} + + Publishing software templates:${chalk.cyan(` + - "repo" + - "workflow" (if templates include GitHub workflows) + `)} + + You can find the full documentation page here: ${chalk.blue( + 'https://backstage.io/docs/integrations/github/locations', + )} + `, + )}`); +}; diff --git a/packages/cli/src/commands/onboard/integrations/index.ts b/packages/cli/src/commands/onboard/integrations/index.ts new file mode 100644 index 0000000000..2b55ab2bba --- /dev/null +++ b/packages/cli/src/commands/onboard/integrations/index.ts @@ -0,0 +1,49 @@ +/* + * Copyright 2023 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 inquirer from 'inquirer'; +import { github } from './github'; + +enum Integration { + GITHUB = 'GitHub', +} + +const Integrations: Integration[] = [Integration.GITHUB]; + +export async function integrations(): Promise { + await inquirer + .prompt<{ + integration?: Integration; + }>([ + { + // TODO(tudi2d): Should be multiple choice + type: 'list', + name: 'integration', + message: 'Please select an integration:', + choices: Integrations, + }, + ]) + .then(async ({ integration }) => { + if (integration) { + switch (integration) { + case Integration.GITHUB: + await github(); + break; + default: + } + } + }); +} From 87dc2beb2179cedd9c25e2f76e5ac450ffe6a52d Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Wed, 1 Mar 2023 10:10:12 +0100 Subject: [PATCH 128/511] Setup basic GitHub & GHE integration using CLI Signed-off-by: Philipp Hugenroth --- .../src/commands/onboard/auth/github/index.ts | 38 ++++-- .../src/commands/onboard/auth/gitlab/index.ts | 4 +- .../cli/src/commands/onboard/auth/patch.ts | 2 +- .../src/commands/onboard/{auth => }/config.ts | 36 +----- .../src/commands/onboard/{auth => }/files.ts | 0 .../onboard/integrations/github/index.ts | 113 ++++++++++++++---- .../commands/onboard/integrations/index.ts | 2 +- 7 files changed, 126 insertions(+), 69 deletions(-) rename packages/cli/src/commands/onboard/{auth => }/config.ts (68%) rename packages/cli/src/commands/onboard/{auth => }/files.ts (100%) diff --git a/packages/cli/src/commands/onboard/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/github/index.ts index c1789fa64d..ce53d23ad3 100644 --- a/packages/cli/src/commands/onboard/auth/github/index.ts +++ b/packages/cli/src/commands/onboard/auth/github/index.ts @@ -20,10 +20,30 @@ import * as fs from 'fs-extra'; import inquirer from 'inquirer'; import fetch from 'node-fetch'; import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile } from '../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; +import { addUserEntity, updateConfigFile } from '../../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../../files'; import { patch } from '../patch'; +type Answers = { + username: string; + clientSecret: string; + clientId: string; + hasEnterprise: boolean; + enterpriseInstanceUrl?: string; +}; + +const catalogUserLocation = { + catalog: { + locations: [ + { + type: 'file', + target: '../../user-info.yaml', + rules: [{ allow: ['User'] }], + }, + ], + }, +}; + const validateCredentials = async (clientId: string, clientSecret: string) => { try { const app = new OAuthApp({ @@ -70,14 +90,6 @@ const getConfig = (answers: Answers) => { }; }; -type Answers = { - username: string; - clientSecret: string; - clientId: string; - hasEnterprise: boolean; - enterpriseInstanceUrl?: string; -}; - export const github = async () => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( @@ -147,7 +159,11 @@ export const github = async () => { await Task.forItem( 'Updating', APP_CONFIG_FILE, - async () => await updateConfigFile(APP_CONFIG_FILE, config), + async () => + await updateConfigFile(APP_CONFIG_FILE, { + ...config, + ...catalogUserLocation, + }), ); await Task.forItem( 'Creating', diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/gitlab/index.ts index 4fa77f6b02..9e2a674a9a 100644 --- a/packages/cli/src/commands/onboard/auth/gitlab/index.ts +++ b/packages/cli/src/commands/onboard/auth/gitlab/index.ts @@ -18,8 +18,8 @@ import chalk from 'chalk'; import * as fs from 'fs-extra'; import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile } from '../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../files'; +import { addUserEntity, updateConfigFile } from '../../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../../files'; import { patch } from '../patch'; const getConfig = (answers: Answers) => { diff --git a/packages/cli/src/commands/onboard/auth/patch.ts b/packages/cli/src/commands/onboard/auth/patch.ts index 2ebca2aab2..d004eeb157 100644 --- a/packages/cli/src/commands/onboard/auth/patch.ts +++ b/packages/cli/src/commands/onboard/auth/patch.ts @@ -17,7 +17,7 @@ import * as fs from 'fs-extra'; import * as path from 'path'; import * as differ from 'diff'; -import { PATCH_FOLDER } from './files'; +import { PATCH_FOLDER } from '../files'; import { findPaths } from '@backstage/cli-common'; /* eslint-disable-next-line no-restricted-syntax */ diff --git a/packages/cli/src/commands/onboard/auth/config.ts b/packages/cli/src/commands/onboard/config.ts similarity index 68% rename from packages/cli/src/commands/onboard/auth/config.ts rename to packages/cli/src/commands/onboard/config.ts index 01afc5f96c..b5a2336a0a 100644 --- a/packages/cli/src/commands/onboard/auth/config.ts +++ b/packages/cli/src/commands/onboard/config.ts @@ -18,44 +18,14 @@ import { UserEntity } from '@backstage/catalog-model'; import * as fs from 'fs-extra'; import yaml from 'yaml'; -type AuthConfig = { - auth: { - providers: { - [key: string]: { - development: { - clientId: string; - clientSecret: string; - enterpriseInstanceUrl?: string; - audience?: string; - }; - }; - }; - }; -}; - -const catalogUserLocation = { - catalog: { - locations: [ - { - type: 'file', - target: '../../user-info.yaml', - rules: [{ allow: ['User'] }], - }, - ], - }, -}; - const readYaml = async (file: string) => { return yaml.parse(await fs.readFile(file, 'utf8')); }; -export const updateConfigFile = async ( - file: string, - authConfig: AuthConfig, -) => { +export const updateConfigFile = async (file: string, config: T) => { const content = fs.existsSync(file) - ? { ...(await readYaml(file)), ...authConfig, ...catalogUserLocation } - : { ...authConfig, ...catalogUserLocation }; + ? { ...(await readYaml(file)), ...config } + : { ...config }; return await fs.writeFile( file, diff --git a/packages/cli/src/commands/onboard/auth/files.ts b/packages/cli/src/commands/onboard/files.ts similarity index 100% rename from packages/cli/src/commands/onboard/auth/files.ts rename to packages/cli/src/commands/onboard/files.ts diff --git a/packages/cli/src/commands/onboard/integrations/github/index.ts b/packages/cli/src/commands/onboard/integrations/github/index.ts index 73416699e4..1a0d7a5ef5 100644 --- a/packages/cli/src/commands/onboard/integrations/github/index.ts +++ b/packages/cli/src/commands/onboard/integrations/github/index.ts @@ -17,37 +17,82 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; +import { updateConfigFile } from '../../config'; +import { APP_CONFIG_FILE } from '../../files'; + +type Answers = { + isEnterprise: boolean; + host: string; + apiBaseUrl?: string; + token: string; +}; + +const getConfig = ({ isEnterprise, host, apiBaseUrl, token }: Answers) => ({ + integrations: { + github: isEnterprise + ? [ + { + host, + apiBaseUrl, + token, + }, + ] + : [ + { + host, + token, + }, + ], + }, +}); export const github = async () => { - const host = 'https://github.com'; - const answers = await inquirer.prompt<{ hasEnterprise: boolean }>([ + let host = 'github.com'; + let apiBaseUrl: string | undefined; + + // TODO(tudi2d): Is GitHub Enterprise a valid setup if there is no Authentication? + const { isEnterprise } = await inquirer.prompt<{ + isEnterprise: Answers['isEnterprise']; + }>([ { type: 'confirm', - name: 'hasEnterprise', + name: 'isEnterprise', message: 'Are you using GitHub Enterprise?', }, ]); - if (answers.hasEnterprise) { - await inquirer.prompt<{ hasEnterprise: boolean }>([ - { - type: 'confirm', - name: 'hasEnterprise', - message: 'Are you using GitHub Enterprise?', - }, - { - type: 'input', - name: 'enterpriseInstanceUrl', - message: 'What is your GitHub Enterprise URL (e.g. ghe.example.net)?', - when: ({ hasEnterprise }) => hasEnterprise, - validate: (input: string) => Boolean(new URL(input)), - }, - ]); + if (isEnterprise) { + try { + const answers = await inquirer.prompt< + Pick + >([ + { + type: 'input', + name: 'apiBaseUrl', + message: + 'What is your GitHub Enterprise REST API URL (e.g. https://ghe.example.net/api/v3)?', + // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up + validate: (input: string) => Boolean(new URL(input)), + }, + { + type: 'input', + name: 'host', + message: + 'What is your GitHub Enterprise Host (e.g. ghe.example.net)?', + // TODO(tudi2d): validate: Must the host be part of the REST API URL? + }, + ]); + + host = answers.host; + apiBaseUrl = answers.apiBaseUrl; + } catch (err) { + return; + } } Task.log(` To create new repositories in GitHub using Software Templates you first need to create a personal access token: ${chalk.blue( - `${host}/settings/tokens/new', + `https://${host}/settings/tokens/new`, )} Select the following scopes: @@ -68,6 +113,32 @@ export const github = async () => { You can find the full documentation page here: ${chalk.blue( 'https://backstage.io/docs/integrations/github/locations', )} - `, - )}`); + `); + + const { token } = await inquirer.prompt<{ + token: Answers['token']; + }>([ + { + type: 'input', + name: 'token', + message: + 'Please insert your personal access token to setup the GitHub Integration', + // TODO(tudi2d): validate: Must the host be part of the REST API URL? + }, + ]); + + const config = getConfig({ + token, + isEnterprise, + host, + apiBaseUrl, + }); + + Task.log('Setting up GitHub Integration for you...'); + + await Task.forItem( + 'Updating', + APP_CONFIG_FILE, + async () => await updateConfigFile(APP_CONFIG_FILE, config), + ); }; diff --git a/packages/cli/src/commands/onboard/integrations/index.ts b/packages/cli/src/commands/onboard/integrations/index.ts index 2b55ab2bba..f3ac6754d6 100644 --- a/packages/cli/src/commands/onboard/integrations/index.ts +++ b/packages/cli/src/commands/onboard/integrations/index.ts @@ -29,7 +29,7 @@ export async function integrations(): Promise { integration?: Integration; }>([ { - // TODO(tudi2d): Should be multiple choice + // TODO(tudi2d): Let's start with one, but it should be multiple choice in the future type: 'list', name: 'integration', message: 'Please select an integration:', From 3d121668268fd1f1494d3d4471e055e50cdd8190 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 6 Mar 2023 13:14:37 +0100 Subject: [PATCH 129/511] Chain Scaffolder inquirer prompts Signed-off-by: Philipp Hugenroth --- .../src/commands/onboard/auth/gitlab/index.ts | 2 +- .../onboard/integrations/github/index.ts | 54 +++++++++---------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/gitlab/index.ts index 9e2a674a9a..702537fe70 100644 --- a/packages/cli/src/commands/onboard/auth/gitlab/index.ts +++ b/packages/cli/src/commands/onboard/auth/gitlab/index.ts @@ -52,7 +52,7 @@ type Answers = { export const gitlab = async () => { Task.log(` - To add GitLub authentication, you must create an Application from the GitLab Settings: ${chalk.blue( + To add GitLab authentication, you must create an Application from the GitLab Settings: ${chalk.blue( 'https://gitlab.com/-/profile/applications', )} The Redirect URI should point to your Backstage backend auth handler. diff --git a/packages/cli/src/commands/onboard/integrations/github/index.ts b/packages/cli/src/commands/onboard/integrations/github/index.ts index 1a0d7a5ef5..ac4fd37406 100644 --- a/packages/cli/src/commands/onboard/integrations/github/index.ts +++ b/packages/cli/src/commands/onboard/integrations/github/index.ts @@ -48,46 +48,42 @@ const getConfig = ({ isEnterprise, host, apiBaseUrl, token }: Answers) => ({ export const github = async () => { let host = 'github.com'; - let apiBaseUrl: string | undefined; // TODO(tudi2d): Is GitHub Enterprise a valid setup if there is no Authentication? - const { isEnterprise } = await inquirer.prompt<{ + const { + isEnterprise, + host: _host, + apiBaseUrl, + } = await inquirer.prompt<{ isEnterprise: Answers['isEnterprise']; + apiBaseUrl: Answers['apiBaseUrl']; + host: Answers['host']; }>([ { type: 'confirm', name: 'isEnterprise', message: 'Are you using GitHub Enterprise?', }, + { + type: 'input', + name: 'apiBaseUrl', + when: ({ isEnterprise: _isEnterprise }) => _isEnterprise, + message: + 'What is your GitHub Enterprise REST API URL (e.g. https://ghe.example.net/api/v3)?', + // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up + validate: (input: string) => Boolean(new URL(input)), + }, + { + type: 'input', + name: 'host', + when: ({ isEnterprise: _isEnterprise }) => _isEnterprise, + message: 'What is your GitHub Enterprise Host (e.g. ghe.example.net)?', + // TODO(tudi2d): validate: Must the host be part of the REST API URL? + }, ]); if (isEnterprise) { - try { - const answers = await inquirer.prompt< - Pick - >([ - { - type: 'input', - name: 'apiBaseUrl', - message: - 'What is your GitHub Enterprise REST API URL (e.g. https://ghe.example.net/api/v3)?', - // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up - validate: (input: string) => Boolean(new URL(input)), - }, - { - type: 'input', - name: 'host', - message: - 'What is your GitHub Enterprise Host (e.g. ghe.example.net)?', - // TODO(tudi2d): validate: Must the host be part of the REST API URL? - }, - ]); - - host = answers.host; - apiBaseUrl = answers.apiBaseUrl; - } catch (err) { - return; - } + host = _host; } Task.log(` @@ -123,7 +119,7 @@ export const github = async () => { name: 'token', message: 'Please insert your personal access token to setup the GitHub Integration', - // TODO(tudi2d): validate: Must the host be part of the REST API URL? + // TODO(tudi2d): validate }, ]); From 8e254c06bc3655bc4ef93c76bbb727fd50f6959e Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 8 Mar 2023 09:48:47 +0100 Subject: [PATCH 130/511] cli: Use custom resolver to sign-in as guest instead, do not add user-info to catalog. Signed-off-by: Marcus Eide --- .../src/commands/onboard/auth/github/index.ts | 46 ++----------------- .../src/commands/onboard/auth/gitlab/index.ts | 17 +------ .../02-github.Use-signIn-resolver.patch | 14 ------ ...e.patch => 02-gitlab.Add-SignInPage.patch} | 0 .../03-gitlab.Change-signIn-resolver.patch | 5 ++ .../04-gitlab.Use-signIn-resolver.patch | 27 ----------- packages/cli/src/commands/onboard/config.ts | 27 ----------- packages/cli/src/commands/onboard/files.ts | 1 - 8 files changed, 11 insertions(+), 126 deletions(-) delete mode 100644 packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch rename packages/cli/src/commands/onboard/auth/patches/{03-gitlab.Add-SignInPage.patch => 02-gitlab.Add-SignInPage.patch} (100%) create mode 100644 packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch delete mode 100644 packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch diff --git a/packages/cli/src/commands/onboard/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/github/index.ts index ce53d23ad3..7e1e63a8fe 100644 --- a/packages/cli/src/commands/onboard/auth/github/index.ts +++ b/packages/cli/src/commands/onboard/auth/github/index.ts @@ -18,32 +18,18 @@ import { OAuthApp } from '@octokit/oauth-app'; import chalk from 'chalk'; import * as fs from 'fs-extra'; import inquirer from 'inquirer'; -import fetch from 'node-fetch'; import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../../files'; +import { updateConfigFile } from '../../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; import { patch } from '../patch'; type Answers = { - username: string; clientSecret: string; clientId: string; hasEnterprise: boolean; enterpriseInstanceUrl?: string; }; -const catalogUserLocation = { - catalog: { - locations: [ - { - type: 'file', - target: '../../user-info.yaml', - rules: [{ allow: ['User'] }], - }, - ], - }, -}; - const validateCredentials = async (clientId: string, clientSecret: string) => { try { const app = new OAuthApp({ @@ -108,18 +94,6 @@ export const github = async () => { `); const answers = await inquirer.prompt([ - { - type: 'input', - name: 'username', - message: 'What is your GitHub username?', - validate: async (input: string) => { - const response = await fetch(`https://api.github.com/users/${input}`); - if (!response.ok) { - return chalk.red('Unknown user. Please try again.'); - } - return true; - }, - }, { type: 'input', name: 'clientId', @@ -146,7 +120,7 @@ export const github = async () => { }, ]); - const { username, clientId, clientSecret } = answers; + const { clientId, clientSecret } = answers; const config = getConfig(answers); Task.log('Setting up GitHub Authentication for you...'); @@ -159,19 +133,7 @@ export const github = async () => { await Task.forItem( 'Updating', APP_CONFIG_FILE, - async () => - await updateConfigFile(APP_CONFIG_FILE, { - ...config, - ...catalogUserLocation, - }), - ); - await Task.forItem( - 'Creating', - USER_ENTITY_FILE, - async () => - await addUserEntity(USER_ENTITY_FILE, username, { - 'github.com/user-login': username, - }), + async () => await updateConfigFile(APP_CONFIG_FILE, config), ); const patches = await fs.readdir(PATCH_FOLDER); diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/gitlab/index.ts index 702537fe70..1940f66017 100644 --- a/packages/cli/src/commands/onboard/auth/gitlab/index.ts +++ b/packages/cli/src/commands/onboard/auth/gitlab/index.ts @@ -18,8 +18,8 @@ import chalk from 'chalk'; import * as fs from 'fs-extra'; import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; -import { addUserEntity, updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE, PATCH_FOLDER, USER_ENTITY_FILE } from '../../files'; +import { updateConfigFile } from '../../config'; +import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; import { patch } from '../patch'; const getConfig = (answers: Answers) => { @@ -43,7 +43,6 @@ const getConfig = (answers: Answers) => { }; type Answers = { - username: string; clientSecret: string; clientId: string; hasAudience: boolean; @@ -69,12 +68,6 @@ export const gitlab = async () => { `); const answers = await inquirer.prompt([ - { - type: 'input', - name: 'username', - message: 'What is your GitLab username?', - validate: (input: string) => (input.length ? true : false), - }, { type: 'input', name: 'clientId', @@ -101,7 +94,6 @@ export const gitlab = async () => { }, ]); - const { username } = answers; const config = getConfig(answers); Task.log('Setting up GitLab Authentication for you...'); @@ -111,11 +103,6 @@ export const gitlab = async () => { APP_CONFIG_FILE, async () => await updateConfigFile(APP_CONFIG_FILE, config), ); - await Task.forItem( - 'Creating', - USER_ENTITY_FILE, - async () => await addUserEntity(USER_ENTITY_FILE, username), - ); const patches = await fs.readdir(PATCH_FOLDER); for (const patchFile of patches.filter(p => p.includes('gitlab'))) { diff --git a/packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch deleted file mode 100644 index 2baaff7cf9..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/02-github.Use-signIn-resolver.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/packages/backend/src/plugins/auth.ts -+++ b/packages/backend/src/plugins/auth.ts -@@ -40,10 +40 @@ export default async function createPlugin( -- resolver(_, ctx) { -- const userRef = 'user:default/guest'; // Must be a full entity reference -- return ctx.issueToken({ -- claims: { -- sub: userRef, // The user's own identity -- ent: [userRef], // A list of identities that the user claims ownership through -- }, -- }); -- }, -- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(), -+ resolver: providers.github.resolvers.usernameMatchingUserEntityName(), \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Add-SignInPage.patch b/packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch similarity index 100% rename from packages/cli/src/commands/onboard/auth/patches/03-gitlab.Add-SignInPage.patch rename to packages/cli/src/commands/onboard/auth/patches/02-gitlab.Add-SignInPage.patch diff --git a/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch new file mode 100644 index 0000000000..7a69669674 --- /dev/null +++ b/packages/cli/src/commands/onboard/auth/patches/03-gitlab.Change-signIn-resolver.patch @@ -0,0 +1,5 @@ +--- a/packages/backend/src/plugins/auth.ts ++++ b/packages/backend/src/plugins/auth.ts +@@ -38 +38 @@ export default async function createPlugin( +- github: providers.github.create({ ++ gitlab: providers.gitlab.create({ \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch b/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch deleted file mode 100644 index 04b432c179..0000000000 --- a/packages/cli/src/commands/onboard/auth/patches/04-gitlab.Use-signIn-resolver.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- a/packages/backend/src/plugins/auth.ts -+++ b/packages/backend/src/plugins/auth.ts -@@ -38 +38 @@ export default async function createPlugin( -- github: providers.github.create({ -+ gitlab: providers.gitlab.create({ -@@ -40,8 +40,11 @@ export default async function createPlugin( -- resolver(_, ctx) { -- const userRef = 'user:default/guest'; // Must be a full entity reference -- return ctx.issueToken({ -- claims: { -- sub: userRef, // The user's own identity -- ent: [userRef], // A list of identities that the user claims ownership through -- }, -- }); -+ async resolver(info, ctx) { -+ const { fullProfile } = info.result; -+ -+ const userId = fullProfile.username; -+ if (!userId) { -+ throw new Error( -+ `GitLab user profile does not contain a username`, -+ ); -+ } -+ -+ return ctx.signInWithCatalogUser({ entityRef: { name: userId } }); -@@ -49 +51,0 @@ export default async function createPlugin( -- // resolver: providers.github.resolvers.usernameMatchingUserEntityName(), \ No newline at end of file diff --git a/packages/cli/src/commands/onboard/config.ts b/packages/cli/src/commands/onboard/config.ts index b5a2336a0a..8d419dd71a 100644 --- a/packages/cli/src/commands/onboard/config.ts +++ b/packages/cli/src/commands/onboard/config.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { UserEntity } from '@backstage/catalog-model'; import * as fs from 'fs-extra'; import yaml from 'yaml'; @@ -35,29 +34,3 @@ export const updateConfigFile = async (file: string, config: T) => { 'utf8', ); }; - -export const addUserEntity = async ( - file: string, - username: string, - annotations?: Record, -) => { - const content: UserEntity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'User', - metadata: { - name: username, - annotations: { ...annotations }, - }, - spec: { - memberOf: [], - }, - }; - - return await fs.writeFile( - file, - yaml.stringify(content, { - indent: 2, - }), - 'utf8', - ); -}; diff --git a/packages/cli/src/commands/onboard/files.ts b/packages/cli/src/commands/onboard/files.ts index af07ef254b..17f8a0f85e 100644 --- a/packages/cli/src/commands/onboard/files.ts +++ b/packages/cli/src/commands/onboard/files.ts @@ -20,7 +20,6 @@ import * as path from 'path'; /* eslint-disable-next-line no-restricted-syntax */ const { targetRoot, ownDir } = findPaths(__dirname); export const APP_CONFIG_FILE = path.join(targetRoot, 'app-config.local.yaml'); -export const USER_ENTITY_FILE = path.join(targetRoot, 'user-info.yaml'); export const PATCH_FOLDER = path.join( ownDir, 'src', From b590c95ed8e64705e3a68e4b37afda9da9249a33 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 8 Mar 2023 16:00:42 +0100 Subject: [PATCH 131/511] cli: Remember provider selection from auth setup when setting up software templates Signed-off-by: Marcus Eide --- .../src/commands/onboard/auth/github/index.ts | 6 +- .../src/commands/onboard/auth/gitlab/index.ts | 6 +- .../cli/src/commands/onboard/auth/index.ts | 32 +++--- packages/cli/src/commands/onboard/command.ts | 87 ++++++++------- .../onboard/integrations/github/index.ts | 100 +++++++++--------- .../commands/onboard/integrations/index.ts | 72 +++++++++---- 6 files changed, 167 insertions(+), 136 deletions(-) diff --git a/packages/cli/src/commands/onboard/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/github/index.ts index 7e1e63a8fe..36c6b02038 100644 --- a/packages/cli/src/commands/onboard/auth/github/index.ts +++ b/packages/cli/src/commands/onboard/auth/github/index.ts @@ -23,7 +23,7 @@ import { updateConfigFile } from '../../config'; import { APP_CONFIG_FILE, PATCH_FOLDER } from '../../files'; import { patch } from '../patch'; -type Answers = { +export type Answers = { clientSecret: string; clientId: string; hasEnterprise: boolean; @@ -76,7 +76,7 @@ const getConfig = (answers: Answers) => { }; }; -export const github = async () => { +export const github = async (): Promise => { Task.log(` To add GitHub authentication, you must create an OAuth App from the GitHub developer settings: ${chalk.blue( 'https://github.com/settings/developers', @@ -142,4 +142,6 @@ export const github = async () => { await patch(patchFile); }); } + + return answers; }; diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/gitlab/index.ts index 1940f66017..bc5491111c 100644 --- a/packages/cli/src/commands/onboard/auth/gitlab/index.ts +++ b/packages/cli/src/commands/onboard/auth/gitlab/index.ts @@ -42,14 +42,14 @@ const getConfig = (answers: Answers) => { }; }; -type Answers = { +export type Answers = { clientSecret: string; clientId: string; hasAudience: boolean; audience?: string; }; -export const gitlab = async () => { +export const gitlab = async (): Promise => { Task.log(` To add GitLab authentication, you must create an Application from the GitLab Settings: ${chalk.blue( 'https://gitlab.com/-/profile/applications', @@ -110,4 +110,6 @@ export const gitlab = async () => { await patch(patchFile); }); } + + return answers; }; diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts index df9471e1db..5a299e2fb5 100644 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ b/packages/cli/src/commands/onboard/auth/index.ts @@ -14,44 +14,50 @@ * limitations under the License. */ -import chalk from 'chalk'; import inquirer from 'inquirer'; import { Task } from '../../../lib/tasks'; -import { github } from './github'; -import { gitlab } from './gitlab'; +import { github, Answers as GitHubAnswers } from './github'; +import { gitlab, Answers as GitLabAnswers } from './gitlab'; -export async function auth(): Promise { +export { type GitHubAnswers, type GitLabAnswers }; + +export async function auth(): Promise<{ + provider: string; + answers: GitHubAnswers | GitLabAnswers; +}> { const answers = await inquirer.prompt<{ - provider?: string; + provider: string; }>([ { type: 'list', name: 'provider', - message: 'Please select a provider:', + message: 'Please select an authentication provider:', choices: ['GitHub', 'GitLab'], }, ]); const { provider } = answers; + let providerAnswers; switch (provider) { case 'GitHub': { - await github(); + providerAnswers = await github(); break; } case 'GitLab': { - await gitlab(); + providerAnswers = await gitlab(); break; } default: throw new Error(`Provider ${provider} not implemented yet.`); } + Task.log(); Task.log(`Done setting up ${provider} Authentication!`); Task.log(); - Task.log( - `You can now start your app with ${chalk.inverse( - chalk.italic('yarn dev'), - )}`, - ); + + return { + provider, + answers: providerAnswers, + }; } diff --git a/packages/cli/src/commands/onboard/command.ts b/packages/cli/src/commands/onboard/command.ts index 1cfaabed12..5cf25953ab 100644 --- a/packages/cli/src/commands/onboard/command.ts +++ b/packages/cli/src/commands/onboard/command.ts @@ -16,55 +16,54 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; +import { Task } from '../../lib/tasks'; import { auth } from './auth'; import { integrations } from './integrations'; export async function command(): Promise { - try { - // TODO(tudi2d): Is there a way to make this cleaner? - const answers = await inquirer.prompt<{ - shouldSetupAuth: boolean; - }>([ - { - type: 'confirm', - name: 'shouldSetupAuth', - message: 'Do you want to set up Authentication for this project?', - default: true, - }, - ]); + const answers = await inquirer.prompt<{ + shouldSetupAuth: boolean; + shouldSetupScaffolder: boolean; + }>([ + { + type: 'confirm', + name: 'shouldSetupAuth', + message: 'Do you want to set up Authentication for this project?', + default: true, + }, + { + type: 'confirm', + name: 'shouldSetupScaffolder', + message: 'Do you want to use Software Templates in this project?', + default: true, + }, + ]); - if (!answers.shouldSetupAuth) { - console.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ); - } else { - await auth(); - } + const { shouldSetupAuth, shouldSetupScaffolder } = answers; - // TODO(tudi2d): Select "Core Features" here such that we can determin if the integrations need to be setup for either Catalog, Scaffollder or both - await inquirer - .prompt<{ - setupScaffolder: boolean; - }>([ - { - type: 'confirm', - name: 'setupScaffolder', - message: 'Do you want to setup Sofware Templates?', - default: true, - }, - ]) - .then(async ({ setupScaffolder }) => - setupScaffolder - ? await integrations() - : console.log( - chalk.yellow( - 'If you change your mind, feel free to re-run this command.', - ), - ), - ); - } catch (err) { - process.exit(-1); + let providerInfo; + if (shouldSetupAuth) { + providerInfo = await auth(); } + + if (shouldSetupScaffolder) { + await integrations(providerInfo); + } + + if (!shouldSetupAuth && !shouldSetupScaffolder) { + Task.log( + chalk.yellow( + 'If you change your mind, feel free to re-run this command.', + ), + ); + return; + } + + Task.log(); + Task.log( + `You can now start your app with ${chalk.inverse( + chalk.italic('yarn dev'), + )}`, + ); + Task.log(); } diff --git a/packages/cli/src/commands/onboard/integrations/github/index.ts b/packages/cli/src/commands/onboard/integrations/github/index.ts index ac4fd37406..883a119c00 100644 --- a/packages/cli/src/commands/onboard/integrations/github/index.ts +++ b/packages/cli/src/commands/onboard/integrations/github/index.ts @@ -19,76 +19,74 @@ import inquirer from 'inquirer'; import { Task } from '../../../../lib/tasks'; import { updateConfigFile } from '../../config'; import { APP_CONFIG_FILE } from '../../files'; +import { GitHubAnswers } from '../../auth'; type Answers = { - isEnterprise: boolean; - host: string; - apiBaseUrl?: string; - token: string; + hasEnterprise: boolean; + enterpriseInstanceUrl: string; + apiBaseUrl: string; }; -const getConfig = ({ isEnterprise, host, apiBaseUrl, token }: Answers) => ({ +const getConfig = ({ + hasEnterprise, + apiBaseUrl, + host, + token, +}: { + hasEnterprise: boolean; + apiBaseUrl: string; + host: string; + token: string; +}) => ({ integrations: { - github: isEnterprise - ? [ - { - host, - apiBaseUrl, - token, - }, - ] - : [ - { - host, - token, - }, - ], + github: [ + { + host, + token, + ...(hasEnterprise && { + apiBaseUrl, + }), + }, + ], }, }); -export const github = async () => { - let host = 'github.com'; - +export const github = async (providerAnswers?: GitHubAnswers) => { // TODO(tudi2d): Is GitHub Enterprise a valid setup if there is no Authentication? - const { - isEnterprise, - host: _host, - apiBaseUrl, - } = await inquirer.prompt<{ - isEnterprise: Answers['isEnterprise']; - apiBaseUrl: Answers['apiBaseUrl']; - host: Answers['host']; - }>([ + const answers = await inquirer.prompt([ { type: 'confirm', - name: 'isEnterprise', + name: 'hasEnterprise', message: 'Are you using GitHub Enterprise?', + when: () => typeof providerAnswers === 'undefined', }, { type: 'input', - name: 'apiBaseUrl', - when: ({ isEnterprise: _isEnterprise }) => _isEnterprise, - message: - 'What is your GitHub Enterprise REST API URL (e.g. https://ghe.example.net/api/v3)?', - // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up + name: 'enterpriseInstanceUrl', + message: 'What is your URL for GitHub Enterprise?', + when: ({ hasEnterprise }) => hasEnterprise, validate: (input: string) => Boolean(new URL(input)), }, { type: 'input', - name: 'host', - when: ({ isEnterprise: _isEnterprise }) => _isEnterprise, - message: 'What is your GitHub Enterprise Host (e.g. ghe.example.net)?', - // TODO(tudi2d): validate: Must the host be part of the REST API URL? + name: 'apiBaseUrl', + message: 'What is your GitHub Enterprise API path?', + default: '/api/v3', + when: ({ hasEnterprise }) => + hasEnterprise || providerAnswers?.hasEnterprise, + // TODO(tudi2d): Fetch API using OAuth Token if Auth was set up }, ]); - if (isEnterprise) { - host = _host; - } + const host = new URL( + providerAnswers?.enterpriseInstanceUrl ?? + answers?.enterpriseInstanceUrl ?? + 'http://github.com', + ); Task.log(` To create new repositories in GitHub using Software Templates you first need to create a personal access token: ${chalk.blue( - `https://${host}/settings/tokens/new`, + `${host.origin}/settings/tokens/new`, )} Select the following scopes: @@ -111,9 +109,7 @@ export const github = async () => { )} `); - const { token } = await inquirer.prompt<{ - token: Answers['token']; - }>([ + const { token } = await inquirer.prompt<{ token: string }>([ { type: 'input', name: 'token', @@ -124,13 +120,13 @@ export const github = async () => { ]); const config = getConfig({ + hasEnterprise: providerAnswers?.hasEnterprise ?? answers.hasEnterprise, + apiBaseUrl: host.origin + answers.apiBaseUrl, + host: host.hostname, token, - isEnterprise, - host, - apiBaseUrl, }); - Task.log('Setting up GitHub Integration for you...'); + Task.log('Setting up Software Templates using GitHub integration for you...'); await Task.forItem( 'Updating', diff --git a/packages/cli/src/commands/onboard/integrations/index.ts b/packages/cli/src/commands/onboard/integrations/index.ts index f3ac6754d6..5cb2f95b38 100644 --- a/packages/cli/src/commands/onboard/integrations/index.ts +++ b/packages/cli/src/commands/onboard/integrations/index.ts @@ -15,6 +15,8 @@ */ import inquirer from 'inquirer'; +import { Task } from '../../../lib/tasks'; +import { GitHubAnswers, GitLabAnswers } from '../auth'; import { github } from './github'; enum Integration { @@ -23,27 +25,51 @@ enum Integration { const Integrations: Integration[] = [Integration.GITHUB]; -export async function integrations(): Promise { - await inquirer - .prompt<{ - integration?: Integration; - }>([ - { - // TODO(tudi2d): Let's start with one, but it should be multiple choice in the future - type: 'list', - name: 'integration', - message: 'Please select an integration:', - choices: Integrations, - }, - ]) - .then(async ({ integration }) => { - if (integration) { - switch (integration) { - case Integration.GITHUB: - await github(); - break; - default: - } - } - }); +export async function integrations(providerInfo?: { + provider: string; + answers: GitHubAnswers | GitLabAnswers; +}): Promise { + const answers = await inquirer.prompt<{ + integration?: Integration; + shouldUsePreviousProvider: boolean; + }>([ + { + type: 'confirm', + name: 'shouldUsePreviousProvider', + message: `Do you want to keep using ${providerInfo?.provider} as your provider when setting up Software Templates?`, + when: () => + providerInfo?.provider && + Object.values(Integrations).includes( + providerInfo!.provider as Integration, + ), + }, + { + // TODO(tudi2d): Let's start with one, but it should be multiple choice in the future + type: 'list', + name: 'integration', + message: 'Please select an integration provider:', + choices: Integrations, + when: ({ shouldUsePreviousProvider }) => !shouldUsePreviousProvider, + }, + ]); + + if (answers.shouldUsePreviousProvider) { + answers.integration = providerInfo!.provider as Integration; + } + + switch (answers.integration) { + case Integration.GITHUB: { + const providerAnswers = + providerInfo?.provider === 'GitHub' + ? (providerInfo!.answers as GitHubAnswers) + : undefined; + await github(providerAnswers); + break; + } + default: + } + + Task.log(); + Task.log(`Done setting up ${answers.integration} Integration!`); + Task.log(); } From 349b70af35962d1f99b544e09eeda6a346f340e7 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 9 Mar 2023 16:53:10 +0100 Subject: [PATCH 132/511] Update packages/cli/src/commands/onboard/README.md Co-authored-by: Patrik Oldsberg Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/onboard/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/onboard/README.md b/packages/cli/src/commands/onboard/README.md index d2a6e10256..71e51a2077 100644 --- a/packages/cli/src/commands/onboard/README.md +++ b/packages/cli/src/commands/onboard/README.md @@ -14,7 +14,7 @@ npx @backstage/create-app cd new-backstage-app # Run the modded cli in the new app -../github/backstage/packages/cli/bin/backstage-cli admin +../github/backstage/packages/cli/bin/backstage-cli onboard ? Do you want to set up Authentication for this project? (Y/n) ... From 3c5b436237a23f82ef09ad574b02720115bb9451 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Tue, 14 Mar 2023 11:13:41 +0100 Subject: [PATCH 133/511] Adjust PR to review - Add comment in local config indicating override - Restructure files & folders to avoid folders with only one index file Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/onboard/README.md | 13 ++++----- .../cli/src/commands/onboard/auth/index.ts | 4 +-- .../{github/index.ts => providers/github.ts} | 0 .../{gitlab/index.ts => providers/gitlab.ts} | 0 packages/cli/src/commands/onboard/config.ts | 29 ++++++++++++------- .../{github/index.ts => github.ts} | 8 ++--- 6 files changed, 31 insertions(+), 23 deletions(-) rename packages/cli/src/commands/onboard/auth/{github/index.ts => providers/github.ts} (100%) rename packages/cli/src/commands/onboard/auth/{gitlab/index.ts => providers/gitlab.ts} (100%) rename packages/cli/src/commands/onboard/integrations/{github/index.ts => github.ts} (95%) diff --git a/packages/cli/src/commands/onboard/README.md b/packages/cli/src/commands/onboard/README.md index 71e51a2077..8ab2d5f795 100644 --- a/packages/cli/src/commands/onboard/README.md +++ b/packages/cli/src/commands/onboard/README.md @@ -2,22 +2,21 @@ ## Local dev -```bash -# Checkout the branch -cd backstage -git fetch -git checkout goa/cli-admin-command - # Create a new app + +```bash cd .. npx @backstage/create-app cd new-backstage-app # Run the modded cli in the new app -../github/backstage/packages/cli/bin/backstage-cli onboard + +../RELATIVE_PATH_TO_PROJECT/backstage/packages/cli/bin/backstage-cli onboard ? Do you want to set up Authentication for this project? (Y/n) ... # Try the app with the new changes + yarn dev + ``` diff --git a/packages/cli/src/commands/onboard/auth/index.ts b/packages/cli/src/commands/onboard/auth/index.ts index 5a299e2fb5..0f4537b110 100644 --- a/packages/cli/src/commands/onboard/auth/index.ts +++ b/packages/cli/src/commands/onboard/auth/index.ts @@ -16,8 +16,8 @@ import inquirer from 'inquirer'; import { Task } from '../../../lib/tasks'; -import { github, Answers as GitHubAnswers } from './github'; -import { gitlab, Answers as GitLabAnswers } from './gitlab'; +import { github, Answers as GitHubAnswers } from './providers/github'; +import { gitlab, Answers as GitLabAnswers } from './providers/gitlab'; export { type GitHubAnswers, type GitLabAnswers }; diff --git a/packages/cli/src/commands/onboard/auth/github/index.ts b/packages/cli/src/commands/onboard/auth/providers/github.ts similarity index 100% rename from packages/cli/src/commands/onboard/auth/github/index.ts rename to packages/cli/src/commands/onboard/auth/providers/github.ts diff --git a/packages/cli/src/commands/onboard/auth/gitlab/index.ts b/packages/cli/src/commands/onboard/auth/providers/gitlab.ts similarity index 100% rename from packages/cli/src/commands/onboard/auth/gitlab/index.ts rename to packages/cli/src/commands/onboard/auth/providers/gitlab.ts diff --git a/packages/cli/src/commands/onboard/config.ts b/packages/cli/src/commands/onboard/config.ts index 8d419dd71a..cce3119fcc 100644 --- a/packages/cli/src/commands/onboard/config.ts +++ b/packages/cli/src/commands/onboard/config.ts @@ -22,15 +22,24 @@ const readYaml = async (file: string) => { }; export const updateConfigFile = async (file: string, config: T) => { - const content = fs.existsSync(file) - ? { ...(await readYaml(file)), ...config } - : { ...config }; + const staticContent = + '# Backstage override configuration for your local development environment \n'; - return await fs.writeFile( - file, - yaml.stringify(content, { - indent: 2, - }), - 'utf8', - ); + const content = fs.existsSync(file) + ? yaml.stringify( + { ...(await readYaml(file)), ...config }, + { + indent: 2, + }, + ) + : staticContent.concat( + yaml.stringify( + { ...config }, + { + indent: 2, + }, + ), + ); + + return await fs.writeFile(file, content, 'utf8'); }; diff --git a/packages/cli/src/commands/onboard/integrations/github/index.ts b/packages/cli/src/commands/onboard/integrations/github.ts similarity index 95% rename from packages/cli/src/commands/onboard/integrations/github/index.ts rename to packages/cli/src/commands/onboard/integrations/github.ts index 883a119c00..a0538c7ace 100644 --- a/packages/cli/src/commands/onboard/integrations/github/index.ts +++ b/packages/cli/src/commands/onboard/integrations/github.ts @@ -16,10 +16,10 @@ import chalk from 'chalk'; import inquirer from 'inquirer'; -import { Task } from '../../../../lib/tasks'; -import { updateConfigFile } from '../../config'; -import { APP_CONFIG_FILE } from '../../files'; -import { GitHubAnswers } from '../../auth'; +import { Task } from '../../../lib/tasks'; +import { updateConfigFile } from '../config'; +import { APP_CONFIG_FILE } from '../files'; +import { GitHubAnswers } from '../auth'; type Answers = { hasEnterprise: boolean; From 3fa416968208bbc7a462174a3a926cffc5a611e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 14 Mar 2023 13:10:07 +0100 Subject: [PATCH 134/511] Make the "Copied!" message disappear automatically after some time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/brave-planets-grab.md | 5 +++++ .../components/EntityContextMenu/EntityContextMenu.tsx | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .changeset/brave-planets-grab.md diff --git a/.changeset/brave-planets-grab.md b/.changeset/brave-planets-grab.md new file mode 100644 index 0000000000..8b99978695 --- /dev/null +++ b/.changeset/brave-planets-grab.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Make the "Copied!" message disappear automatically after some time diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 675f74fa8d..1961fe6cac 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -90,9 +90,13 @@ export function EntityContextMenu(props: EntityContextMenuProps) { const alertApi = useApi(alertApiRef); const copyToClipboard = useCallback(() => { - window.navigator.clipboard - .writeText(window.location.toString()) - .then(() => alertApi.post({ message: 'Copied!', severity: 'info' })); + window.navigator.clipboard.writeText(window.location.toString()).then(() => + alertApi.post({ + message: 'Copied!', + severity: 'info', + display: 'transient', + }), + ); }, [alertApi]); const extraItems = UNSTABLE_extraContextMenuItems && [ From 2d6efa32792a2273bb31671228ea4713cb5fbb15 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Tue, 14 Mar 2023 12:55:17 +0000 Subject: [PATCH 135/511] dont fail if cluster auth fails for one cluster Signed-off-by: Brian Fletcher --- .../AwsIamKubernetesAuthTranslator.ts | 66 +++++++++---------- .../src/service/KubernetesFanOutHandler.ts | 17 ++++- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts index b89945902d..84e60c9c69 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.ts @@ -55,46 +55,44 @@ export class AwsIamKubernetesAuthTranslator assumeRole?: string, externalId?: string, ): Promise { - return new Promise(async (resolve, reject) => { - const awsCreds = await this.awsGetCredentials(); + const awsCreds = await this.awsGetCredentials(); - if (!(awsCreds instanceof Credentials)) - return reject(Error('No AWS credentials found.')); + if (!(awsCreds instanceof Credentials)) + throw new Error('No AWS credentials found.'); - let creds: SigningCreds = { - accessKeyId: awsCreds.accessKeyId, - secretAccessKey: awsCreds.secretAccessKey, - sessionToken: awsCreds.sessionToken, + let creds: SigningCreds = { + accessKeyId: awsCreds.accessKeyId, + secretAccessKey: awsCreds.secretAccessKey, + sessionToken: awsCreds.sessionToken, + }; + + if (!this.validCredentials(creds)) + throw new Error('Invalid AWS credentials found.'); + if (!assumeRole) return creds; + + try { + const params: AWS.STS.Types.AssumeRoleRequest = { + RoleArn: assumeRole, + RoleSessionName: 'backstage-login', }; + if (externalId) params.ExternalId = externalId; - if (!this.validCredentials(creds)) - return reject(Error('Invalid AWS credentials found.')); - if (!assumeRole) return resolve(creds); + const assumedRole = await new AWS.STS().assumeRole(params).promise(); - try { - const params: AWS.STS.Types.AssumeRoleRequest = { - RoleArn: assumeRole, - RoleSessionName: 'backstage-login', - }; - if (externalId) params.ExternalId = externalId; - - const assumedRole = await new AWS.STS().assumeRole(params).promise(); - - if (!assumedRole.Credentials) { - throw new Error(`No credentials returned for role ${assumeRole}`); - } - - creds = { - accessKeyId: assumedRole.Credentials.AccessKeyId, - secretAccessKey: assumedRole.Credentials.SecretAccessKey, - sessionToken: assumedRole.Credentials.SessionToken, - }; - } catch (e) { - console.warn(`There was an error assuming the role: ${e}`); - return reject(Error(`Unable to assume role: ${e}`)); + if (!assumedRole.Credentials) { + throw new Error(`No credentials returned for role ${assumeRole}`); } - return resolve(creds); - }); + + creds = { + accessKeyId: assumedRole.Credentials.AccessKeyId, + secretAccessKey: assumedRole.Credentials.SecretAccessKey, + sessionToken: assumedRole.Credentials.SessionToken, + }; + } catch (e) { + console.warn(`There was an error assuming the role: ${e}`); + throw new Error(`Unable to assume role: ${e}`); + } + return creds; } async getBearerToken( clusterName: string, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 63e46a44e3..0c1bc670fd 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -49,6 +49,14 @@ import { PodStatus, } from '@kubernetes/client-node'; +const isRejected = ( + input: PromiseSettledResult, +): input is PromiseRejectedResult => input.status === 'rejected'; + +const isFulfilled = ( + input: PromiseSettledResult, +): input is PromiseFulfilledResult => input.status === 'fulfilled'; + /** * * @public @@ -298,12 +306,12 @@ export class KubernetesFanOutHandler { auth: KubernetesRequestAuth, requestContext: ServiceLocatorRequestContext, ) { - const clusterDetails: ClusterDetails[] = await ( + const clusterDetails: ClusterDetails[] = ( await this.serviceLocator.getClustersByEntity(entity, requestContext) ).clusters; // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them - return await Promise.all( + const promiseResults = await Promise.allSettled( clusterDetails.map(cd => { const kubernetesAuthTranslator: KubernetesAuthTranslator = this.getAuthTranslator(cd.authProvider); @@ -313,6 +321,11 @@ export class KubernetesFanOutHandler { ); }), ); + + promiseResults.filter(isRejected).map(item => { + this.logger.info(`Failed to decorate cluster details: ${item.reason}`); + }); + return promiseResults.filter(isFulfilled).map(item => item.value); } toObjectsByEntityResponse( From 3dacb23b76f0db5dab8ccd6824445d4191e632e9 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 14 Mar 2023 18:48:34 +0530 Subject: [PATCH 136/511] credits added Signed-off-by: Abhay-soni-developer --- .github/CODEOWNERS | 2 +- plugins/microsoft-calendar/README.md | 3 +-- plugins/microsoft-calendar/package.json | 20 +++++++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 010af451af..294286d3bf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -62,7 +62,7 @@ yarn.lock @backstage/maintainers @back /plugins/kafka-backend @backstage/maintainers @nirga @andrewthauer /plugins/kubernetes @backstage/maintainers @backstage/warpspeed /plugins/kubernetes-* @backstage/maintainers @backstage/warpspeed -/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer +/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @statusneo /plugins/newrelic-dashboard @backstage/maintainers @mufaddal7 /plugins/playlist @backstage/maintainers @kuangp /plugins/playlist-* @backstage/maintainers @kuangp diff --git a/plugins/microsoft-calendar/README.md b/plugins/microsoft-calendar/README.md index 219a7cf2dc..92421046e2 100644 --- a/plugins/microsoft-calendar/README.md +++ b/plugins/microsoft-calendar/README.md @@ -1,7 +1,6 @@ # Microsoft-Calendar Plugin -Welcome to the Microsoft calendar plugin! -_This plugin was created through the Backstage CLI_ +This plugin is contributed by [StatusNeo](https://statusneo.com/) ## Features diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 8d20a5de70..f476284ebe 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -13,10 +13,24 @@ "role": "frontend-plugin" }, "author": { - "name": "Abhay Soni", - "email": "abhaysoni.developer@gmail.com", - "url": "https://github.com/Abhay-soni-developer" + "name": "Statusneo", + "email": "reach@statusneo.com", + "url": "https://statusneo.com/" }, + "contributors": [ + { + "email": "abhaysoni.developer@gmail.com", + "url": "https://github.com/Abhay-soni-developer", + "name": "abhaysoni" + } + ], + "maintainers": [ + { + "email": "abhaysoni.developer@gmail.com", + "url": "https://github.com/Abhay-soni-developer", + "name": "abhaysoni" + } + ], "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", From d642532f486f211600dabafbb262fd2bdf336cf2 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 14 Mar 2023 19:09:06 +0530 Subject: [PATCH 137/511] bump Signed-off-by: Abhay-soni-developer --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 294286d3bf..90ce81f73c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -62,7 +62,7 @@ yarn.lock @backstage/maintainers @back /plugins/kafka-backend @backstage/maintainers @nirga @andrewthauer /plugins/kubernetes @backstage/maintainers @backstage/warpspeed /plugins/kubernetes-* @backstage/maintainers @backstage/warpspeed -/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @statusneo +/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @statusNeo /plugins/newrelic-dashboard @backstage/maintainers @mufaddal7 /plugins/playlist @backstage/maintainers @kuangp /plugins/playlist-* @backstage/maintainers @kuangp From 34041c45c80c2a785248e369238cccd250d5454a Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Tue, 14 Mar 2023 14:57:55 +0100 Subject: [PATCH 138/511] Update sharp-rings-cry.md Signed-off-by: Ben Lambert --- .changeset/sharp-rings-cry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sharp-rings-cry.md b/.changeset/sharp-rings-cry.md index 9e32a53526..ada106b251 100644 --- a/.changeset/sharp-rings-cry.md +++ b/.changeset/sharp-rings-cry.md @@ -1,5 +1,5 @@ --- -'@backstage/backend-common': minor +'@backstage/backend-common': patch '@backstage/backend-plugin-api': minor --- From 24632ad94b8b1838f2be363b813334138eaab2b4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 14 Mar 2023 14:31:40 +0000 Subject: [PATCH 139/511] Version Packages --- .changeset/afraid-trees-stare.md | 5 - .changeset/backend-token-authentication.md | 5 - .changeset/beige-hats-cheer.md | 27 - .changeset/big-gorillas-fail1.md | 5 - .changeset/big-gorillas-fail2.md | 5 - .changeset/big-gorillas-fail3.md | 5 - .changeset/big-gorillas-fail4.md | 5 - .changeset/big-gorillas-fail5.md | 5 - .changeset/big-gorillas-fail6.md | 5 - .changeset/brave-planets-grab.md | 5 - .changeset/breezy-bees-care.md | 5 - .changeset/bright-kids-raise.md | 5 - .changeset/clean-lemons-jump.md | 7 - .changeset/clean-planes-join.md | 5 - .changeset/clever-dogs-cheat.md | 21 - .changeset/cold-dogs-watch.md | 5 - .changeset/cold-plants-boil.md | 5 - .changeset/cool-clocks-prove.md | 5 - .changeset/cool-feet-speak.md | 6 - .changeset/create-app-1676993958.md | 5 - .changeset/create-app-1678209629.md | 5 - .changeset/curvy-pets-hang.md | 5 - .changeset/cyan-sheep-tap.md | 5 - .changeset/dull-adults-drum.md | 5 - .changeset/eight-radios-bake.md | 5 - .changeset/eighty-chairs-roll.md | 5 - .changeset/eighty-geese-return.md | 5 - .changeset/empty-books-occur.md | 5 - .changeset/famous-sloths-tie.md | 5 - .changeset/fifty-beds-dress.md | 5 - .changeset/flat-kids-occur.md | 6 - .changeset/flat-peaches-act.md | 5 - .changeset/forty-snails-clap.md | 5 - .changeset/four-lizards-grin.md | 5 - .changeset/fresh-hairs-switch.md | 5 - .changeset/fuzzy-trains-search.md | 5 - .changeset/gentle-bears-love.md | 5 - .changeset/gentle-pears-clean.md | 5 - .changeset/gorgeous-pumas-speak.md | 5 - .changeset/great-trains-jam.md | 5 - .changeset/grumpy-bikes-begin.md | 5 - .changeset/happy-boxes-arrive.md | 5 - .changeset/healthy-buses-live-1.md | 5 - .changeset/healthy-buses-live-2.md | 5 - .changeset/healthy-buses-live-3.md | 5 - .changeset/healthy-buses-live-4.md | 5 - .changeset/healthy-buses-live-5.md | 5 - .changeset/healthy-buses-live-6.md | 5 - .changeset/healthy-buses-live-7.md | 5 - .changeset/healthy-buses-live-8.md | 5 - .changeset/healthy-buses-live-9.md | 5 - .changeset/honest-clouds-shout.md | 5 - .changeset/honest-nails-bake.md | 5 - .changeset/khaki-poems-run.md | 5 - .changeset/large-feet-wash.md | 5 - .changeset/light-bees-end.md | 5 - .changeset/light-sheep-trade.md | 5 - .changeset/long-nails-pump.md | 5 - .changeset/long-wolves-drive.md | 5 - .changeset/lovely-tigers-look.md | 5 - .changeset/many-carpets-act.md | 5 - .changeset/mean-emus-hide.md | 5 - .changeset/mean-toys-itch.md | 19 - .changeset/metal-suns-rhyme.md | 5 - .changeset/mighty-games-turn.md | 5 - .changeset/mighty-years-own.md | 5 - .changeset/modern-colts-exercise.md | 6 - .changeset/moody-apes-know.md | 16 - .changeset/new-jobs-deny.md | 5 - .changeset/nice-planets-wave.md | 5 - .changeset/nine-bikes-applaud.md | 5 - .changeset/ninety-turtles-wait.md | 5 - .changeset/odd-fireants-bathe.md | 6 - .changeset/odd-oranges-tease.md | 21 - .changeset/odd-waves-rescue.md | 5 - .changeset/old-foxes-shave.md | 5 - .changeset/olive-berries-poke.md | 5 - .changeset/orange-experts-hug.md | 5 - .changeset/perfect-mayflies-greet.md | 5 - .changeset/pink-apples-design.md | 7 - .changeset/pink-dolls-unite.md | 5 - .changeset/polite-chicken-do.md | 5 - .changeset/polite-falcons-jump.md | 5 - .changeset/polite-wombats-smash.md | 5 - .changeset/pre.json | 327 -- .changeset/proud-jokes-pull.md | 5 - .changeset/purple-days-film.md | 5 - .changeset/quick-coats-sneeze.md | 5 - .changeset/quick-schools-dress.md | 5 - .changeset/quick-tables-listen.md | 5 - .changeset/quiet-ghosts-float.md | 12 - .changeset/rare-buses-swim.md | 5 - .changeset/rare-grapes-count.md | 45 - .changeset/rare-pandas-hope.md | 5 - .changeset/rename-for-the-win.md | 6 - .changeset/renovate-3672e5e.md | 5 - .changeset/renovate-4775edd.md | 8 - .changeset/renovate-488b7e7.md | 5 - .changeset/renovate-80f8787.md | 6 - .changeset/renovate-fb85ae7.md | 125 - .changeset/rich-clocks-approve.md | 5 - .changeset/rich-wombats-rescue.md | 5 - .changeset/rotten-cats-matter.md | 19 - .changeset/rotten-panthers-share.md | 6 - .changeset/selfish-hats-wait.md | 5 - .changeset/sharp-hairs-arrive.md | 5 - .changeset/sharp-rings-cry.md | 6 - .changeset/short-mayflies-fix.md | 5 - .changeset/silent-dryers-end.md | 5 - .changeset/silly-suits-run.md | 7 - .changeset/silver-bikes-breathe.md | 24 - .changeset/silver-donkeys-eat.md | 5 - .changeset/silver-lies-rest.md | 7 - .changeset/six-melons-rhyme.md | 5 - .changeset/slimy-lobsters-kneel.md | 5 - .changeset/slow-insects-cheat.md | 7 - .changeset/slow-pens-compare.md | 5 - .changeset/slow-suits-grab.md | 5 - .changeset/spotty-bees-tell.md | 6 - .changeset/spotty-turtles-reply.md | 5 - .changeset/spotty-wasps-complain.md | 5 - .changeset/stupid-games-brake.md | 5 - .changeset/swift-bags-wave.md | 6 - .changeset/tall-hats-talk.md | 5 - .changeset/ten-tigers-marry.md | 16 - .changeset/thin-candles-wait.md | 5 - .changeset/tidy-planes-unite.md | 5 - .changeset/tidy-pumpkins-clean.md | 5 - .changeset/tidy-ties-guess.md | 5 - .changeset/tiny-llamas-jump.md | 5 - .changeset/tricky-jars-film.md | 5 - .changeset/twelve-cars-push.md | 20 - .changeset/twenty-insects-live.md | 5 - .changeset/twenty-jeans-speak.md | 5 - .changeset/unlucky-sloths-explain.md | 5 - .changeset/warm-vans-fail.md | 5 - .changeset/weak-coats-allow.md | 5 - .changeset/what-is-going-on-babe.md | 5 - .changeset/wicked-lions-repeat.md | 6 - .changeset/wicked-spoons-call.md | 5 - .changeset/wild-ads-pull.md | 5 - .changeset/wild-bulldogs-suffer.md | 5 - .changeset/witty-geckos-design.md | 9 - .changeset/witty-squids-fetch.md | 5 - .changeset/yellow-bananas-yawn.md | 5 - .changeset/young-schools-double.md | 5 - .changeset/young-scissors-cough.md | 5 - .changeset/young-walls-prove.md | 5 - docs/releases/v1.12.0-changelog.md | 2933 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 11 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 69 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 19 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 37 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 12 + packages/backend-defaults/package.json | 2 +- packages/backend-dev-utils/CHANGELOG.md | 6 + packages/backend-dev-utils/package.json | 2 +- packages/backend-next/CHANGELOG.md | 12 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 17 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 16 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 15 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 51 + packages/backend/package.json | 2 +- packages/catalog-client/CHANGELOG.md | 14 + packages/catalog-client/package.json | 2 +- packages/catalog-model/CHANGELOG.md | 10 + packages/catalog-model/package.json | 2 +- packages/cli-common/CHANGELOG.md | 6 + packages/cli-common/package.json | 2 +- packages/cli/CHANGELOG.md | 24 + packages/cli/package.json | 2 +- packages/codemods/CHANGELOG.md | 8 + packages/codemods/package.json | 2 +- packages/config-loader/CHANGELOG.md | 12 + packages/config-loader/package.json | 2 +- packages/config/CHANGELOG.md | 8 + packages/config/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 29 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 20 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 15 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 11 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 16 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/errors/CHANGELOG.md | 8 + packages/errors/package.json | 2 +- packages/eslint-plugin/CHANGELOG.md | 6 + packages/eslint-plugin/package.json | 2 +- packages/integration-aws-node/CHANGELOG.md | 8 + packages/integration-aws-node/package.json | 2 +- packages/integration-react/CHANGELOG.md | 12 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 9 + packages/integration/package.json | 2 +- packages/release-manifests/CHANGELOG.md | 6 + packages/release-manifests/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 10 + packages/repo-tools/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 16 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 16 + packages/test-utils/package.json | 2 +- packages/theme/CHANGELOG.md | 6 + packages/theme/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 17 + plugins/adr-backend/package.json | 2 +- plugins/adr-common/CHANGELOG.md | 9 + plugins/adr-common/package.json | 2 +- plugins/adr/CHANGELOG.md | 17 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 9 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 14 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 12 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 11 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 9 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 16 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 10 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 13 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 17 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 11 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 10 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 14 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 10 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 14 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 11 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 13 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 11 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 15 + plugins/bazaar/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 8 + plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 12 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 22 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 21 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 21 + .../package.json | 2 +- .../CHANGELOG.md | 18 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 18 + .../package.json | 2 +- .../CHANGELOG.md | 24 + .../package.json | 2 +- .../CHANGELOG.md | 23 + .../package.json | 2 +- .../CHANGELOG.md | 25 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 13 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 20 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 54 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-common/CHANGELOG.md | 10 + plugins/catalog-common/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 12 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-graphql/CHANGELOG.md | 14 + plugins/catalog-graphql/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 17 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 14 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 25 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 49 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 9 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 13 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 12 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 13 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 13 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 15 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 12 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 13 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 15 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 12 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 13 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 14 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 17 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 10 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 10 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 11 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 11 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 12 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 8 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 11 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list-common/CHANGELOG.md | 7 + plugins/example-todo-list-common/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 11 + plugins/explore-backend/package.json | 2 +- plugins/explore-react/CHANGELOG.md | 9 + plugins/explore-react/package.json | 2 +- plugins/explore/CHANGELOG.md | 21 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 17 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 13 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 12 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 10 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 12 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 13 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 15 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 14 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 13 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 10 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 13 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 10 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 10 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 10 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 13 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 14 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 15 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins-common/CHANGELOG.md | 9 + plugins/jenkins-common/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 15 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 11 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 13 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 14 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 7 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 16 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse-backend/CHANGELOG.md | 14 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse-common/CHANGELOG.md | 7 + plugins/lighthouse-common/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 14 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 28 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 15 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 12 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 12 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 11 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 17 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 13 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 15 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 14 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 10 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 13 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-common/CHANGELOG.md | 10 + plugins/permission-common/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 15 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 9 + plugins/permission-react/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 16 + plugins/playlist-backend/package.json | 2 +- plugins/playlist-common/CHANGELOG.md | 7 + plugins/playlist-common/package.json | 2 +- plugins/playlist/CHANGELOG.md | 20 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 24 + plugins/proxy-backend/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 9 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 12 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 31 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 8 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 10 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 29 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 35 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 10 + plugins/search-backend-module-pg/package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 12 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 15 + plugins/search-backend/package.json | 2 +- plugins/search-common/CHANGELOG.md | 8 + plugins/search-common/package.json | 2 +- plugins/search-react/CHANGELOG.md | 14 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 19 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 12 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 16 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 10 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube-react/CHANGELOG.md | 10 + plugins/sonarqube-react/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 17 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 13 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 10 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 15 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 15 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 16 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 16 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 12 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 18 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 24 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 20 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 14 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 30 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 16 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 13 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 12 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 14 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 12 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 13 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 11 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 292 +- 551 files changed, 6060 insertions(+), 1877 deletions(-) delete mode 100644 .changeset/afraid-trees-stare.md delete mode 100644 .changeset/backend-token-authentication.md delete mode 100644 .changeset/beige-hats-cheer.md delete mode 100644 .changeset/big-gorillas-fail1.md delete mode 100644 .changeset/big-gorillas-fail2.md delete mode 100644 .changeset/big-gorillas-fail3.md delete mode 100644 .changeset/big-gorillas-fail4.md delete mode 100644 .changeset/big-gorillas-fail5.md delete mode 100644 .changeset/big-gorillas-fail6.md delete mode 100644 .changeset/brave-planets-grab.md delete mode 100644 .changeset/breezy-bees-care.md delete mode 100644 .changeset/bright-kids-raise.md delete mode 100644 .changeset/clean-lemons-jump.md delete mode 100644 .changeset/clean-planes-join.md delete mode 100644 .changeset/clever-dogs-cheat.md delete mode 100644 .changeset/cold-dogs-watch.md delete mode 100644 .changeset/cold-plants-boil.md delete mode 100644 .changeset/cool-clocks-prove.md delete mode 100644 .changeset/cool-feet-speak.md delete mode 100644 .changeset/create-app-1676993958.md delete mode 100644 .changeset/create-app-1678209629.md delete mode 100644 .changeset/curvy-pets-hang.md delete mode 100644 .changeset/cyan-sheep-tap.md delete mode 100644 .changeset/dull-adults-drum.md delete mode 100644 .changeset/eight-radios-bake.md delete mode 100644 .changeset/eighty-chairs-roll.md delete mode 100644 .changeset/eighty-geese-return.md delete mode 100644 .changeset/empty-books-occur.md delete mode 100644 .changeset/famous-sloths-tie.md delete mode 100644 .changeset/fifty-beds-dress.md delete mode 100644 .changeset/flat-kids-occur.md delete mode 100644 .changeset/flat-peaches-act.md delete mode 100644 .changeset/forty-snails-clap.md delete mode 100644 .changeset/four-lizards-grin.md delete mode 100644 .changeset/fresh-hairs-switch.md delete mode 100644 .changeset/fuzzy-trains-search.md delete mode 100644 .changeset/gentle-bears-love.md delete mode 100644 .changeset/gentle-pears-clean.md delete mode 100644 .changeset/gorgeous-pumas-speak.md delete mode 100644 .changeset/great-trains-jam.md delete mode 100644 .changeset/grumpy-bikes-begin.md delete mode 100644 .changeset/happy-boxes-arrive.md delete mode 100644 .changeset/healthy-buses-live-1.md delete mode 100644 .changeset/healthy-buses-live-2.md delete mode 100644 .changeset/healthy-buses-live-3.md delete mode 100644 .changeset/healthy-buses-live-4.md delete mode 100644 .changeset/healthy-buses-live-5.md delete mode 100644 .changeset/healthy-buses-live-6.md delete mode 100644 .changeset/healthy-buses-live-7.md delete mode 100644 .changeset/healthy-buses-live-8.md delete mode 100644 .changeset/healthy-buses-live-9.md delete mode 100644 .changeset/honest-clouds-shout.md delete mode 100644 .changeset/honest-nails-bake.md delete mode 100644 .changeset/khaki-poems-run.md delete mode 100644 .changeset/large-feet-wash.md delete mode 100644 .changeset/light-bees-end.md delete mode 100644 .changeset/light-sheep-trade.md delete mode 100644 .changeset/long-nails-pump.md delete mode 100644 .changeset/long-wolves-drive.md delete mode 100644 .changeset/lovely-tigers-look.md delete mode 100644 .changeset/many-carpets-act.md delete mode 100644 .changeset/mean-emus-hide.md delete mode 100644 .changeset/mean-toys-itch.md delete mode 100644 .changeset/metal-suns-rhyme.md delete mode 100644 .changeset/mighty-games-turn.md delete mode 100644 .changeset/mighty-years-own.md delete mode 100644 .changeset/modern-colts-exercise.md delete mode 100644 .changeset/moody-apes-know.md delete mode 100644 .changeset/new-jobs-deny.md delete mode 100644 .changeset/nice-planets-wave.md delete mode 100644 .changeset/nine-bikes-applaud.md delete mode 100644 .changeset/ninety-turtles-wait.md delete mode 100644 .changeset/odd-fireants-bathe.md delete mode 100644 .changeset/odd-oranges-tease.md delete mode 100644 .changeset/odd-waves-rescue.md delete mode 100644 .changeset/old-foxes-shave.md delete mode 100644 .changeset/olive-berries-poke.md delete mode 100644 .changeset/orange-experts-hug.md delete mode 100644 .changeset/perfect-mayflies-greet.md delete mode 100644 .changeset/pink-apples-design.md delete mode 100644 .changeset/pink-dolls-unite.md delete mode 100644 .changeset/polite-chicken-do.md delete mode 100644 .changeset/polite-falcons-jump.md delete mode 100644 .changeset/polite-wombats-smash.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/proud-jokes-pull.md delete mode 100644 .changeset/purple-days-film.md delete mode 100644 .changeset/quick-coats-sneeze.md delete mode 100644 .changeset/quick-schools-dress.md delete mode 100644 .changeset/quick-tables-listen.md delete mode 100644 .changeset/quiet-ghosts-float.md delete mode 100644 .changeset/rare-buses-swim.md delete mode 100644 .changeset/rare-grapes-count.md delete mode 100644 .changeset/rare-pandas-hope.md delete mode 100644 .changeset/rename-for-the-win.md delete mode 100644 .changeset/renovate-3672e5e.md delete mode 100644 .changeset/renovate-4775edd.md delete mode 100644 .changeset/renovate-488b7e7.md delete mode 100644 .changeset/renovate-80f8787.md delete mode 100644 .changeset/renovate-fb85ae7.md delete mode 100644 .changeset/rich-clocks-approve.md delete mode 100644 .changeset/rich-wombats-rescue.md delete mode 100644 .changeset/rotten-cats-matter.md delete mode 100644 .changeset/rotten-panthers-share.md delete mode 100644 .changeset/selfish-hats-wait.md delete mode 100644 .changeset/sharp-hairs-arrive.md delete mode 100644 .changeset/sharp-rings-cry.md delete mode 100644 .changeset/short-mayflies-fix.md delete mode 100644 .changeset/silent-dryers-end.md delete mode 100644 .changeset/silly-suits-run.md delete mode 100644 .changeset/silver-bikes-breathe.md delete mode 100644 .changeset/silver-donkeys-eat.md delete mode 100644 .changeset/silver-lies-rest.md delete mode 100644 .changeset/six-melons-rhyme.md delete mode 100644 .changeset/slimy-lobsters-kneel.md delete mode 100644 .changeset/slow-insects-cheat.md delete mode 100644 .changeset/slow-pens-compare.md delete mode 100644 .changeset/slow-suits-grab.md delete mode 100644 .changeset/spotty-bees-tell.md delete mode 100644 .changeset/spotty-turtles-reply.md delete mode 100644 .changeset/spotty-wasps-complain.md delete mode 100644 .changeset/stupid-games-brake.md delete mode 100644 .changeset/swift-bags-wave.md delete mode 100644 .changeset/tall-hats-talk.md delete mode 100644 .changeset/ten-tigers-marry.md delete mode 100644 .changeset/thin-candles-wait.md delete mode 100644 .changeset/tidy-planes-unite.md delete mode 100644 .changeset/tidy-pumpkins-clean.md delete mode 100644 .changeset/tidy-ties-guess.md delete mode 100644 .changeset/tiny-llamas-jump.md delete mode 100644 .changeset/tricky-jars-film.md delete mode 100644 .changeset/twelve-cars-push.md delete mode 100644 .changeset/twenty-insects-live.md delete mode 100644 .changeset/twenty-jeans-speak.md delete mode 100644 .changeset/unlucky-sloths-explain.md delete mode 100644 .changeset/warm-vans-fail.md delete mode 100644 .changeset/weak-coats-allow.md delete mode 100644 .changeset/what-is-going-on-babe.md delete mode 100644 .changeset/wicked-lions-repeat.md delete mode 100644 .changeset/wicked-spoons-call.md delete mode 100644 .changeset/wild-ads-pull.md delete mode 100644 .changeset/wild-bulldogs-suffer.md delete mode 100644 .changeset/witty-geckos-design.md delete mode 100644 .changeset/witty-squids-fetch.md delete mode 100644 .changeset/yellow-bananas-yawn.md delete mode 100644 .changeset/young-schools-double.md delete mode 100644 .changeset/young-scissors-cough.md delete mode 100644 .changeset/young-walls-prove.md create mode 100644 docs/releases/v1.12.0-changelog.md diff --git a/.changeset/afraid-trees-stare.md b/.changeset/afraid-trees-stare.md deleted file mode 100644 index 748bbb3cfe..0000000000 --- a/.changeset/afraid-trees-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Added the ability to be able to define an actions `input` and `output` schema using `zod` instead of hand writing types and `jsonschema` diff --git a/.changeset/backend-token-authentication.md b/.changeset/backend-token-authentication.md deleted file mode 100644 index 3b0f016800..0000000000 --- a/.changeset/backend-token-authentication.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Make identity valid if subject of token is a backstage server-2-server auth token diff --git a/.changeset/beige-hats-cheer.md b/.changeset/beige-hats-cheer.md deleted file mode 100644 index 83b70d137e..0000000000 --- a/.changeset/beige-hats-cheer.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Add deprecations for symbols that were moved to `@backstage/plugin-catalog-node` a long time ago: - -- `CatalogProcessor` -- `CatalogProcessorCache` -- `CatalogProcessorEmit` -- `CatalogProcessorEntityResult` -- `CatalogProcessorErrorResult` -- `CatalogProcessorLocationResult` -- `CatalogProcessorParser` -- `CatalogProcessorRefreshKeysResult` -- `CatalogProcessorRelationResult` -- `CatalogProcessorResult` -- `DeferredEntity` -- `EntityProvider` -- `EntityProviderConnection` -- `EntityProviderMutation` -- `EntityRelationSpec` -- `processingResult` - -Also moved over and deprecated the following symbols: - -- `locationSpecToLocationEntity` -- `locationSpecToMetadataName` diff --git a/.changeset/big-gorillas-fail1.md b/.changeset/big-gorillas-fail1.md deleted file mode 100644 index 18c2d621d7..0000000000 --- a/.changeset/big-gorillas-fail1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-bitbucket-cloud': patch ---- - -Renamed `bitbucketCloudEventRouterEventsModule` to `eventsModuleBitbucketCloudEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail2.md b/.changeset/big-gorillas-fail2.md deleted file mode 100644 index bc34bf9aaa..0000000000 --- a/.changeset/big-gorillas-fail2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-aws-sqs': patch ---- - -Renamed `awsSqsConsumingEventPublisherEventsModule` to `eventsModuleAwsSqsConsumingEventPublisher` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail3.md b/.changeset/big-gorillas-fail3.md deleted file mode 100644 index 352c1a2cff..0000000000 --- a/.changeset/big-gorillas-fail3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-gerrit': patch ---- - -Renamed `gerritEventRouterEventsModule` to `eventsModuleGerritEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail4.md b/.changeset/big-gorillas-fail4.md deleted file mode 100644 index add8699f8b..0000000000 --- a/.changeset/big-gorillas-fail4.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-github': patch ---- - -Renamed `githubEventRouterEventsModule` to `eventsModuleGithubEventRouter` and `githubWebhookEventsModule` to `eventsModuleGithubWebhook`, to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail5.md b/.changeset/big-gorillas-fail5.md deleted file mode 100644 index 549eb61f24..0000000000 --- a/.changeset/big-gorillas-fail5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-gitlab': patch ---- - -Renamed `gitlabEventRouterEventsModule` to `eventsModuleGitlabEventRouter` and `gitlabWebhookEventsModule` to `eventsModuleGitlabWebhook` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/big-gorillas-fail6.md b/.changeset/big-gorillas-fail6.md deleted file mode 100644 index 6622b5222e..0000000000 --- a/.changeset/big-gorillas-fail6.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-azure': patch ---- - -Renamed `azureDevOpsEventRouterEventsModule` to `eventsModuleAzureDevOpsEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/brave-planets-grab.md b/.changeset/brave-planets-grab.md deleted file mode 100644 index 8b99978695..0000000000 --- a/.changeset/brave-planets-grab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Make the "Copied!" message disappear automatically after some time diff --git a/.changeset/breezy-bees-care.md b/.changeset/breezy-bees-care.md deleted file mode 100644 index 9a5b59fe03..0000000000 --- a/.changeset/breezy-bees-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': minor ---- - -Add `queryEntities` method to `CatalogApi`. diff --git a/.changeset/bright-kids-raise.md b/.changeset/bright-kids-raise.md deleted file mode 100644 index e0d69e0c71..0000000000 --- a/.changeset/bright-kids-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-todo-backend': patch ---- - -todo-backend is now exposed as a plugin which uses the new plugin system diff --git a/.changeset/clean-lemons-jump.md b/.changeset/clean-lemons-jump.md deleted file mode 100644 index ab6f22136a..0000000000 --- a/.changeset/clean-lemons-jump.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Button labels in the sidebar (previously displayed in uppercase) will be displayed in the case that is provided without any transformations. -For example, a sidebar button with the label "Search" will appear as Search, "search" will appear as search, "SEARCH" will appear as SEARCH etc. -This can potentially affect any overriding styles previously applied to change the appearance of Button labels in the Sidebar. diff --git a/.changeset/clean-planes-join.md b/.changeset/clean-planes-join.md deleted file mode 100644 index dd8280f553..0000000000 --- a/.changeset/clean-planes-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-permission-node': patch ---- - -Changed the `createPermissionIntegrationRouter` API to allow `getResources`, `resourceType` and `rules` to be optional diff --git a/.changeset/clever-dogs-cheat.md b/.changeset/clever-dogs-cheat.md deleted file mode 100644 index 56fcf3d30c..0000000000 --- a/.changeset/clever-dogs-cheat.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-tech-insights-backend-module-jsonfc': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-techdocs-react': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-tech-insights': patch -'@backstage/plugin-techdocs-node': patch -'@backstage/plugin-search-react': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-auth-node': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-search': patch ---- - -Minor API report tweaks diff --git a/.changeset/cold-dogs-watch.md b/.changeset/cold-dogs-watch.md deleted file mode 100644 index 99b25a833e..0000000000 --- a/.changeset/cold-dogs-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-puppetdb': patch ---- - -Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system diff --git a/.changeset/cold-plants-boil.md b/.changeset/cold-plants-boil.md deleted file mode 100644 index a991601a88..0000000000 --- a/.changeset/cold-plants-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Update to a newer version of `@trendyol-js/openstack-swift-sdk` diff --git a/.changeset/cool-clocks-prove.md b/.changeset/cool-clocks-prove.md deleted file mode 100644 index dfd7b8c5eb..0000000000 --- a/.changeset/cool-clocks-prove.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Fixed a bug where additional backend package entry points where not properly marked as internal during local development. diff --git a/.changeset/cool-feet-speak.md b/.changeset/cool-feet-speak.md deleted file mode 100644 index 9240c5bb52..0000000000 --- a/.changeset/cool-feet-speak.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. diff --git a/.changeset/create-app-1676993958.md b/.changeset/create-app-1676993958.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1676993958.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/create-app-1678209629.md b/.changeset/create-app-1678209629.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1678209629.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/curvy-pets-hang.md b/.changeset/curvy-pets-hang.md deleted file mode 100644 index 3a2d11ac12..0000000000 --- a/.changeset/curvy-pets-hang.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': patch ---- - -Tweaked type dependency check to trim wildcard type imports. diff --git a/.changeset/cyan-sheep-tap.md b/.changeset/cyan-sheep-tap.md deleted file mode 100644 index 7812e6b6c6..0000000000 --- a/.changeset/cyan-sheep-tap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added templates for new plugin Web and Node.js libraries. diff --git a/.changeset/dull-adults-drum.md b/.changeset/dull-adults-drum.md deleted file mode 100644 index 088eb1539e..0000000000 --- a/.changeset/dull-adults-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr': patch ---- - -Updated readme instructions diff --git a/.changeset/eight-radios-bake.md b/.changeset/eight-radios-bake.md deleted file mode 100644 index 173739a625..0000000000 --- a/.changeset/eight-radios-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -throw error from catalog:fetch scaffolder action when entity is null and optional is false diff --git a/.changeset/eighty-chairs-roll.md b/.changeset/eighty-chairs-roll.md deleted file mode 100644 index c981229378..0000000000 --- a/.changeset/eighty-chairs-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor ---- - -Update `EntityPicker` to use the fully qualified entity ref instead of the humanized version. diff --git a/.changeset/eighty-geese-return.md b/.changeset/eighty-geese-return.md deleted file mode 100644 index 49361de8e7..0000000000 --- a/.changeset/eighty-geese-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -Revert using `baseUrl` for MS Graph provider as it breaks token retrieval diff --git a/.changeset/empty-books-occur.md b/.changeset/empty-books-occur.md deleted file mode 100644 index 69218c5cfa..0000000000 --- a/.changeset/empty-books-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Correctly disable next button in `SearchPagination` on last page diff --git a/.changeset/famous-sloths-tie.md b/.changeset/famous-sloths-tie.md deleted file mode 100644 index 53932afab6..0000000000 --- a/.changeset/famous-sloths-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Getting credentials in the RepoUrlPicker now also works for targets without owner (e.g. Bitbucket Server). diff --git a/.changeset/fifty-beds-dress.md b/.changeset/fifty-beds-dress.md deleted file mode 100644 index 19049732cc..0000000000 --- a/.changeset/fifty-beds-dress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-puppetdb': minor ---- - -Initial version of the plugin. diff --git a/.changeset/flat-kids-occur.md b/.changeset/flat-kids-occur.md deleted file mode 100644 index 4e4c002928..0000000000 --- a/.changeset/flat-kids-occur.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor -'@backstage/plugin-scaffolder': minor ---- - -Move `useTaskStream`, `TaskBorder`, `TaskLogStream` and `TaskSteps` into `scaffolder-react`. diff --git a/.changeset/flat-peaches-act.md b/.changeset/flat-peaches-act.md deleted file mode 100644 index e4b4138ee5..0000000000 --- a/.changeset/flat-peaches-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': patch ---- - -Techdocs backend explains a bit more about what might have caused the docs not being found when building techdocs. diff --git a/.changeset/forty-snails-clap.md b/.changeset/forty-snails-clap.md deleted file mode 100644 index f5aef12d9d..0000000000 --- a/.changeset/forty-snails-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': minor ---- - -Added endpoint to get a list of known incremental entity providers diff --git a/.changeset/four-lizards-grin.md b/.changeset/four-lizards-grin.md deleted file mode 100644 index 6fa5f57243..0000000000 --- a/.changeset/four-lizards-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fix export of `defaultCatalogCollatorEntityTransformer`. diff --git a/.changeset/fresh-hairs-switch.md b/.changeset/fresh-hairs-switch.md deleted file mode 100644 index 16d3b119e5..0000000000 --- a/.changeset/fresh-hairs-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-tasks': minor ---- - -add functionality to get descriptions from the scheduler for triggering diff --git a/.changeset/fuzzy-trains-search.md b/.changeset/fuzzy-trains-search.md deleted file mode 100644 index 229d25f3b5..0000000000 --- a/.changeset/fuzzy-trains-search.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Fix icon alignment in `CatalogSearchResultListItem` diff --git a/.changeset/gentle-bears-love.md b/.changeset/gentle-bears-love.md deleted file mode 100644 index b6f6e3cfcf..0000000000 --- a/.changeset/gentle-bears-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -Fixed msgraph catalog backend to use user.select option when fetching user from AzureAD diff --git a/.changeset/gentle-pears-clean.md b/.changeset/gentle-pears-clean.md deleted file mode 100644 index d92c3709ae..0000000000 --- a/.changeset/gentle-pears-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/eslint-plugin': patch ---- - -Fixing a bug that we should check internal dependencies too diff --git a/.changeset/gorgeous-pumas-speak.md b/.changeset/gorgeous-pumas-speak.md deleted file mode 100644 index 60f40c6748..0000000000 --- a/.changeset/gorgeous-pumas-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -fix entity switch rendering when there is no default case diff --git a/.changeset/great-trains-jam.md b/.changeset/great-trains-jam.md deleted file mode 100644 index 91133bfe32..0000000000 --- a/.changeset/great-trains-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Fix bug that caused next and previous links not to work with certain versions of mkdocs-material diff --git a/.changeset/grumpy-bikes-begin.md b/.changeset/grumpy-bikes-begin.md deleted file mode 100644 index a98e6651f5..0000000000 --- a/.changeset/grumpy-bikes-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights-backend': patch ---- - -Add DB index to improve latency of latest fact query diff --git a/.changeset/happy-boxes-arrive.md b/.changeset/happy-boxes-arrive.md deleted file mode 100644 index 85998c1bdd..0000000000 --- a/.changeset/happy-boxes-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -fix bug with `hasErrors` returning false when dealing with empty objects diff --git a/.changeset/healthy-buses-live-1.md b/.changeset/healthy-buses-live-1.md deleted file mode 100644 index 7e433372df..0000000000 --- a/.changeset/healthy-buses-live-1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch ---- - -Renamed `incrementalIngestionEntityProviderCatalogModule` to `catalogModuleIncrementalIngestionEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-2.md b/.changeset/healthy-buses-live-2.md deleted file mode 100644 index ab577276d8..0000000000 --- a/.changeset/healthy-buses-live-2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch ---- - -Renamed `bitbucketServerEntityProviderCatalogModule` to `catalogModuleBitbucketServerEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-3.md b/.changeset/healthy-buses-live-3.md deleted file mode 100644 index 493236ea73..0000000000 --- a/.changeset/healthy-buses-live-3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch ---- - -Renamed `bitbucketCloudEntityProviderCatalogModule` to `catalogModuleBitbucketCloudEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-4.md b/.changeset/healthy-buses-live-4.md deleted file mode 100644 index fdc223a7f4..0000000000 --- a/.changeset/healthy-buses-live-4.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -Renamed `microsoftGraphOrgEntityProviderCatalogModule` to `catalogModuleMicrosoftGraphOrgEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-5.md b/.changeset/healthy-buses-live-5.md deleted file mode 100644 index f540751696..0000000000 --- a/.changeset/healthy-buses-live-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gerrit': patch ---- - -Renamed `gerritEntityProviderCatalogModule` to `catalogModuleGerritEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-6.md b/.changeset/healthy-buses-live-6.md deleted file mode 100644 index f293e56eae..0000000000 --- a/.changeset/healthy-buses-live-6.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Renamed `githubEntityProviderCatalogModule` to `catalogModuleGithubEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-7.md b/.changeset/healthy-buses-live-7.md deleted file mode 100644 index 7e7219bf01..0000000000 --- a/.changeset/healthy-buses-live-7.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-8.md b/.changeset/healthy-buses-live-8.md deleted file mode 100644 index 9137a3b31a..0000000000 --- a/.changeset/healthy-buses-live-8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-azure': patch ---- - -Renamed `azureDevOpsEntityProviderCatalogModule` to `catalogModuleAzureDevOpsEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/healthy-buses-live-9.md b/.changeset/healthy-buses-live-9.md deleted file mode 100644 index dbcba51470..0000000000 --- a/.changeset/healthy-buses-live-9.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-aws': patch ---- - -Renamed `awsS3EntityProviderCatalogModule` to `catalogModuleAwsS3EntityProviders` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). diff --git a/.changeset/honest-clouds-shout.md b/.changeset/honest-clouds-shout.md deleted file mode 100644 index 0a7249d9ad..0000000000 --- a/.changeset/honest-clouds-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -catalog write action should allow any shape of object diff --git a/.changeset/honest-nails-bake.md b/.changeset/honest-nails-bake.md deleted file mode 100644 index 03d5a080c9..0000000000 --- a/.changeset/honest-nails-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-octopus-deploy': minor ---- - -Initial version diff --git a/.changeset/khaki-poems-run.md b/.changeset/khaki-poems-run.md deleted file mode 100644 index 74db902c02..0000000000 --- a/.changeset/khaki-poems-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-entity-validation': patch ---- - -Fixed bug in EntityVaidation plugin where string in text box was unable to be updated. diff --git a/.changeset/large-feet-wash.md b/.changeset/large-feet-wash.md deleted file mode 100644 index 88a28f9d60..0000000000 --- a/.changeset/large-feet-wash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': minor ---- - -Introduced alpha export of the `techdocsPlugin` using the new backend system. diff --git a/.changeset/light-bees-end.md b/.changeset/light-bees-end.md deleted file mode 100644 index 9fbbc44da0..0000000000 --- a/.changeset/light-bees-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters diff --git a/.changeset/light-sheep-trade.md b/.changeset/light-sheep-trade.md deleted file mode 100644 index 480ffc973e..0000000000 --- a/.changeset/light-sheep-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated the ESLint plugin configuration that is enabled through `yarn start --check` to only pick up valid source files. diff --git a/.changeset/long-nails-pump.md b/.changeset/long-nails-pump.md deleted file mode 100644 index d9eefc0249..0000000000 --- a/.changeset/long-nails-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added a new `migrate package-exports` command that synchronizes package exports fields in all `package.json`s. diff --git a/.changeset/long-wolves-drive.md b/.changeset/long-wolves-drive.md deleted file mode 100644 index 1c3ffadb5a..0000000000 --- a/.changeset/long-wolves-drive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-octopus-deploy': patch ---- - -Added Octopus Deploy logo diff --git a/.changeset/lovely-tigers-look.md b/.changeset/lovely-tigers-look.md deleted file mode 100644 index 5e7d230e6d..0000000000 --- a/.changeset/lovely-tigers-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr-backend': patch ---- - -Support MADR v3 format diff --git a/.changeset/many-carpets-act.md b/.changeset/many-carpets-act.md deleted file mode 100644 index 5285eeebbd..0000000000 --- a/.changeset/many-carpets-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Handle difference in expiration time between Microsoft session and Backstage session which caused the Backstage token to be invalid during a time frame. diff --git a/.changeset/mean-emus-hide.md b/.changeset/mean-emus-hide.md deleted file mode 100644 index 955e25d258..0000000000 --- a/.changeset/mean-emus-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Remove timer for skipped steps in Scaffolder Next's TaskSteps diff --git a/.changeset/mean-toys-itch.md b/.changeset/mean-toys-itch.md deleted file mode 100644 index 75252b3482..0000000000 --- a/.changeset/mean-toys-itch.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Adds config option `backend.database.role` to set ownership for newly created schemas and tables in Postgres - -The example config below connects to the database as user `v-backstage-123` but sets the ownership of -the create schemas and tables to `backstage` - -```yaml -backend: - database: - client: pg - pluginDivisionMode: schema - role: backstage - connection: - user: v-backstage-123 - ... -``` diff --git a/.changeset/metal-suns-rhyme.md b/.changeset/metal-suns-rhyme.md deleted file mode 100644 index 3fefdca7c6..0000000000 --- a/.changeset/metal-suns-rhyme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Bumped the `msw` version in templates to 1.0.0 diff --git a/.changeset/mighty-games-turn.md b/.changeset/mighty-games-turn.md deleted file mode 100644 index 38c2487835..0000000000 --- a/.changeset/mighty-games-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-radar': patch ---- - -Update colors to match Zalando's tech radar, also add coloring on title and legend to match ring color. diff --git a/.changeset/mighty-years-own.md b/.changeset/mighty-years-own.md deleted file mode 100644 index b14b974bc4..0000000000 --- a/.changeset/mighty-years-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -scaffolder/next: Move the `uiSchema` to its own property in the validation `context` to align with component development and access of `ui:options` diff --git a/.changeset/modern-colts-exercise.md b/.changeset/modern-colts-exercise.md deleted file mode 100644 index 651f10bc98..0000000000 --- a/.changeset/modern-colts-exercise.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-azure': patch ---- - -Add branch filter support -https://backstage.io/docs/integrations/azure/discovery diff --git a/.changeset/moody-apes-know.md b/.changeset/moody-apes-know.md deleted file mode 100644 index bd48cb108e..0000000000 --- a/.changeset/moody-apes-know.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-catalog-backend-module-bitbucket': patch -'@backstage/plugin-catalog-backend-module-puppetdb': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-catalog-backend-module-gerrit': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-ldap': patch -'@backstage/plugin-catalog-backend-module-aws': patch ---- - -Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` diff --git a/.changeset/new-jobs-deny.md b/.changeset/new-jobs-deny.md deleted file mode 100644 index e7b5bff71a..0000000000 --- a/.changeset/new-jobs-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor ---- - -Add possibility to re-use EntityPicker for filters with multiple select. diff --git a/.changeset/nice-planets-wave.md b/.changeset/nice-planets-wave.md deleted file mode 100644 index 2af1a14d83..0000000000 --- a/.changeset/nice-planets-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-linguist-backend': minor ---- - -**BREAKING** The linguist-backend `createRouter` now requires that the `tokenManger` is passed to the router. diff --git a/.changeset/nine-bikes-applaud.md b/.changeset/nine-bikes-applaud.md deleted file mode 100644 index 77a1c0e4be..0000000000 --- a/.changeset/nine-bikes-applaud.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch ---- - -allow container runner to be undefined in cookiecutter plugin diff --git a/.changeset/ninety-turtles-wait.md b/.changeset/ninety-turtles-wait.md deleted file mode 100644 index 683583528f..0000000000 --- a/.changeset/ninety-turtles-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -The HTML tag attributes in the documentation content inserted to shadow DOM is preserved to improve accessibility diff --git a/.changeset/odd-fireants-bathe.md b/.changeset/odd-fireants-bathe.md deleted file mode 100644 index d4b7f5dc5a..0000000000 --- a/.changeset/odd-fireants-bathe.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-adr-backend': patch -'@backstage/cli': patch ---- - -Adjust express dependencies to be the same as the rest of the project diff --git a/.changeset/odd-oranges-tease.md b/.changeset/odd-oranges-tease.md deleted file mode 100644 index f9d5e60d19..0000000000 --- a/.changeset/odd-oranges-tease.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/plugin-git-release-manager': patch -'@backstage/plugin-microsoft-calendar': patch -'@backstage/plugin-newrelic-dashboard': patch -'@backstage/core-components': patch -'@backstage/plugin-code-coverage': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-azure-sites': patch -'@backstage/plugin-firehydrant': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-tech-radar': patch -'@backstage/plugin-gcalendar': patch -'@backstage/plugin-shortcuts': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-ilert': patch -'@backstage/plugin-org': patch ---- - -Change black & white colors to be theme aware diff --git a/.changeset/odd-waves-rescue.md b/.changeset/odd-waves-rescue.md deleted file mode 100644 index e435bc9962..0000000000 --- a/.changeset/odd-waves-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Create an "Other Templates" group when groups are given to scaffolder/next. diff --git a/.changeset/old-foxes-shave.md b/.changeset/old-foxes-shave.md deleted file mode 100644 index 4cd0808103..0000000000 --- a/.changeset/old-foxes-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Add ApiDefinitionDialog component for fast access to the API definition in ProvidedApiCards and ConsumedApiCards. diff --git a/.changeset/olive-berries-poke.md b/.changeset/olive-berries-poke.md deleted file mode 100644 index 48bde329c8..0000000000 --- a/.changeset/olive-berries-poke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -scaffolder/next: Fix for steps without properties diff --git a/.changeset/orange-experts-hug.md b/.changeset/orange-experts-hug.md deleted file mode 100644 index 1bf8b4a7d7..0000000000 --- a/.changeset/orange-experts-hug.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Fix dark theme Swagger's clear button font color. diff --git a/.changeset/perfect-mayflies-greet.md b/.changeset/perfect-mayflies-greet.md deleted file mode 100644 index 7e57507dae..0000000000 --- a/.changeset/perfect-mayflies-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated frontend plugin template to use some more recent features diff --git a/.changeset/pink-apples-design.md b/.changeset/pink-apples-design.md deleted file mode 100644 index 411786370a..0000000000 --- a/.changeset/pink-apples-design.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-shortcuts': patch ---- - -Fixed bug in LocalStoredShortcuts client where adding new Shortcut results in replacing entire shortcut list. - -Refactored LocalStoredShortcuts client to listen to `storageApi` updates to ensure that local state is always up to date. diff --git a/.changeset/pink-dolls-unite.md b/.changeset/pink-dolls-unite.md deleted file mode 100644 index 418edfd92b..0000000000 --- a/.changeset/pink-dolls-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-linguist-backend': patch ---- - -Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). diff --git a/.changeset/polite-chicken-do.md b/.changeset/polite-chicken-do.md deleted file mode 100644 index 33e4149253..0000000000 --- a/.changeset/polite-chicken-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-vault-backend': patch ---- - -Ignore the `eslint` error diff --git a/.changeset/polite-falcons-jump.md b/.changeset/polite-falcons-jump.md deleted file mode 100644 index ab9209913d..0000000000 --- a/.changeset/polite-falcons-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -Fix small UI-glitch in MemberListCard diff --git a/.changeset/polite-wombats-smash.md b/.changeset/polite-wombats-smash.md deleted file mode 100644 index 98569e1799..0000000000 --- a/.changeset/polite-wombats-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/errors': patch ---- - -Added `NotImplementedError`, which can be used when the server does not recognize the request method and is incapable of supporting it for any resource. diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index fc7fbffc9a..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "example-app": "0.2.80", - "@backstage/app-defaults": "1.2.0", - "example-backend": "0.2.80", - "@backstage/backend-app-api": "0.4.0", - "@backstage/backend-common": "0.18.2", - "@backstage/backend-defaults": "0.1.7", - "@backstage/backend-dev-utils": "0.1.0", - "example-backend-next": "0.0.8", - "@backstage/backend-plugin-api": "0.4.0", - "@backstage/backend-tasks": "0.4.3", - "@backstage/backend-test-utils": "0.1.34", - "@backstage/catalog-client": "1.3.1", - "@backstage/catalog-model": "1.2.0", - "@backstage/cli": "0.22.2", - "@backstage/cli-common": "0.1.11", - "@backstage/codemods": "0.1.43", - "@backstage/config": "1.0.6", - "@backstage/config-loader": "1.1.8", - "@backstage/core-app-api": "1.5.0", - "@backstage/core-components": "0.12.4", - "@backstage/core-plugin-api": "1.4.0", - "@backstage/create-app": "0.4.37", - "@backstage/dev-utils": "1.0.12", - "e2e-test": "0.2.0", - "@backstage/errors": "1.1.4", - "@backstage/eslint-plugin": "0.1.0", - "@backstage/integration": "1.4.2", - "@backstage/integration-aws-node": "0.1.1", - "@backstage/integration-react": "1.1.10", - "@backstage/release-manifests": "0.0.8", - "@backstage/repo-tools": "0.1.2", - "@techdocs/cli": "1.3.2", - "techdocs-cli-embedded-app": "0.2.79", - "@backstage/test-utils": "1.2.5", - "@backstage/theme": "0.2.17", - "@backstage/types": "1.0.2", - "@backstage/version-bridge": "1.0.3", - "@backstage/plugin-adr": "0.4.0", - "@backstage/plugin-adr-backend": "0.3.0", - "@backstage/plugin-adr-common": "0.2.6", - "@backstage/plugin-airbrake": "0.3.15", - "@backstage/plugin-airbrake-backend": "0.2.15", - "@backstage/plugin-allure": "0.1.31", - "@backstage/plugin-analytics-module-ga": "0.1.26", - "@backstage/plugin-apache-airflow": "0.2.8", - "@backstage/plugin-api-docs": "0.9.0", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.1", - "@backstage/plugin-apollo-explorer": "0.1.8", - "@backstage/plugin-app-backend": "0.3.42", - "@backstage/plugin-auth-backend": "0.18.0", - "@backstage/plugin-auth-node": "0.2.11", - "@backstage/plugin-azure-devops": "0.2.6", - "@backstage/plugin-azure-devops-backend": "0.3.21", - "@backstage/plugin-azure-devops-common": "0.3.0", - "@backstage/plugin-azure-sites": "0.1.4", - "@backstage/plugin-azure-sites-backend": "0.1.4", - "@backstage/plugin-azure-sites-common": "0.1.0", - "@backstage/plugin-badges": "0.2.39", - "@backstage/plugin-badges-backend": "0.1.36", - "@backstage/plugin-bazaar": "0.2.4", - "@backstage/plugin-bazaar-backend": "0.2.5", - "@backstage/plugin-bitbucket-cloud-common": "0.2.3", - "@backstage/plugin-bitrise": "0.1.42", - "@backstage/plugin-catalog": "1.8.0", - "@backstage/plugin-catalog-backend": "1.7.2", - "@backstage/plugin-catalog-backend-module-aws": "0.1.15", - "@backstage/plugin-catalog-backend-module-azure": "0.1.13", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.9", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.9", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.7", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.10", - "@backstage/plugin-catalog-backend-module-github": "0.2.5", - "@backstage/plugin-catalog-backend-module-gitlab": "0.1.13", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.2.0", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.9", - "@backstage/plugin-catalog-backend-module-msgraph": "0.5.0", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.8", - "@backstage/plugin-catalog-common": "1.0.11", - "@internal/plugin-catalog-customized": "0.0.7", - "@backstage/plugin-catalog-graph": "0.2.27", - "@backstage/plugin-catalog-graphql": "0.3.18", - "@backstage/plugin-catalog-import": "0.9.5", - "@backstage/plugin-catalog-node": "1.3.3", - "@backstage/plugin-catalog-react": "1.3.0", - "@backstage/plugin-cicd-statistics": "0.1.17", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.11", - "@backstage/plugin-circleci": "0.3.15", - "@backstage/plugin-cloudbuild": "0.3.15", - "@backstage/plugin-code-climate": "0.1.15", - "@backstage/plugin-code-coverage": "0.2.8", - "@backstage/plugin-code-coverage-backend": "0.2.8", - "@backstage/plugin-codescene": "0.1.10", - "@backstage/plugin-config-schema": "0.1.38", - "@backstage/plugin-cost-insights": "0.12.4", - "@backstage/plugin-cost-insights-common": "0.1.1", - "@backstage/plugin-dynatrace": "2.0.0", - "@backstage/plugin-entity-feedback": "0.1.0", - "@backstage/plugin-entity-feedback-backend": "0.1.0", - "@backstage/plugin-entity-feedback-common": "0.1.0", - "@backstage/plugin-entity-validation": "0.1.0", - "@backstage/plugin-events-backend": "0.2.3", - "@backstage/plugin-events-backend-module-aws-sqs": "0.1.4", - "@backstage/plugin-events-backend-module-azure": "0.1.4", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.4", - "@backstage/plugin-events-backend-module-gerrit": "0.1.4", - "@backstage/plugin-events-backend-module-github": "0.1.4", - "@backstage/plugin-events-backend-module-gitlab": "0.1.4", - "@backstage/plugin-events-backend-test-utils": "0.1.4", - "@backstage/plugin-events-node": "0.2.3", - "@internal/plugin-todo-list": "1.0.10", - "@internal/plugin-todo-list-backend": "1.0.10", - "@internal/plugin-todo-list-common": "1.0.8", - "@backstage/plugin-explore": "0.4.0", - "@backstage/plugin-explore-backend": "0.0.4", - "@backstage/plugin-explore-common": "0.0.1", - "@backstage/plugin-explore-react": "0.0.26", - "@backstage/plugin-firehydrant": "0.1.32", - "@backstage/plugin-fossa": "0.2.47", - "@backstage/plugin-gcalendar": "0.3.11", - "@backstage/plugin-gcp-projects": "0.3.34", - "@backstage/plugin-git-release-manager": "0.3.28", - "@backstage/plugin-github-actions": "0.5.15", - "@backstage/plugin-github-deployments": "0.1.46", - "@backstage/plugin-github-issues": "0.2.4", - "@backstage/plugin-github-pull-requests-board": "0.1.9", - "@backstage/plugin-gitops-profiles": "0.3.33", - "@backstage/plugin-gocd": "0.1.21", - "@backstage/plugin-graphiql": "0.2.47", - "@backstage/plugin-graphql-backend": "0.1.32", - "@backstage/plugin-graphql-voyager": "0.1.0", - "@backstage/plugin-home": "0.4.31", - "@backstage/plugin-ilert": "0.2.4", - "@backstage/plugin-jenkins": "0.7.14", - "@backstage/plugin-jenkins-backend": "0.1.32", - "@backstage/plugin-jenkins-common": "0.1.13", - "@backstage/plugin-kafka": "0.3.15", - "@backstage/plugin-kafka-backend": "0.2.35", - "@backstage/plugin-kubernetes": "0.7.8", - "@backstage/plugin-kubernetes-backend": "0.9.3", - "@backstage/plugin-kubernetes-common": "0.6.0", - "@backstage/plugin-lighthouse": "0.4.0", - "@backstage/plugin-lighthouse-backend": "0.1.0", - "@backstage/plugin-lighthouse-common": "0.1.0", - "@backstage/plugin-linguist": "0.1.0", - "@backstage/plugin-linguist-backend": "0.1.0", - "@backstage/plugin-linguist-common": "0.1.0", - "@backstage/plugin-microsoft-calendar": "0.1.0", - "@backstage/plugin-newrelic": "0.3.33", - "@backstage/plugin-newrelic-dashboard": "0.2.8", - "@backstage/plugin-org": "0.6.5", - "@backstage/plugin-org-react": "0.1.4", - "@backstage/plugin-pagerduty": "0.5.8", - "@backstage/plugin-periskop": "0.1.13", - "@backstage/plugin-periskop-backend": "0.1.13", - "@backstage/plugin-permission-backend": "0.5.17", - "@backstage/plugin-permission-common": "0.7.3", - "@backstage/plugin-permission-node": "0.7.5", - "@backstage/plugin-permission-react": "0.4.10", - "@backstage/plugin-playlist": "0.1.6", - "@backstage/plugin-playlist-backend": "0.2.5", - "@backstage/plugin-playlist-common": "0.1.4", - "@backstage/plugin-proxy-backend": "0.2.36", - "@backstage/plugin-rollbar": "0.4.15", - "@backstage/plugin-rollbar-backend": "0.1.39", - "@backstage/plugin-scaffolder": "1.11.0", - "@backstage/plugin-scaffolder-backend": "1.11.0", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.17", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.10", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.2", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.15", - "@backstage/plugin-scaffolder-common": "1.2.5", - "@backstage/plugin-scaffolder-node": "0.1.0", - "@backstage/plugin-scaffolder-react": "1.1.0", - "@backstage/plugin-search": "1.1.0", - "@backstage/plugin-search-backend": "1.2.3", - "@backstage/plugin-search-backend-module-elasticsearch": "1.1.3", - "@backstage/plugin-search-backend-module-pg": "0.5.3", - "@backstage/plugin-search-backend-node": "1.1.3", - "@backstage/plugin-search-common": "1.2.1", - "@backstage/plugin-search-react": "1.5.0", - "@backstage/plugin-sentry": "0.5.0", - "@backstage/plugin-shortcuts": "0.3.7", - "@backstage/plugin-sonarqube": "0.6.3", - "@backstage/plugin-sonarqube-backend": "0.1.7", - "@backstage/plugin-sonarqube-react": "0.1.2", - "@backstage/plugin-splunk-on-call": "0.4.4", - "@backstage/plugin-stack-overflow": "0.1.11", - "@backstage/plugin-stack-overflow-backend": "0.1.11", - "@backstage/plugin-tech-insights": "0.3.7", - "@backstage/plugin-tech-insights-backend": "0.5.8", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.26", - "@backstage/plugin-tech-insights-common": "0.2.10", - "@backstage/plugin-tech-insights-node": "0.4.0", - "@backstage/plugin-tech-radar": "0.6.1", - "@backstage/plugin-techdocs": "1.5.0", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.10", - "@backstage/plugin-techdocs-backend": "1.5.3", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.10", - "@backstage/plugin-techdocs-node": "1.5.0", - "@backstage/plugin-techdocs-react": "1.1.3", - "@backstage/plugin-todo": "0.2.17", - "@backstage/plugin-todo-backend": "0.1.39", - "@backstage/plugin-user-settings": "0.7.0", - "@backstage/plugin-user-settings-backend": "0.1.6", - "@backstage/plugin-vault": "0.1.9", - "@backstage/plugin-vault-backend": "0.2.8", - "@backstage/plugin-xcmetrics": "0.2.35", - "@backstage/plugin-octopus-deploy": "0.0.0", - "@backstage/plugin-stackstorm": "0.0.0", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.0.1" - }, - "changesets": [ - "afraid-trees-stare", - "backend-token-authentication", - "breezy-bees-care", - "bright-kids-raise", - "clean-lemons-jump", - "clean-planes-join", - "clever-dogs-cheat", - "cool-clocks-prove", - "cool-feet-speak", - "create-app-1676993958", - "create-app-1678209629", - "curvy-pets-hang", - "eight-radios-bake", - "eighty-chairs-roll", - "eighty-geese-return", - "empty-books-occur", - "famous-sloths-tie", - "fifty-beds-dress", - "flat-kids-occur", - "flat-peaches-act", - "forty-snails-clap", - "four-lizards-grin", - "fresh-hairs-switch", - "fuzzy-trains-search", - "gentle-bears-love", - "gentle-pears-clean", - "great-trains-jam", - "grumpy-bikes-begin", - "happy-boxes-arrive", - "honest-clouds-shout", - "honest-nails-bake", - "khaki-poems-run", - "light-bees-end", - "light-sheep-trade", - "long-nails-pump", - "long-wolves-drive", - "lovely-tigers-look", - "mean-toys-itch", - "metal-suns-rhyme", - "mighty-games-turn", - "mighty-years-own", - "new-jobs-deny", - "nice-planets-wave", - "nine-bikes-applaud", - "ninety-turtles-wait", - "odd-fireants-bathe", - "odd-oranges-tease", - "odd-waves-rescue", - "old-foxes-shave", - "olive-berries-poke", - "orange-experts-hug", - "perfect-mayflies-greet", - "pink-dolls-unite", - "polite-chicken-do", - "polite-falcons-jump", - "polite-wombats-smash", - "purple-days-film", - "quick-coats-sneeze", - "quick-schools-dress", - "quick-tables-listen", - "quiet-ghosts-float", - "rare-buses-swim", - "rare-grapes-count", - "rare-pandas-hope", - "rename-for-the-win", - "renovate-3672e5e", - "renovate-4775edd", - "renovate-488b7e7", - "renovate-80f8787", - "renovate-fb85ae7", - "rich-clocks-approve", - "rich-wombats-rescue", - "rotten-cats-matter", - "rotten-panthers-share", - "selfish-hats-wait", - "short-mayflies-fix", - "silent-dryers-end", - "silly-suits-run", - "silver-bikes-breathe", - "silver-lies-rest", - "six-melons-rhyme", - "slimy-lobsters-kneel", - "slow-insects-cheat", - "slow-pens-compare", - "slow-suits-grab", - "spotty-bees-tell", - "spotty-turtles-reply", - "spotty-wasps-complain", - "swift-bags-wave", - "tall-hats-talk", - "ten-tigers-marry", - "thin-candles-wait", - "tiny-llamas-jump", - "tricky-jars-film", - "twelve-cars-push", - "twenty-jeans-speak", - "unlucky-sloths-explain", - "warm-vans-fail", - "weak-coats-allow", - "what-is-going-on-babe", - "wicked-lions-repeat", - "wicked-spoons-call", - "wild-ads-pull", - "wild-bulldogs-suffer", - "witty-geckos-design", - "yellow-bananas-yawn", - "young-schools-double", - "young-scissors-cough", - "young-walls-prove" - ] -} diff --git a/.changeset/proud-jokes-pull.md b/.changeset/proud-jokes-pull.md deleted file mode 100644 index 7d7790889a..0000000000 --- a/.changeset/proud-jokes-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-node': patch ---- - -Added `locationSpecToMetadataName` and `locationSpecToLocationEntity` as their new home, moved over from the backend package where they now are marked as deprecated. diff --git a/.changeset/purple-days-film.md b/.changeset/purple-days-film.md deleted file mode 100644 index 09d760c33e..0000000000 --- a/.changeset/purple-days-film.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Fixed bug that prevented deletion of stale files when non-empty directories where tried to be deleted as well. diff --git a/.changeset/quick-coats-sneeze.md b/.changeset/quick-coats-sneeze.md deleted file mode 100644 index 24f7f70e83..0000000000 --- a/.changeset/quick-coats-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@techdocs/cli': minor ---- - -Running `@techdocs/cli generate` with the `--verbose` flag will now print the mkdocs output. diff --git a/.changeset/quick-schools-dress.md b/.changeset/quick-schools-dress.md deleted file mode 100644 index 511709461e..0000000000 --- a/.changeset/quick-schools-dress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-addons-test-utils': patch ---- - -Fix bug/problem with test helper diff --git a/.changeset/quick-tables-listen.md b/.changeset/quick-tables-listen.md deleted file mode 100644 index fab9ef7969..0000000000 --- a/.changeset/quick-tables-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stackstorm': minor ---- - -Add StackStorm plugin to Backstage which is interfacing with StackStorm API. It allows users to view workflow executions, packs and actions. For installation and configuration instructions please view [README.md](https://github.com/backstage/backstage/tree/master/plugins/stackstorm/README.md) diff --git a/.changeset/quiet-ghosts-float.md b/.changeset/quiet-ghosts-float.md deleted file mode 100644 index dc8df90206..0000000000 --- a/.changeset/quiet-ghosts-float.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@backstage/plugin-entity-validation': patch -'@backstage/core-components': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-circleci': patch -'@backstage/plugin-playlist': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-explore': patch ---- - -Switch to using `LinkButton` instead of the deprecated `Button` diff --git a/.changeset/rare-buses-swim.md b/.changeset/rare-buses-swim.md deleted file mode 100644 index 4626343ca3..0000000000 --- a/.changeset/rare-buses-swim.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-tasks': patch ---- - -Added the adapted query to mysql and sqlite3 databases to not returning warning on logs diff --git a/.changeset/rare-grapes-count.md b/.changeset/rare-grapes-count.md deleted file mode 100644 index fdeb653f3c..0000000000 --- a/.changeset/rare-grapes-count.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-events-backend-module-bitbucket-cloud': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-catalog-backend-module-gerrit': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-events-backend-module-gerrit': patch -'@backstage/plugin-events-backend-module-github': patch -'@backstage/plugin-events-backend-module-gitlab': patch -'@backstage/plugin-events-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-aws': patch -'@backstage/backend-plugin-api': patch -'@backstage/backend-test-utils': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/backend-defaults': patch -'@backstage/backend-app-api': patch -'@backstage/core-plugin-api': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/backend-common': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-sonarqube-react': patch -'@backstage/catalog-model': patch -'@backstage/plugin-catalog-common': patch -'@backstage/plugin-events-backend': patch -'@backstage/plugin-jenkins-common': patch -'@backstage/plugin-techdocs-react': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-catalog-node': patch -'@backstage/test-utils': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-events-node': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-jenkins': patch ---- - -Internal refactor of `/alpha` exports. diff --git a/.changeset/rare-pandas-hope.md b/.changeset/rare-pandas-hope.md deleted file mode 100644 index 6e8e81fcfb..0000000000 --- a/.changeset/rare-pandas-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-playlist': patch ---- - -Internal update to work with newer versions of react-router diff --git a/.changeset/rename-for-the-win.md b/.changeset/rename-for-the-win.md deleted file mode 100644 index 8b3dc6df58..0000000000 --- a/.changeset/rename-for-the-win.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-permission-node': patch ---- - -Update the service-to-service auth docs URL in error message. -`` diff --git a/.changeset/renovate-3672e5e.md b/.changeset/renovate-3672e5e.md deleted file mode 100644 index c94eec2245..0000000000 --- a/.changeset/renovate-3672e5e.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated dependency `del` to `^7.0.0`. diff --git a/.changeset/renovate-4775edd.md b/.changeset/renovate-4775edd.md deleted file mode 100644 index 6472fac254..0000000000 --- a/.changeset/renovate-4775edd.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-graphql': patch ---- - -Updated dependency `@graphql-codegen/cli` to `^3.0.0`. -Updated dependency `@graphql-codegen/graphql-modules-preset` to `^3.0.0`. -Updated dependency `@graphql-codegen/typescript` to `^3.0.0`. -Updated dependency `@graphql-codegen/typescript-resolvers` to `^3.0.0`. diff --git a/.changeset/renovate-488b7e7.md b/.changeset/renovate-488b7e7.md deleted file mode 100644 index 35940f474b..0000000000 --- a/.changeset/renovate-488b7e7.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Updated dependency `@types/passport-microsoft` to `^1.0.0`. diff --git a/.changeset/renovate-80f8787.md b/.changeset/renovate-80f8787.md deleted file mode 100644 index addac46355..0000000000 --- a/.changeset/renovate-80f8787.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-techdocs-react': patch -'@backstage/plugin-techdocs': patch ---- - -Updated dependency `jss` to `~10.10.0`. diff --git a/.changeset/renovate-fb85ae7.md b/.changeset/renovate-fb85ae7.md deleted file mode 100644 index 920469850c..0000000000 --- a/.changeset/renovate-fb85ae7.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/backend-test-utils': patch -'@backstage/catalog-client': patch -'@backstage/cli': patch -'@backstage/config-loader': patch -'@backstage/core-app-api': patch -'@backstage/core-components': patch -'@backstage/core-plugin-api': patch -'@backstage/integration-react': patch -'@backstage/integration': patch -'@backstage/release-manifests': patch -'@backstage/test-utils': patch -'@backstage/plugin-adr-backend': patch -'@backstage/plugin-adr': patch -'@backstage/plugin-airbrake-backend': patch -'@backstage/plugin-airbrake': patch -'@backstage/plugin-allure': patch -'@backstage/plugin-analytics-module-ga': patch -'@backstage/plugin-apache-airflow': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-apollo-explorer': patch -'@backstage/plugin-app-backend': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-auth-node': patch -'@backstage/plugin-azure-devops-backend': patch -'@backstage/plugin-azure-devops': patch -'@backstage/plugin-azure-sites-backend': patch -'@backstage/plugin-azure-sites': patch -'@backstage/plugin-badges': patch -'@backstage/plugin-bitbucket-cloud-common': patch -'@backstage/plugin-bitrise': patch -'@backstage/plugin-catalog-backend-module-azure': patch -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch -'@backstage/plugin-catalog-backend-module-bitbucket-server': patch -'@backstage/plugin-catalog-backend-module-bitbucket': patch -'@backstage/plugin-catalog-backend-module-gerrit': patch -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-catalog-backend-module-gitlab': patch -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-catalog-graphql': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-circleci': patch -'@backstage/plugin-cloudbuild': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-code-coverage-backend': patch -'@backstage/plugin-code-coverage': patch -'@backstage/plugin-codescene': patch -'@backstage/plugin-config-schema': patch -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-dynatrace': patch -'@backstage/plugin-entity-feedback-backend': patch -'@backstage/plugin-entity-feedback': patch -'@backstage/plugin-entity-validation': patch -'@backstage/plugin-explore-backend': patch -'@backstage/plugin-explore-react': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-firehydrant': patch -'@backstage/plugin-fossa': patch -'@backstage/plugin-gcalendar': patch -'@backstage/plugin-gcp-projects': patch -'@backstage/plugin-git-release-manager': patch -'@backstage/plugin-github-actions': patch -'@backstage/plugin-github-deployments': patch -'@backstage/plugin-github-issues': patch -'@backstage/plugin-github-pull-requests-board': patch -'@backstage/plugin-gitops-profiles': patch -'@backstage/plugin-gocd': patch -'@backstage/plugin-graphiql': patch -'@backstage/plugin-graphql-backend': patch -'@backstage/plugin-graphql-voyager': patch -'@backstage/plugin-home': patch -'@backstage/plugin-ilert': patch -'@backstage/plugin-jenkins-backend': patch -'@backstage/plugin-jenkins': patch -'@backstage/plugin-kafka': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-lighthouse': patch -'@backstage/plugin-linguist-backend': patch -'@backstage/plugin-linguist': patch -'@backstage/plugin-microsoft-calendar': patch -'@backstage/plugin-newrelic': patch -'@backstage/plugin-octopus-deploy': patch -'@backstage/plugin-org-react': patch -'@backstage/plugin-org': patch -'@backstage/plugin-pagerduty': patch -'@backstage/plugin-periskop-backend': patch -'@backstage/plugin-periskop': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-permission-common': patch -'@backstage/plugin-permission-node': patch -'@backstage/plugin-playlist-backend': patch -'@backstage/plugin-playlist': patch -'@backstage/plugin-proxy-backend': patch -'@backstage/plugin-rollbar-backend': patch -'@backstage/plugin-rollbar': patch -'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-search': patch -'@backstage/plugin-sentry': patch -'@backstage/plugin-shortcuts': patch -'@backstage/plugin-sonarqube-backend': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-stack-overflow-backend': patch -'@backstage/plugin-stack-overflow': patch -'@backstage/plugin-stackstorm': patch -'@backstage/plugin-tech-insights': patch -'@backstage/plugin-tech-radar': patch -'@backstage/plugin-techdocs-addons-test-utils': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/plugin-techdocs-module-addons-contrib': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-todo-backend': patch -'@backstage/plugin-todo': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-vault-backend': patch -'@backstage/plugin-vault': patch -'@backstage/plugin-xcmetrics': patch ---- - -Updated dependency `msw` to `^1.0.0`. diff --git a/.changeset/rich-clocks-approve.md b/.changeset/rich-clocks-approve.md deleted file mode 100644 index 319a8a7c9c..0000000000 --- a/.changeset/rich-clocks-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-lighthouse-backend': patch ---- - -Update README.md; typo with plugin name & removed unneeded "import { Router } from 'express';" diff --git a/.changeset/rich-wombats-rescue.md b/.changeset/rich-wombats-rescue.md deleted file mode 100644 index d62f38cb4a..0000000000 --- a/.changeset/rich-wombats-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Updated the `aria-label` of the `HeaderTabs` component. diff --git a/.changeset/rotten-cats-matter.md b/.changeset/rotten-cats-matter.md deleted file mode 100644 index 2515db9991..0000000000 --- a/.changeset/rotten-cats-matter.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@backstage/core-app-api': minor ---- - -`OAuth2` now gets ID tokens from a session with the `openid` scope explicitly -requested. - -This should not be considered a breaking change, because spec-compliant OIDC -providers will already be returning ID tokens if and only if the `openid` scope -is granted. - -This change makes the dependence explicit, and removes the burden on -OAuth2-based providers which require an ID token (e.g. this is done by various -default [auth -handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add -`openid` to their default scopes. _That_ could carry another indirect benefit: -by removing `openid` from the default scopes for a provider, grants for -resource-specific access tokens can avoid requesting excess ID token-related -scopes. diff --git a/.changeset/rotten-panthers-share.md b/.changeset/rotten-panthers-share.md deleted file mode 100644 index b9f0dd6691..0000000000 --- a/.changeset/rotten-panthers-share.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/plugin-catalog-backend-module-aws': patch ---- - -AwsS3UrlReader upgraded to use aws-sdk v3 diff --git a/.changeset/selfish-hats-wait.md b/.changeset/selfish-hats-wait.md deleted file mode 100644 index d706d42e8e..0000000000 --- a/.changeset/selfish-hats-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -Add styling to the `MembersListCard` and `ComponentsGrid` to handle overflow text. diff --git a/.changeset/sharp-hairs-arrive.md b/.changeset/sharp-hairs-arrive.md deleted file mode 100644 index a7f922566a..0000000000 --- a/.changeset/sharp-hairs-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Extended scaffolder action `catalog:fetch` to fetch multiple catalog entities by entity references. diff --git a/.changeset/sharp-rings-cry.md b/.changeset/sharp-rings-cry.md deleted file mode 100644 index ada106b251..0000000000 --- a/.changeset/sharp-rings-cry.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/backend-plugin-api': minor ---- - -Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. diff --git a/.changeset/short-mayflies-fix.md b/.changeset/short-mayflies-fix.md deleted file mode 100644 index 9d68a85da7..0000000000 --- a/.changeset/short-mayflies-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-pagerduty': patch ---- - -Update readme link for discord channel diff --git a/.changeset/silent-dryers-end.md b/.changeset/silent-dryers-end.md deleted file mode 100644 index d15ea602ae..0000000000 --- a/.changeset/silent-dryers-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fix the scaffolder validator for arrays when the item is a field in the object diff --git a/.changeset/silly-suits-run.md b/.changeset/silly-suits-run.md deleted file mode 100644 index ec371e4077..0000000000 --- a/.changeset/silly-suits-run.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -Add /entities/by-query endpoint returning paginated entities. - -The endpoint supports cursor base pagination and server side sorting of the entities diff --git a/.changeset/silver-bikes-breathe.md b/.changeset/silver-bikes-breathe.md deleted file mode 100644 index 0288580bba..0000000000 --- a/.changeset/silver-bikes-breathe.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Allow `EntitySwitch` to render all cases that match the condition. - -This change introduces a new parameter for the `EntitySwitch` component -`renderMultipleMatches`. In case the parameter value is `all`, the `EntitySwitch` -will render all `EntitySwitch.Case` that contain `if` parameter, and it -evaluates to true. In case none of the cases match, the default case will be -rendered, if any. - -This means for example in the CI/CD page you can now do the following: - -```tsx - - Jenkins - CodeBuild - No CI/CD - -``` - -This allows the component to have multiple CI/CD systems and all of those are -rendered on the same page. diff --git a/.changeset/silver-donkeys-eat.md b/.changeset/silver-donkeys-eat.md deleted file mode 100644 index 0995a2025c..0000000000 --- a/.changeset/silver-donkeys-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stack-overflow': patch ---- - -Export api ref and StackOverflowApi type diff --git a/.changeset/silver-lies-rest.md b/.changeset/silver-lies-rest.md deleted file mode 100644 index 34b77f5375..0000000000 --- a/.changeset/silver-lies-rest.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -The configuration key `branch` of the `GitlabDiscoveryEntityProvider` has been deprecated in favor of the configuration key `fallbackBranch`. -It will be reused in future release to enforce a concrete branch to be used in catalog file discovery. -To migrate to the new configuration value, rename `branch` to `fallbackBranch`. diff --git a/.changeset/six-melons-rhyme.md b/.changeset/six-melons-rhyme.md deleted file mode 100644 index dbb878fc89..0000000000 --- a/.changeset/six-melons-rhyme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -scaffolder/next: Added the ability to get the fields definition in the schema in the validation function diff --git a/.changeset/slimy-lobsters-kneel.md b/.changeset/slimy-lobsters-kneel.md deleted file mode 100644 index 40ff476a64..0000000000 --- a/.changeset/slimy-lobsters-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-linguist-backend': patch ---- - -Fixed bug in LinguistBackendApi that caused initial batch of entities to be skipped. diff --git a/.changeset/slow-insects-cheat.md b/.changeset/slow-insects-cheat.md deleted file mode 100644 index 70b7bbf69b..0000000000 --- a/.changeset/slow-insects-cheat.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-techdocs': minor -'@backstage/plugin-catalog': minor -'@backstage/plugin-explore': patch ---- - -Add ability to pass icon as function to have ability to customize it by search item diff --git a/.changeset/slow-pens-compare.md b/.changeset/slow-pens-compare.md deleted file mode 100644 index 158cb6f760..0000000000 --- a/.changeset/slow-pens-compare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fix a bug where the batch fetch by ref endpoint did not work in conjunction with filtering (e.g. if authorization was enabled). diff --git a/.changeset/slow-suits-grab.md b/.changeset/slow-suits-grab.md deleted file mode 100644 index 4a741cac6b..0000000000 --- a/.changeset/slow-suits-grab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -properly support custom graph api URL diff --git a/.changeset/spotty-bees-tell.md b/.changeset/spotty-bees-tell.md deleted file mode 100644 index 5267d8a6a0..0000000000 --- a/.changeset/spotty-bees-tell.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-catalog-backend-module-aws': patch ---- - -Fix missing `dependencies` in `package.json` diff --git a/.changeset/spotty-turtles-reply.md b/.changeset/spotty-turtles-reply.md deleted file mode 100644 index 2dfc12a176..0000000000 --- a/.changeset/spotty-turtles-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Copy to clipboard now works in a not secure context. diff --git a/.changeset/spotty-wasps-complain.md b/.changeset/spotty-wasps-complain.md deleted file mode 100644 index 7b1e42b2a0..0000000000 --- a/.changeset/spotty-wasps-complain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Fix alignment bug for owners on `TemplateCard` diff --git a/.changeset/stupid-games-brake.md b/.changeset/stupid-games-brake.md deleted file mode 100644 index 0a50a32ffa..0000000000 --- a/.changeset/stupid-games-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend': patch ---- - -Updated README instructions diff --git a/.changeset/swift-bags-wave.md b/.changeset/swift-bags-wave.md deleted file mode 100644 index 8f57c7f89b..0000000000 --- a/.changeset/swift-bags-wave.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-sonarqube-react': patch -'@backstage/plugin-sonarqube': patch ---- - -Moved imports from `/alpha` to main public exports. diff --git a/.changeset/tall-hats-talk.md b/.changeset/tall-hats-talk.md deleted file mode 100644 index b10af002f6..0000000000 --- a/.changeset/tall-hats-talk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Keep custom exports entry points in package.json diff --git a/.changeset/ten-tigers-marry.md b/.changeset/ten-tigers-marry.md deleted file mode 100644 index f90f7b3ea2..0000000000 --- a/.changeset/ten-tigers-marry.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-proxy-backend': patch ---- - -The proxy-backend plugin now supports reviving request bodies that have previously been consumed by an express middleware (e.g. `express.json()`). This is done by setting `reviveConsumedRequestBodies: true` on the proxy `RouterOptions`. In order to preserve the current behavior, the proxy will **not** revive request bodies by default. - -The following is an example of a proxy `createRouter` invocation that revives request bodies: - -```diff -const router = await createRouter({ - config, - logger, - discovery, -+ reviveConsumedRequestBodies: true, -}); -``` diff --git a/.changeset/thin-candles-wait.md b/.changeset/thin-candles-wait.md deleted file mode 100644 index c7e18367b5..0000000000 --- a/.changeset/thin-candles-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-sonarqube': patch ---- - -Show a more appropriate icon if there are no code smells and/or vulnerabilities. diff --git a/.changeset/tidy-planes-unite.md b/.changeset/tidy-planes-unite.md deleted file mode 100644 index 158498d381..0000000000 --- a/.changeset/tidy-planes-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-firehydrant': minor ---- - -Allow firehydrant to use component annotation diff --git a/.changeset/tidy-pumpkins-clean.md b/.changeset/tidy-pumpkins-clean.md deleted file mode 100644 index c5a067a98c..0000000000 --- a/.changeset/tidy-pumpkins-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix bug where `
` component would not take into account header styles defined in `columns[*].headerStyle`. diff --git a/.changeset/tidy-ties-guess.md b/.changeset/tidy-ties-guess.md deleted file mode 100644 index 63247c3819..0000000000 --- a/.changeset/tidy-ties-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Ensure that `getEntitiesByRefs` returns `undefined` instead of `null` for missing items diff --git a/.changeset/tiny-llamas-jump.md b/.changeset/tiny-llamas-jump.md deleted file mode 100644 index ccf42cd514..0000000000 --- a/.changeset/tiny-llamas-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Use media queries to change layout instead of `isMobile` prop in `BackstagePage` component diff --git a/.changeset/tricky-jars-film.md b/.changeset/tricky-jars-film.md deleted file mode 100644 index 9533634614..0000000000 --- a/.changeset/tricky-jars-film.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch ---- - -Move `@backstage/backend-defaults` to `devDependencies` diff --git a/.changeset/twelve-cars-push.md b/.changeset/twelve-cars-push.md deleted file mode 100644 index 599d456d2b..0000000000 --- a/.changeset/twelve-cars-push.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch -'@backstage/backend-test-utils': patch -'@backstage/backend-dev-utils': patch -'@backstage/backend-defaults': patch -'@backstage/backend-app-api': patch -'@backstage/backend-common': patch -'@backstage/backend-tasks': patch -'@backstage/config-loader': patch -'@backstage/cli-common': patch -'@backstage/create-app': patch -'@backstage/test-utils': patch -'@backstage/dev-utils': patch -'@backstage/codemods': patch -'@backstage/config': patch -'@backstage/theme': patch -'@backstage/cli': patch ---- - -Updated link to docs. diff --git a/.changeset/twenty-insects-live.md b/.changeset/twenty-insects-live.md deleted file mode 100644 index d3f8cdfc25..0000000000 --- a/.changeset/twenty-insects-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-proxy-backend': patch ---- - -Ensure that `@backstage/plugin-proxy-backend` logs the requests that it proxies when log level is set to `debug`. diff --git a/.changeset/twenty-jeans-speak.md b/.changeset/twenty-jeans-speak.md deleted file mode 100644 index fddcc2eedd..0000000000 --- a/.changeset/twenty-jeans-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Added authentication provider for Azure Easy Authentication. diff --git a/.changeset/unlucky-sloths-explain.md b/.changeset/unlucky-sloths-explain.md deleted file mode 100644 index 3d5f963a73..0000000000 --- a/.changeset/unlucky-sloths-explain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -Fixed bug in IssueLink component where the URL was not generated properly when the repository was located inside a Gitlab subgroup diff --git a/.changeset/warm-vans-fail.md b/.changeset/warm-vans-fail.md deleted file mode 100644 index 6cbd3a4e8f..0000000000 --- a/.changeset/warm-vans-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. diff --git a/.changeset/weak-coats-allow.md b/.changeset/weak-coats-allow.md deleted file mode 100644 index 31fc592326..0000000000 --- a/.changeset/weak-coats-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-linguist': patch ---- - -Updated `README.md` to removed images with refresh button as this feature was not implemented in the current version diff --git a/.changeset/what-is-going-on-babe.md b/.changeset/what-is-going-on-babe.md deleted file mode 100644 index c22d69d1de..0000000000 --- a/.changeset/what-is-going-on-babe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Add support for `NotImplementedError`, properly returning 501 as status code. diff --git a/.changeset/wicked-lions-repeat.md b/.changeset/wicked-lions-repeat.md deleted file mode 100644 index c48545c6bc..0000000000 --- a/.changeset/wicked-lions-repeat.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@techdocs/cli': minor -'@backstage/plugin-techdocs-node': minor ---- - -Added support for an HTTPS proxy for techdocs AWS S3 requests diff --git a/.changeset/wicked-spoons-call.md b/.changeset/wicked-spoons-call.md deleted file mode 100644 index c57860349b..0000000000 --- a/.changeset/wicked-spoons-call.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-newrelic': patch ---- - -Updated installation instructions diff --git a/.changeset/wild-ads-pull.md b/.changeset/wild-ads-pull.md deleted file mode 100644 index 5a40787358..0000000000 --- a/.changeset/wild-ads-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. diff --git a/.changeset/wild-bulldogs-suffer.md b/.changeset/wild-bulldogs-suffer.md deleted file mode 100644 index 02f50927e9..0000000000 --- a/.changeset/wild-bulldogs-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -filter gitlab groups by prefix diff --git a/.changeset/witty-geckos-design.md b/.changeset/witty-geckos-design.md deleted file mode 100644 index d482332c23..0000000000 --- a/.changeset/witty-geckos-design.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-linguist-backend': patch ---- - -Allow kind to be configurable - -```ts -return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); -``` diff --git a/.changeset/witty-squids-fetch.md b/.changeset/witty-squids-fetch.md deleted file mode 100644 index 3e13421038..0000000000 --- a/.changeset/witty-squids-fetch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added to the template `packages/app/.eslintignore` file to packages to ignore the contents of `packages/app/public`. diff --git a/.changeset/yellow-bananas-yawn.md b/.changeset/yellow-bananas-yawn.md deleted file mode 100644 index d9c522a429..0000000000 --- a/.changeset/yellow-bananas-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': patch ---- - -The API report generation process is now able to detect and generate reports for additional entry points declared in the package `"exports"` field. diff --git a/.changeset/young-schools-double.md b/.changeset/young-schools-double.md deleted file mode 100644 index 8cba2ec8f3..0000000000 --- a/.changeset/young-schools-double.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Do not close `Autocomplete` powered multiple-selection filters when checking boxes diff --git a/.changeset/young-scissors-cough.md b/.changeset/young-scissors-cough.md deleted file mode 100644 index fa35588224..0000000000 --- a/.changeset/young-scissors-cough.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Added a workaround for the cyclic dependency bug across `@backstage/backend-common` and `@backstage/backend-app-api`. diff --git a/.changeset/young-walls-prove.md b/.changeset/young-walls-prove.md deleted file mode 100644 index 33fafa1548..0000000000 --- a/.changeset/young-walls-prove.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': minor ---- - -The GitLab auth provider can now be used to get OpenID tokens. diff --git a/docs/releases/v1.12.0-changelog.md b/docs/releases/v1.12.0-changelog.md new file mode 100644 index 0000000000..7a8b52e33b --- /dev/null +++ b/docs/releases/v1.12.0-changelog.md @@ -0,0 +1,2933 @@ +# Release v1.12.0 + +## @backstage/backend-plugin-api@0.5.0 + +### Minor Changes + +- c1ee073a82b: Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/backend-tasks@0.5.0 + +### Minor Changes + +- 1578276708a: add functionality to get descriptions from the scheduler for triggering + +### Patch Changes + +- f0685193efa: Added the adapted query to mysql and sqlite3 databases to not returning warning on logs +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/catalog-client@1.4.0 + +### Minor Changes + +- 8c030b1826c: Add `queryEntities` method to `CatalogApi`. + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- c630360631f: Ensure that `getEntitiesByRefs` returns `undefined` instead of `null` for missing items +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + +## @backstage/core-app-api@1.6.0 + +### Minor Changes + +- 456eaa8cf83: `OAuth2` now gets ID tokens from a session with the `openid` scope explicitly + requested. + + This should not be considered a breaking change, because spec-compliant OIDC + providers will already be returning ID tokens if and only if the `openid` scope + is granted. + + This change makes the dependence explicit, and removes the burden on + OAuth2-based providers which require an ID token (e.g. this is done by various + default [auth + handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add + `openid` to their default scopes. _That_ could carry another indirect benefit: + by removing `openid` from the default scopes for a provider, grants for + resource-specific access tokens can avoid requesting excess ID token-related + scopes. + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + +## @backstage/core-plugin-api@1.5.0 + +### Minor Changes + +- ab750ddc4f2: The GitLab auth provider can now be used to get OpenID tokens. + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + +## @techdocs/cli@1.4.0 + +### Minor Changes + +- 8e465ce52e2: Running `@techdocs/cli generate` with the `--verbose` flag will now print the mkdocs output. +- ea2bbef1b16: Added support for an HTTPS proxy for techdocs AWS S3 requests + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog@1.9.0 + +### Minor Changes + +- 23cc40039c0: Allow `EntitySwitch` to render all cases that match the condition. + + This change introduces a new parameter for the `EntitySwitch` component + `renderMultipleMatches`. In case the parameter value is `all`, the `EntitySwitch` + will render all `EntitySwitch.Case` that contain `if` parameter, and it + evaluates to true. In case none of the cases match, the default case will be + rendered, if any. + + This means for example in the CI/CD page you can now do the following: + + ```tsx + + Jenkins + CodeBuild + No CI/CD + + ``` + + This allows the component to have multiple CI/CD systems and all of those are + rendered on the same page. + +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item + +- c9a9f3c834f: Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. + +### Patch Changes + +- 3fa41696820: Make the "Copied!" message disappear automatically after some time +- 7e8930ae1c6: Fix icon alignment in `CatalogSearchResultListItem` +- dbbde6ed353: fix entity switch rendering when there is no default case +- cb8ec97cdeb: Change black & white colors to be theme aware +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-catalog-backend@1.8.0 + +### Minor Changes + +- 7f4ea3d3602: Add /entities/by-query endpoint returning paginated entities. + + The endpoint supports cursor base pagination and server side sorting of the entities + +### Patch Changes + +- e675f902980: Add deprecations for symbols that were moved to `@backstage/plugin-catalog-node` a long time ago: + + - `CatalogProcessor` + - `CatalogProcessorCache` + - `CatalogProcessorEmit` + - `CatalogProcessorEntityResult` + - `CatalogProcessorErrorResult` + - `CatalogProcessorLocationResult` + - `CatalogProcessorParser` + - `CatalogProcessorRefreshKeysResult` + - `CatalogProcessorRelationResult` + - `CatalogProcessorResult` + - `DeferredEntity` + - `EntityProvider` + - `EntityProviderConnection` + - `EntityProviderMutation` + - `EntityRelationSpec` + - `processingResult` + + Also moved over and deprecated the following symbols: + + - `locationSpecToLocationEntity` + - `locationSpecToMetadataName` + +- ac8929f2f31: Fix export of `defaultCatalogCollatorEntityTransformer`. + +- 928a12a9b3e: Internal refactor of `/alpha` exports. + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +- f093ce83d58: Fix a bug where the batch fetch by ref endpoint did not work in conjunction with filtering (e.g. if authorization was enabled). + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.0 + +### Minor Changes + +- a811bd246c4: Added endpoint to get a list of known incremental entity providers + +### Patch Changes + +- 90469c02c8c: Renamed `incrementalIngestionEntityProviderCatalogModule` to `catalogModuleIncrementalIngestionEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- bf611cf019a: Fix missing `dependencies` in `package.json` +- 6e612b58577: Move `@backstage/backend-defaults` to `devDependencies` +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-events-node@0.2.4 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.0 + +### Minor Changes + +- a1efcf9a658: Initial version of the plugin. + +### Patch Changes + +- 561ce41191d: Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-react@1.4.0 + +### Minor Changes + +- 0a5b73b2926: Add possibility to re-use EntityPicker for filters with multiple select. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 24916d23494: Do not close `Autocomplete` powered multiple-selection filters when checking boxes +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-permission-react@0.4.11 + +## @backstage/plugin-firehydrant@0.2.0 + +### Minor Changes + +- e2e3dd08a54: Allow firehydrant to use component annotation + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-linguist-backend@0.2.0 + +### Minor Changes + +- 4a1c318853d: **BREAKING** The linguist-backend `createRouter` now requires that the `tokenManger` is passed to the router. + +### Patch Changes + +- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +- 2ea57821629: Fixed bug in LinguistBackendApi that caused initial batch of entities to be skipped. + +- b271d5ca052: Allow kind to be configurable + + ```ts + return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); + ``` + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-octopus-deploy@0.1.0 + +### Minor Changes + +- b7fff1171f0: Initial version + +### Patch Changes + +- cb0fc15a992: Added Octopus Deploy logo +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-scaffolder@1.12.0 + +### Minor Changes + +- 0d61fcca9c3: Update `EntityPicker` to use the fully qualified entity ref instead of the humanized version. +- 8f4d13f21cf: Move `useTaskStream`, `TaskBorder`, `TaskLogStream` and `TaskSteps` into `scaffolder-react`. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- be3cddaab5f: Getting credentials in the RepoUrlPicker now also works for targets without owner (e.g. Bitbucket Server). +- cb8ec97cdeb: Change black & white colors to be theme aware +- eb877bad736: Create an "Other Templates" group when groups are given to scaffolder/next. +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 0aae4596296: Fix the scaffolder validator for arrays when the item is a field in the object +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-scaffolder-react@1.2.0 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-scaffolder-common@1.2.6 + +## @backstage/plugin-scaffolder-backend@1.12.0 + +### Minor Changes + +- 7d724d8ef56: Added the ability to be able to define an actions `input` and `output` schema using `zod` instead of hand writing types and `jsonschema` + +### Patch Changes + +- 860de10fa67: Make identity valid if subject of token is a backstage server-2-server auth token +- 65454876fb2: Minor API report tweaks +- c6c78b4acbe: throw error from catalog:fetch scaffolder action when entity is null and optional is false +- 9968f455921: catalog write action should allow any shape of object +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 7af12854970: Extended scaffolder action `catalog:fetch` to fetch multiple catalog entities by entity references. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + - @backstage/plugin-scaffolder-node@0.1.1 + +## @backstage/plugin-scaffolder-react@1.2.0 + +### Minor Changes + +- 8f4d13f21cf: Move `useTaskStream`, `TaskBorder`, `TaskLogStream` and `TaskSteps` into `scaffolder-react`. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- c8d78b9ae9d: fix bug with `hasErrors` returning false when dealing with empty objects +- 9b8c374ace5: Remove timer for skipped steps in Scaffolder Next's TaskSteps +- 44941fc97eb: scaffolder/next: Move the `uiSchema` to its own property in the validation `context` to align with component development and access of `ui:options` +- d9893263ba9: scaffolder/next: Fix for steps without properties +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- cc418d652a7: scaffolder/next: Added the ability to get the fields definition in the schema in the validation function +- d4100d0ec42: Fix alignment bug for owners on `TemplateCard` +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-scaffolder-common@1.2.6 + +## @backstage/plugin-stackstorm@0.1.0 + +### Minor Changes + +- f3a15259e91: Add StackStorm plugin to Backstage which is interfacing with StackStorm API. It allows users to view workflow executions, packs and actions. For installation and configuration instructions please view [README.md](https://github.com/backstage/backstage/tree/master/plugins/stackstorm/README.md) + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs@1.6.0 + +### Minor Changes + +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 54a1e133b56: Fix bug that caused next and previous links not to work with certain versions of mkdocs-material +- f320c299c67: The HTML tag attributes in the documentation content inserted to shadow DOM is preserved to improve accessibility +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 8adfda60ae1: Updated dependency `jss` to `~10.10.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 238cf657c09: Copy to clipboard now works in a not secure context. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-techdocs-backend@1.6.0 + +### Minor Changes + +- 92b495328bd: Introduced alpha export of the `techdocsPlugin` using the new backend system. + +### Patch Changes + +- 40298b02778: Techdocs backend explains a bit more about what might have caused the docs not being found when building techdocs. +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-techdocs-node@1.6.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-techdocs-node@1.6.0 + +### Minor Changes + +- ea2bbef1b16: Added support for an HTTPS proxy for techdocs AWS S3 requests + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- bf493710f50: Update to a newer version of `@trendyol-js/openstack-swift-sdk` +- bfe350ef4ce: Fixed bug that prevented deletion of stale files when non-empty directories where tried to be deleted as well. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/app-defaults@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/theme@0.2.18 + - @backstage/plugin-permission-react@0.4.11 + +## @backstage/backend-app-api@0.4.1 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- 915e46622cf: Add support for `NotImplementedError`, properly returning 501 as status code. +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config-loader@1.1.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/backend-common@0.18.3 + +### Patch Changes + +- f75097868a7: Adds config option `backend.database.role` to set ownership for newly created schemas and tables in Postgres + + The example config below connects to the database as user `v-backstage-123` but sets the ownership of + the create schemas and tables to `backstage` + + ```yaml + backend: + database: + client: pg + pluginDivisionMode: schema + role: backstage + connection: + user: v-backstage-123 + ... + ``` + +- 928a12a9b3e: Internal refactor of `/alpha` exports. + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 + +- c1ee073a82b: Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. + +- 482dae5de1c: Updated link to docs. + +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + - @backstage/config-loader@1.1.9 + - @backstage/integration@1.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.8 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- 5d0693edc09: Added a workaround for the cyclic dependency bug across `@backstage/backend-common` and `@backstage/backend-app-api`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + +## @backstage/backend-dev-utils@0.1.1 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + +## @backstage/backend-test-utils@0.1.35 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/catalog-model@1.2.1 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/cli@0.22.4 + +### Patch Changes + +- 1ad8d885d30: Fixed a bug where additional backend package entry points where not properly marked as internal during local development. +- 2011b86052c: Added templates for new plugin Web and Node.js libraries. +- 867f4752ca1: Updated the ESLint plugin configuration that is enabled through `yarn start --check` to only pick up valid source files. +- b4cd145b574: Added a new `migrate package-exports` command that synchronizes package exports fields in all `package.json`s. +- 9bf50a36674: Bumped the `msw` version in templates to 1.0.0 +- 8bf24946c66: Adjust express dependencies to be the same as the rest of the project +- 17271841de8: Updated frontend plugin template to use some more recent features +- 4b4998466b4: Updated dependency `del` to `^7.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- a11b9a23f5a: Keep custom exports entry points in package.json +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/eslint-plugin@0.1.2 + - @backstage/errors@1.1.5 + - @backstage/config-loader@1.1.9 + - @backstage/release-manifests@0.0.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/cli-common@0.1.12 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + +## @backstage/codemods@0.1.44 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/config@1.0.7 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/types@1.0.2 + +## @backstage/config-loader@1.1.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/core-components@0.12.5 + +### Patch Changes + +- 8bbf95b5507: Button labels in the sidebar (previously displayed in uppercase) will be displayed in the case that is provided without any transformations. + For example, a sidebar button with the label "Search" will appear as Search, "search" will appear as search, "SEARCH" will appear as SEARCH etc. + This can potentially affect any overriding styles previously applied to change the appearance of Button labels in the Sidebar. +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- e1aae2f5a0c: Updated the `aria-label` of the `HeaderTabs` component. +- 6a51a49a810: Fix bug where `
` component would not take into account header styles defined in `columns[*].headerStyle`. +- fa004f66871: Use media queries to change layout instead of `isMobile` prop in `BackstagePage` component +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/version-bridge@1.0.3 + +## @backstage/create-app@0.4.38 + +### Patch Changes + +- b4627f23b28: Bumped create-app version. +- 0eceadb9502: Bumped create-app version. +- 482dae5de1c: Updated link to docs. +- 6ace2dd2c58: Added to the template `packages/app/.eslintignore` file to packages to ignore the contents of `packages/app/public`. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.13 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/app-defaults@1.2.1 + +## @backstage/errors@1.1.5 + +### Patch Changes + +- 3bf83a2aabf: Added `NotImplementedError`, which can be used when the server does not recognize the request method and is incapable of supporting it for any resource. +- Updated dependencies + - @backstage/types@1.0.2 + +## @backstage/eslint-plugin@0.1.2 + +### Patch Changes + +- a061c466d66: Fixing a bug that we should check internal dependencies too + +## @backstage/integration@1.4.3 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + +## @backstage/integration-aws-node@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + +## @backstage/integration-react@1.1.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/release-manifests@0.0.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +## @backstage/repo-tools@0.1.3 + +### Patch Changes + +- 32a4a05838c: Tweaked type dependency check to trim wildcard type imports. +- 6ba8faf22ac: The API report generation process is now able to detect and generate reports for additional entry points declared in the package `"exports"` field. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + +## @backstage/test-utils@1.2.6 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.11 + +## @backstage/theme@0.2.18 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + +## @backstage/plugin-adr@0.4.1 + +### Patch Changes + +- d293f4aaf83: Updated readme instructions +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-adr-backend@0.3.1 + +### Patch Changes + +- 2a73ded3861: Support MADR v3 format +- 8bf24946c66: Adjust express dependencies to be the same as the rest of the project +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-adr-common@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-airbrake@0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/dev-utils@1.0.13 + - @backstage/theme@0.2.18 + +## @backstage/plugin-airbrake-backend@0.2.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.32 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-analytics-module-ga@0.1.27 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-apache-airflow@0.2.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + +## @backstage/plugin-api-docs@0.9.1 + +### Patch Changes + +- 095e755d9b5: Add ApiDefinitionDialog component for fast access to the API definition in ProvidedApiCards and ConsumedApiCards. +- 8bc7dcec820: Fix dark theme Swagger's clear button font color. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 9820eb5d24f: Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-apollo-explorer@0.1.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-app-backend@0.3.43 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config-loader@1.1.9 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.1 + +### Patch Changes + +- e262738b8a0: Handle difference in expiration time between Microsoft session and Backstage session which caused the Backstage token to be invalid during a time frame. +- 86cece2c1fb: Updated dependency `@types/passport-microsoft` to `^1.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 529de8c4211: Added authentication provider for Azure Easy Authentication. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-node@0.2.12 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-azure-devops@0.2.7 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.22 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.5 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.40 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-badges-backend@0.1.37 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-bazaar@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/cli@0.22.4 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-bazaar-backend@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-bitbucket-cloud-common@0.2.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/integration@1.4.3 + +## @backstage/plugin-bitrise@0.1.43 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-catalog-backend-module-aws@0.1.17 + +### Patch Changes + +- 90469c02c8c: Renamed `awsS3EntityProviderCatalogModule` to `catalogModuleAwsS3EntityProviders` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- bf611cf019a: Fix missing `dependencies` in `package.json` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-kubernetes-common@0.6.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.14 + +### Patch Changes + +- 90469c02c8c: Renamed `azureDevOpsEntityProviderCatalogModule` to `catalogModuleAzureDevOpsEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- c17fa101825: Add branch filter support + +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.10 + +### Patch Changes + +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.10 + +### Patch Changes + +- 90469c02c8c: Renamed `bitbucketCloudEntityProviderCatalogModule` to `catalogModuleBitbucketCloudEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.8 + +### Patch Changes + +- 90469c02c8c: Renamed `bitbucketServerEntityProviderCatalogModule` to `catalogModuleBitbucketServerEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.11 + +### Patch Changes + +- 90469c02c8c: Renamed `gerritEntityProviderCatalogModule` to `catalogModuleGerritEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-github@0.2.6 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 90469c02c8c: Renamed `githubEntityProviderCatalogModule` to `catalogModuleGithubEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.14 + +### Patch Changes + +- 90469c02c8c: Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- af1095f1e11: The configuration key `branch` of the `GitlabDiscoveryEntityProvider` has been deprecated in favor of the configuration key `fallbackBranch`. + It will be reused in future release to enforce a concrete branch to be used in catalog file discovery. + To migrate to the new configuration value, rename `branch` to `fallbackBranch`. +- be129f8f3cd: filter gitlab groups by prefix +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.10 + +### Patch Changes + +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.2 + +### Patch Changes + +- a4ebd513527: Revert using `baseUrl` for MS Graph provider as it breaks token retrieval +- 26eef93c547: Fixed msgraph catalog backend to use user.select option when fetching user from AzureAD +- 90469c02c8c: Renamed `microsoftGraphOrgEntityProviderCatalogModule` to `catalogModuleMicrosoftGraphOrgEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 2c234a89325: properly support custom graph api URL +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-common@1.0.12 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-catalog-graph@0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-catalog-graphql@0.3.19 + +### Patch Changes + +- b990021ddeb: Updated dependency `@graphql-codegen/cli` to `^3.0.0`. + Updated dependency `@graphql-codegen/graphql-modules-preset` to `^3.0.0`. + Updated dependency `@graphql-codegen/typescript` to `^3.0.0`. + Updated dependency `@graphql-codegen/typescript-resolvers` to `^3.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-import@0.9.6 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-node@1.3.4 + +### Patch Changes + +- e675f902980: Added `locationSpecToMetadataName` and `locationSpecToLocationEntity` as their new home, moved over from the backend package where they now are marked as deprecated. +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/types@1.0.2 + +## @backstage/plugin-cicd-statistics@0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-cicd-statistics@0.1.18 + +## @backstage/plugin-circleci@0.3.16 + +### Patch Changes + +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-cloudbuild@0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-climate@0.1.16 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-coverage@0.2.9 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-coverage-backend@0.2.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-codescene@0.1.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-config-schema@0.1.39 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-cost-insights@0.12.5 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@3.0.0 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-entity-feedback@0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-entity-feedback-common@0.1.0 + +## @backstage/plugin-entity-feedback-backend@0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.0 + +## @backstage/plugin-entity-validation@0.1.1 + +### Patch Changes + +- 47d246691ac: Fixed bug in EntityVaidation plugin where string in text box was unable to be updated. +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/theme@0.2.18 + +## @backstage/plugin-events-backend@0.2.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- a5de745ac17: Updated README instructions +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `awsSqsConsumingEventPublisherEventsModule` to `eventsModuleAwsSqsConsumingEventPublisher` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-events-backend-module-azure@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `azureDevOpsEventRouterEventsModule` to `eventsModuleAzureDevOpsEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `bitbucketCloudEventRouterEventsModule` to `eventsModuleBitbucketCloudEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + +## @backstage/plugin-events-backend-module-gerrit@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `gerritEventRouterEventsModule` to `eventsModuleGerritEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + +## @backstage/plugin-events-backend-module-github@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `githubEventRouterEventsModule` to `eventsModuleGithubEventRouter` and `githubWebhookEventsModule` to `eventsModuleGithubWebhook`, to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-events-backend-module-gitlab@0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `gitlabEventRouterEventsModule` to `eventsModuleGitlabEventRouter` and `gitlabWebhookEventsModule` to `eventsModuleGitlabWebhook` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-events-backend-test-utils@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.4 + +## @backstage/plugin-events-node@0.2.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + +## @backstage/plugin-explore@0.4.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-explore-react@0.0.27 + - @backstage/theme@0.2.18 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-explore-backend@0.0.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-explore-react@0.0.27 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-explore-common@0.0.1 + +## @backstage/plugin-fossa@0.2.48 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gcalendar@0.3.12 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gcp-projects@0.3.35 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-git-release-manager@0.3.29 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-actions@0.5.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-deployments@0.1.47 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-issues@0.2.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-pull-requests-board@0.1.10 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gitops-profiles@0.3.34 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gocd@0.1.22 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-graphiql@0.2.48 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-graphql-backend@0.1.33 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-graphql@0.3.19 + - @backstage/config@1.0.7 + +## @backstage/plugin-graphql-voyager@0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-home@0.4.32 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-ilert@0.2.5 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-jenkins@0.7.15 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/theme@0.2.18 + +## @backstage/plugin-jenkins-backend@0.1.33 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-jenkins-common@0.1.14 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-kafka@0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-kafka-backend@0.2.36 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-kubernetes@0.7.9 + +### Patch Changes + +- 8adeb19b37d: GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-kubernetes-common@0.6.1 + +## @backstage/plugin-kubernetes-backend@0.9.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-kubernetes-common@0.6.1 + +## @backstage/plugin-kubernetes-common@0.6.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-lighthouse@0.4.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.1.1 + +### Patch Changes + +- 46829bc2f0e: Update README.md; typo with plugin name & removed unneeded "import { Router } from 'express';" +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-common@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + +## @backstage/plugin-linguist@0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- ab997ce243f: Updated `README.md` to removed images with refresh button as this feature was not implemented in the current version +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-microsoft-calendar@0.1.1 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-newrelic@0.3.34 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 66fdf05a1ef: Updated installation instructions +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-newrelic-dashboard@0.2.9 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-org@0.6.6 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 36bccb5252f: Fix small UI-glitch in MemberListCard +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- a06fcac4040: Add styling to the `MembersListCard` and `ComponentsGrid` to handle overflow text. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-org-react@0.1.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-pagerduty@0.5.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 9c08ecbaa4b: Update readme link for discord channel +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-periskop@0.1.14 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-periskop-backend@0.1.14 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.18 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-common@0.7.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-permission-node@0.7.6 + +### Patch Changes + +- 27a103ca07b: Changed the `createPermissionIntegrationRouter` API to allow `getResources`, `resourceType` and `rules` to be optional +- 37e9215c793: Update the service-to-service auth docs URL in error message. + \`\` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-react@0.4.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + +## @backstage/plugin-playlist@0.1.7 + +### Patch Changes + +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 122a37a880e: Internal update to work with newer versions of react-router +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/theme@0.2.18 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-playlist-common@0.1.5 + +## @backstage/plugin-playlist-backend@0.2.6 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-playlist-common@0.1.5 + +## @backstage/plugin-playlist-common@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-proxy-backend@0.2.37 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +- 3e3eea4bc7e: The proxy-backend plugin now supports reviving request bodies that have previously been consumed by an express middleware (e.g. `express.json()`). This is done by setting `reviveConsumedRequestBodies: true` on the proxy `RouterOptions`. In order to preserve the current behavior, the proxy will **not** revive request bodies by default. + + The following is an example of a proxy `createRouter` invocation that revives request bodies: + + ```diff + const router = await createRouter({ + config, + logger, + discovery, + + reviveConsumedRequestBodies: true, + }); + ``` + +- 4acd93dae1d: Ensure that `@backstage/plugin-proxy-backend` logs the requests that it proxies when log level is set to `debug`. + +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-rollbar@0.4.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-rollbar-backend@0.1.40 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.18 + +### Patch Changes + +- 62414770ead: allow container runner to be undefined in cookiecutter plugin +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/plugin-scaffolder-node@0.1.1 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + +## @backstage/plugin-scaffolder-common@1.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-node@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + +## @backstage/plugin-search@1.1.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend@1.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-module-elasticsearch@1.1.4 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-module-pg@0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-node@1.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-common@1.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 + - @backstage/types@1.0.2 + +## @backstage/plugin-search-react@1.5.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 553f3c95011: Correctly disable next button in `SearchPagination` on last page +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-sentry@0.5.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-shortcuts@0.3.8 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware + +- 7c38e565d1f: Fixed bug in LocalStoredShortcuts client where adding new Shortcut results in replacing entire shortcut list. + + Refactored LocalStoredShortcuts client to listen to `storageApi` updates to ensure that local state is always up to date. + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.5 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 8ae65a0bc1d: Moved imports from `/alpha` to main public exports. +- d3d624e8e8d: Show a more appropriate icon if there are no code smells and/or vulnerabilities. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-sonarqube-react@0.1.4 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-sonarqube-backend@0.1.8 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-sonarqube-react@0.1.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 8ae65a0bc1d: Moved imports from `/alpha` to main public exports. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-splunk-on-call@0.4.5 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-stack-overflow@0.1.12 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 3ef5fb09ca5: Export api ref and StackOverflowApi type +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-search-react@1.5.1 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-home@0.4.32 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-stack-overflow-backend@0.1.12 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-tech-insights@0.3.8 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.9 + +### Patch Changes + +- f244b589163: Add DB index to improve latency of latest fact query +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.1 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.1 + +## @backstage/plugin-tech-insights-node@0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.2 + +### Patch Changes + +- e14dcfa4994: Update colors to match Zalando's tech radar, also add coloring on title and legend to match ring color. +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.11 + +### Patch Changes + +- 2b00d8a225c: Fix bug/problem with test helper +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-search-react@1.5.1 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 37cf85fb85c: Fixed bug in IssueLink component where the URL was not generated properly when the repository was located inside a Gitlab subgroup +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs-react@1.1.4 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 8adfda60ae1: Updated dependency `jss` to `~10.10.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/version-bridge@1.0.3 + +## @backstage/plugin-todo@0.2.18 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-todo-backend@0.1.40 + +### Patch Changes + +- 4120513412a: todo-backend is now exposed as a plugin which uses the new plugin system +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + +## @backstage/plugin-user-settings@0.7.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-vault@0.1.10 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-vault-backend@0.2.10 + +### Patch Changes + +- 66b3a3956b8: Ignore the `eslint` error +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-xcmetrics@0.2.36 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## example-app@0.2.81 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-scaffolder-react@1.2.0 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-tech-insights@0.3.8 + - @backstage/plugin-search-react@1.5.1 + - @backstage/plugin-scaffolder@1.12.0 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/plugin-explore@0.4.1 + - @backstage/plugin-search@1.1.1 + - @backstage/cli@0.22.4 + - @backstage/plugin-kubernetes@0.7.9 + - @backstage/plugin-tech-radar@0.6.2 + - @backstage/plugin-microsoft-calendar@0.1.1 + - @backstage/plugin-newrelic-dashboard@0.2.9 + - @backstage/plugin-code-coverage@0.2.9 + - @backstage/plugin-azure-sites@0.1.5 + - @backstage/plugin-gcalendar@0.3.12 + - @backstage/plugin-shortcuts@0.3.8 + - @backstage/plugin-org@0.6.6 + - @backstage/plugin-api-docs@0.9.1 + - @backstage/plugin-stackstorm@0.1.0 + - @backstage/plugin-circleci@0.3.16 + - @backstage/plugin-playlist@0.1.7 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-cost-insights@0.12.5 + - @backstage/plugin-jenkins@0.7.15 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/plugin-airbrake@0.3.16 + - @backstage/plugin-apache-airflow@0.2.9 + - @backstage/plugin-azure-devops@0.2.7 + - @backstage/plugin-badges@0.2.40 + - @backstage/plugin-catalog-import@0.9.6 + - @backstage/plugin-cloudbuild@0.3.16 + - @backstage/plugin-dynatrace@3.0.0 + - @backstage/plugin-entity-feedback@0.1.1 + - @backstage/plugin-gcp-projects@0.3.35 + - @backstage/plugin-github-actions@0.5.16 + - @backstage/plugin-gocd@0.1.22 + - @backstage/plugin-graphiql@0.2.48 + - @backstage/plugin-home@0.4.32 + - @backstage/plugin-kafka@0.3.16 + - @backstage/plugin-lighthouse@0.4.1 + - @backstage/plugin-linguist@0.1.1 + - @backstage/plugin-newrelic@0.3.34 + - @backstage/plugin-pagerduty@0.5.9 + - @backstage/plugin-rollbar@0.4.16 + - @backstage/plugin-sentry@0.5.1 + - @backstage/plugin-stack-overflow@0.1.12 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.11 + - @backstage/plugin-todo@0.2.18 + - @backstage/plugin-user-settings@0.7.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @internal/plugin-catalog-customized@0.0.8 + - @backstage/plugin-catalog-graph@0.2.28 + - @backstage/app-defaults@1.2.1 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-search-common@1.2.2 + +## example-backend@0.2.81 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-todo-backend@0.1.40 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.4 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/plugin-techdocs-backend@1.6.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/plugin-tech-insights-backend@0.5.9 + - @backstage/plugin-adr-backend@0.3.1 + - @backstage/plugin-auth-backend@0.18.1 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-linguist-backend@0.2.0 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-events-backend@0.2.4 + - @backstage/plugin-app-backend@0.3.43 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/plugin-azure-devops-backend@0.3.22 + - @backstage/plugin-azure-sites-backend@0.1.5 + - @backstage/plugin-code-coverage-backend@0.2.9 + - @backstage/plugin-entity-feedback-backend@0.1.1 + - @backstage/plugin-explore-backend@0.0.5 + - @backstage/plugin-graphql-backend@0.1.33 + - @backstage/plugin-jenkins-backend@0.1.33 + - @backstage/plugin-kubernetes-backend@0.9.4 + - @backstage/plugin-permission-backend@0.5.18 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-playlist-backend@0.2.6 + - @backstage/plugin-proxy-backend@0.2.37 + - @backstage/plugin-rollbar-backend@0.1.40 + - @backstage/plugin-lighthouse-backend@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.11 + - @backstage/plugin-badges-backend@0.1.37 + - example-app@0.2.81 + - @backstage/plugin-search-backend@1.2.4 + - @backstage/plugin-kafka-backend@0.2.36 + - @backstage/plugin-search-backend-module-pg@0.5.4 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-tech-insights-node@0.4.1 + +## example-backend-next@0.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/plugin-todo-backend@0.1.40 + - @backstage/plugin-techdocs-backend@1.6.0 + - @backstage/backend-defaults@0.1.8 + - @backstage/plugin-app-backend@0.3.43 + +## e2e-test@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.38 + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + +## techdocs-cli-embedded-app@0.2.80 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/cli@0.22.4 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/app-defaults@1.2.1 + +## @internal/plugin-catalog-customized@0.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/plugin-catalog-react@1.4.0 + +## @internal/plugin-todo-list@1.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @internal/plugin-todo-list-backend@1.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + +## @internal/plugin-todo-list-common@1.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 diff --git a/package.json b/package.json index 43a146e0a1..e4cb3ef1d3 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.12.0-next.2", + "version": "1.12.0", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 0b2b813d14..e388b3e4ad 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/app-defaults +## 1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/theme@0.2.18 + - @backstage/plugin-permission-react@0.4.11 + ## 1.2.1-next.2 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 873a2fa28f..31fb64a079 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.2.1-next.2", + "version": "1.2.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ac21cbad07..4b24b827b4 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,74 @@ # example-app +## 0.2.81 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-scaffolder-react@1.2.0 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-tech-insights@0.3.8 + - @backstage/plugin-search-react@1.5.1 + - @backstage/plugin-scaffolder@1.12.0 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/plugin-explore@0.4.1 + - @backstage/plugin-search@1.1.1 + - @backstage/cli@0.22.4 + - @backstage/plugin-kubernetes@0.7.9 + - @backstage/plugin-tech-radar@0.6.2 + - @backstage/plugin-microsoft-calendar@0.1.1 + - @backstage/plugin-newrelic-dashboard@0.2.9 + - @backstage/plugin-code-coverage@0.2.9 + - @backstage/plugin-azure-sites@0.1.5 + - @backstage/plugin-gcalendar@0.3.12 + - @backstage/plugin-shortcuts@0.3.8 + - @backstage/plugin-org@0.6.6 + - @backstage/plugin-api-docs@0.9.1 + - @backstage/plugin-stackstorm@0.1.0 + - @backstage/plugin-circleci@0.3.16 + - @backstage/plugin-playlist@0.1.7 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-cost-insights@0.12.5 + - @backstage/plugin-jenkins@0.7.15 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/plugin-airbrake@0.3.16 + - @backstage/plugin-apache-airflow@0.2.9 + - @backstage/plugin-azure-devops@0.2.7 + - @backstage/plugin-badges@0.2.40 + - @backstage/plugin-catalog-import@0.9.6 + - @backstage/plugin-cloudbuild@0.3.16 + - @backstage/plugin-dynatrace@3.0.0 + - @backstage/plugin-entity-feedback@0.1.1 + - @backstage/plugin-gcp-projects@0.3.35 + - @backstage/plugin-github-actions@0.5.16 + - @backstage/plugin-gocd@0.1.22 + - @backstage/plugin-graphiql@0.2.48 + - @backstage/plugin-home@0.4.32 + - @backstage/plugin-kafka@0.3.16 + - @backstage/plugin-lighthouse@0.4.1 + - @backstage/plugin-linguist@0.1.1 + - @backstage/plugin-newrelic@0.3.34 + - @backstage/plugin-pagerduty@0.5.9 + - @backstage/plugin-rollbar@0.4.16 + - @backstage/plugin-sentry@0.5.1 + - @backstage/plugin-stack-overflow@0.1.12 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.11 + - @backstage/plugin-todo@0.2.18 + - @backstage/plugin-user-settings@0.7.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @internal/plugin-catalog-customized@0.0.8 + - @backstage/plugin-catalog-graph@0.2.28 + - @backstage/app-defaults@1.2.1 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-search-common@1.2.2 + ## 0.2.81-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index c51f8be911..a5a420c621 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.81-next.2", + "version": "0.2.81", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 6ea78e983f..1e587b94a3 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/backend-app-api +## 0.4.1 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- 915e46622cf: Add support for `NotImplementedError`, properly returning 501 as status code. +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config-loader@1.1.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.4.1-next.2 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index f59e39ef09..8ed273b451 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 06968a3c8a..8d73268bc1 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/backend-common +## 0.18.3 + +### Patch Changes + +- f75097868a7: Adds config option `backend.database.role` to set ownership for newly created schemas and tables in Postgres + + The example config below connects to the database as user `v-backstage-123` but sets the ownership of + the create schemas and tables to `backstage` + + ```yaml + backend: + database: + client: pg + pluginDivisionMode: schema + role: backstage + connection: + user: v-backstage-123 + ... + ``` + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- c1ee073a82b: Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + - @backstage/config-loader@1.1.9 + - @backstage/integration@1.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + - @backstage/types@1.0.2 + ## 0.18.3-next.2 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index beee72c860..5d54e5ae12 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.18.3-next.2", + "version": "0.18.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 7283ae89e2..edfc39bd91 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-defaults +## 0.1.8 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- 5d0693edc09: Added a workaround for the cyclic dependency bug across `@backstage/backend-common` and `@backstage/backend-app-api`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + ## 0.1.8-next.2 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 2ae0074849..2759c3c089 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-dev-utils/CHANGELOG.md b/packages/backend-dev-utils/CHANGELOG.md index 84a1cbc3f1..6b505e917e 100644 --- a/packages/backend-dev-utils/CHANGELOG.md +++ b/packages/backend-dev-utils/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/backend-dev-utils +## 0.1.1 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + ## 0.1.1-next.0 ### Patch Changes diff --git a/packages/backend-dev-utils/package.json b/packages/backend-dev-utils/package.json index 9fea6a34cf..0928032977 100644 --- a/packages/backend-dev-utils/package.json +++ b/packages/backend-dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/backend-dev-utils", - "version": "0.1.1-next.0", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 91ded2391f..e51c65963d 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,17 @@ # example-backend-next +## 0.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/plugin-todo-backend@0.1.40 + - @backstage/plugin-techdocs-backend@1.6.0 + - @backstage/backend-defaults@0.1.8 + - @backstage/plugin-app-backend@0.3.43 + ## 0.0.9-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 5d8a8cb1ec..14ec71f352 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.9-next.2", + "version": "0.0.9", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 5125411eb6..dd78ffaca1 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-plugin-api +## 0.5.0 + +### Minor Changes + +- c1ee073a82b: Added `lastModifiedAt` field on `UrlReaderService` responses and a `lastModifiedAfter` option to `UrlReaderService.readUrl`. + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.4.1-next.2 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 4d97fdcd74..cc155fe546 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.4.1-next.2", + "version": "0.5.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 7eb43c4677..dea40d399b 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-tasks +## 0.5.0 + +### Minor Changes + +- 1578276708a: add functionality to get descriptions from the scheduler for triggering + +### Patch Changes + +- f0685193efa: Added the adapted query to mysql and sqlite3 databases to not returning warning on logs +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.5.0-next.2 ### Minor Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index fa826067c8..5042ff735a 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.0-next.2", + "version": "0.5.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 3b20fe92d5..529c92d423 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/backend-test-utils +## 0.1.35 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/backend-app-api@0.4.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.35-next.2 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index e797e346ff..80135ad4a9 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.35-next.2", + "version": "0.1.35", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 933d9688b9..7ead0abeb6 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,56 @@ # example-backend +## 0.2.81 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-todo-backend@0.1.40 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.4 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/plugin-techdocs-backend@1.6.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/plugin-tech-insights-backend@0.5.9 + - @backstage/plugin-adr-backend@0.3.1 + - @backstage/plugin-auth-backend@0.18.1 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-linguist-backend@0.2.0 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-events-backend@0.2.4 + - @backstage/plugin-app-backend@0.3.43 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/plugin-azure-devops-backend@0.3.22 + - @backstage/plugin-azure-sites-backend@0.1.5 + - @backstage/plugin-code-coverage-backend@0.2.9 + - @backstage/plugin-entity-feedback-backend@0.1.1 + - @backstage/plugin-explore-backend@0.0.5 + - @backstage/plugin-graphql-backend@0.1.33 + - @backstage/plugin-jenkins-backend@0.1.33 + - @backstage/plugin-kubernetes-backend@0.9.4 + - @backstage/plugin-permission-backend@0.5.18 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-playlist-backend@0.2.6 + - @backstage/plugin-proxy-backend@0.2.37 + - @backstage/plugin-rollbar-backend@0.1.40 + - @backstage/plugin-lighthouse-backend@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.11 + - @backstage/plugin-badges-backend@0.1.37 + - example-app@0.2.81 + - @backstage/plugin-search-backend@1.2.4 + - @backstage/plugin-kafka-backend@0.2.36 + - @backstage/plugin-search-backend-module-pg@0.5.4 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-tech-insights-node@0.4.1 + ## 0.2.81-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 107a1147f1..54dbe640df 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.81-next.2", + "version": "0.2.81", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 52eef0291e..edd3811ef8 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/catalog-client +## 1.4.0 + +### Minor Changes + +- 8c030b1826c: Add `queryEntities` method to `CatalogApi`. + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- c630360631f: Ensure that `getEntitiesByRefs` returns `undefined` instead of `null` for missing items +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + ## 1.4.0-next.1 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index f72ce4464a..07709d8c65 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.4.0-next.1", + "version": "1.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 08560cbec7..fa20368b86 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/catalog-model +## 1.2.1 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 1.2.1-next.1 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index f6355bd74b..e23d399a37 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.2.1-next.1", + "version": "1.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli-common/CHANGELOG.md b/packages/cli-common/CHANGELOG.md index 030b743fca..bb6e2756a0 100644 --- a/packages/cli-common/CHANGELOG.md +++ b/packages/cli-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli-common +## 0.1.12 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + ## 0.1.12-next.0 ### Patch Changes diff --git a/packages/cli-common/package.json b/packages/cli-common/package.json index ad7ed92e98..38779eba07 100644 --- a/packages/cli-common/package.json +++ b/packages/cli-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-common", "description": "Common functionality used by cli, backend, and create-app", - "version": "0.1.12-next.0", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 4db4e1afa1..6903e61425 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/cli +## 0.22.4 + +### Patch Changes + +- 1ad8d885d30: Fixed a bug where additional backend package entry points where not properly marked as internal during local development. +- 2011b86052c: Added templates for new plugin Web and Node.js libraries. +- 867f4752ca1: Updated the ESLint plugin configuration that is enabled through `yarn start --check` to only pick up valid source files. +- b4cd145b574: Added a new `migrate package-exports` command that synchronizes package exports fields in all `package.json`s. +- 9bf50a36674: Bumped the `msw` version in templates to 1.0.0 +- 8bf24946c66: Adjust express dependencies to be the same as the rest of the project +- 17271841de8: Updated frontend plugin template to use some more recent features +- 4b4998466b4: Updated dependency `del` to `^7.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- a11b9a23f5a: Keep custom exports entry points in package.json +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/eslint-plugin@0.1.2 + - @backstage/errors@1.1.5 + - @backstage/config-loader@1.1.9 + - @backstage/release-manifests@0.0.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.22.4-next.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 8c76c7888b..fd7f9a20c1 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.22.4-next.1", + "version": "0.22.4", "publishConfig": { "access": "public" }, diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 7104ce9cf4..d19c01a7d5 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/codemods +## 0.1.44 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.1.44-next.0 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 8f4ab51a98..acb0f10dd1 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.44-next.0", + "version": "0.1.44", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 5dbed6c46d..d1eb56d9af 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/config-loader +## 1.1.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 1.1.9-next.0 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index f842f77809..1ef8d41955 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.1.9-next.0", + "version": "1.1.9", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index c809e158b7..8b20f72905 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/config +## 1.0.7 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/types@1.0.2 + ## 1.0.7-next.0 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index 5b8ac4279b..c90b7d4c5f 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.0.7-next.0", + "version": "1.0.7", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index d91fa44f05..2f54b5d041 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/core-app-api +## 1.6.0 + +### Minor Changes + +- 456eaa8cf83: `OAuth2` now gets ID tokens from a session with the `openid` scope explicitly + requested. + + This should not be considered a breaking change, because spec-compliant OIDC + providers will already be returning ID tokens if and only if the `openid` scope + is granted. + + This change makes the dependence explicit, and removes the burden on + OAuth2-based providers which require an ID token (e.g. this is done by various + default [auth + handlers](https://backstage.io/docs/auth/identity-resolver/#authhandler)) to add + `openid` to their default scopes. _That_ could carry another indirect benefit: + by removing `openid` from the default scopes for a provider, grants for + resource-specific access tokens can avoid requesting excess ID token-related + scopes. + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + ## 1.6.0-next.2 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 073a5a22b2..c9ae2abc25 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.6.0-next.2", + "version": "1.6.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 0eac19716d..a7ca828bb3 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/core-components +## 0.12.5 + +### Patch Changes + +- 8bbf95b5507: Button labels in the sidebar (previously displayed in uppercase) will be displayed in the case that is provided without any transformations. + For example, a sidebar button with the label "Search" will appear as Search, "search" will appear as search, "SEARCH" will appear as SEARCH etc. + This can potentially affect any overriding styles previously applied to change the appearance of Button labels in the Sidebar. +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- e1aae2f5a0c: Updated the `aria-label` of the `HeaderTabs` component. +- 6a51a49a810: Fix bug where `
` component would not take into account header styles defined in `columns[*].headerStyle`. +- fa004f66871: Use media queries to change layout instead of `isMobile` prop in `BackstagePage` component +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/version-bridge@1.0.3 + ## 0.12.5-next.2 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 9630d7d706..77e91aa751 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.12.5-next.2", + "version": "0.12.5", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 1001c01e52..9292367463 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-plugin-api +## 1.5.0 + +### Minor Changes + +- ab750ddc4f2: The GitLab auth provider can now be used to get OpenID tokens. + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + ## 1.5.0-next.2 ### Minor Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 335f0f0efd..283e2b7e34 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.5.0-next.2", + "version": "1.5.0", "publishConfig": { "access": "public" }, diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index b17da7ba7b..2639ba9a59 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/create-app +## 0.4.38 + +### Patch Changes + +- b4627f23b28: Bumped create-app version. +- 0eceadb9502: Bumped create-app version. +- 482dae5de1c: Updated link to docs. +- 6ace2dd2c58: Added to the template `packages/app/.eslintignore` file to packages to ignore the contents of `packages/app/public`. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.4.38-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 4097e3bd57..9f797f5d8c 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.38-next.2", + "version": "0.4.38", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 85a0c81ee7..3c6fbaefd5 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/dev-utils +## 1.0.13 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/app-defaults@1.2.1 + ## 1.0.13-next.2 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index d4f120b359..d8559535d8 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.13-next.2", + "version": "1.0.13", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 7c3dcdbc36..2f7c5d0704 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.38 + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + ## 0.2.1-next.2 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index f8c6f815e8..d2c11a7e15 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.1-next.2", + "version": "0.2.1", "private": true, "backstage": { "role": "cli" diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 88b0c4b8d1..398b058bbb 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/errors +## 1.1.5 + +### Patch Changes + +- 3bf83a2aabf: Added `NotImplementedError`, which can be used when the server does not recognize the request method and is incapable of supporting it for any resource. +- Updated dependencies + - @backstage/types@1.0.2 + ## 1.1.5-next.0 ### Patch Changes diff --git a/packages/errors/package.json b/packages/errors/package.json index 7eeacb0e81..1f4da3b2b2 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.1.5-next.0", + "version": "1.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 7e5a3efbae..49cf9b5df5 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/eslint-plugin +## 0.1.2 + +### Patch Changes + +- a061c466d66: Fixing a bug that we should check internal dependencies too + ## 0.1.2-next.0 ### Patch Changes diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index fcc038cdbf..feb03921fd 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/eslint-plugin", "description": "Backstage ESLint plugin", - "version": "0.1.2-next.0", + "version": "0.1.2", "publishConfig": { "access": "public" }, diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index e5ac2a8532..40192bdfaf 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration-aws-node +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + ## 0.1.2-next.0 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index a45cb03e14..7afc31cc47 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-aws-node", "description": "Helpers for fetching AWS account credentials", - "version": "0.1.2-next.0", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 028c939822..06568497df 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/integration-react +## 1.1.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 1.1.11-next.2 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 119a8683d6..681542a313 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.11-next.2", + "version": "1.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 3a84452505..f81b1824fe 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration +## 1.4.3 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + ## 1.4.3-next.0 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 02c19e1b1d..25e6ba8bf7 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.4.3-next.0", + "version": "1.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/release-manifests/CHANGELOG.md b/packages/release-manifests/CHANGELOG.md index fa15839a35..f59447666f 100644 --- a/packages/release-manifests/CHANGELOG.md +++ b/packages/release-manifests/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/release-manifests +## 0.0.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. + ## 0.0.9-next.0 ### Patch Changes diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json index 65d1026ca6..0c6ad64446 100644 --- a/packages/release-manifests/package.json +++ b/packages/release-manifests/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/release-manifests", "description": "Helper library for receiving release manifests", - "version": "0.0.9-next.0", + "version": "0.0.9", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 996377c198..c7577cb711 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/repo-tools +## 0.1.3 + +### Patch Changes + +- 32a4a05838c: Tweaked type dependency check to trim wildcard type imports. +- 6ba8faf22ac: The API report generation process is now able to detect and generate reports for additional entry points declared in the package `"exports"` field. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/cli-common@0.1.12 + ## 0.1.3-next.1 ### Patch Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 9d24bfad2c..35ea6165d3 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.1.3-next.1", + "version": "0.1.3", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 2d2b669e38..4b74967ddf 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.80 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/cli@0.22.4 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/app-defaults@1.2.1 + ## 0.2.80-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 2cbb1aabc8..4400ff082d 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.80-next.2", + "version": "0.2.80", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index facd967e90..3467fe86a5 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,21 @@ # @techdocs/cli +## 1.4.0 + +### Minor Changes + +- 8e465ce52e2: Running `@techdocs/cli generate` with the `--verbose` flag will now print the mkdocs output. +- ea2bbef1b16: Added support for an HTTPS proxy for techdocs AWS S3 requests + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.6.0 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + ## 1.4.0-next.2 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index e8d9277871..d18213d490 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.0-next.2", + "version": "1.4.0", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index e521e9af91..2d0f57cf12 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/test-utils +## 1.2.6 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 482dae5de1c: Updated link to docs. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.11 + ## 1.2.6-next.2 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 59ec2ce989..7bd93443e9 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.2.6-next.2", + "version": "1.2.6", "publishConfig": { "access": "public" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 2950839e68..5f25f513d4 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/theme +## 0.2.18 + +### Patch Changes + +- 482dae5de1c: Updated link to docs. + ## 0.2.18-next.0 ### Patch Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index d24a43abdb..999fb02dac 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.2.18-next.0", + "version": "0.2.18", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 58b37f1731..c74dbd116a 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-adr-backend +## 0.3.1 + +### Patch Changes + +- 2a73ded3861: Support MADR v3 format +- 8bf24946c66: Adjust express dependencies to be the same as the rest of the project +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index f73bf159b0..e759373e6c 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.1-next.2", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index 5040e0955c..6b5a58da2a 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/plugin-search-common@1.2.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 9eeeeb2803..e6364f7915 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.7-next.1", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index a50f1a60d3..b5942d88a4 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-adr +## 0.4.1 + +### Patch Changes + +- d293f4aaf83: Updated readme instructions +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 5e56c39638..7b636f4b1a 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index bcbd88a755..df44bfa651 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-airbrake-backend +## 0.2.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + ## 0.2.16-next.2 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 52bd89e909..a292f05a14 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.16-next.2", + "version": "0.2.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 088bfbdcf9..3efe9aabcd 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-airbrake +## 0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/test-utils@1.2.6 + - @backstage/dev-utils@1.0.13 + - @backstage/theme@0.2.18 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index e577ee8862..6fb594951b 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.16-next.2", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index efde01c0b5..2e4346de7d 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-allure +## 0.1.32 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.32-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 18bf52feab..d76a4d455b 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.32-next.2", + "version": "0.1.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index e457b76bf8..6a896c5447 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-analytics-module-ga +## 0.1.27 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.1.27-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index b7152b1f69..fa5ee74367 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.27-next.2", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index acc474e6e3..58348fbc56 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apache-airflow +## 0.2.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 070cbc4136..9856b4608a 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.9-next.2", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 56644c2322..8735ac91f8 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-api-docs +## 0.9.1 + +### Patch Changes + +- 095e755d9b5: Add ApiDefinitionDialog component for fast access to the API definition in ProvidedApiCards and ConsumedApiCards. +- 8bc7dcec820: Fix dark theme Swagger's clear button font color. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 9820eb5d24f: Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.9.1-next.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index d7db6566f9..3e1fa380c3 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.1-next.2", + "version": "0.9.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 8e48be2ab8..8771768cc1 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-apollo-explorer +## 0.1.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 0fcc315797..746f29d393 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.9-next.2", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 79c8276eeb..6de2196bb6 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-app-backend +## 0.3.43 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config-loader@1.1.9 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.3.43-next.2 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 77804372d1..2c24657363 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.43-next.2", + "version": "0.3.43", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index a22b2e40ee..69fe145e82 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-auth-backend +## 0.18.1 + +### Patch Changes + +- e262738b8a0: Handle difference in expiration time between Microsoft session and Backstage session which caused the Backstage token to be invalid during a time frame. +- 86cece2c1fb: Updated dependency `@types/passport-microsoft` to `^1.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 529de8c4211: Added authentication provider for Azure Easy Authentication. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.18.1-next.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index bcc62814ed..3c0fe10a5b 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.1-next.2", + "version": "0.18.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 0e7bcefae2..6c629ad208 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-auth-node +## 0.2.12 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 093b23add9..690f67b868 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.12-next.2", + "version": "0.2.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index a4a7492ffc..a59697c5b0 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-devops-backend +## 0.3.22 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.22-next.2 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 1d921a468a..8b2e3caf57 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.22-next.2", + "version": "0.3.22", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index b9fcc646b7..9682fe8de8 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-azure-devops +## 0.2.7 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index f8bc46f422..01e898978f 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 9bc9b99388..d09e308269 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-sites-backend +## 0.1.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index 3cb7023933..0289ed01bd 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 1de9e7a804..99f3c57cda 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-azure-sites +## 0.1.5 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 6daadf199a..418d4ff578 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 837e71bcce..4d3242f09d 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-badges-backend +## 0.1.37 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + ## 0.1.37-next.2 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index f570a47874..88dac005e0 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.37-next.2", + "version": "0.1.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 567c3e81d6..6f3aaa3897 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-badges +## 0.2.40 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.40-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 7e817c024d..337d36c6cf 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.40-next.2", + "version": "0.2.40", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 203c1ef67f..29aaf96358 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index c9221e5c69..97c61156d4 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.6-next.2", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 57ba471000..ff9fe6e97e 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-bazaar +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/cli@0.22.4 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 6a2311004b..e1cf6a81b7 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.6-next.2", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 0902619c92..faeeca7d48 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/integration@1.4.3 + ## 0.2.4-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 1290d9c8b8..c5cf434a60 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.4-next.0", + "version": "0.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 1a9d86268d..cd4b948675 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-bitrise +## 0.1.43 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.43-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 41cb8562b5..17f7faf835 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.43-next.2", + "version": "0.1.43", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index f4e268aae7..7b556b2d53 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.17 + +### Patch Changes + +- 90469c02c8c: Renamed `awsS3EntityProviderCatalogModule` to `catalogModuleAwsS3EntityProviders` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 87f0bbec175: AwsS3UrlReader upgraded to use aws-sdk v3 +- bf611cf019a: Fix missing `dependencies` in `package.json` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-kubernetes-common@0.6.1 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 79271cf4de..c0e2463cfd 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.17-next.2", + "version": "0.1.17", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 86566d383f..30ccea2776 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.14 + +### Patch Changes + +- 90469c02c8c: Renamed `azureDevOpsEntityProviderCatalogModule` to `catalogModuleAzureDevOpsEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- c17fa101825: Add branch filter support + https://backstage.io/docs/integrations/azure/discovery +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index afe85243db..4015eb07f2 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index b1de810710..90d939638c 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.10 + +### Patch Changes + +- 90469c02c8c: Renamed `bitbucketCloudEntityProviderCatalogModule` to `catalogModuleBitbucketCloudEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/config@1.0.7 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 8ed58f0333..af3b21d2d0 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.10-next.2", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 00341a3870..216b7f6a9a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.8 + +### Patch Changes + +- 90469c02c8c: Renamed `bitbucketServerEntityProviderCatalogModule` to `catalogModuleBitbucketServerEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 433d4bc907..6cf06b432e 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index eef6da4c0e..936303e285 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.10 + +### Patch Changes + +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 79fbbe08c4..48fad40034 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.10-next.2", + "version": "0.2.10", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 07ab61c8c4..35913b542f 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.11 + +### Patch Changes + +- 90469c02c8c: Renamed `gerritEntityProviderCatalogModule` to `catalogModuleGerritEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index af9727cbf9..244bcdf1ed 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.11-next.2", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 1e0c455391..22d4e10583 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-github +## 0.2.6 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 90469c02c8c: Renamed `githubEntityProviderCatalogModule` to `catalogModuleGithubEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-events-node@0.2.4 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index fe9183917e..5c9f7f67e1 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.2.6-next.2", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 491d972754..2bde8b2635 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.14 + +### Patch Changes + +- 90469c02c8c: Renamed `gitlabDiscoveryEntityProviderCatalogModule` to `catalogModuleGitlabDiscoveryEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- af1095f1e11: The configuration key `branch` of the `GitlabDiscoveryEntityProvider` has been deprecated in favor of the configuration key `fallbackBranch`. + It will be reused in future release to enforce a concrete branch to be used in catalog file discovery. + To migrate to the new configuration value, rename `branch` to `fallbackBranch`. +- be129f8f3cd: filter gitlab groups by prefix +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index ed07ea842c..b6437cd46b 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index 11393c6db2..d411c63ed2 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.0 + +### Minor Changes + +- a811bd246c4: Added endpoint to get a list of known incremental entity providers + +### Patch Changes + +- 90469c02c8c: Renamed `incrementalIngestionEntityProviderCatalogModule` to `catalogModuleIncrementalIngestionEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- bf611cf019a: Fix missing `dependencies` in `package.json` +- 6e612b58577: Move `@backstage/backend-defaults` to `devDependencies` +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-events-node@0.2.4 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + ## 0.3.0-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 5b2a534fcb..df86610dce 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.0-next.2", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 5e176f09ba..99503f83bf 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.10 + +### Patch Changes + +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.5.10-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 06b33f1db2..d483baa914 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.10-next.2", + "version": "0.5.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index dc1a32f25a..37393dfd7b 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.2 + +### Patch Changes + +- a4ebd513527: Revert using `baseUrl` for MS Graph provider as it breaks token retrieval +- 26eef93c547: Fixed msgraph catalog backend to use user.select option when fetching user from AzureAD +- 90469c02c8c: Renamed `microsoftGraphOrgEntityProviderCatalogModule` to `catalogModuleMicrosoftGraphOrgEntityProvider` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 2c234a89325: properly support custom graph api URL +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + ## 0.5.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index f66151bbc4..3201e0b8d4 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.2-next.2", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 8bf478947a..414f7960cd 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index fee080d1bf..6bb9d66ec5 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.9-next.2", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index 5bc50ae148..d3ccdb6782 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.0 + +### Minor Changes + +- a1efcf9a658: Initial version of the plugin. + +### Patch Changes + +- 561ce41191d: Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system +- e675f902980: Make sure to not use deprecated exports from `@backstage/plugin-catalog-backend` +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 252fe21969..3334e3d204 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 1cc3b3620a..0a3c5853e0 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,59 @@ # @backstage/plugin-catalog-backend +## 1.8.0 + +### Minor Changes + +- 7f4ea3d3602: Add /entities/by-query endpoint returning paginated entities. + + The endpoint supports cursor base pagination and server side sorting of the entities + +### Patch Changes + +- e675f902980: Add deprecations for symbols that were moved to `@backstage/plugin-catalog-node` a long time ago: + + - `CatalogProcessor` + - `CatalogProcessorCache` + - `CatalogProcessorEmit` + - `CatalogProcessorEntityResult` + - `CatalogProcessorErrorResult` + - `CatalogProcessorLocationResult` + - `CatalogProcessorParser` + - `CatalogProcessorRefreshKeysResult` + - `CatalogProcessorRelationResult` + - `CatalogProcessorResult` + - `DeferredEntity` + - `EntityProvider` + - `EntityProviderConnection` + - `EntityProviderMutation` + - `EntityRelationSpec` + - `processingResult` + + Also moved over and deprecated the following symbols: + + - `locationSpecToLocationEntity` + - `locationSpecToMetadataName` + +- ac8929f2f31: Fix export of `defaultCatalogCollatorEntityTransformer`. +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- f093ce83d58: Fix a bug where the batch fetch by ref endpoint did not work in conjunction with filtering (e.g. if authorization was enabled). +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + - @backstage/plugin-search-common@1.2.2 + ## 1.8.0-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 35eac97cc1..1e837fd9ba 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.8.0-next.2", + "version": "1.8.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index 813d888be2..37862d47bd 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-common +## 1.0.12 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + ## 1.0.12-next.1 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index e2423f834b..aa7f26f4df 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-common", "description": "Common functionalities for the catalog plugin", - "version": "1.0.12-next.1", + "version": "1.0.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 654672a156..c155405317 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/plugin-catalog-react@1.4.0 + ## 0.0.8-next.2 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index 20ef38355b..59159bfe84 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.8-next.2", + "version": "0.0.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index bd0a9d7c76..04d714d024 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-graph +## 0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.28-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index ab7e7e78a9..1ae663f32c 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.28-next.2", + "version": "0.2.28", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 64721ef98e..740ed8905a 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-graphql +## 0.3.19 + +### Patch Changes + +- b990021ddeb: Updated dependency `@graphql-codegen/cli` to `^3.0.0`. + Updated dependency `@graphql-codegen/graphql-modules-preset` to `^3.0.0`. + Updated dependency `@graphql-codegen/typescript` to `^3.0.0`. + Updated dependency `@graphql-codegen/typescript-resolvers` to `^3.0.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.3.19-next.1 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 0c6fc28c09..274828db86 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.19-next.1", + "version": "0.3.19", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 0451769b82..d29890d836 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-import +## 0.9.6 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + ## 0.9.6-next.2 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index baddab4656..a9e38367b9 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.6-next.2", + "version": "0.9.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 8ed02981ca..71333f339c 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-node +## 1.3.4 + +### Patch Changes + +- e675f902980: Added `locationSpecToMetadataName` and `locationSpecToLocationEntity` as their new home, moved over from the backend package where they now are marked as deprecated. +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/types@1.0.2 + ## 1.3.4-next.2 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index d5ad3b86ea..e95258f59b 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.4-next.2", + "version": "1.3.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 4d8acf0936..1436ea2b2f 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-react +## 1.4.0 + +### Minor Changes + +- 0a5b73b2926: Add possibility to re-use EntityPicker for filters with multiple select. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 24916d23494: Do not close `Autocomplete` powered multiple-selection filters when checking boxes +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-permission-react@0.4.11 + ## 1.4.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 8f0b9627c7..a905dea1f6 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.4.0-next.2", + "version": "1.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 873c90de07..239a7e6057 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,54 @@ # @backstage/plugin-catalog +## 1.9.0 + +### Minor Changes + +- 23cc40039c0: Allow `EntitySwitch` to render all cases that match the condition. + + This change introduces a new parameter for the `EntitySwitch` component + `renderMultipleMatches`. In case the parameter value is `all`, the `EntitySwitch` + will render all `EntitySwitch.Case` that contain `if` parameter, and it + evaluates to true. In case none of the cases match, the default case will be + rendered, if any. + + This means for example in the CI/CD page you can now do the following: + + ```tsx + + Jenkins + CodeBuild + No CI/CD + + ``` + + This allows the component to have multiple CI/CD systems and all of those are + rendered on the same page. + +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item +- c9a9f3c834f: Add a `columns` prop to certain components that use the `EntityTable` for easier extensibility. + +### Patch Changes + +- 3fa41696820: Make the "Copied!" message disappear automatically after some time +- 7e8930ae1c6: Fix icon alignment in `CatalogSearchResultListItem` +- dbbde6ed353: fix entity switch rendering when there is no default case +- cb8ec97cdeb: Change black & white colors to be theme aware +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-search-common@1.2.2 + ## 1.9.0-next.2 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index c66ae8fb5e..782ab6051a 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.9.0-next.2", + "version": "1.9.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 55ec192258..a8519377a6 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-cicd-statistics@0.1.18 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 38de7c6799..8144319eaa 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 97434f99c7..bc91b2611b 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + ## 0.1.18-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 8262235489..967aa89f7c 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.18-next.2", + "version": "0.1.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index c43162fe14..93dd50f6be 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-circleci +## 0.3.16 + +### Patch Changes + +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 55d02ce8bd..6f093a24b3 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.16-next.2", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index bc5f71d8e1..935cb3e7bb 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-cloudbuild +## 0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 04fa511cb6..153c0a69b6 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.16-next.2", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index e98be293b8..59599c528e 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-climate +## 0.1.16 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 9890f8b95e..9ba3f290cf 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.16-next.2", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 74336f32c8..65a9ce5a60 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage-backend +## 0.2.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index fca52bdebc..affbfb79b9 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.9-next.2", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 914768f638..8782089171 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-code-coverage +## 0.2.9 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index cfdddfc6af..b51862702c 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.9-next.2", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 7390729c48..b6f69daacb 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-codescene +## 0.1.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 49cedd3bc4..f7d132affa 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.11-next.2", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 5e0de80621..e78a82a633 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-config-schema +## 0.1.39 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.1.39-next.2 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 730265cbea..cb543cd3a2 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.39-next.2", + "version": "0.1.39", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index f108804cb6..2cf77c9aa9 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-cost-insights +## 0.12.5 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.5-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index aabd4d340d..6d35d006a9 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.5-next.2", + "version": "0.12.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 402ee43c1e..451da29bf0 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-dynatrace +## 3.0.0 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 3.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index c66ef32c7b..b4a9e76c59 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "3.0.0-next.2", + "version": "3.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index cac724d7ef..2bf4189393 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index b482fdb212..48ab43af9f 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 72cb7b272a..e19b5e17b1 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-feedback +## 0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-entity-feedback-common@0.1.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index 760b192440..ba88e02b70 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 43ecb6527d..a714918b45 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-entity-validation +## 0.1.1 + +### Patch Changes + +- 47d246691ac: Fixed bug in EntityVaidation plugin where string in text box was unable to be updated. +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/theme@0.2.18 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 81c13cc46b..c7cd754547 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 0e5659c538..ac076e463b 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `awsSqsConsumingEventPublisherEventsModule` to `eventsModuleAwsSqsConsumingEventPublisher` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 9278099801..046d3363d2 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index 159603d965..cf3de9b750 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `azureDevOpsEventRouterEventsModule` to `eventsModuleAzureDevOpsEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index ef00f0f3b9..6ac861253a 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index 9cf0d0a70e..be247852e9 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `bitbucketCloudEventRouterEventsModule` to `eventsModuleBitbucketCloudEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index fa7dba892e..5a908876cb 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index accd659217..7388fe6c96 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `gerritEventRouterEventsModule` to `eventsModuleGerritEventRouter` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index de5d104781..3666179cd1 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index b531c5db52..f20041f8d8 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend-module-github +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `githubEventRouterEventsModule` to `eventsModuleGithubEventRouter` and `githubWebhookEventsModule` to `eventsModuleGithubWebhook`, to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 4a010f5841..cbe8713836 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index f992585219..6d9895360d 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.5 + +### Patch Changes + +- a5de745ac17: Renamed `gitlabEventRouterEventsModule` to `eventsModuleGitlabEventRouter` and `gitlabWebhookEventsModule` to `eventsModuleGitlabWebhook` to match the [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 917f9fdb89..420bbb782e 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index aaf14aa68b..dad7faf979 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.4 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 67d6671497..77cecd0219 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 82fb0c6fc1..0b72628ccf 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-backend +## 0.2.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- a5de745ac17: Updated README instructions +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/plugin-events-node@0.2.4 + - @backstage/config@1.0.7 + ## 0.2.4-next.2 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 4a51e56b6a..d2abad4cb8 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.4-next.2", + "version": "0.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index a19d9badc2..9b1599c25a 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-node +## 0.2.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + ## 0.2.4-next.2 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 76eb1b2bf3..22c64dd012 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.4-next.2", + "version": "0.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index edde9b9d54..65488cd80e 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + ## 1.0.11-next.2 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 5579f748b2..8baa490b31 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.11-next.2", + "version": "1.0.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index 2596387d2d..40909ff841 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 + ## 1.0.9-next.0 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 5463a19348..7c48939e8b 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.9-next.0", + "version": "1.0.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 4739ab303e..022a8e8fb3 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 1.0.11-next.2 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index a7366ce36f..9c90b71b52 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.11-next.2", + "version": "1.0.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index 7874062954..be73174a06 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-explore-backend +## 0.0.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + ## 0.0.5-next.2 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index dbdab19329..00629c8da4 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.5-next.2", + "version": "0.0.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index 1f68752e6e..954492e81e 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-explore-react +## 0.0.27 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-explore-common@0.0.1 + ## 0.0.27-next.2 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 6bb7ad5f0a..fbbde21b0f 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.27-next.2", + "version": "0.0.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 72d93cf927..46cf23bc90 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-explore +## 0.4.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-explore-react@0.0.27 + - @backstage/theme@0.2.18 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c91671c816..d14a276ecc 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 1fbf09d8d4..2987daa5ff 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-firehydrant +## 0.2.0 + +### Minor Changes + +- e2e3dd08a54: Allow firehydrant to use component annotation + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.33-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 8084876f69..0aacc34906 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.33-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index af439b6fd0..7c713d6730 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-fossa +## 0.2.48 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.48-next.2 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 1135c76bb1..8d4b8bb7aa 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.48-next.2", + "version": "0.2.48", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 2460deb73c..d9d1021f02 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gcalendar +## 0.3.12 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.12-next.2 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 83471340b8..603936d75a 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.12-next.2", + "version": "0.3.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index ecb3ec60fc..b501db40d7 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcp-projects +## 0.3.35 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.35-next.2 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 1029b37cd0..162aff640c 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.35-next.2", + "version": "0.3.35", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index c97568b076..cec4a630bc 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-git-release-manager +## 0.3.29 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.3.29-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 0c9507bc24..53fca75a4f 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.29-next.2", + "version": "0.3.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index ffec353673..a8cf2cd18f 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-actions +## 0.5.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.5.16-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index d26249218e..48f20a6722 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.16-next.2", + "version": "0.5.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index cc8c6a838e..a66a149b8b 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-github-deployments +## 0.1.47 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.1.47-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index f9019b5029..0d56c6bb1b 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.47-next.2", + "version": "0.1.47", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 5a440a28f3..46352a55d2 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-issues +## 0.2.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.2.5-next.2 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 83e457a606..419a5babcb 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.5-next.2", + "version": "0.2.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index ae15428eed..3480ae5f6e 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.10 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index ff5393988b..689359ba1a 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.10-next.2", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 8522e1e16c..5c7f777ddc 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gitops-profiles +## 0.3.34 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.34-next.2 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 291b73b308..d61efb7706 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.34-next.2", + "version": "0.3.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 71d7aa3af0..544bb848dc 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-gocd +## 0.1.22 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.22-next.2 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index f9789ffde4..e5727302f6 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.22-next.2", + "version": "0.1.22", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index f110d7b813..35d00a5080 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphiql +## 0.2.48 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.2.48-next.2 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index a608ecb8db..a91f8647ec 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.48-next.2", + "version": "0.2.48", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 0ab0918031..87f2fe54e0 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-backend +## 0.1.33 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/plugin-catalog-graphql@0.3.19 + - @backstage/config@1.0.7 + ## 0.1.33-next.2 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 401119b052..10e3f6eca6 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.33-next.2", + "version": "0.1.33", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index 982dfec9dc..43d2b66fd8 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-voyager +## 0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index 5d2b809bb3..25f947e455 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 51552a0135..1deba56290 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-home +## 0.4.32 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.4.32-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 2957625478..1896a15006 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.32-next.2", + "version": "0.4.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index e3d63efd71..ff0683d4a8 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-ilert +## 0.2.5 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.5-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index cc8183d6cb..903b69523e 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.5-next.2", + "version": "0.2.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index f18f75d0a4..a9f6bcaac4 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-jenkins-backend +## 0.1.33 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + ## 0.1.33-next.2 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index daf5073792..9f85185900 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.33-next.2", + "version": "0.1.33", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index 820a600fc1..73be4b306c 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-jenkins-common +## 0.1.14 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + ## 0.1.14-next.1 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index 8786afd22c..04cc34b48d 100644 --- a/plugins/jenkins-common/package.json +++ b/plugins/jenkins-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-common", - "version": "0.1.14-next.1", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index fe8f1e2d13..19c41d8931 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-jenkins +## 0.7.15 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/theme@0.2.18 + ## 0.7.15-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 204d88db60..fbb95c8303 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.15-next.2", + "version": "0.7.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 92bcf3de3f..a21c47dd96 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.2.36 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + ## 0.2.36-next.2 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 38b1f60fcb..3f43fac671 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.36-next.2", + "version": "0.2.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 1706f206e7..0ed581fc62 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kafka +## 0.3.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 017c14881a..d3eab939e6 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.16-next.2", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index ac1287f8aa..617a9d16f9 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes-backend +## 0.9.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-kubernetes-common@0.6.1 + ## 0.9.4-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index ee7844c76e..850f3c67f4 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.9.4-next.2", + "version": "0.9.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 35044f7576..d12719a9f2 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-kubernetes-common +## 0.6.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + ## 0.6.1-next.1 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index e100b64500..2d83db84d4 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.6.1-next.1", + "version": "0.6.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 05929a7d46..02dbba634d 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-kubernetes +## 0.7.9 + +### Patch Changes + +- 8adeb19b37d: GitLab can now be used as an `oidcTokenProvider` for Kubernetes clusters +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-kubernetes-common@0.6.1 + ## 0.7.9-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ed806ee521..b22d50681d 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.9-next.2", + "version": "0.7.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 0caf949bd6..860493f57b 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-lighthouse-backend +## 0.1.1 + +### Patch Changes + +- 46829bc2f0e: Update README.md; typo with plugin name & removed unneeded "import { Router } from 'express';" +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index 7fa51b3446..d13e1487e9 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-common/CHANGELOG.md b/plugins/lighthouse-common/CHANGELOG.md index 001182cf98..a44c2b52a6 100644 --- a/plugins/lighthouse-common/CHANGELOG.md +++ b/plugins/lighthouse-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-lighthouse-common +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + ## 0.1.1-next.0 ### Patch Changes diff --git a/plugins/lighthouse-common/package.json b/plugins/lighthouse-common/package.json index cf7a598ce8..9cd13e7510 100644 --- a/plugins/lighthouse-common/package.json +++ b/plugins/lighthouse-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-common", "description": "Common functionalities for lighthouse, to be shared between lighthouse and lighthouse-backend plugin", - "version": "0.1.1-next.0", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index f326707dfa..df404fb220 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-lighthouse +## 0.4.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 3fcb24986d..e9c70378e5 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index ac922c735b..e94a176158 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-linguist-backend +## 0.2.0 + +### Minor Changes + +- 4a1c318853d: **BREAKING** The linguist-backend `createRouter` now requires that the `tokenManger` is passed to the router. + +### Patch Changes + +- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 2ea57821629: Fixed bug in LinguistBackendApi that caused initial batch of entities to be skipped. +- b271d5ca052: Allow kind to be configurable + + ```ts + return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); + ``` + +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 01c4f12afa..755b1b959a 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 3d83855122..d289a06299 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-linguist +## 0.1.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- ab997ce243f: Updated `README.md` to removed images with refresh button as this feature was not implemented in the current version +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 276bb81574..f589b26bd3 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 69a93bc320..93d51a338c 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-microsoft-calendar +## 0.1.1 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 8d20a5de70..cb125480f2 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 93b27ba385..44122710e5 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.9 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 9958741b5f..83aa0811b6 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.9-next.2", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index bd0ef0d06f..d241da2d28 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic +## 0.3.34 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 66fdf05a1ef: Updated installation instructions +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.34-next.2 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 3ad74b3949..08d4ad0970 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.34-next.2", + "version": "0.3.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index a3743722b8..8ab8d174db 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-octopus-deploy +## 0.1.0 + +### Minor Changes + +- b7fff1171f0: Initial version + +### Patch Changes + +- cb0fc15a992: Added Octopus Deploy logo +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 9ba86f1587..4cbe40b006 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.1.0-next.2", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index cb59276110..a8b59a4bc1 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-org-react +## 0.1.5 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index a2e6623523..027e34c391 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 4728f8be20..4251195733 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-org +## 0.6.6 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 36bccb5252f: Fix small UI-glitch in MemberListCard +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- a06fcac4040: Add styling to the `MembersListCard` and `ComponentsGrid` to handle overflow text. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.6.6-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index bd7ea9a344..1e948703c5 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.6-next.2", + "version": "0.6.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 37189de162..2e0529fa8b 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-pagerduty +## 0.5.9 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 9c08ecbaa4b: Update readme link for discord channel +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.5.9-next.2 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 0ae7623240..31caf51e33 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.9-next.2", + "version": "0.5.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index aa43870b1d..b2690caf40 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-periskop-backend +## 0.1.14 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 11e38bcd36..5c101dbf29 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index d41640b55c..f5cc2e9b3d 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-periskop +## 0.1.14 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 1e7ca292d1..f3cd97b1ff 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index a55c711386..8e2f0c2987 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.18 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + ## 0.5.18-next.2 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index a7202c9672..f7778bf7b2 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.18-next.2", + "version": "0.5.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index e193c4f8e6..be9d35ef6a 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-common +## 0.7.4 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.7.4-next.0 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 5b1abb5d94..4d45347f7a 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.7.4-next.0", + "version": "0.7.4", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 59052c2184..472fa004a1 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-permission-node +## 0.7.6 + +### Patch Changes + +- 27a103ca07b: Changed the `createPermissionIntegrationRouter` API to allow `getResources`, `resourceType` and `rules` to be optional +- 37e9215c793: Update the service-to-service auth docs URL in error message. + `` +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + ## 0.7.6-next.2 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 92c0a7685a..1473de80b2 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.6-next.2", + "version": "0.7.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 31832e9a83..9da20a2875 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + ## 0.4.11-next.2 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 1d5d0713b7..afa4a4768e 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.11-next.2", + "version": "0.4.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index da2697188a..195cdb1f50 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-playlist-backend +## 0.2.6 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-playlist-common@0.1.5 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 2d868b950a..90e5813247 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.2.6-next.2", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-common/CHANGELOG.md b/plugins/playlist-common/CHANGELOG.md index 13e19e9204..15eebfc59b 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-playlist-common +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 + ## 0.1.5-next.0 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index 1bf0b8be27..440e46713d 100644 --- a/plugins/playlist-common/package.json +++ b/plugins/playlist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-playlist-common", "description": "Common functionalities for the playlist plugin", - "version": "0.1.5-next.0", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index bc0263fd00..43a7ff4e4d 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-playlist +## 0.1.7 + +### Patch Changes + +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 122a37a880e: Internal update to work with newer versions of react-router +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/theme@0.2.18 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-playlist-common@0.1.5 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 445171f9b8..59cde3f246 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 8b649c44de..8c4ef92ea5 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-proxy-backend +## 0.2.37 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 3e3eea4bc7e: The proxy-backend plugin now supports reviving request bodies that have previously been consumed by an express middleware (e.g. `express.json()`). This is done by setting `reviveConsumedRequestBodies: true` on the proxy `RouterOptions`. In order to preserve the current behavior, the proxy will **not** revive request bodies by default. + + The following is an example of a proxy `createRouter` invocation that revives request bodies: + + ```diff + const router = await createRouter({ + config, + logger, + discovery, + + reviveConsumedRequestBodies: true, + }); + ``` + +- 4acd93dae1d: Ensure that `@backstage/plugin-proxy-backend` logs the requests that it proxies when log level is set to `debug`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/config@1.0.7 + ## 0.2.37-next.2 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index a7d320c37c..6b9c115dbb 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.37-next.2", + "version": "0.2.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index edda54dcd1..f69c395c83 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar-backend +## 0.1.40 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + ## 0.1.40-next.2 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 31d802dece..0bba2d3888 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.40-next.2", + "version": "0.1.40", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 943db21cce..2693bf4b5b 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-rollbar +## 0.4.16 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.4.16-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index a3189c147d..9b46d91db6 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.16-next.2", + "version": "0.4.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 2dcb0eb279..284e381553 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.18 + +### Patch Changes + +- 62414770ead: allow container runner to be undefined in cookiecutter plugin +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + ## 0.2.18-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 373320191a..da8f92da5c 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.18-next.2", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 5c7fb1dc2d..457cef36bb 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + ## 0.4.11-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index be9d053340..96da1120e8 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.11-next.2", + "version": "0.4.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index ae6d8734c9..5207cdec38 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/plugin-scaffolder-node@0.1.1 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 36f5139b28..bff7043171 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index e87cf64167..36e965218d 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.1 + ## 0.2.16-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 01ba3f5eea..9aeee3ec51 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.16-next.2", + "version": "0.2.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 65a827797f..0cd0e43f9d 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-scaffolder-backend +## 1.12.0 + +### Minor Changes + +- 7d724d8ef56: Added the ability to be able to define an actions `input` and `output` schema using `zod` instead of hand writing types and `jsonschema` + +### Patch Changes + +- 860de10fa67: Make identity valid if subject of token is a backstage server-2-server auth token +- 65454876fb2: Minor API report tweaks +- c6c78b4acbe: throw error from catalog:fetch scaffolder action when entity is null and optional is false +- 9968f455921: catalog write action should allow any shape of object +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 7af12854970: Extended scaffolder action `catalog:fetch` to fetch multiple catalog entities by entity references. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + - @backstage/plugin-scaffolder-node@0.1.1 + ## 1.12.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 03f813b036..d7eae0580a 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.12.0-next.2", + "version": "1.12.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 8b50ec85a9..4f76c33e36 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-common +## 1.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + ## 1.2.6-next.1 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index a64185d681..c08763d98b 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.2.6-next.1", + "version": "1.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 37b9613524..663d7b1c39 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-node +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.6 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 8978c155bf..d349e41ec4 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 25385e4816..744d687349 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-scaffolder-react +## 1.2.0 + +### Minor Changes + +- 8f4d13f21cf: Move `useTaskStream`, `TaskBorder`, `TaskLogStream` and `TaskSteps` into `scaffolder-react`. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- c8d78b9ae9d: fix bug with `hasErrors` returning false when dealing with empty objects +- 9b8c374ace5: Remove timer for skipped steps in Scaffolder Next's TaskSteps +- 44941fc97eb: scaffolder/next: Move the `uiSchema` to its own property in the validation `context` to align with component development and access of `ui:options` +- d9893263ba9: scaffolder/next: Fix for steps without properties +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- cc418d652a7: scaffolder/next: Added the ability to get the fields definition in the schema in the validation function +- d4100d0ec42: Fix alignment bug for owners on `TemplateCard` +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-scaffolder-common@1.2.6 + ## 1.2.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 4e0cb590e4..012baa6aa5 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.2.0-next.2", + "version": "1.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index d3c377154e..f304d7b621 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-scaffolder +## 1.12.0 + +### Minor Changes + +- 0d61fcca9c3: Update `EntityPicker` to use the fully qualified entity ref instead of the humanized version. +- 8f4d13f21cf: Move `useTaskStream`, `TaskBorder`, `TaskLogStream` and `TaskSteps` into `scaffolder-react`. + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 3c96e77b513: Make scaffolder adhere to page themes by using page `fontColor` consistently. If your theme overwrites template list or card headers, review those styles. +- be3cddaab5f: Getting credentials in the RepoUrlPicker now also works for targets without owner (e.g. Bitbucket Server). +- cb8ec97cdeb: Change black & white colors to be theme aware +- eb877bad736: Create an "Other Templates" group when groups are given to scaffolder/next. +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 0aae4596296: Fix the scaffolder validator for arrays when the item is a field in the object +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-scaffolder-react@1.2.0 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/plugin-scaffolder-common@1.2.6 + ## 1.12.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 7d939a3d1e..dc75dd1d01 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.12.0-next.2", + "version": "1.12.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 8576e6602c..b72c36dec2 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.1.4 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.4-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 6520571ec6..e854687360 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.1.4-next.2", + "version": "1.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index db32c01817..50a9fc9d91 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + ## 0.5.4-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index c6513c8e27..b284557369 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.4-next.2", + "version": "0.5.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 5fcd3bd0fa..69cc5ac718 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-node +## 1.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.4-next.2 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index d86be92e92..2abc0a8ef0 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.1.4-next.2", + "version": "1.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 513ee4536a..72d9e53c08 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-search-backend +## 1.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.7.6 + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-search-backend-node@1.1.4 + - @backstage/plugin-search-common@1.2.2 + ## 1.2.4-next.2 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 0baecca0a9..02d4d53a92 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.2.4-next.2", + "version": "1.2.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index b0a0479ed3..893e6cc89d 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-common +## 1.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.4 + - @backstage/types@1.0.2 + ## 1.2.2-next.0 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index ba767f7019..a7c8de1c9f 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "1.2.2-next.0", + "version": "1.2.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 9fc158de5d..cf6138956c 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-search-react +## 1.5.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 553f3c95011: Correctly disable next button in `SearchPagination` on last page +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + ## 1.5.1-next.2 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 355191cb47..f14a62ccea 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.5.1-next.2", + "version": "1.5.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 3d02621576..3160da8753 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-search +## 1.1.1 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.1-next.2 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 353981cae1..143f64d1bf 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.1.1-next.2", + "version": "1.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 89b5d8312a..de40027a7e 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sentry +## 0.5.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.5.1-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 1139898926..c14e397ab9 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.1-next.2", + "version": "0.5.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 2360461f73..f75675260e 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-shortcuts +## 0.3.8 + +### Patch Changes + +- cb8ec97cdeb: Change black & white colors to be theme aware +- 7c38e565d1f: Fixed bug in LocalStoredShortcuts client where adding new Shortcut results in replacing entire shortcut list. + + Refactored LocalStoredShortcuts client to listen to `storageApi` updates to ensure that local state is always up to date. + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.3.8-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 22c0456342..1901198b80 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.8-next.2", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index f60f7bf047..0f2ff1d996 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sonarqube-backend +## 0.1.8 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index d7de98d307..a3f3b42f43 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md index 6c7d5d41f2..ae337f220e 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sonarqube-react +## 0.1.4 + +### Patch Changes + +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 8ae65a0bc1d: Moved imports from `/alpha` to main public exports. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index d5266cd220..442a747717 100644 --- a/plugins/sonarqube-react/package.json +++ b/plugins/sonarqube-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-react", - "version": "0.1.4-next.2", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 6c6f69aaf8..6eeea22725 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-sonarqube +## 0.6.5 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 8ae65a0bc1d: Moved imports from `/alpha` to main public exports. +- d3d624e8e8d: Show a more appropriate icon if there are no code smells and/or vulnerabilities. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-sonarqube-react@0.1.4 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.6.5-next.2 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 48d221e508..5815032f6a 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.5-next.2", + "version": "0.6.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 830c918ced..011e513852 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-splunk-on-call +## 0.4.5 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.4.5-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 97a5357bd0..98a6291791 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.5-next.2", + "version": "0.4.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index fab1416363..ba743be981 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.12 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 2dd405dc3b..8d1203577d 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 050900554d..c8641592a6 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-stack-overflow +## 0.1.12 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 3ef5fb09ca5: Export api ref and StackOverflowApi type +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-search-react@1.5.1 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-home@0.4.32 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 3675593181..952471fd50 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index f68c853b7b..3af84cd8a6 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-stackstorm +## 0.1.0 + +### Minor Changes + +- f3a15259e91: Add StackStorm plugin to Backstage which is interfacing with StackStorm API. It allows users to view workflow executions, packs and actions. For installation and configuration instructions please view [README.md](https://github.com/backstage/backstage/tree/master/plugins/stackstorm/README.md) + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index a1ba109d76..2819fc0e33 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.0-next.2", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 12e6693589..17334e90b7 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.27 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.1 + ## 0.1.27-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 7d60ec0cdc..a6bc32a990 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.27-next.2", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index c4e8061f05..8071740295 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-tech-insights-backend +## 0.5.9 + +### Patch Changes + +- f244b589163: Add DB index to improve latency of latest fact query +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.1 + ## 0.5.9-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index e11bf60e0d..c1887906e9 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.9-next.2", + "version": "0.5.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index ed9f3667f0..71eb372214 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 6a546f86c1..bfa4d893c0 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index e8d57b056f..056b15cb8b 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-tech-insights +## 0.3.8 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.8-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 680641b1b0..1c912083fd 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.8-next.2", + "version": "0.3.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 4ad21662bd..694e07eeac 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-tech-radar +## 0.6.2 + +### Patch Changes + +- e14dcfa4994: Update colors to match Zalando's tech radar, also add coloring on title and legend to match ring color. +- cb8ec97cdeb: Change black & white colors to be theme aware +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.6.2-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 273bd79255..f47e2a80c7 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.2-next.2", + "version": "0.6.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 35dedb8a0b..6aad4ffd2d 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.11 + +### Patch Changes + +- 2b00d8a225c: Fix bug/problem with test helper +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog@1.9.0 + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-search-react@1.5.1 + - @backstage/plugin-techdocs@1.6.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/test-utils@1.2.6 + - @backstage/core-app-api@1.6.0 + - @backstage/integration-react@1.1.11 + - @backstage/theme@0.2.18 + ## 1.0.11-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 8dc81b2cf7..d8c6242adc 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.11-next.2", + "version": "1.0.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 8e4be204db..e39e58589d 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-techdocs-backend +## 1.6.0 + +### Minor Changes + +- 92b495328bd: Introduced alpha export of the `techdocsPlugin` using the new backend system. + +### Patch Changes + +- 40298b02778: Techdocs backend explains a bit more about what might have caused the docs not being found when building techdocs. +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/plugin-techdocs-node@1.6.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + ## 1.5.4-next.2 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 1d2f4400eb..1d6ca8931e 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.5.4-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 69fa5d8cfd..005c38f64c 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.11 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 37cf85fb85c: Fixed bug in IssueLink component where the URL was not generated properly when the repository was located inside a Gitlab subgroup +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 1.0.11-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index b5aebb262c..12b30d3cc2 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.11-next.2", + "version": "1.0.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 28a11e4b57..f4221afc3a 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs-node +## 1.6.0 + +### Minor Changes + +- ea2bbef1b16: Added support for an HTTPS proxy for techdocs AWS S3 requests + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- bf493710f50: Update to a newer version of `@trendyol-js/openstack-swift-sdk` +- bfe350ef4ce: Fixed bug that prevented deletion of stale files when non-empty directories where tried to be deleted as well. +- Updated dependencies + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + - @backstage/plugin-search-common@1.2.2 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index a247ef483e..fe23c88367 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index cbc52cf570..b0f163836a 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-react +## 1.1.4 + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 928a12a9b3e: Internal refactor of `/alpha` exports. +- 8adfda60ae1: Updated dependency `jss` to `~10.10.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/version-bridge@1.0.3 + ## 1.1.4-next.2 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index ae8d7e21ae..c605838215 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.4-next.2", + "version": "1.1.4", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 7ce9542731..f66e0fa3a4 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-techdocs +## 1.6.0 + +### Minor Changes + +- 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item + +### Patch Changes + +- 65454876fb2: Minor API report tweaks +- 54a1e133b56: Fix bug that caused next and previous links not to work with certain versions of mkdocs-material +- f320c299c67: The HTML tag attributes in the documentation content inserted to shadow DOM is preserved to improve accessibility +- cb8ec97cdeb: Change black & white colors to be theme aware +- c10384a9235: Switch to using `LinkButton` instead of the deprecated `Button` +- 8adfda60ae1: Updated dependency `jss` to `~10.10.0`. +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- 238cf657c09: Copy to clipboard now works in a not secure context. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-techdocs-react@1.1.4 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/plugin-search-react@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.11 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 88ebb91c1b..ae0a31ab4d 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 6abd6c3562..77e3c02668 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-todo-backend +## 0.1.40 + +### Patch Changes + +- 4120513412a: todo-backend is now exposed as a plugin which uses the new plugin system +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/catalog-client@1.4.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.4 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.3 + - @backstage/config@1.0.7 + ## 0.1.40-next.2 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index cb37bc5eb5..ece341b736 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.40-next.2", + "version": "0.1.40", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 3e716065a1..1ea1c6ec88 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-todo +## 0.2.18 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.18-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 6cc2491a78..0a0177f9d9 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.18-next.2", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 4bcf306e42..baecd1e286 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.12 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/backend-plugin-api@0.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index a98e0e9313..c3757fc9cf 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 435fa2b2d4..85e175e822 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings +## 0.7.1 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/core-app-api@1.6.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.7.1-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index e49c54687d..aa1b6f2fb7 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.1-next.2", + "version": "0.7.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 31b822c68b..a5a5e8ddaa 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault-backend +## 0.2.10 + +### Patch Changes + +- 66b3a3956b8: Ignore the `eslint` error +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/backend-tasks@0.5.0 + - @backstage/backend-common@0.18.3 + - @backstage/errors@1.1.5 + - @backstage/config@1.0.7 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 336363e9ad..41c9bef499 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.10-next.2", + "version": "0.2.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 1f6d8446bd..4cb3473c9f 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-vault +## 0.1.10 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/plugin-catalog-react@1.4.0 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 127c9cf753..b5835661cd 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.10-next.2", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index e9a2023939..617cb08281 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-xcmetrics +## 0.2.36 + +### Patch Changes + +- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. +- Updated dependencies + - @backstage/core-components@0.12.5 + - @backstage/errors@1.1.5 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.2.36-next.2 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index fb7695e090..2d549c7b84 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.36-next.2", + "version": "0.2.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 5cb6af842b..878fea817f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3593,17 +3593,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@npm:^1.3.1": - version: 1.3.1 - resolution: "@backstage/catalog-client@npm:1.3.1" - dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/errors": ^1.1.4 - cross-fetch: ^3.1.5 - checksum: e2e0050d93f509fbaed40d89228ce9af7c9f32372c721d5faea29ef312e488cbfc1426959f39d61790d41406fbd6bc895bed2c3427bbdf6cab6a412f449c2efe - languageName: node - linkType: hard - "@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" @@ -3616,22 +3605,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@npm:^1.1.3, @backstage/catalog-model@npm:^1.1.5, @backstage/catalog-model@npm:^1.2.0": - version: 1.2.0 - resolution: "@backstage/catalog-model@npm:1.2.0" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/errors": ^1.1.4 - "@backstage/types": ^1.0.2 - ajv: ^8.10.0 - json-schema: ^0.4.0 - lodash: ^4.17.21 - uuid: ^8.0.0 - checksum: d4e07e91e501b4ecbc9d0b754518277dd2ed93f22f801740cc539dbcbd905ba8111b1651d20fb725e44d7cd99a96faec6fd56cd51fdf8e1d7f39a6e177f31efa - languageName: node - linkType: hard - -"@backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.3, @backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3846,17 +3820,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@npm:^1.0.4, @backstage/config@npm:^1.0.6": - version: 1.0.6 - resolution: "@backstage/config@npm:1.0.6" - dependencies: - "@backstage/types": ^1.0.2 - lodash: ^4.17.21 - checksum: 5cd2b409237091eb523a61c11df49c183ad1548dce90df343c9b0204eec7147508f41c832f931f82783c458ccdcc9d9fb73511cdd373fdb023db67bc738fcc67 - languageName: node - linkType: hard - -"@backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.4, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -3902,57 +3866,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.12.0, @backstage/core-components@npm:^0.12.3, @backstage/core-components@npm:^0.12.4": - version: 0.12.4 - resolution: "@backstage/core-components@npm:0.12.4" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/errors": ^1.1.4 - "@backstage/theme": ^0.2.17 - "@backstage/version-bridge": ^1.0.3 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - "@react-hookz/web": ^20.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.1 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.6 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.10.0 - zod: ~3.18.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 476160ad54a399e7393bb70fc34fc01b69519431606797fdecc974d5e826315527d8ab71af5dd4d1c8d88bfe797aa37e781fd5fd31d8293c19982704e4f7cfdc - languageName: node - linkType: hard - -"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.12.0, @backstage/core-components@^0.12.3, @backstage/core-components@^0.12.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -4023,25 +3937,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@npm:^1.1.0, @backstage/core-plugin-api@npm:^1.3.0, @backstage/core-plugin-api@npm:^1.4.0": - version: 1.4.0 - resolution: "@backstage/core-plugin-api@npm:1.4.0" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/types": ^1.0.2 - "@backstage/version-bridge": ^1.0.3 - history: ^5.0.0 - prop-types: ^15.7.2 - zen-observable: ^0.10.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 046d0fcb52b3110d6a926eeaf766486c753c2eeca70f7897f4ded45e0cf7da8591ec7df337433427bc50de7193e7a6d875356a027a8d1733fa07d87509e561a1 - languageName: node - linkType: hard - -"@backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.1.0, @backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -4126,17 +4022,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@npm:^1.1.4": - version: 1.1.4 - resolution: "@backstage/errors@npm:1.1.4" - dependencies: - "@backstage/types": ^1.0.2 - cross-fetch: ^3.1.5 - serialize-error: ^8.0.1 - checksum: 1f0915a29fbeeff0e7fb82f1b4858248d99e9fa6a1aec65d617a241fab812f7939ec418ef0751370833753a2ee2c989463c5e26b40d7ea6aa297e5b6aee96584 - languageName: node - linkType: hard - "@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" @@ -4178,26 +4063,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.10": - version: 1.1.10 - resolution: "@backstage/integration-react@npm:1.1.10" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/integration": ^1.4.2 - "@backstage/theme": ^0.2.17 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - checksum: 248e11c74fed7fb6d5fcc9cf7f7d7baffe94a6a4091aff60afc46c797b08a63486baaffe32812c237e29e3cb295d429b1cd740ca704b43b7dc4704a910184716 - languageName: node - linkType: hard - -"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@^1.1.10, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4224,22 +4090,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.4.2": - version: 1.4.2 - resolution: "@backstage/integration@npm:1.4.2" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/errors": ^1.1.4 - "@octokit/auth-app": ^4.0.0 - "@octokit/rest": ^19.0.3 - cross-fetch: ^3.1.5 - git-url-parse: ^13.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - checksum: b1fceb1c7d08d1db29529d1ba1d661019e9829dec8a004414fedc5ceec13b7087a1bdc7f4839e8e818f3386dc93aa94d74e8b65f9be75330a28b34305374126c - languageName: node - linkType: hard - "@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" @@ -5319,18 +5169,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@npm:^1.0.11, @backstage/plugin-catalog-common@npm:^1.0.8": - version: 1.0.11 - resolution: "@backstage/plugin-catalog-common@npm:1.0.11" - dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/plugin-permission-common": ^0.7.3 - "@backstage/plugin-search-common": ^1.2.1 - checksum: e0e37a96b4d97230c590fc4f1e17f252167a3cbbc79533c7e29a26d3480e82435c57ae6f7952aaf694bd8dc22245410c9fd29853249b1b73ed3a009dd49bce6b - languageName: node - linkType: hard - -"@backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.8, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5458,42 +5297,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.2.1, @backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.3.0": - version: 1.3.0 - resolution: "@backstage/plugin-catalog-react@npm:1.3.0" - dependencies: - "@backstage/catalog-client": ^1.3.1 - "@backstage/catalog-model": ^1.2.0 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/errors": ^1.1.4 - "@backstage/integration": ^1.4.2 - "@backstage/plugin-catalog-common": ^1.0.11 - "@backstage/plugin-permission-common": ^0.7.3 - "@backstage/plugin-permission-react": ^0.4.10 - "@backstage/theme": ^0.2.17 - "@backstage/types": ^1.0.2 - "@backstage/version-bridge": ^1.0.3 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - classnames: ^2.2.6 - jwt-decode: ^3.1.0 - lodash: ^4.17.21 - material-ui-popup-state: ^1.9.3 - qs: ^6.9.4 - react-use: ^17.2.4 - yaml: ^2.0.0 - zen-observable: ^0.10.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 03cd5a270154c0cde63bd33104d11ba5811690205c697441f207606d961935f5c45ad2a8e17f591c5ac8b294601c1855852bac35ccb30125e2ab6df13daf82d2 - languageName: node - linkType: hard - -"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.2.1, @backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.3.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -6680,30 +6484,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.4.30": - version: 0.4.31 - resolution: "@backstage/plugin-home@npm:0.4.31" - dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/config": ^1.0.6 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/plugin-catalog-react": ^1.3.0 - "@backstage/theme": ^0.2.17 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - lodash: ^4.17.21 - react-use: ^17.2.4 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 2ba5d377713540a4f9ab7083bc1595361678b59c80d57f26f2fe0bd660ec77926a6bfdeb52a2c6179e809e5186360333ae1bb41f51e741c4bdb7fc3edfda60c3 - languageName: node - linkType: hard - -"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.4.30, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -7397,20 +7178,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@npm:^0.7.3": - version: 0.7.3 - resolution: "@backstage/plugin-permission-common@npm:0.7.3" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/errors": ^1.1.4 - "@backstage/types": ^1.0.2 - cross-fetch: ^3.1.5 - uuid: ^8.0.0 - zod: ~3.18.0 - checksum: b3aa1e4a487ec7c4edd20c60bc216ee54841431e8e932fa9778c72f13dfa369044186f9afbf44316a9017e9bca0ffa774bbec7847711f04557981fb7cd6af080 - languageName: node - linkType: hard - "@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" @@ -7448,24 +7215,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@npm:^0.4.10": - version: 0.4.10 - resolution: "@backstage/plugin-permission-react@npm:0.4.10" - dependencies: - "@backstage/config": ^1.0.6 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/plugin-permission-common": ^0.7.3 - cross-fetch: ^3.1.5 - react-use: ^17.2.4 - swr: ^2.0.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: f7a82648a31a8fe9873492abdbcc524549205e3fd11fe144ab225e6263ce2b2e46abd642e6c370d692d424c51e7c55b9259d8178500f9bfbfc9267d09596843c - languageName: node - linkType: hard - "@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" @@ -8029,16 +7778,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-common@npm:^1.2.1": - version: 1.2.1 - resolution: "@backstage/plugin-search-common@npm:1.2.1" - dependencies: - "@backstage/plugin-permission-common": ^0.7.3 - "@backstage/types": ^1.0.2 - checksum: ebeacfd26dccd906e1d72f8b2df4a585294e31c6759aaabe0de245f0d93dfc1e0f44b8359e951116c619a7700bf71d22dad901c9fbd6dfb79b9385832989fe00 - languageName: node - linkType: hard - "@backstage/plugin-search-common@workspace:^, @backstage/plugin-search-common@workspace:plugins/search-common": version: 0.0.0-use.local resolution: "@backstage/plugin-search-common@workspace:plugins/search-common" @@ -8998,16 +8737,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@npm:^0.2.16, @backstage/theme@npm:^0.2.17": - version: 0.2.17 - resolution: "@backstage/theme@npm:0.2.17" - dependencies: - "@material-ui/core": ^4.12.2 - checksum: 4be1d9bf2c3fce611a75f3b5b80f91365dcb67b8e5a417f9c760ffbc9c6f3dd9c243082347278569ad343cf017b76ebaf2143eb9aebfa07a58513c38dbbca97e - languageName: node - linkType: hard - -"@backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.2.16, @backstage/theme@^0.2.17, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -9016,7 +8746,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/types@^1.0.1, @backstage/types@^1.0.2, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": +"@backstage/types@^1.0.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@backstage/types@workspace:packages/types" dependencies: @@ -9027,7 +8757,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.2, @backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.2, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: From 5e959c9eb62d76f3ac482b97063747a2b98a6cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 14 Mar 2023 15:58:09 +0100 Subject: [PATCH 140/511] vault-backend: accept interface, not concrete client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/khaki-doors-compare.md | 5 ++++ plugins/vault-backend/api-report.md | 5 +--- .../vault-backend/src/service/VaultBuilder.ts | 27 ++++++++++--------- plugins/vault-backend/src/service/vaultApi.ts | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 .changeset/khaki-doors-compare.md diff --git a/.changeset/khaki-doors-compare.md b/.changeset/khaki-doors-compare.md new file mode 100644 index 0000000000..a2c4de020a --- /dev/null +++ b/.changeset/khaki-doors-compare.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault-backend': minor +--- + +Allow generic Vault clients to be passed into the builder diff --git a/plugins/vault-backend/api-report.md b/plugins/vault-backend/api-report.md index 2b1fb14bd0..4890e585b4 100644 --- a/plugins/vault-backend/api-report.md +++ b/plugins/vault-backend/api-report.md @@ -33,12 +33,9 @@ export interface VaultApi { export class VaultBuilder { constructor(env: VaultEnvironment); build(): VaultBuilderReturn; - protected buildRouter(vaultClient: VaultClient): express.Router; static createBuilder(env: VaultEnvironment): VaultBuilder; enableTokenRenew(schedule?: TaskRunner): Promise; - // (undocumented) - protected readonly env: VaultEnvironment; - setVaultClient(vaultClient: VaultClient): this; + setVaultClient(vaultApi: VaultApi): this; } // @public diff --git a/plugins/vault-backend/src/service/VaultBuilder.ts b/plugins/vault-backend/src/service/VaultBuilder.ts index 788b90ff01..a61d99ac70 100644 --- a/plugins/vault-backend/src/service/VaultBuilder.ts +++ b/plugins/vault-backend/src/service/VaultBuilder.ts @@ -19,7 +19,7 @@ import { InputError } from '@backstage/errors'; import { Logger } from 'winston'; import express from 'express'; import Router from 'express-promise-router'; -import { VaultClient } from './vaultApi'; +import { VaultApi, VaultClient } from './vaultApi'; import { TaskRunner, PluginTaskScheduler } from '@backstage/backend-tasks'; import { errorHandler } from '@backstage/backend-common'; @@ -47,7 +47,7 @@ export type VaultBuilderReturn = { * @public */ export class VaultBuilder { - private vaultClient?: VaultClient; + private vaultApi?: VaultApi; /** * Creates a new instance of the VaultBuilder. @@ -58,7 +58,8 @@ export class VaultBuilder { static createBuilder(env: VaultEnvironment) { return new VaultBuilder(env); } - constructor(protected readonly env: VaultEnvironment) {} + + constructor(private readonly env: VaultEnvironment) {} /** * Builds the routes for Vault. @@ -79,9 +80,9 @@ export class VaultBuilder { }; } - this.vaultClient = this.vaultClient ?? new VaultClient(this.env); + this.vaultApi = this.vaultApi ?? new VaultClient(this.env); - const router = this.buildRouter(this.vaultClient); + const router = this.buildRouter(this.vaultApi); return { router: router, @@ -91,11 +92,11 @@ export class VaultBuilder { /** * Overwrites the current vault client. * - * @param vaultClient - The new Vault client + * @param vaultApi - The new Vault client * @returns */ - public setVaultClient(vaultClient: VaultClient) { - this.vaultClient = vaultClient; + public setVaultClient(vaultApi: VaultApi) { + this.vaultApi = vaultApi; return this; } @@ -116,8 +117,8 @@ export class VaultBuilder { id: 'refresh-vault-token', fn: async () => { this.env.logger.info('Renewing Vault token'); - const vaultClient = this.vaultClient ?? new VaultClient(this.env); - await vaultClient.renewToken(); + const vaultApi = this.vaultApi ?? new VaultClient(this.env); + await vaultApi.renewToken?.(); }, }); return this; @@ -126,10 +127,10 @@ export class VaultBuilder { /** * Builds the backend routes for Vault. * - * @param vaultClient - The Vault client used to list the secrets. + * @param vaultApi - The Vault client used to list the secrets. * @returns The generated backend router */ - protected buildRouter(vaultClient: VaultClient): express.Router { + private buildRouter(vaultApi: VaultApi): express.Router { const router = Router(); router.use(express.json()); @@ -143,7 +144,7 @@ export class VaultBuilder { throw new InputError(`Invalid path: ${path}`); } - const secrets = await vaultClient.listSecrets(path); + const secrets = await vaultApi.listSecrets(path); res.json({ items: secrets }); }); diff --git a/plugins/vault-backend/src/service/vaultApi.ts b/plugins/vault-backend/src/service/vaultApi.ts index 7510ff218e..b75ea76368 100644 --- a/plugins/vault-backend/src/service/vaultApi.ts +++ b/plugins/vault-backend/src/service/vaultApi.ts @@ -56,7 +56,7 @@ type RenewTokenResponse = { */ export interface VaultApi { /** - * Returns the URL to acces the Vault UI with the defined config. + * Returns the URL to access the Vault UI with the defined config. */ getFrontendSecretsUrl(): string; /** From e185fd1e5de583b67852093b534229bfd2cd58ff Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Tue, 14 Mar 2023 15:18:32 +0000 Subject: [PATCH 141/511] add a test Signed-off-by: Brian Fletcher --- .../AwsIamKubernetesAuthTranslator.test.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts index 2696587e69..1f8d525ea8 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/AwsIamKubernetesAuthTranslator.test.ts @@ -17,6 +17,13 @@ import AWS from 'aws-sdk'; import AWSMock from 'aws-sdk-mock'; import { AwsIamKubernetesAuthTranslator } from './AwsIamKubernetesAuthTranslator'; +const awsError: AWS.AWSError = { + code: '123', + message: 'no way', + name: 'nope', + time: new Date(), +}; + describe('AwsIamKubernetesAuthTranslator tests', () => { let role: any = undefined; const credentials: any = { @@ -84,6 +91,25 @@ describe('AwsIamKubernetesAuthTranslator tests', () => { expect(response.serviceAccountToken).toBeDefined(); }); + describe('When the credentials is failing', () => { + beforeEach(() => { + jest.spyOn(AWS.config, 'getCredentials').mockImplementation(cb => { + cb(awsError, null); + }); + }); + it('throws the right error', async () => { + const authTranslator = new AwsIamKubernetesAuthTranslator(); + await expect( + authTranslator.decorateClusterDetailsWithAuth({ + assumeRole: role, + name: 'test-cluster', + url: '', + authProvider: 'aws', + }), + ).rejects.toEqual(awsError); + }); + }); + describe('When the role is assumed', () => { // These credentials are not real. // Pulled from example in docs: https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html From b20e2e16fd9dae60d3cee94a80e31af0a4f2113e Mon Sep 17 00:00:00 2001 From: Tracey Radcliffe Date: Tue, 14 Mar 2023 10:25:28 -0700 Subject: [PATCH 142/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Tracey Radcliffe --- .changeset/new-pigs-jam.md | 2 +- .../package.json | 2 +- .../src/actions/confluence/confluenceToMarkdown.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.changeset/new-pigs-jam.md b/.changeset/new-pigs-jam.md index ed9c39297a..4c7f74d17f 100644 --- a/.changeset/new-pigs-jam.md +++ b/.changeset/new-pigs-jam.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn': patch +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn': minor --- Created new action for converting confluence docs to Markdown, to be pushed to GitHub repos onboarded onto Techdocs diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json index cc445108c3..6ae6ea8688 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn", + "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdowwn module for @backstage/plugin-scaffolder-backend", "version": "0.0.0", "main": "src/index.ts", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts index 1ded6e90f3..62bebb752f 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts @@ -72,7 +72,7 @@ export const createConfluenceToMarkdownAction = (options: { }, async handler(ctx) { const { confluenceUrls, repoUrl } = ctx.input; - const parsedRepoUrl = parseGitUrl(`${repoUrl}`); + const parsedRepoUrl = parseGitUrl(repoUrl); const filePathToMkdocs = parsedRepoUrl.filepath.substring( 0, parsedRepoUrl.filepath.lastIndexOf('/') + 1, From 7245e744ab1883b7162a3ee6c157b903cec1def1 Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Tue, 14 Mar 2023 11:46:16 -0600 Subject: [PATCH 143/511] Fix colors in HeaderLabel not following page theme Signed-off-by: Tim Hansen --- .changeset/thirty-crabs-tell.md | 5 +++++ .../src/layout/HeaderLabel/HeaderLabel.tsx | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/thirty-crabs-tell.md diff --git a/.changeset/thirty-crabs-tell.md b/.changeset/thirty-crabs-tell.md new file mode 100644 index 0000000000..2ca5e8cd34 --- /dev/null +++ b/.changeset/thirty-crabs-tell.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed the font color on `BackstageHeaderLabel` to respect the active page theme. diff --git a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx index e3b6299f85..757aca688a 100644 --- a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx +++ b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx @@ -14,8 +14,9 @@ * limitations under the License. */ +import { BackstageTheme } from '@backstage/theme'; import Grid from '@material-ui/core/Grid'; -import { makeStyles } from '@material-ui/core/styles'; +import { alpha, makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import React from 'react'; import { Link } from '../../components/Link'; @@ -23,13 +24,13 @@ import { Link } from '../../components/Link'; /** @public */ export type HeaderLabelClassKey = 'root' | 'label' | 'value'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { textAlign: 'left', }, label: { - color: theme.palette.common.white, + color: theme.page.fontColor, fontWeight: theme.typography.fontWeightBold, letterSpacing: 0, fontSize: theme.typography.fontSize, @@ -37,7 +38,7 @@ const useStyles = makeStyles( lineHeight: 1, }, value: { - color: 'rgba(255, 255, 255, 0.8)', + color: alpha(theme.page.fontColor, 0.8), fontSize: theme.typography.fontSize, lineHeight: 1, }, From 83d250badc60fb7c450f6497582fd95bce2acc4a Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Tue, 14 Mar 2023 19:44:18 +0000 Subject: [PATCH 144/511] fix bug where response is badly formed. (#16830) * fix bug where response is badly formed. Ideally the client would validate that the response is in the format it expects upfront before any of this processing is done. This change provides a minimal fix. Signed-off-by: Brian Fletcher * Update plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts Co-authored-by: Sam Blausten Signed-off-by: Brian Fletcher * prettier Signed-off-by: Brian Fletcher --------- Signed-off-by: Brian Fletcher Co-authored-by: Sam Blausten --- .changeset/old-cougars-sit.md | 5 +++ .../service/KubernetesFanOutHandler.test.ts | 41 +++++++++++++++++++ .../src/service/KubernetesFanOutHandler.ts | 2 +- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 .changeset/old-cougars-sit.md diff --git a/.changeset/old-cougars-sit.md b/.changeset/old-cougars-sit.md new file mode 100644 index 0000000000..cdab8b1291 --- /dev/null +++ b/.changeset/old-cougars-sit.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Fix parsing error when kubernetes api is returning badly structured data. diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 17a86eb30d..53aaa1ad3a 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -502,6 +502,47 @@ describe('getKubernetesObjectsByEntity', () => { }); }); + it('pods api is returning garbage', async () => { + getClustersByEntity.mockImplementation(() => + Promise.resolve({ + clusters: [ + { + name: 'test-cluster', + authProvider: 'serviceAccount', + }, + ], + }), + ); + + fetchObjectsForService.mockImplementation((_: ObjectFetchParams) => + Promise.resolve({ + errors: [], + responses: [ + { + garbage: ['thrash', 'rubbish'], + }, + ], + }), + ); + + mockMetrics(fetchPodMetricsByNamespaces); + + const sut = getKubernetesFanOutHandler([]); + + const result = await sut.getKubernetesObjectsByEntity({ + entity, + auth: {}, + }); + + expect(getClustersByEntity.mock.calls.length).toBe(1); + expect(fetchObjectsForService.mock.calls.length).toBe(1); + expect(fetchPodMetricsByNamespaces.mock.calls.length).toBe(0); + + expect(result).toStrictEqual({ + items: [], + }); + }); + it('retrieve objects for two clusters', async () => { getClustersByEntity.mockImplementation(() => Promise.resolve({ diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 63e46a44e3..e0a6c21c4a 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -324,7 +324,7 @@ export class KubernetesFanOutHandler { (item.errors !== undefined && item.errors.length >= 1) || (item.resources !== undefined && item.resources.length >= 1 && - item.resources.some(fr => fr.resources.length >= 1)), + item.resources.some(fr => fr.resources?.length >= 1)), ), }; } From 3984e7b44d9d8e649006a31d7377ad915a43200b Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Tue, 14 Mar 2023 00:06:56 -0400 Subject: [PATCH 145/511] backfill tests for GitLabClient's org data methods Signed-off-by: Jamie Klassen --- .../src/lib/client.test.ts | 136 ++++++++++++++++++ .../src/lib/client.ts | 15 +- 2 files changed, 141 insertions(+), 10 deletions(-) diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index 513a5b937f..4ac7d23390 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -21,6 +21,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { rest } from 'msw'; import { setupServer, SetupServerApi } from 'msw/node'; import { GitLabClient, paginated } from './client'; +import { GitLabUser } from './types'; const server = setupServer(); setupRequestMockHandlers(server); @@ -259,6 +260,141 @@ describe('GitLabClient', () => { expect(allProjects).toHaveLength(2); }); }); + + it('listUsers gets all users in the instance', async () => { + server.use( + rest.get(`${MOCK_CONFIG.apiBaseUrl}/users`, (_, res, ctx) => + res( + ctx.set('x-next-page', ''), + ctx.json([ + { + id: 1, + username: 'test1', + name: 'Test Testit', + state: 'active', + avatar_url: 'https://secure.gravatar.com/', + web_url: 'https://gitlab.example/test1', + created_at: '2023-01-19T07:27:03.333Z', + bio: '', + location: null, + public_email: null, + skype: '', + linkedin: '', + twitter: '', + website_url: '', + organization: null, + job_title: '', + pronouns: null, + bot: false, + work_information: null, + followers: 0, + following: 0, + is_followed: false, + local_time: null, + last_sign_in_at: '2023-01-19T07:27:49.601Z', + confirmed_at: '2023-01-19T07:27:02.905Z', + last_activity_on: '2023-01-19', + email: 'test@example.com', + theme_id: 1, + color_scheme_id: 1, + projects_limit: 100000, + current_sign_in_at: '2023-01-19T09:09:10.676Z', + identities: [], + can_create_group: true, + can_create_project: true, + two_factor_enabled: false, + external: false, + private_profile: false, + commit_email: 'test@example.com', + is_admin: false, + note: '', + }, + ]), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const allUsers: GitLabUser[] = []; + for await (const user of paginated( + options => client.listUsers(options), + {}, + )) { + allUsers.push(user); + } + + expect(allUsers).toMatchObject([ + { + id: 1, + username: 'test1', + email: 'test@example.com', + name: 'Test Testit', + state: 'active', + web_url: 'https://gitlab.example/test1', + avatar_url: 'https://secure.gravatar.com/', + }, + ]); + }); + it('listGroups gets all groups in the instance', async () => { + server.use( + rest.get(`${MOCK_CONFIG.apiBaseUrl}/groups`, (_, res, ctx) => + res( + ctx.set('x-next-page', ''), + ctx.json([ + { + id: 1, + web_url: 'https://gitlab.example/groups/group1', + name: 'group1', + path: 'group1', + description: '', + visibility: 'internal', + share_with_group_lock: false, + require_two_factor_authentication: false, + two_factor_grace_period: 48, + project_creation_level: 'developer', + auto_devops_enabled: null, + subgroup_creation_level: 'owner', + emails_disabled: null, + mentions_disabled: null, + lfs_enabled: true, + default_branch_protection: 2, + avatar_url: null, + request_access_enabled: false, + full_name: '8020', + full_path: '8020', + created_at: '2017-06-19T06:42:34.160Z', + parent_id: null, + }, + ]), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const allGroups: GitLabGroup[] = []; + for await (const group of paginated( + options => client.listGroups(options), + {}, + )) { + allGroups.push(group); + } + + expect(allGroups).toMatchObject([ + { + id: 1, + name: 'group1', + full_path: '8020', + description: '', + parent_id: null, + }, + ]); + }); }); describe('paginated', () => { diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index bad0eb2a86..e36c0d72c6 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -78,16 +78,11 @@ export class GitLabClient { async listUsers( options?: UserListOptions, ): Promise> { - let requestOptions = options; - - if (!requestOptions) { - requestOptions = {}; - } - - requestOptions.without_project_bots = true; - requestOptions.exclude_internal = true; - - return this.pagedRequest(`/users?`, requestOptions); + return this.pagedRequest(`/users?`, { + ...options, + without_project_bots: true, + exclude_internal: true, + }); } async listGroups( From 7b1b7bfdb7b8e9ee13bbe3245c4acb1e4fda4f52 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Tue, 14 Mar 2023 16:11:29 -0400 Subject: [PATCH 146/511] get group members via graphQL The new `getGroupMembers` method replaces the existing `getUserMemberships` on `GitLabClient`. Signed-off-by: Jamie Klassen --- .changeset/hungry-lies-cry.md | 8 +++ docs/integrations/gitlab/org.md | 25 +++++---- .../src/lib/client.test.ts | 32 ++++++++++- .../src/lib/client.ts | 55 +++++++++++-------- .../src/lib/types.ts | 18 ++++-- .../GitlabOrgDiscoveryEntityProvider.test.ts | 32 ++++++----- .../GitlabOrgDiscoveryEntityProvider.ts | 48 +++++++--------- 7 files changed, 132 insertions(+), 86 deletions(-) create mode 100644 .changeset/hungry-lies-cry.md diff --git a/.changeset/hungry-lies-cry.md b/.changeset/hungry-lies-cry.md new file mode 100644 index 0000000000..712aef6172 --- /dev/null +++ b/.changeset/hungry-lies-cry.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +The gitlab org data integration now makes use of the GraphQL API to determine +the relationships between imported User and Group entities, effectively making +this integration usable without an administrator account's Personal Access +Token. diff --git a/docs/integrations/gitlab/org.md b/docs/integrations/gitlab/org.md index 7ddc5202b5..d78b0ed388 100644 --- a/docs/integrations/gitlab/org.md +++ b/docs/integrations/gitlab/org.md @@ -2,15 +2,14 @@ id: org title: GitLab Organizational Data sidebar_label: Org Data -description: Importing users and groups from a GitLab organization into Backstage +description: Importing users and groups from GitLab into Backstage --- -The Backstage catalog can be set up to ingest organizational data - users and -teams - directly from an organization in GitLab. The result -is a hierarchy of +The Backstage catalog can be set up to ingest organizational data -- users and +groups -- directly from GitLab. The result is a hierarchy of [`User`](../../features/software-catalog/descriptor-format.md#kind-user) and -[`Group`](../../features/software-catalog/descriptor-format.md#kind-group) kind -entities that mirror your org setup. +[`Group`](../../features/software-catalog/descriptor-format.md#kind-group) +entities that mirrors your org setup. ```yaml integrations: @@ -19,10 +18,11 @@ integrations: token: ${GITLAB_TOKEN} ``` -This will query all users and groups from your gitlab installation. Depending on the size -of the Gitlab Instance, this can take some time and resources. +This will query all users and groups from your GitLab instance. Depending on the +amount of data, this can take significant time and resources. -The token that is used for the Organization Integration, has to be an Admin Personal Access Token (PAT). +The token used must have the `read_api` scope, and the Users and Groups fetched +will be those visible to the account which provisioned the token. ```yaml catalog: @@ -35,6 +35,7 @@ catalog: groupPattern: '[\s\S]*' # Optional. Filters found groups based on provided pattern. Defaults to `[\s\S]*`, which means to not filter anything ``` -When the `group` parameter is provided, the corresponding path prefix will be stripped out from each matching group -when computing the unique entity name. e.g. If `group` is `org/teams`, the name for `org/teams/avengers/gotg` will -be `avengers-gotg`. +When the `group` parameter is provided, the corresponding path prefix will be +stripped out from each matching group when computing the unique entity name. +e.g. If `group` is `org/teams`, the name for `org/teams/avengers/gotg` will be +`avengers-gotg`. diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index 4ac7d23390..66c04f6cc4 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -18,10 +18,10 @@ import { ConfigReader } from '@backstage/config'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { readGitLabIntegrationConfig } from '@backstage/integration'; import { getVoidLogger } from '@backstage/backend-common'; -import { rest } from 'msw'; +import { graphql, rest } from 'msw'; import { setupServer, SetupServerApi } from 'msw/node'; import { GitLabClient, paginated } from './client'; -import { GitLabUser } from './types'; +import { GitLabGroup, GitLabUser } from './types'; const server = setupServer(); setupRequestMockHandlers(server); @@ -31,6 +31,7 @@ const MOCK_CONFIG = readGitLabIntegrationConfig( host: 'example.com', token: 'test-token', apiBaseUrl: 'https://example.com/api/v4', + baseUrl: 'https://example.com', }), ); const FAKE_PAGED_ENDPOINT = `/some-endpoint`; @@ -338,6 +339,7 @@ describe('GitLabClient', () => { }, ]); }); + it('listGroups gets all groups in the instance', async () => { server.use( rest.get(`${MOCK_CONFIG.apiBaseUrl}/groups`, (_, res, ctx) => @@ -395,6 +397,32 @@ describe('GitLabClient', () => { }, ]); }); + + it('getGroupMembers gets member IDs', async () => { + server.use( + graphql + .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) + .operation((_, res, ctx) => + res( + ctx.data({ + group: { + groupMembers: { + nodes: [{ user: { id: 'gid://gitlab/User/1' } }], + }, + }, + }), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const members = await client.getGroupMembers('group1'); + + expect(members).toEqual([1]); + }); }); describe('paginated', () => { diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index e36c0d72c6..74a3a4be71 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -20,7 +20,7 @@ import { GitLabIntegrationConfig, } from '@backstage/integration'; import { Logger } from 'winston'; -import { GitLabGroup, GitLabMembership, GitLabUser } from './types'; +import { GitLabGroup, GitLabGroupMembersResponse, GitLabUser } from './types'; export type CommonListOptions = { [key: string]: string | number | boolean | undefined; @@ -91,30 +91,37 @@ export class GitLabClient { return this.pagedRequest(`/groups`, options); } - async getUserMemberships(userId: number): Promise { - const endpoint: string = `/users/${encodeURIComponent(userId)}/memberships`; - const request = new URL(`${this.config.apiBaseUrl}${endpoint}`); - request.searchParams.append('per_page', '100'); + async getGroupMembers(groupPath: string): Promise { + const response: GitLabGroupMembersResponse = await fetch( + `${this.config.baseUrl}/api/graphql`, + { + method: 'POST', + headers: { + ...getGitLabRequestOptions(this.config).headers, + ['Content-Type']: 'application/json', + }, + body: JSON.stringify({ + variables: { group: groupPath }, + query: `query($group: ID!) { + group(fullPath: $group) { + groupMembers(first: 10, relations: [DIRECT]) { + nodes { + user { + id + } + } + } + } + }`, + }), + }, + ).then(r => r.json()); + this.logger.debug(`got GraphQL response: ${JSON.stringify(response)}`); - const response = await fetch(request.toString(), { - headers: getGitLabRequestOptions(this.config).headers, - method: 'GET', - }); - - if (!response.ok) { - if (response.status >= 500) { - this.logger.debug( - `Unexpected response when fetching ${request.toString()}. Expected 200 but got ${ - response.status - } - ${response.statusText}`, - ); - } - return []; - } - - return response.json().then(items => { - return items as GitLabMembership[]; - }); + return response.data.group.groupMembers.nodes.map( + (node: { user: { id: string } }) => + Number(node.user.id.replace(/^gid:\/\/gitlab\/User\//, '')), + ); } /** diff --git a/plugins/catalog-backend-module-gitlab/src/lib/types.ts b/plugins/catalog-backend-module-gitlab/src/lib/types.ts index c3fc8a4ede..b4480efdc2 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/types.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/types.ts @@ -50,11 +50,19 @@ export type GitLabGroup = { parent_id?: number; }; -export type GitLabMembership = { - source_id: number; - source_name: string; - source_type: string; - access_level: number; +export type GitLabGroupMembersResponse = { + errors: { message: string }[]; + data: { + group: { + groupMembers: { + nodes: { user: { id: string } }[]; + pageInfo: { + endCursor: string; + hasNextPage: boolean; + }; + }; + }; + }; }; export type GitlabProviderConfig = { diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts index 5a323a8dec..88f8d58bf2 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts @@ -23,7 +23,7 @@ import { import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { rest } from 'msw'; +import { graphql, rest } from 'msw'; import { setupServer } from 'msw/node'; import { GitlabOrgDiscoveryEntityProvider } from './GitlabOrgDiscoveryEntityProvider'; @@ -318,20 +318,22 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { ]; return res(ctx.json(response)); }), - rest.get( - `https://api.gitlab.example/api/v4/users/1/memberships`, - (_req, res, ctx) => { - const response = [ - { - source_id: 2, - source_name: 'Group 2', - source_type: 'Namespace', - access_level: 50, - }, - ]; - return res(ctx.json(response)); - }, - ), + graphql + .link('https://test-gitlab/api/graphql') + .operation(async (req, res, ctx) => + res( + ctx.data({ + group: { + groupMembers: { + nodes: + req.variables.group === 'group1/group2' + ? [{ user: { id: 'gid://gitlab/User/1' } }] + : [], + }, + }, + }), + ), + ), ); await provider.connect(entityProviderConnection); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index acfa784c2e..12cdf40e0c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -185,7 +185,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { }, ); - const idMappedGroup: { [groupId: number]: GitLabGroup } = {}; + const idMappedUser: { [userId: number]: GitLabUser } = {}; const res: Result = { scanned: 0, @@ -197,6 +197,21 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { matches: [], }; + for await (const user of users) { + if (!this.config.userPattern.test(user.email ?? user.username ?? '')) { + continue; + } + + res.scanned++; + + if (user.state !== 'active') { + continue; + } + + idMappedUser[user.id] = user; + res.matches.push(user); + } + for await (const group of groups) { if (!this.config.groupPattern.test(group.full_path ?? '')) { continue; @@ -212,35 +227,12 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { groupRes.scanned++; groupRes.matches.push(group); - idMappedGroup[group.id] = group; - } - - for await (const user of users) { - if (!this.config.userPattern.test(user.email ?? user.username ?? '')) { - continue; - } - - res.scanned++; - - if (user.state !== 'active') { - continue; - } - - const memberships = await client.getUserMemberships(user.id); - const userGroups: GitLabGroup[] = []; - - for (const i of memberships) { - if ( - i.source_type === 'Namespace' && - idMappedGroup.hasOwnProperty(i.source_id) - ) { - userGroups.push(idMappedGroup[i.source_id]); + for (const id of await client.getGroupMembers(group.full_path)) { + const user = idMappedUser[id]; + if (user) { + user.groups = (user.groups ?? []).concat(group); } } - - user.groups = userGroups; - - res.matches.push(user); } const groupsWithUsers = groupRes.matches.filter(group => { From c35eebedad9d0992f5cd6fedb90503c7ef3ad965 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Tue, 14 Mar 2023 13:08:24 -0400 Subject: [PATCH 147/511] add light error handling to getGroupMembers Signed-off-by: Jamie Klassen --- .../src/lib/client.test.ts | 62 +++++++++++++------ .../src/lib/client.ts | 4 +- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index 66c04f6cc4..0a50742a27 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -398,30 +398,54 @@ describe('GitLabClient', () => { ]); }); - it('getGroupMembers gets member IDs', async () => { - server.use( - graphql - .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) - .operation((_, res, ctx) => - res( - ctx.data({ - group: { - groupMembers: { - nodes: [{ user: { id: 'gid://gitlab/User/1' } }], + describe('getGroupMembers', () => { + it('gets member IDs', async () => { + server.use( + graphql + .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) + .operation((_, res, ctx) => + res( + ctx.data({ + group: { + groupMembers: { + nodes: [{ user: { id: 'gid://gitlab/User/1' } }], + }, }, - }, - }), + }), + ), ), - ), - ); - const client = new GitLabClient({ - config: MOCK_CONFIG, - logger: getVoidLogger(), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const members = await client.getGroupMembers('group1'); + + expect(members).toEqual([1]); }); - const members = await client.getGroupMembers('group1'); + it('rejects when GraphQL returns errors', async () => { + server.use( + graphql + .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) + .operation((_, res, ctx) => + res( + ctx.errors([ + { message: 'Unexpected end of document', locations: [] }, + ]), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); - expect(members).toEqual([1]); + await expect(() => client.getGroupMembers('group1')).rejects.toThrow( + 'GraphQL errors: [{"message":"Unexpected end of document","locations":[]}]', + ); + }); }); }); diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index 74a3a4be71..a2d8ec971a 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -116,7 +116,9 @@ export class GitLabClient { }), }, ).then(r => r.json()); - this.logger.debug(`got GraphQL response: ${JSON.stringify(response)}`); + if (response.errors) { + throw new Error(`GraphQL errors: ${JSON.stringify(response.errors)}`); + } return response.data.group.groupMembers.nodes.map( (node: { user: { id: string } }) => From 67892fd4d9b5075ad97bcc5414e6f16f976404c0 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Tue, 14 Mar 2023 16:06:19 -0400 Subject: [PATCH 148/511] support multiple pages of group members Signed-off-by: Jamie Klassen --- .../src/lib/client.test.ts | 36 ++++++++++ .../src/lib/client.ts | 72 +++++++++++-------- .../GitlabOrgDiscoveryEntityProvider.test.ts | 4 ++ 3 files changed, 82 insertions(+), 30 deletions(-) diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index 0a50742a27..a3bcd140ee 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -409,6 +409,10 @@ describe('GitLabClient', () => { group: { groupMembers: { nodes: [{ user: { id: 'gid://gitlab/User/1' } }], + pageInfo: { + endCursor: 'end', + hasNextPage: false, + }, }, }, }), @@ -446,6 +450,38 @@ describe('GitLabClient', () => { 'GraphQL errors: [{"message":"Unexpected end of document","locations":[]}]', ); }); + + it('traverses multi-page results', async () => { + server.use( + graphql + .link(`${MOCK_CONFIG.baseUrl}/api/graphql`) + .operation((req, res, ctx) => + res( + ctx.data({ + group: { + groupMembers: { + nodes: req.variables.endCursor + ? [{ user: { id: 'gid://gitlab/User/2' } }] + : [{ user: { id: 'gid://gitlab/User/1' } }], + pageInfo: { + endCursor: req.variables.endCursor ? 'end' : 'next', + hasNextPage: !req.variables.endCursor, + }, + }, + }, + }), + ), + ), + ); + const client = new GitLabClient({ + config: MOCK_CONFIG, + logger: getVoidLogger(), + }); + + const members = await client.getGroupMembers('group1'); + + expect(members).toEqual([1, 2]); + }); }); }); diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.ts index a2d8ec971a..8f8c67895c 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.ts @@ -92,38 +92,50 @@ export class GitLabClient { } async getGroupMembers(groupPath: string): Promise { - const response: GitLabGroupMembersResponse = await fetch( - `${this.config.baseUrl}/api/graphql`, - { - method: 'POST', - headers: { - ...getGitLabRequestOptions(this.config).headers, - ['Content-Type']: 'application/json', - }, - body: JSON.stringify({ - variables: { group: groupPath }, - query: `query($group: ID!) { - group(fullPath: $group) { - groupMembers(first: 10, relations: [DIRECT]) { - nodes { - user { - id + const memberIds = []; + let hasNextPage: boolean = false; + let endCursor: string | null = null; + do { + const response: GitLabGroupMembersResponse = await fetch( + `${this.config.baseUrl}/api/graphql`, + { + method: 'POST', + headers: { + ...getGitLabRequestOptions(this.config).headers, + ['Content-Type']: 'application/json', + }, + body: JSON.stringify({ + variables: { group: groupPath, endCursor }, + query: `query($group: ID!, $endCursor: String) { + group(fullPath: $group) { + groupMembers(first: 100, relations: [DIRECT], after: $endCursor) { + nodes { + user { + id + } + } + pageInfo { + endCursor + hasNextPage + } } } - } - } - }`, - }), - }, - ).then(r => r.json()); - if (response.errors) { - throw new Error(`GraphQL errors: ${JSON.stringify(response.errors)}`); - } - - return response.data.group.groupMembers.nodes.map( - (node: { user: { id: string } }) => - Number(node.user.id.replace(/^gid:\/\/gitlab\/User\//, '')), - ); + }`, + }), + }, + ).then(r => r.json()); + if (response.errors) { + throw new Error(`GraphQL errors: ${JSON.stringify(response.errors)}`); + } + memberIds.push( + ...response.data.group.groupMembers.nodes.map( + (node: { user: { id: string } }) => + Number(node.user.id.replace(/^gid:\/\/gitlab\/User\//, '')), + ), + ); + ({ hasNextPage, endCursor } = response.data.group.groupMembers.pageInfo); + } while (hasNextPage); + return memberIds; } /** diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts index 88f8d58bf2..3d6ff0a91a 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.test.ts @@ -329,6 +329,10 @@ describe('GitlabOrgDiscoveryEntityProvider', () => { req.variables.group === 'group1/group2' ? [{ user: { id: 'gid://gitlab/User/1' } }] : [], + pageInfo: { + endCursor: 'end', + hasNextPage: false, + }, }, }, }), From 6f9a2ae712326f2231f83403f4a7efeead46f948 Mon Sep 17 00:00:00 2001 From: Niall Thomson Date: Tue, 14 Mar 2023 22:52:19 +0000 Subject: [PATCH 149/511] Rename AWS CodeSuite plugin to AWS Code Services Signed-off-by: Niall Thomson --- microsite/data/plugins/aws-codeservices.yaml | 10 ++++++++++ microsite/data/plugins/aws-codesuite.yaml | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 microsite/data/plugins/aws-codeservices.yaml delete mode 100644 microsite/data/plugins/aws-codesuite.yaml diff --git a/microsite/data/plugins/aws-codeservices.yaml b/microsite/data/plugins/aws-codeservices.yaml new file mode 100644 index 0000000000..34fa335923 --- /dev/null +++ b/microsite/data/plugins/aws-codeservices.yaml @@ -0,0 +1,10 @@ +--- +title: AWS Code Services +author: Amazon Web Services +authorUrl: https://aws.amazon.com/ +category: CI/CD +description: View resources related to AWS CodePipeline, AWS CodeBuild and AWS CodeDeploy for your components in Backstage. +documentation: https://github.com/awslabs/aws-codeservices-plugins-for-backstage#readme +iconUrl: https://github.com/awslabs/aws-codeservices-plugins-for-backstage/blob/main/docs/images/codepipeline-logo.png?raw=true +npmPackageName: '@aws/aws-codeservices-plugin-for-backstage' +addedDate: '2023-01-17' diff --git a/microsite/data/plugins/aws-codesuite.yaml b/microsite/data/plugins/aws-codesuite.yaml deleted file mode 100644 index d1fd039b9b..0000000000 --- a/microsite/data/plugins/aws-codesuite.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: AWS CodeSuite -author: Amazon Web Services -authorUrl: https://aws.amazon.com/ -category: CI/CD -description: View resources related to AWS CodePipeline, AWS CodeBuild and AWS CodeDeploy for your components in Backstage. -documentation: https://github.com/awslabs/aws-codesuite-plugins-for-backstage#readme -iconUrl: https://github.com/awslabs/aws-codesuite-plugins-for-backstage/blob/main/docs/images/codepipeline-logo.png?raw=true -npmPackageName: '@aws/aws-codesuite-plugin-for-backstage' -addedDate: '2023-01-17' From cd0e596dd54c59ca435c4114c72a964c38e897e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 04:08:27 +0000 Subject: [PATCH 150/511] build(deps): bump webpack from 5.74.0 to 5.76.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.74.0 to 5.76.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.74.0...v5.76.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 878fea817f..1c58cace3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38647,8 +38647,8 @@ __metadata: linkType: hard "webpack@npm:^5, webpack@npm:^5.70.0": - version: 5.74.0 - resolution: "webpack@npm:5.74.0" + version: 5.76.1 + resolution: "webpack@npm:5.76.1" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -38679,7 +38679,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 320c41369a75051b19e18c63f408b3dcc481852e992f83d311771c5ec0f05f2946385e8ebef62030cf3587f0a3d2f12779ffdb191569a966847289ba7313f946 + checksum: b01fe0bc2dbca0e10d290ddb0bf81e807a031de48028176e2b21afd696b4d3f25ab9accdad888ef4a1f7c7f4d41f13d5bf2395b7653fdf3e5e3dafa54e56dab2 languageName: node linkType: hard From 529f657fdf3143381fa93b04ef3125a21993125b Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 15 Mar 2023 08:30:19 +0000 Subject: [PATCH 151/511] Fix docs for deprecated type Signed-off-by: Brian Fletcher --- docs/features/software-catalog/external-integrations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index 6f957625bd..61f22c1645 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -506,9 +506,12 @@ import { processingResult, CatalogProcessor, CatalogProcessorEmit, - LocationSpec, } from '@backstage/plugin-catalog-node'; +import { + LocationSpec +} from "@backstage/plugin-catalog-common" + // A processor that reads from the fictional System-X export class SystemXReaderProcessor implements CatalogProcessor { constructor(private readonly reader: UrlReader) {} From 0d1a4daaacc44514d5e0d77429831deb24f97978 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 15 Mar 2023 08:57:30 +0000 Subject: [PATCH 152/511] prettier Signed-off-by: Brian Fletcher --- docs/features/software-catalog/external-integrations.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index 61f22c1645..0f2459d6e0 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -508,9 +508,7 @@ import { CatalogProcessorEmit, } from '@backstage/plugin-catalog-node'; -import { - LocationSpec -} from "@backstage/plugin-catalog-common" +import { LocationSpec } from '@backstage/plugin-catalog-common'; // A processor that reads from the fictional System-X export class SystemXReaderProcessor implements CatalogProcessor { From 4dbf3d3e4daacc77a60bc125c6dbdbb0de9aabc2 Mon Sep 17 00:00:00 2001 From: dlaird-ovo Date: Wed, 15 Mar 2023 09:42:45 +0000 Subject: [PATCH 153/511] Adding new EntitySwitch for differing views depending on ResourceType Signed-off-by: dlaird-ovo --- .changeset/hungry-monkeys-reply.md | 5 +++ plugins/catalog/api-report.md | 5 +++ .../EntitySwitch/conditions.test.ts | 41 ++++++++++++++++++- .../src/components/EntitySwitch/conditions.ts | 20 ++++++++- .../src/components/EntitySwitch/index.ts | 7 +++- 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 .changeset/hungry-monkeys-reply.md diff --git a/.changeset/hungry-monkeys-reply.md b/.changeset/hungry-monkeys-reply.md new file mode 100644 index 0000000000..c7f5d54ea1 --- /dev/null +++ b/.changeset/hungry-monkeys-reply.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Added a new EntitySwitch isResourceType to allow different views depending on Resource type diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index d891ebb7c8..5a81ea8d76 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -433,6 +433,11 @@ export function isComponentType( types: string | string[], ): (entity: Entity) => boolean; +// @public +export function isResourceType( + types: string | string[], +): (entity: Entity) => boolean; + // @public export function isKind(kinds: string | string[]): (entity: Entity) => boolean; diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts index dfed546fd8..079a6f5943 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts @@ -15,7 +15,26 @@ */ import { Entity } from '@backstage/catalog-model'; -import { isComponentType, isKind, isNamespace } from './conditions'; +import { + isComponentType, + isKind, + isNamespace, + isResourceType, +} from './conditions'; + +const kubernetesClusterResource: Entity = { + apiVersion: '', + kind: 'resource', + metadata: { name: 'aKubernetesCluster' }, + spec: { type: 'kubernetes-cluster' }, +}; + +const databaseResource: Entity = { + apiVersion: '', + kind: 'resource', + metadata: { name: 'aDatabase' }, + spec: { type: 'database' }, +}; const serviceComponent: Entity = { apiVersion: '', @@ -59,6 +78,26 @@ const bNamespace: Entity = { spec: { type: 'service' }, }; +describe('isResourceType', () => { + it('should false on non component kinds', () => { + const checkEntity = isResourceType('service'); + + expect(checkEntity(notComponent)).not.toBeTruthy(); + }); + it('should check for the intended type', () => { + const checkEntity = isResourceType('kubernetes-cluster'); + + expect(checkEntity(databaseResource)).not.toBeTruthy(); + expect(checkEntity(kubernetesClusterResource)).toBeTruthy(); + }); + it('should check for multiple types', () => { + const checkEntity = isResourceType(['database', 'kubernetes-cluster']); + + expect(checkEntity(databaseResource)).toBeTruthy(); + expect(checkEntity(kubernetesClusterResource)).toBeTruthy(); + }); +}); + describe('isComponentType', () => { it('should false on non component kinds', () => { const checkEntity = isComponentType('service'); diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 86fd38a900..222a76b0a9 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { ComponentEntity, Entity } from '@backstage/catalog-model'; +import { + ComponentEntity, + ResourceEntity, + Entity, +} from '@backstage/catalog-model'; function strCmp(a: string | undefined, b: string | undefined): boolean { return Boolean( @@ -50,6 +54,20 @@ export function isComponentType(types: string | string[]) { }; } +/** + * For use in EntitySwitch.Case. Matches if the entity is a Resource of a given spec.type. + * @public + */ +export function isResourceType(types: string | string[]) { + return (entity: Entity) => { + if (!strCmp(entity.kind, 'resource')) { + return false; + } + const resourceEntity = entity as ResourceEntity; + return strCmpAll(resourceEntity.spec.type, types); + }; +} + /** * For use in EntitySwitch.Case. Matches if the entity is in a given namespace. * @public diff --git a/plugins/catalog/src/components/EntitySwitch/index.ts b/plugins/catalog/src/components/EntitySwitch/index.ts index 6cccf4be6e..0cb85ae6eb 100644 --- a/plugins/catalog/src/components/EntitySwitch/index.ts +++ b/plugins/catalog/src/components/EntitySwitch/index.ts @@ -16,4 +16,9 @@ export { EntitySwitch } from './EntitySwitch'; export type { EntitySwitchProps, EntitySwitchCaseProps } from './EntitySwitch'; -export { isKind, isNamespace, isComponentType } from './conditions'; +export { + isKind, + isNamespace, + isComponentType, + isResourceType, +} from './conditions'; From 77bd287b0ae2372b99cfb7adad00e0471f7673e3 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 11:05:50 +0100 Subject: [PATCH 154/511] chore: added a redirect for the getting-involved page Signed-off-by: blam --- microsite/docusaurus.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 025c773a9c..59441d6e58 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -120,6 +120,10 @@ module.exports = { from: '/docs/features/search/search-overview', to: '/docs/features/search/', }, + { + from: '/getting-involved', + to: '/docs/getting-started/getting-involved' + }, ], }, ], From 3d18705f02fd087a7c498f5d634e99176df1849f Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 11:12:07 +0100 Subject: [PATCH 155/511] chore: release notes for 1.12.0 Signed-off-by: blam --- docs/releases/v1.12.0.md | 62 ++++++++++++++++++++++++++++++++++ microsite/docusaurus.config.js | 2 +- microsite/sidebars.json | 1 + 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 docs/releases/v1.12.0.md diff --git a/docs/releases/v1.12.0.md b/docs/releases/v1.12.0.md new file mode 100644 index 0000000000..da163ea4ae --- /dev/null +++ b/docs/releases/v1.12.0.md @@ -0,0 +1,62 @@ +--- +id: v1.12.0 +title: v1.12.0 +description: Backstage Release v1.12.0 +--- + +These are the release notes for the v1.12.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done. + +## Highlights + +This release mostly contains a bunch of smaller additions and bug fixes, but on top of that, there’s also some quality of life improvements and features as listed below. Enjoy! + +### Using `zod` for action definitions + +As a convenience, it is now possible to define your action inputs and outputs as `zod` schemas. This tends to be more convenient than writing JSON schema by hand, and gives you instant type feedback in your editor. + +Added by [@zcason](https://github.com/zcason) in [#15561](https://github.com/backstage/backstage/pull/15561) + +### Reading paginated data from the catalog + +The catalog has a new backend endpoint and corresponding client method, for fetching entities with proper cursor based pagination and server side filtering and ordering. This will be used to target performance hot-spots in the frontend and elsewhere. + +Added by [@vinzscam](https://github.com/vinzscam) in [#12246](https://github.com/backstage/backstage/pull/12246) + +### Renamed backend system related plugin exports + +As we settle the new backend system bit by bit, we have renamed a number of exports from individual plugins, to match the new [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). If you are already leveraging the new backend system, you may find that you need to update some imports. For example, `githubEntityProviderCatalogModule` was renamed to `catalogModuleGithubEntityProvider`. These were considered non-breaking since they are still in alpha. More details can be found in #16760 and #16764. + +### New plugin: `catalog-backend` `puppetdb` module + +Added a `catalogModulePuppetDbEntityProvider` alpha export for the new backend system. Contributed by [@tdabasinskas](https://github.com/tdabasinskas) in [#16184](https://github.com/backstage/backstage/pull/16184) + +### New plugin: Octopus deploy + +[Octopus](https://octopus.com) deployment plugin. Contributed by [@jmezach](https://github.com/jmezach) in [#16353](https://github.com/backstage/backstage/pull/16353) + +### New plugin: StackStorm + +Integration with [StackStorm](https://stackstorm.com). Contributed by [@pamelin](https://github.com/pamelin) in [#16152](https://github.com/backstage/backstage/pull/16152) + +## Security Fixes + +This release does not contain any security fixes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.12.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://mailchi.mp/spotify/backstage-community) if you want to be informed about what is happening in the world of Backstage. diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 025c773a9c..b7d8453e21 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -158,7 +158,7 @@ module.exports = { position: 'left', }, { - to: 'docs/releases/v1.11.0', + to: 'docs/releases/v1.12.0', label: 'Releases', position: 'left', }, diff --git a/microsite/sidebars.json b/microsite/sidebars.json index ebb387f81c..09727685a0 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -1,6 +1,7 @@ { "releases": { "Release Notes": [ + "releases/v1.12.0", "releases/v1.11.0", "releases/v1.10.0", "releases/v1.9.0", From 39eecf5c8f946dbf0170cbf6505d21c4eafe763f Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 11:16:20 +0100 Subject: [PATCH 156/511] chore: enter prerelease Signed-off-by: blam --- .changeset/pre.json | 217 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..8ed335e113 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,217 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.81", + "@backstage/app-defaults": "1.2.1", + "example-backend": "0.2.81", + "@backstage/backend-app-api": "0.4.1", + "@backstage/backend-common": "0.18.3", + "@backstage/backend-defaults": "0.1.8", + "@backstage/backend-dev-utils": "0.1.1", + "example-backend-next": "0.0.9", + "@backstage/backend-plugin-api": "0.5.0", + "@backstage/backend-tasks": "0.5.0", + "@backstage/backend-test-utils": "0.1.35", + "@backstage/catalog-client": "1.4.0", + "@backstage/catalog-model": "1.2.1", + "@backstage/cli": "0.22.4", + "@backstage/cli-common": "0.1.12", + "@backstage/codemods": "0.1.44", + "@backstage/config": "1.0.7", + "@backstage/config-loader": "1.1.9", + "@backstage/core-app-api": "1.6.0", + "@backstage/core-components": "0.12.5", + "@backstage/core-plugin-api": "1.5.0", + "@backstage/create-app": "0.4.38", + "@backstage/dev-utils": "1.0.13", + "e2e-test": "0.2.1", + "@backstage/errors": "1.1.5", + "@backstage/eslint-plugin": "0.1.2", + "@backstage/integration": "1.4.3", + "@backstage/integration-aws-node": "0.1.2", + "@backstage/integration-react": "1.1.11", + "@backstage/release-manifests": "0.0.9", + "@backstage/repo-tools": "0.1.3", + "@techdocs/cli": "1.4.0", + "techdocs-cli-embedded-app": "0.2.80", + "@backstage/test-utils": "1.2.6", + "@backstage/theme": "0.2.18", + "@backstage/types": "1.0.2", + "@backstage/version-bridge": "1.0.3", + "@backstage/plugin-adr": "0.4.1", + "@backstage/plugin-adr-backend": "0.3.1", + "@backstage/plugin-adr-common": "0.2.7", + "@backstage/plugin-airbrake": "0.3.16", + "@backstage/plugin-airbrake-backend": "0.2.16", + "@backstage/plugin-allure": "0.1.32", + "@backstage/plugin-analytics-module-ga": "0.1.27", + "@backstage/plugin-apache-airflow": "0.2.9", + "@backstage/plugin-api-docs": "0.9.1", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.1", + "@backstage/plugin-apollo-explorer": "0.1.9", + "@backstage/plugin-app-backend": "0.3.43", + "@backstage/plugin-auth-backend": "0.18.1", + "@backstage/plugin-auth-node": "0.2.12", + "@backstage/plugin-azure-devops": "0.2.7", + "@backstage/plugin-azure-devops-backend": "0.3.22", + "@backstage/plugin-azure-devops-common": "0.3.0", + "@backstage/plugin-azure-sites": "0.1.5", + "@backstage/plugin-azure-sites-backend": "0.1.5", + "@backstage/plugin-azure-sites-common": "0.1.0", + "@backstage/plugin-badges": "0.2.40", + "@backstage/plugin-badges-backend": "0.1.37", + "@backstage/plugin-bazaar": "0.2.6", + "@backstage/plugin-bazaar-backend": "0.2.6", + "@backstage/plugin-bitbucket-cloud-common": "0.2.4", + "@backstage/plugin-bitrise": "0.1.43", + "@backstage/plugin-catalog": "1.9.0", + "@backstage/plugin-catalog-backend": "1.8.0", + "@backstage/plugin-catalog-backend-module-aws": "0.1.17", + "@backstage/plugin-catalog-backend-module-azure": "0.1.14", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.10", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.10", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.8", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.11", + "@backstage/plugin-catalog-backend-module-github": "0.2.6", + "@backstage/plugin-catalog-backend-module-gitlab": "0.1.14", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.0", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.10", + "@backstage/plugin-catalog-backend-module-msgraph": "0.5.2", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.9", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.0", + "@backstage/plugin-catalog-common": "1.0.12", + "@internal/plugin-catalog-customized": "0.0.8", + "@backstage/plugin-catalog-graph": "0.2.28", + "@backstage/plugin-catalog-graphql": "0.3.19", + "@backstage/plugin-catalog-import": "0.9.6", + "@backstage/plugin-catalog-node": "1.3.4", + "@backstage/plugin-catalog-react": "1.4.0", + "@backstage/plugin-cicd-statistics": "0.1.18", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.12", + "@backstage/plugin-circleci": "0.3.16", + "@backstage/plugin-cloudbuild": "0.3.16", + "@backstage/plugin-code-climate": "0.1.16", + "@backstage/plugin-code-coverage": "0.2.9", + "@backstage/plugin-code-coverage-backend": "0.2.9", + "@backstage/plugin-codescene": "0.1.11", + "@backstage/plugin-config-schema": "0.1.39", + "@backstage/plugin-cost-insights": "0.12.5", + "@backstage/plugin-cost-insights-common": "0.1.1", + "@backstage/plugin-dynatrace": "3.0.0", + "@backstage/plugin-entity-feedback": "0.1.1", + "@backstage/plugin-entity-feedback-backend": "0.1.1", + "@backstage/plugin-entity-feedback-common": "0.1.0", + "@backstage/plugin-entity-validation": "0.1.1", + "@backstage/plugin-events-backend": "0.2.4", + "@backstage/plugin-events-backend-module-aws-sqs": "0.1.5", + "@backstage/plugin-events-backend-module-azure": "0.1.5", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.5", + "@backstage/plugin-events-backend-module-gerrit": "0.1.5", + "@backstage/plugin-events-backend-module-github": "0.1.5", + "@backstage/plugin-events-backend-module-gitlab": "0.1.5", + "@backstage/plugin-events-backend-test-utils": "0.1.5", + "@backstage/plugin-events-node": "0.2.4", + "@internal/plugin-todo-list": "1.0.11", + "@internal/plugin-todo-list-backend": "1.0.11", + "@internal/plugin-todo-list-common": "1.0.9", + "@backstage/plugin-explore": "0.4.1", + "@backstage/plugin-explore-backend": "0.0.5", + "@backstage/plugin-explore-common": "0.0.1", + "@backstage/plugin-explore-react": "0.0.27", + "@backstage/plugin-firehydrant": "0.2.0", + "@backstage/plugin-fossa": "0.2.48", + "@backstage/plugin-gcalendar": "0.3.12", + "@backstage/plugin-gcp-projects": "0.3.35", + "@backstage/plugin-git-release-manager": "0.3.29", + "@backstage/plugin-github-actions": "0.5.16", + "@backstage/plugin-github-deployments": "0.1.47", + "@backstage/plugin-github-issues": "0.2.5", + "@backstage/plugin-github-pull-requests-board": "0.1.10", + "@backstage/plugin-gitops-profiles": "0.3.34", + "@backstage/plugin-gocd": "0.1.22", + "@backstage/plugin-graphiql": "0.2.48", + "@backstage/plugin-graphql-backend": "0.1.33", + "@backstage/plugin-graphql-voyager": "0.1.1", + "@backstage/plugin-home": "0.4.32", + "@backstage/plugin-ilert": "0.2.5", + "@backstage/plugin-jenkins": "0.7.15", + "@backstage/plugin-jenkins-backend": "0.1.33", + "@backstage/plugin-jenkins-common": "0.1.14", + "@backstage/plugin-kafka": "0.3.16", + "@backstage/plugin-kafka-backend": "0.2.36", + "@backstage/plugin-kubernetes": "0.7.9", + "@backstage/plugin-kubernetes-backend": "0.9.4", + "@backstage/plugin-kubernetes-common": "0.6.1", + "@backstage/plugin-lighthouse": "0.4.1", + "@backstage/plugin-lighthouse-backend": "0.1.1", + "@backstage/plugin-lighthouse-common": "0.1.1", + "@backstage/plugin-linguist": "0.1.1", + "@backstage/plugin-linguist-backend": "0.2.0", + "@backstage/plugin-linguist-common": "0.1.0", + "@backstage/plugin-microsoft-calendar": "0.1.1", + "@backstage/plugin-newrelic": "0.3.34", + "@backstage/plugin-newrelic-dashboard": "0.2.9", + "@backstage/plugin-octopus-deploy": "0.1.0", + "@backstage/plugin-org": "0.6.6", + "@backstage/plugin-org-react": "0.1.5", + "@backstage/plugin-pagerduty": "0.5.9", + "@backstage/plugin-periskop": "0.1.14", + "@backstage/plugin-periskop-backend": "0.1.14", + "@backstage/plugin-permission-backend": "0.5.18", + "@backstage/plugin-permission-common": "0.7.4", + "@backstage/plugin-permission-node": "0.7.6", + "@backstage/plugin-permission-react": "0.4.11", + "@backstage/plugin-playlist": "0.1.7", + "@backstage/plugin-playlist-backend": "0.2.6", + "@backstage/plugin-playlist-common": "0.1.5", + "@backstage/plugin-proxy-backend": "0.2.37", + "@backstage/plugin-rollbar": "0.4.16", + "@backstage/plugin-rollbar-backend": "0.1.40", + "@backstage/plugin-scaffolder": "1.12.0", + "@backstage/plugin-scaffolder-backend": "1.12.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.18", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.11", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.3", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.16", + "@backstage/plugin-scaffolder-common": "1.2.6", + "@backstage/plugin-scaffolder-node": "0.1.1", + "@backstage/plugin-scaffolder-react": "1.2.0", + "@backstage/plugin-search": "1.1.1", + "@backstage/plugin-search-backend": "1.2.4", + "@backstage/plugin-search-backend-module-elasticsearch": "1.1.4", + "@backstage/plugin-search-backend-module-pg": "0.5.4", + "@backstage/plugin-search-backend-node": "1.1.4", + "@backstage/plugin-search-common": "1.2.2", + "@backstage/plugin-search-react": "1.5.1", + "@backstage/plugin-sentry": "0.5.1", + "@backstage/plugin-shortcuts": "0.3.8", + "@backstage/plugin-sonarqube": "0.6.5", + "@backstage/plugin-sonarqube-backend": "0.1.8", + "@backstage/plugin-sonarqube-react": "0.1.4", + "@backstage/plugin-splunk-on-call": "0.4.5", + "@backstage/plugin-stack-overflow": "0.1.12", + "@backstage/plugin-stack-overflow-backend": "0.1.12", + "@backstage/plugin-stackstorm": "0.1.0", + "@backstage/plugin-tech-insights": "0.3.8", + "@backstage/plugin-tech-insights-backend": "0.5.9", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.27", + "@backstage/plugin-tech-insights-common": "0.2.10", + "@backstage/plugin-tech-insights-node": "0.4.1", + "@backstage/plugin-tech-radar": "0.6.2", + "@backstage/plugin-techdocs": "1.6.0", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.11", + "@backstage/plugin-techdocs-backend": "1.6.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.0.11", + "@backstage/plugin-techdocs-node": "1.6.0", + "@backstage/plugin-techdocs-react": "1.1.4", + "@backstage/plugin-todo": "0.2.18", + "@backstage/plugin-todo-backend": "0.1.40", + "@backstage/plugin-user-settings": "0.7.1", + "@backstage/plugin-user-settings-backend": "0.1.7", + "@backstage/plugin-vault": "0.1.10", + "@backstage/plugin-vault-backend": "0.2.10", + "@backstage/plugin-xcmetrics": "0.2.36" + }, + "changesets": [] +} From 89a1988194085a43701dd9e2e2c0372b860696f8 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 11:19:53 +0100 Subject: [PATCH 157/511] chore: prettier Signed-off-by: blam --- microsite/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 59441d6e58..04327424f9 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -122,7 +122,7 @@ module.exports = { }, { from: '/getting-involved', - to: '/docs/getting-started/getting-involved' + to: '/docs/getting-started/getting-involved', }, ], }, From 76b1c126bd1b3571abe701d9a7bcb0647d963434 Mon Sep 17 00:00:00 2001 From: dlaird-ovo Date: Wed, 15 Mar 2023 10:20:41 +0000 Subject: [PATCH 158/511] fixing up api-report.md Signed-off-by: dlaird-ovo --- plugins/catalog/api-report.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 5a81ea8d76..c678ce1d3d 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -433,11 +433,6 @@ export function isComponentType( types: string | string[], ): (entity: Entity) => boolean; -// @public -export function isResourceType( - types: string | string[], -): (entity: Entity) => boolean; - // @public export function isKind(kinds: string | string[]): (entity: Entity) => boolean; @@ -449,6 +444,11 @@ export function isNamespace( // @public export function isOrphan(entity: Entity): boolean; +// @public +export function isResourceType( + types: string | string[], +): (entity: Entity) => boolean; + // @public (undocumented) export type PluginCatalogComponentsNameToClassKey = { PluginCatalogEntityLinksEmptyState: EntityLinksEmptyStateClassKey; From 36e80c1f0b149bdafaa003fc7cfe353726bdf870 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Wed, 15 Mar 2023 11:22:11 +0100 Subject: [PATCH 159/511] Update docs/releases/v1.12.0.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Ben Lambert --- docs/releases/v1.12.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases/v1.12.0.md b/docs/releases/v1.12.0.md index da163ea4ae..789be8beca 100644 --- a/docs/releases/v1.12.0.md +++ b/docs/releases/v1.12.0.md @@ -26,7 +26,7 @@ Added by [@vinzscam](https://github.com/vinzscam) in [#12246](https://github.com ### Renamed backend system related plugin exports -As we settle the new backend system bit by bit, we have renamed a number of exports from individual plugins, to match the new [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). If you are already leveraging the new backend system, you may find that you need to update some imports. For example, `githubEntityProviderCatalogModule` was renamed to `catalogModuleGithubEntityProvider`. These were considered non-breaking since they are still in alpha. More details can be found in #16760 and #16764. +As we settle the new backend system bit by bit, we have renamed a number of exports from individual plugins, to match the new [recommended naming patterns](https://backstage.io/docs/backend-system/architecture/naming-patterns). If you are already leveraging the new backend system, you may find that you need to update some imports. For example, `githubEntityProviderCatalogModule` was renamed to `catalogModuleGithubEntityProvider`. These were considered non-breaking since they are still in alpha. More details can be found in [#16760](https://github.com/backstage/backstage/pull/16760) and [#16764](https://github.com/backstage/backstage/pull/16764). ### New plugin: `catalog-backend` `puppetdb` module From bf3c5a655ccd63f9ff0023143ea8d3977dc87de1 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 16:29:55 +0530 Subject: [PATCH 160/511] codeowners modified Signed-off-by: Abhay-soni-developer --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 90ce81f73c..e7bdaa8b69 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -62,7 +62,7 @@ yarn.lock @backstage/maintainers @back /plugins/kafka-backend @backstage/maintainers @nirga @andrewthauer /plugins/kubernetes @backstage/maintainers @backstage/warpspeed /plugins/kubernetes-* @backstage/maintainers @backstage/warpspeed -/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @statusNeo +/plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @NishkarshRaj /plugins/newrelic-dashboard @backstage/maintainers @mufaddal7 /plugins/playlist @backstage/maintainers @kuangp /plugins/playlist-* @backstage/maintainers @kuangp From 44e3878a8d797892a83d065dfb478e56955ae011 Mon Sep 17 00:00:00 2001 From: dlaird-ovo Date: Wed, 15 Mar 2023 11:22:24 +0000 Subject: [PATCH 161/511] Fix review feedback Signed-off-by: dlaird-ovo --- .../components/EntitySwitch/conditions.test.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts index 079a6f5943..5d8c7c8898 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts @@ -24,18 +24,25 @@ import { const kubernetesClusterResource: Entity = { apiVersion: '', - kind: 'resource', + kind: 'Resource', metadata: { name: 'aKubernetesCluster' }, spec: { type: 'kubernetes-cluster' }, }; const databaseResource: Entity = { apiVersion: '', - kind: 'resource', + kind: 'Resource', metadata: { name: 'aDatabase' }, spec: { type: 'database' }, }; +const notResource: Entity = { + apiVersion: '', + kind: 'not-Resource', + metadata: { name: 'aService' }, + spec: { type: 'service' }, +}; + const serviceComponent: Entity = { apiVersion: '', kind: 'component', @@ -79,10 +86,10 @@ const bNamespace: Entity = { }; describe('isResourceType', () => { - it('should false on non component kinds', () => { - const checkEntity = isResourceType('service'); + it('should false on non resource kinds', () => { + const checkEntity = isResourceType('kubernetes-cluster'); - expect(checkEntity(notComponent)).not.toBeTruthy(); + expect(checkEntity(notResource)).not.toBeTruthy(); }); it('should check for the intended type', () => { const checkEntity = isResourceType('kubernetes-cluster'); From 3382cafa9e5ad0a38b8f91170bf241bbdcf2d639 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Wed, 15 Mar 2023 12:27:03 +0100 Subject: [PATCH 162/511] Set @backstage/sharks to CODEOWNERS for CLI onboard command Signed-off-by: Philipp Hugenroth --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 010af451af..4d375a76f2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,6 +13,7 @@ yarn.lock @backstage/maintainers @back /docs/features/search @backstage/techdocs-core /docs/features/techdocs @backstage/techdocs-core /docs/plugins/integrating-search-into-plugins.md @backstage/techdocs-core +/packages/cli/src/commands/onboard @backstage/sharks /packages/techdocs-cli @backstage/techdocs-core /packages/techdocs-cli-embedded-app @backstage/techdocs-core /plugins/adr @backstage/maintainers @kuangp From f156c539e778b3f7257b851b3e45c49fdc39d03b Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 13:13:44 +0100 Subject: [PATCH 163/511] chore: drop multiple buttons Signed-off-by: blam --- microsite/src/pages/plugins/_pluginCard.tsx | 2 +- microsite/src/pages/plugins/plugins.module.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/microsite/src/pages/plugins/_pluginCard.tsx b/microsite/src/pages/plugins/_pluginCard.tsx index 99f27b865d..7eeb86af0a 100644 --- a/microsite/src/pages/plugins/_pluginCard.tsx +++ b/microsite/src/pages/plugins/_pluginCard.tsx @@ -35,7 +35,7 @@ export const PluginCard = ({ by {author}

- + {category} diff --git a/microsite/src/pages/plugins/plugins.module.scss b/microsite/src/pages/plugins/plugins.module.scss index d21444583a..bb08c2fd33 100644 --- a/microsite/src/pages/plugins/plugins.module.scss +++ b/microsite/src/pages/plugins/plugins.module.scss @@ -30,4 +30,8 @@ display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); } + + :global(.fit-content) { + width: fit-content; + } } From 177ab4b4a964f027d546569501688aa240061402 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 17:54:38 +0530 Subject: [PATCH 164/511] adding microsoft calendar plugin to backstage marketplace Signed-off-by: Abhay-soni-developer --- microsite/data/plugins/microsoft-calendar.yaml | 17 +++++++++++++++++ microsite/static/img/statusneo-logo.jpeg | Bin 0 -> 5171 bytes 2 files changed, 17 insertions(+) create mode 100644 microsite/data/plugins/microsoft-calendar.yaml create mode 100644 microsite/static/img/statusneo-logo.jpeg diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml new file mode 100644 index 0000000000..c0df66c418 --- /dev/null +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -0,0 +1,17 @@ +--- +title: Microsoft Calendar +author: StatusNeo +authorUrl: https://statusneo.com/ +category: Productivity +description: | + The plugin integrates with your Microsoft Calendar. + It displays all your calendars and events in it. +documentation: https://statusneo.com/23392-2 +iconUrl: img/statusneo-logo.jpeg +npmPackageName: '@backstage/plugin-microsoft-calendar' +tags: + - Microsoft + - calendar + - StatusNeo + - Management +addedDate: '2023-03-015' diff --git a/microsite/static/img/statusneo-logo.jpeg b/microsite/static/img/statusneo-logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..536e5e8a99830eaa8639250a97f3b3aabca42a72 GIT binary patch literal 5171 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 B$)W%N literal 0 HcmV?d00001 From c9a0fdcd2c83253488afdae62ed46f1088755674 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 15 Mar 2023 12:27:35 +0000 Subject: [PATCH 165/511] update imports for deprecated types Signed-off-by: Brian Fletcher --- .changeset/khaki-guests-turn.md | 9 +++++++++ .../src/processors/LdapOrgReaderProcessor.ts | 2 +- .../src/processors/MicrosoftGraphOrgReaderProcessor.ts | 2 +- .../src/OpenApiRefProcessor.ts | 6 ++---- .../src/modules/core/LocationEntityProcessor.test.ts | 2 +- .../src/processor/ScaffolderEntitiesProcessor.ts | 4 ++-- 6 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 .changeset/khaki-guests-turn.md diff --git a/.changeset/khaki-guests-turn.md b/.changeset/khaki-guests-turn.md new file mode 100644 index 0000000000..5676236aae --- /dev/null +++ b/.changeset/khaki-guests-turn.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-backend-module-openapi': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-catalog-backend': patch +--- + +Fix deprecated types. diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts index 9c5442ca0c..00578ac3a4 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts @@ -27,9 +27,9 @@ import { import { CatalogProcessor, CatalogProcessorEmit, - LocationSpec, processingResult, } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; /** * Extracts teams and users out of an LDAP server. diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 2beef51c31..d9119a3c4d 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -18,9 +18,9 @@ import { Config } from '@backstage/config'; import { CatalogProcessor, CatalogProcessorEmit, - LocationSpec, processingResult, } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { GroupTransformer, diff --git a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts index 9dcadad61d..6b00519b2f 100644 --- a/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts +++ b/plugins/catalog-backend-module-openapi/src/OpenApiRefProcessor.ts @@ -17,10 +17,8 @@ import { UrlReader } from '@backstage/backend-common'; import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { - CatalogProcessor, - LocationSpec, -} from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { bundleFileWithRefs } from './lib'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts index 68c073eb0a..5e000f87d6 100644 --- a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts @@ -21,7 +21,7 @@ import { } from '@backstage/integration'; import path from 'path'; import { toAbsoluteUrl } from './LocationEntityProcessor'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; describe('LocationEntityProcessor', () => { describe('toAbsoluteUrl', () => { diff --git a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts b/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts index d095b77b4c..1de381a8ff 100644 --- a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts +++ b/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts @@ -24,9 +24,9 @@ import { import { CatalogProcessor, CatalogProcessorEmit, - LocationSpec, processingResult, -} from '@backstage/plugin-catalog-backend'; +} from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { TemplateEntityV1beta3, templateEntityV1beta3Validator, From b933e6a8630cc1c09cc65fe612c99b0c0c50f984 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 13:28:02 +0100 Subject: [PATCH 166/511] chore: pretty Signed-off-by: blam --- microsite/src/pages/plugins/_pluginCard.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/microsite/src/pages/plugins/_pluginCard.tsx b/microsite/src/pages/plugins/_pluginCard.tsx index 7eeb86af0a..d6b4017db5 100644 --- a/microsite/src/pages/plugins/_pluginCard.tsx +++ b/microsite/src/pages/plugins/_pluginCard.tsx @@ -35,9 +35,7 @@ export const PluginCard = ({ by {author}

- - {category} - + {category} } body={

{description}

} From c5f396ccf919c138dc023014f3cf376234278ef8 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 15 Mar 2023 12:46:09 +0000 Subject: [PATCH 167/511] api reports Signed-off-by: Brian Fletcher --- plugins/catalog-backend-module-ldap/api-report.md | 2 +- plugins/catalog-backend-module-ldap/package.json | 1 + plugins/catalog-backend-module-msgraph/api-report.md | 2 +- plugins/catalog-backend-module-msgraph/package.json | 1 + plugins/catalog-backend-module-openapi/api-report.md | 4 ++-- plugins/catalog-backend-module-openapi/package.json | 1 + plugins/scaffolder-backend/api-report.md | 8 ++++---- plugins/scaffolder-backend/package.json | 1 + yarn.lock | 4 ++++ 9 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.md index 088e34fc34..997ad55560 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/api-report.md @@ -11,7 +11,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { SearchEntry } from 'ldapjs'; import { SearchOptions } from 'ldapjs'; diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index d483baa914..84f5ea88d2 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -36,6 +36,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@types/ldapjs": "^2.2.0", diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index bde8c06fbb..3e4d8d99bc 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -9,7 +9,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 3201e0b8d4..9df7e8f361 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -51,6 +51,7 @@ "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", diff --git a/plugins/catalog-backend-module-openapi/api-report.md b/plugins/catalog-backend-module-openapi/api-report.md index c2af9cbe01..455816645a 100644 --- a/plugins/catalog-backend-module-openapi/api-report.md +++ b/plugins/catalog-backend-module-openapi/api-report.md @@ -3,11 +3,11 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { PlaceholderResolverParams } from '@backstage/plugin-catalog-backend'; import { ScmIntegrations } from '@backstage/integration'; diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 6bb9d66ec5..948409a11c 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -38,6 +38,7 @@ "@backstage/config": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "winston": "^3.2.1", diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 452689c2ea..b732770a59 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -7,8 +7,8 @@ import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-node'; import { CatalogApi } from '@backstage/catalog-client'; -import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; import { Entity } from '@backstage/catalog-model'; @@ -18,7 +18,7 @@ import { IdentityApi } from '@backstage/plugin-auth-node'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { Knex } from 'knex'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { Observable } from '@backstage/types'; import { Octokit } from 'octokit'; @@ -507,7 +507,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'update' | 'delete' | 'create' | undefined; + commitAction?: 'update' | 'create' | 'delete' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index d7eae0580a..2e9acd4033 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -56,6 +56,7 @@ "@backstage/integration": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", diff --git a/yarn.lock b/yarn.lock index ee7146e5d6..85228167d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5032,6 +5032,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/ldapjs": ^2.2.0 @@ -5055,6 +5056,7 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@microsoft/microsoft-graph-types": ^2.6.0 "@types/lodash": ^4.14.151 @@ -5082,6 +5084,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" openapi-types: ^12.0.0 @@ -7489,6 +7492,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" From 96f2a8919d94e56e3e6984908bf87fc9f34b26fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 15 Mar 2023 13:47:53 +0100 Subject: [PATCH 168/511] remove extra file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- microsite/pages/en/plugins.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 microsite/pages/en/plugins.js diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js deleted file mode 100644 index e69de29bb2..0000000000 From 7ff9fb642f98cee6e702b6df0c37593a4df41341 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 13:57:24 +0100 Subject: [PATCH 169/511] chore: redirect needs to be done like this as it's top level Signed-off-by: blam --- microsite/docusaurus.config.js | 4 ---- microsite/src/pages/getting-involved/index.tsx | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 microsite/src/pages/getting-involved/index.tsx diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 7edfed5e83..b7d8453e21 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -120,10 +120,6 @@ module.exports = { from: '/docs/features/search/search-overview', to: '/docs/features/search/', }, - { - from: '/getting-involved', - to: '/docs/getting-started/getting-involved', - }, ], }, ], diff --git a/microsite/src/pages/getting-involved/index.tsx b/microsite/src/pages/getting-involved/index.tsx new file mode 100644 index 0000000000..f5702706a6 --- /dev/null +++ b/microsite/src/pages/getting-involved/index.tsx @@ -0,0 +1,6 @@ +import React from 'react'; +import { Redirect } from "@docusaurus/router" + +export default () => { + return +} From 07c98b361bd399ad16e7c6bdfc95b13608754965 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 13:57:48 +0100 Subject: [PATCH 170/511] chore: fixing prettier Signed-off-by: blam --- microsite/src/pages/getting-involved/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/src/pages/getting-involved/index.tsx b/microsite/src/pages/getting-involved/index.tsx index f5702706a6..d838f5d25b 100644 --- a/microsite/src/pages/getting-involved/index.tsx +++ b/microsite/src/pages/getting-involved/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Redirect } from "@docusaurus/router" +import { Redirect } from '@docusaurus/router'; export default () => { - return -} + return ; +}; From ad0d4ecefd077b6f82356d941ba16e60e998c0db Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 15 Mar 2023 14:00:53 +0000 Subject: [PATCH 171/511] try fix api report Signed-off-by: Brian Fletcher --- plugins/scaffolder-backend/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index b732770a59..644fd79f78 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -507,7 +507,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'update' | 'create' | 'delete' | undefined; + commitAction?: 'update' | 'delete' | 'create' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; From ff8212e40a7c0d00db9542ff456de28ef28f1278 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:07:10 +0000 Subject: [PATCH 172/511] fix(deps): update dependency @gitbeaker/browser to v35.8.1 Signed-off-by: Renovate Bot --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3e3833a50b..f56c47527c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9755,28 +9755,28 @@ __metadata: linkType: hard "@gitbeaker/browser@npm:^35.6.0": - version: 35.8.0 - resolution: "@gitbeaker/browser@npm:35.8.0" + version: 35.8.1 + resolution: "@gitbeaker/browser@npm:35.8.1" dependencies: - "@gitbeaker/core": ^35.8.0 - "@gitbeaker/requester-utils": ^35.8.0 + "@gitbeaker/core": ^35.8.1 + "@gitbeaker/requester-utils": ^35.8.1 delay: ^5.0.0 ky: 0.28.7 - checksum: 23fa14d64661108c03a5d141123037aebb68e257d84e26bd8f6241df65a0958eaa79b8b491e0f08159e325cdc3244f79b2426dedcc2354ad106316ea499415ac + checksum: 8a76322cfd19da3d691fb08c7ebc79971da02cfb950841578523f20de02cb5e2dcf9741eca048dfa17d6a9620eb4884c9a29d84a230ba9c8d18fc528deb830cd languageName: node linkType: hard -"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.0": - version: 35.8.0 - resolution: "@gitbeaker/core@npm:35.8.0" +"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.0, @gitbeaker/core@npm:^35.8.1": + version: 35.8.1 + resolution: "@gitbeaker/core@npm:35.8.1" dependencies: - "@gitbeaker/requester-utils": ^35.8.0 + "@gitbeaker/requester-utils": ^35.8.1 form-data: ^4.0.0 li: ^1.3.0 mime: ^3.0.0 query-string: ^7.0.0 xcase: ^2.0.1 - checksum: b894e1ac86dc8ac85f2db51d83d392899c10bb555b2448900f502ffeb49d9f36c1063c7151128ca96951ac472c11be6320584c4bec873501e96607bd7c25a37b + checksum: 8fc7b8d32a2162b70fd8e8ec4e019a3654da3fd1bcb7204b5030e8c9b4af52f4e7addafcd5503042e31dd4e4e3bdd7f8245dd963c77427d4471ab2e331266cf7 languageName: node linkType: hard @@ -9793,14 +9793,14 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/requester-utils@npm:^35.8.0": - version: 35.8.0 - resolution: "@gitbeaker/requester-utils@npm:35.8.0" +"@gitbeaker/requester-utils@npm:^35.8.0, @gitbeaker/requester-utils@npm:^35.8.1": + version: 35.8.1 + resolution: "@gitbeaker/requester-utils@npm:35.8.1" dependencies: form-data: ^4.0.0 qs: ^6.10.1 xcase: ^2.0.1 - checksum: 6bd49b821fb6f262c6306c06fc4812f41902c864a7d941b0d112381b352f680e50ebd6180840e21a89d761427cb1326d9829b74c98c95bf9fa2a5d53872a400a + checksum: c3c94ad90dab481887380f5bcff0416c1e1eee935fc3ca4f12d8db83d85c5f0d47f7f35cee6f2b05491bda99c03fb7eb88b849c986822eae3b1bfc26641ec899 languageName: node linkType: hard From 6b23db2b811a1e813fb088621ede07818bbc6073 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Wed, 15 Mar 2023 15:09:03 +0100 Subject: [PATCH 173/511] Update packages/cli/src/commands/onboard/README.md Co-authored-by: Johan Haals Signed-off-by: Philipp Hugenroth --- packages/cli/src/commands/onboard/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/onboard/README.md b/packages/cli/src/commands/onboard/README.md index 8ab2d5f795..0fb4d22666 100644 --- a/packages/cli/src/commands/onboard/README.md +++ b/packages/cli/src/commands/onboard/README.md @@ -1,4 +1,4 @@ -# admin tool +# onboard ## Local dev From 0f5de31cb116d7d35681ac7e48179199cea4e73e Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 19:54:22 +0530 Subject: [PATCH 174/511] adding statusneo github plugin in backstage marketplace Signed-off-by: Abhay-soni-developer --- .../data/plugins/statusneo-github-plugin.yaml | 15 +++++++++++++++ microsite/static/img/github-statusneo.png | Bin 0 -> 15936 bytes 2 files changed, 15 insertions(+) create mode 100644 microsite/data/plugins/statusneo-github-plugin.yaml create mode 100644 microsite/static/img/github-statusneo.png diff --git a/microsite/data/plugins/statusneo-github-plugin.yaml b/microsite/data/plugins/statusneo-github-plugin.yaml new file mode 100644 index 0000000000..94b182cdb0 --- /dev/null +++ b/microsite/data/plugins/statusneo-github-plugin.yaml @@ -0,0 +1,15 @@ +title: Statusneo Github Plugin +author: Statusneo +authorUrl: https://statusneo.com/ +category: GitHub +description: | + This plugin integrates with github and brings the logged in user data. + It contains actions table and pull request table. +documentation: https://statusneo.com/23468-2/ +iconUrl: /img/github-statusneo.png +npmPackageName: '@statusneo/backstage-plugin-github' +tags: + - GitHub + - Monitoring + - Productivity +addedDate: '2023-02-15' diff --git a/microsite/static/img/github-statusneo.png b/microsite/static/img/github-statusneo.png new file mode 100644 index 0000000000000000000000000000000000000000..927ace351a4b99c1508d72e08d3b7d3074644d1e GIT binary patch literal 15936 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 Sb)fIvz$nV9$y7<1zxzLTTHOr* literal 0 HcmV?d00001 From 8db98416acfa3875abaaa9c6d369ad374b3cb6cc Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 20:02:20 +0530 Subject: [PATCH 175/511] modifying icon Signed-off-by: Abhay-soni-developer --- microsite/data/plugins/microsoft-calendar.yaml | 4 ++-- microsite/static/img/outlook-statusneo.png | Bin 0 -> 35104 bytes microsite/static/img/statusneo-logo.jpeg | Bin 5171 -> 0 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 microsite/static/img/outlook-statusneo.png delete mode 100644 microsite/static/img/statusneo-logo.jpeg diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index c0df66c418..42d50bb74b 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -7,11 +7,11 @@ description: | The plugin integrates with your Microsoft Calendar. It displays all your calendars and events in it. documentation: https://statusneo.com/23392-2 -iconUrl: img/statusneo-logo.jpeg +iconUrl: /img/outlook-statusneo.png npmPackageName: '@backstage/plugin-microsoft-calendar' tags: - Microsoft - calendar - StatusNeo - Management -addedDate: '2023-03-015' +addedDate: '2023-03-15' diff --git a/microsite/static/img/outlook-statusneo.png b/microsite/static/img/outlook-statusneo.png new file mode 100644 index 0000000000000000000000000000000000000000..99e3b6a0bcc92d05550248e7584e2d4326e9a24b GIT binary patch literal 35104 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 literal 0 HcmV?d00001 diff --git a/microsite/static/img/statusneo-logo.jpeg b/microsite/static/img/statusneo-logo.jpeg deleted file mode 100644 index 536e5e8a99830eaa8639250a97f3b3aabca42a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5171 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 B$)W%N From 3023b49d10b66198583c3b2052267157f8a8e01c Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 20:24:56 +0530 Subject: [PATCH 176/511] yaml prettier run Signed-off-by: Abhay-soni-developer --- microsite/data/plugins/microsoft-calendar.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index 42d50bb74b..80844d7096 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -5,13 +5,13 @@ authorUrl: https://statusneo.com/ category: Productivity description: | The plugin integrates with your Microsoft Calendar. - It displays all your calendars and events in it. + It displays all your calendars and events in it. documentation: https://statusneo.com/23392-2 iconUrl: /img/outlook-statusneo.png -npmPackageName: '@backstage/plugin-microsoft-calendar' +npmPackageName: "@backstage/plugin-microsoft-calendar" tags: - Microsoft - calendar - StatusNeo - Management -addedDate: '2023-03-15' +addedDate: "2023-03-15" From 04843c8e129353f447ebb4bad3150dab189e5945 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 15 Mar 2023 12:03:11 -0400 Subject: [PATCH 177/511] fix(docs): Special encoding not needed in code fence examples Signed-off-by: Adam Harvey --- docs/local-dev/cli-commands.md | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/local-dev/cli-commands.md b/docs/local-dev/cli-commands.md index 8c1e061237..c4c057ffe6 100644 --- a/docs/local-dev/cli-commands.md +++ b/docs/local-dev/cli-commands.md @@ -73,7 +73,7 @@ Build packages in the project, excluding bundled app and backend packages. Options: --all Build all packages, including bundled app and backend packages. - --since <ref> Only build packages and their dev dependents that changed since the specified ref + --since Only build packages and their dev dependents that changed since the specified ref ``` ## repo lint @@ -86,8 +86,8 @@ Usage: backstage-cli repo lint [options] Lint all packages in the project Options: - --format <format> Lint report output format (default: "eslint-formatter-friendly") - --since <ref> Only lint packages that changed since the specified ref + --format Lint report output format (default: "eslint-formatter-friendly") + --since Only lint packages that changed since the specified ref --fix Attempt to automatically fix violations ``` @@ -101,8 +101,8 @@ Usage: backstage-cli package start [options] Start a package for local development Options: - --config <path> Config files to load instead of app-config.yaml (default: []) - --role <name> Run the command with an explicit package role + --config Config files to load instead of app-config.yaml (default: []) + --role Run the command with an explicit package role --check Enable type checking and linting if available --inspect Enable debugger in Node.js environments --inspect-brk Enable debugger in Node.js environments, breaking before code starts @@ -118,11 +118,11 @@ Usage: backstage-cli package build [options] Build a package for production deployment or publishing Options: - --role <name> Run the command with an explicit package role + --role Run the command with an explicit package role --minify Minify the generated code. Does not apply to app or backend packages. --skip-build-dependencies Skip the automatic building of local dependencies. Applies to backend packages only. --stats If bundle stats are available, write them to the output directory. Applies to app packages only. - --config <path> Config files to load instead of app-config.yaml. Applies to app packages only. (default: []) + --config Config files to load instead of app-config.yaml. Applies to app packages only. (default: []) ``` ## package lint @@ -138,7 +138,7 @@ Usage: backstage-cli package lint [options] Lint a package Options: - --format <format> Lint report output format (default: "eslint-formatter-friendly") + --format Lint report output format (default: "eslint-formatter-friendly") --fix Attempt to automatically fix violations ``` @@ -227,10 +227,10 @@ that owns the app repo. For example you may have it set up like this: Usage: backstage-cli create [options] Options: - --select <name> Select the thing you want to be creating upfront - --option <name>=<value> Pre-fill options for the creation process (default: []) - --scope <scope> The scope to use for new packages - --npm-registry <URL> The package registry to use for new packages + --select Select the thing you want to be creating upfront + --option = Pre-fill options for the creation process (default: []) + --scope The scope to use for new packages + --npm-registry The package registry to use for new packages --no-private Do not mark new packages as private -h, --help display help for command ``` @@ -248,7 +248,7 @@ Usage: backstage-cli config:docs [options] Browse the configuration reference documentation Options: - --package <name> Only include the schema that applies to the given package + --package Only include the schema that applies to the given package -h, --help display help for command ``` @@ -268,12 +268,12 @@ yarn backstage-cli config:print --frontend --package my-app Usage: backstage-cli config:print [options] Options: - --package <name> Only load config schema that applies to the given package + --package Only load config schema that applies to the given package --lax Do not require environment variables to be set --frontend Print only the frontend configuration --with-secrets Include secrets in the printed configuration - --format <format> Format to print the configuration in, either json or yaml [yaml] - --config <path> Config files to load instead of app-config.yaml (default: []) + --format Format to print the configuration in, either json or yaml [yaml] + --config Config files to load instead of app-config.yaml (default: []) -h, --help display help for command ``` @@ -287,11 +287,11 @@ local packages in the repo. Usage: backstage-cli config:check [options] Options: - --package <name> Only load config schema that applies to the given package + --package Only load config schema that applies to the given package --lax Do not require environment variables to be set --frontend Only validate the frontend configuration --deprecated List all deprecated configuration settings - --config <path> Config files to load instead of app-config.yaml (default: []) + --config Config files to load instead of app-config.yaml (default: []) -h, --help display help for command ``` @@ -309,8 +309,8 @@ Usage: backstage-cli config:schema [options] Print configuration schema Options: - --package <name> Only output config schema that applies to the given package - --format <format> Format to print the schema in, either json or yaml [yaml] + --package Only output config schema that applies to the given package + --format Format to print the schema in, either json or yaml [yaml] -h, --help display help for command ``` @@ -325,8 +325,8 @@ Usage: backstage-cli versions:bump [options] Options: -h, --help display help for command - --pattern <glob> Override glob for matching packages to upgrade - --release <version|next|main> Bump to a specific Backstage release line or version (default: "main") + --pattern Override glob for matching packages to upgrade + --release Bump to a specific Backstage release line or version (default: "main") ``` ## versions:check From fc6cab4eb487e04b7397744958bbceccc8423bf9 Mon Sep 17 00:00:00 2001 From: Brian Phillips <28457+brianphillips@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:09:52 -0500 Subject: [PATCH 178/511] Add isEntityWith helper method to EntitySwitch conditions This will make it easier to conditionally show content for a given entity based on the `spec.type` field beyond just component entities (e.g. api, group and resource, all have a spec.type field) Signed-off-by: Brian Phillips <28457+brianphillips@users.noreply.github.com> --- .changeset/soft-roses-cover.md | 5 +++ docs/plugins/composability.md | 2 +- .../EntitySwitch/conditions.test.ts | 19 ++++++++ .../src/components/EntitySwitch/conditions.ts | 45 ++++++++++++------- 4 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 .changeset/soft-roses-cover.md diff --git a/.changeset/soft-roses-cover.md b/.changeset/soft-roses-cover.md new file mode 100644 index 0000000000..50a328729a --- /dev/null +++ b/.changeset/soft-roses-cover.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +Added isEntityWith condition helper diff --git a/docs/plugins/composability.md b/docs/plugins/composability.md index 1c64fd3f68..124a612f26 100644 --- a/docs/plugins/composability.md +++ b/docs/plugins/composability.md @@ -480,7 +480,7 @@ function isKind(kind: string) { ``` The `@backstage/catalog` plugin provides a couple of built-in conditions, -`isKind`, `isComponentType`, and `isNamespace`. +`isKind`, `isComponentType`, `isResourceType`, `isEntityWith`, and `isNamespace`. In addition to the `EntitySwitch` component, the catalog plugin also exports a new `EntityLayout` component. It is a tweaked version and replacement for the diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts index 5d8c7c8898..a0485c6a59 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts @@ -20,6 +20,7 @@ import { isKind, isNamespace, isResourceType, + isEntityWith, } from './conditions'; const kubernetesClusterResource: Entity = { @@ -64,6 +65,13 @@ const notComponent: Entity = { spec: { type: 'service' }, }; +const missingSpecType: Entity = { + apiVersion: '', + kind: 'another-type', + metadata: { name: 'anEntity' }, + spec: {}, +}; + const apiKind: Entity = { apiVersion: '', kind: 'api', @@ -125,6 +133,17 @@ describe('isComponentType', () => { }); }); +describe('isEntityWith', () => { + it('allows for a kind-only check (empty type array)', () => { + const checkEntity = isEntityWith({kind: 'api', type: []}); + expect(checkEntity(apiKind)).toBeTruthy(); + }); + it('handles missing spec.type field', () => { + const checkEntity = isEntityWith({kind: 'another-type', type: 'service'}); + expect(checkEntity(missingSpecType)).not.toBeTruthy(); + }); +}); + describe('isKind', () => { it('should check for the intended kind', () => { const checkEntity = isKind('component'); diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 222a76b0a9..0ffd9c0b01 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -14,11 +14,12 @@ * limitations under the License. */ -import { - ComponentEntity, - ResourceEntity, - Entity, -} from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; + +export interface EntityPredicates { + kind: string | string[]; + type?: string | string[]; +} function strCmp(a: string | undefined, b: string | undefined): boolean { return Boolean( @@ -37,7 +38,7 @@ function strCmpAll(value: string | undefined, cmpValues: string | string[]) { * @public */ export function isKind(kinds: string | string[]) { - return (entity: Entity) => strCmpAll(entity.kind, kinds); + return isEntityWith({kind: kinds}); } /** @@ -45,13 +46,7 @@ export function isKind(kinds: string | string[]) { * @public */ export function isComponentType(types: string | string[]) { - return (entity: Entity) => { - if (!strCmp(entity.kind, 'component')) { - return false; - } - const componentEntity = entity as ComponentEntity; - return strCmpAll(componentEntity.spec.type, types); - }; + return isEntityWith({ kind: 'component', type: types }); } /** @@ -59,15 +54,33 @@ export function isComponentType(types: string | string[]) { * @public */ export function isResourceType(types: string | string[]) { + return isEntityWith({ kind: 'resource', type: types }); +} + +/** + * + * For use in EntitySwitch.Case. Matches if the entity is the specified kind and type (if present). + * @public + */ +export function isEntityWith(predicate: EntityPredicates) { return (entity: Entity) => { - if (!strCmp(entity.kind, 'resource')) { + if (!strCmpAll(entity.kind, predicate.kind)) { return false; } - const resourceEntity = entity as ResourceEntity; - return strCmpAll(resourceEntity.spec.type, types); + + if (!predicate.type || (Array.isArray(predicate.type) && predicate.type.length === 0)) { + // there's no type check, return true + return true; + } else if (typeof entity.spec?.type !== 'string') { + // we'll reject any entity's with some non-string (including undefined/null) spec.type value + return false; + } + + return strCmpAll(entity.spec.type, predicate.type); }; } + /** * For use in EntitySwitch.Case. Matches if the entity is in a given namespace. * @public From da16cb69945255e28766179d36dabb9c2a65fc29 Mon Sep 17 00:00:00 2001 From: Brian Phillips <28457+brianphillips@users.noreply.github.com> Date: Wed, 15 Mar 2023 11:26:35 -0500 Subject: [PATCH 179/511] prettier... Signed-off-by: Brian Phillips <28457+brianphillips@users.noreply.github.com> --- .../src/components/EntitySwitch/conditions.test.ts | 4 ++-- plugins/catalog/src/components/EntitySwitch/conditions.ts | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts index a0485c6a59..76e9e7a7a8 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts @@ -135,11 +135,11 @@ describe('isComponentType', () => { describe('isEntityWith', () => { it('allows for a kind-only check (empty type array)', () => { - const checkEntity = isEntityWith({kind: 'api', type: []}); + const checkEntity = isEntityWith({ kind: 'api', type: [] }); expect(checkEntity(apiKind)).toBeTruthy(); }); it('handles missing spec.type field', () => { - const checkEntity = isEntityWith({kind: 'another-type', type: 'service'}); + const checkEntity = isEntityWith({ kind: 'another-type', type: 'service' }); expect(checkEntity(missingSpecType)).not.toBeTruthy(); }); }); diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 0ffd9c0b01..5442a955ae 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -38,7 +38,7 @@ function strCmpAll(value: string | undefined, cmpValues: string | string[]) { * @public */ export function isKind(kinds: string | string[]) { - return isEntityWith({kind: kinds}); + return isEntityWith({ kind: kinds }); } /** @@ -68,7 +68,10 @@ export function isEntityWith(predicate: EntityPredicates) { return false; } - if (!predicate.type || (Array.isArray(predicate.type) && predicate.type.length === 0)) { + if ( + !predicate.type || + (Array.isArray(predicate.type) && predicate.type.length === 0) + ) { // there's no type check, return true return true; } else if (typeof entity.spec?.type !== 'string') { @@ -80,7 +83,6 @@ export function isEntityWith(predicate: EntityPredicates) { }; } - /** * For use in EntitySwitch.Case. Matches if the entity is in a given namespace. * @public From 756c99c81772c6747f1a5d330bd2a55d94d545b6 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 17:34:51 +0100 Subject: [PATCH 180/511] chore: added blog post Signed-off-by: blam --- .../blog/2023-03-15-backstage-turns-3.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 microsite/blog/2023-03-15-backstage-turns-3.md diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.md new file mode 100644 index 0000000000..6fcd47ded0 --- /dev/null +++ b/microsite/blog/2023-03-15-backstage-turns-3.md @@ -0,0 +1,79 @@ +--- +title: Backstage Turns Three! +author: Ben Lambert +authorURL: https://github.com/benjdlambert +authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4 +--- + +**tl;dr** Spotify released Backstage into open source three years ago today. Since then, the community has grown by leaps and bounds to stretch across the globe (and the Discord server!). Now that Backstage is a threenager, the growing pains are real. So, on this birthday, we want to cover our collective efforts to make it easier to adopt and contribute to Backstage. + + + +## They grow up so fast, don’t they? + +Happy birthday, Backstage! Three years ago, Spotify released its homegrown developer portal into the wild after a small team collaborated on an internal Hack Week project. We’d had a lot of conversations with companies looking to build out something similar to what we’d been running for years, so our Hack Week sprint started as an experiment to see if the Backstage core plugins could be valuable in open source. + +It's cliché at this point — because we’ve said it a million times — but no one could have predicted what came next. + +In three short years, Backstage has grown to a Cloud Native Computing Foundation Incubating project, with more than 900 adopters and 1,500 contributors worldwide. Companies like CVS Health, Siemens, LinkedIn, REI, Vodafone, and Lego are building out their own developer portals from the Backstage framework and bringing their learnings to the project + +A few more stats we love to see (mainly coming from the [project repo](https://github.com/backstage/backstage)): + +- 3k+ project forks +- 38k+ commits +- 12k+ PRs +- 15k+ total contributions +- 21k+ stars on GitHub +- 9k+ Discord members +- 100+ open source plugins in the [plugin marketplace](https://backstage.io/plugins) + +But, without a doubt, the best thing about the Backstage project is the people in this community. People who are curious, collaborative, and excited to share knowledge. People who’ll sift through Discord at all hours to answer questions and support one another. People who come from all over the world but share a common trait: being passionate about enabling developers to do their best work. + +Don’t take our word for it! Take a look at this birthday video we put together with a few community members. + +[VIDEO HERE] + +## The growing pains are real + +But it's not all sunshine and roses in Backstage-land. If Year 1 was about getting this community going and Year 2 was focused on maturing the platform, then Year 3 needs to address some of the inevitable growing pains a project undergoes as it gains ground. + +We hear two things pretty consistently from the community: + +- **Backstage is a steep learning curve:** Over the past three years, the project has grown in scope and breadth which can translate to complexity. This is especially true for newcomers looking to get their arms wrapped around the key concepts. +- **Backstage has barriers to adoption:** Backstage adopters tell us driving widespread adoption of their developer portal remains the biggest challenge they face. Adoption barriers can be technical but are often cultural. + +The maintainers and some of our most involved community members are actively tackling how we can make the Backstage onboarding process easier for contributors. There are also lots of ways the project could better support adopters on that journey and make adoption faster and smoother. + +We’re looking at everything from cleaning up documentation to opinionated catalog ingestors being discussed in both the Catalog and Adoption monthly SIGs (running meeting notes [here](https://docs.google.com/document/d/1xg57CDfX2R5jTGbbWANzifm2szEb664kuTwfEEvKgZU/) and [here](https://docs.google.com/document/d/1zeYSzXYgh897bxPQmwy2btOwCFlEjlUDLf00riySLRc)). A few priorities that we’ve already mapped out: + +- Make it easier to install, customize, and maintain Backstage +- Provide Golden Paths for adoption +- Improve the experience and the content on [backstage.io](https://backstage.io/docs/overview/what-is-backstage) + +Because there are now so many mature adopters — Spotify included — there’s so much knowledge on how to create a roadmap for adoption and use cases, how to roll out your developer portal to your teams and drive inner source contributions, how to measure and attribute developer productivity gains, etc. + +Our goal is to tap into the knowledge those adopters have gained and create more tangible resources for the entire community. But we can’t do it without help. And that’s where you come in! + +## Getting (more) involved + +We’re very grateful for the Backstage ride-or-dies: the contributors who show up to every community session, attend every SIG, and are always ready to jump in on any PR or issue. + +But one of the areas where we think the project could greatly improve (and better address some of the growing pains I mentioned above!) is more active contribution — both the total number of people contributing and what they’re contributing. + +We’ve already shared a bit on this but the maintainer team is starting to address this challenge by proposing the following three initiatives: + +- Introduce more steps in between first-time contributor and maintainer in the form of a contributor ladder (loosely based on the [CNCF Project Template](https://github.com/cncf/project-template/blob/main/CONTRIBUTOR_LADDER.md)). +- Change the ownership model, for example, divide the project up into several project areas, each covering particular parts of the project. +- Introduce a new process for large contributions in the form of Backstage Enhancement Proposals (BEPs). + +These two RFCs on [Updated Backstage Governance](https://github.com/backstage/backstage/issues/15317) and [Backstage Enhancement Proposals](https://github.com/backstage/backstage/issues/15318) remain open so feel free to read and join the discussion! Watch this space as we’ll share more on the go-forward governance and BEPs plan soon. + +But if you’re brand-new and just looking to get your feet wet, we’ve also [compiled some small steps](https://backstage.io/docs/getting-started/getting-involved/) you can take to get involved: + +- Report (or squash) bugs: Look through the GitHub issues for [bugs](https://github.com/backstage/backstage/labels/bug), [good first issues](https://github.com/backstage/backstage/labels/good%20first%20issue) or [help wanted](https://github.com/backstage/backstage/labels/help%20wanted) +- Build or suggest a plugin: The Backstage project grows with every new plugin that gets added +- Add non-code contributions: We welcome things that help the community at large, but may not fit into the scope of the core project +- Write documentation or improve the website: The current documentation and project site are pretty limited. Better content helps a lot of those growing pains. +- Contribute to Storybook: Help us [create new components](https://github.com/backstage/backstage/labels/help%20wanted) or improve stories for the existing ones +- Submit feedback: The best way to send feedback is to file [an issue](https://github.com/backstage/backstage/issues) with as much detail as possible +- Add your company to ADOPTERS: Adding your company to [ADOPTERS](https://github.com/backstage/backstage/blob/master/ADOPTERS.md) really helps the project, you can do this by filling out this [adopter form](https://form.typeform.com/to/zcOaKikB) From da7aba5c565909e4c7d11e949cb551237c552a4a Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 17:39:47 +0100 Subject: [PATCH 181/511] chore: added header image Signed-off-by: blam --- .../blog/2023-03-15-backstage-turns-3.md | 2 ++ microsite/blog/assets/2023-03-15/birthday.gif | Bin 0 -> 1211031 bytes 2 files changed, 2 insertions(+) create mode 100644 microsite/blog/assets/2023-03-15/birthday.gif diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.md index 6fcd47ded0..6e0f99d2e9 100644 --- a/microsite/blog/2023-03-15-backstage-turns-3.md +++ b/microsite/blog/2023-03-15-backstage-turns-3.md @@ -5,6 +5,8 @@ authorURL: https://github.com/benjdlambert authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4 --- +![backstage turns 3 header image](assets/2023-03-15/birthday.gif) + **tl;dr** Spotify released Backstage into open source three years ago today. Since then, the community has grown by leaps and bounds to stretch across the globe (and the Discord server!). Now that Backstage is a threenager, the growing pains are real. So, on this birthday, we want to cover our collective efforts to make it easier to adopt and contribute to Backstage. diff --git a/microsite/blog/assets/2023-03-15/birthday.gif b/microsite/blog/assets/2023-03-15/birthday.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c489bc536ed59e5d6a98ed7d3a4f2492213cb56 GIT binary patch literal 1211031 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
>&qtNfrR5Stb~d5-`v~ zALXC~NLv6xwLQ6!PtF8wc?$c}h;SJFic9-@i+9NdYOrzdq#;B^qtccRo59uah7M~~ zW#-|WQoSNr3r!9pxG@#MBB7_t$M+Ci7je?$loUU$T#mU&I0_!cHcVs(*m((>*U6Eo6wdhJwfAOD&O$nW2Z-l+_ zP>OO61(i=>W3RJ#<1NAvkz(bW_NkR1(feIe9zqV4MYIT=)W~%i=9~^kWGZ}nqj+O7 z^DWqsPM`e6p=YjApWIV|6SYtODFgH1 zu(5gfo@2%qy~R&?XhPegNHD*})a^U*_uf&jVrCN1*v8F+c#+@tgtR+qwSeXk^5?1l zMbWv(Gui)t{JO54kA`6wwmFT^9Lfl7&IyfFNHvFw4jQS5>e`%-%^^|ho>Qr$C6$i% z9CNCOBpvRNN~P{8mF~Oy>$l(E`)Ai<`+TnV`}Kakp6{Cx%EPVia`q(YnUQJj?^d3K z*WVb>0+QyWr}w4;`pQh3b}?-N)LY~M@wh~K7GoB%BBgW81Jq6pGsJe;dS|Xo&CINq zpoP4hvE2Hbf5iE`T&31byFu%eF6TZ^Bx8HNW#2J>gzF-N3iGsm2I+-;JolHu)|a3w zCDZ>2XvE&NUY6Ulh0l?C>2Pg2iLECLZdov21v_Qm2SEKpd|HYa*T6$$)TX&ceZ&RD z=bipj#3J;yxCCF&s)1>4Z{vt*Jb1sn|rxw^Bl`PQ4sVQavW)a>AnKp-cyMmvah4Z0o;8@9l%VY*YB4RACo> zxX`q5v#@7Ny_Xge)~q;iUk(tOK2qcgfZJKyoa4Iyc*JU5IUjrg74+zTR04G({0{|r z;Y8@?Yc2m|O^z20Y=@4S1DcH2TC~3zRG#J>{7}oMuh7jrX}5v77-Lf`y{Yly)y|QR z5I4%pcCG`I1KL!OB!@9Fg|Y+(X_Tp zZz69X|F-SYoy~m;8zsV=xLi}}uEq8=XyVnc1Zi_7u35aN=a;0RrJMKP&$!a{aVe+L zImW-W`}fl1HjRlb6xwo+28r=5?|bFA-Hmxff3bx~9J@nIWka^ZUCY?8@5kMQdKIc2 za-Zefha()ayqu{Lb?N@c&Ykz&K=U!L!aq}A4dyqOc5u8EZ?+$k-OX3X+AuY(lg*umpql>lQG zagq>NIm2eX2{2E4CQQgJ+R{J7TdWboD5BK?3YhWzASNuj~OzB%5+R2HSuXOBpsHD`2w-Oc!WtT+rrm>D{5 ze4wx1$Li=YYw7zFK*NOhAG<3ekf455cu78!F_CS|g+y@kAZJL>MRIBTTw1{2cHR>L{;I4+3NmxvN`>*!DR-L~(yS?`uZ4fVt!r~7jtjSNw|OBPS+E!A>W z!kNp)l{?OO`?J9!n^P(nVKMxMy_)`x=n1S=GJVB%uhX(&XzOtIseSiBDw`z{#sERH zQ{8X}et*c*4H2JJo+}E{a`m<=K6uLsn;&j?w#D|E(tGP$>*j*Jx2xY(VB^@Hj|__t z7Ys#PLjYj><5#6l(nU7AU-hW1i>zNnQ|KJ_xCO)Ni`pB~PYzEU$r&oz^ty=B8l7Wa z*)BYpHcSJu74fzMTeJ5)TGwZ&UsS6gUW5#gUrbW$m%#-A}!7r!sl=5PD*>kW4I zFz&%dY$dI;k(0#BXQsX<)eISv@zd-#XjSIf&0*|3obJo}>T;3SVO~ABzj}KS&6^Wk zOXs$VMI{FJIxrRj*^KdKE&t#2zZj_!oQ6EL(Ri1z|6u;}r;HtEeee^P#M@5Vy-p<# zCVQPt#EW_Oh{UCv2d=-laOL$s#M3u~qyv=+@2I#)ZhUTiDtkI}RY87=IAPwp*&=|< zo5EFwL-*E-PXe9D^yGxbGtM6N8g3OqID9Eqi9D%Djo69v^aoZ>Xyy^3lsKMDvMh9@ zHWH8ji84n`MfUslreIXTLNRSH|^-4QI4`uE%60mP=s)Wc|u!)aXAbjO~&6P>V z(d_ZYno>*GArJIP08X@gcJ52rA{*+3@ zZOjG0a7vnEh!ocTSiwMi5n|{K9KbzEiQJ?8xW>B?cQC`$5MR~lv9%Orayrl++$Hke z0?63jN?NAxg7-7d%|Ft|f^6BH+FUsIh~Nz+JzT00DGe}QgimCz5}ssTps4-t_<5cm z)8nKduk8ohJe2h6l4ak`k~G=$-0G z=u;IO5}0zDTHm>h7wo&4T{+tqAKeZiHZ0C zV+=Sd$O1W3s+Znp_Bd``2~~^|V$tr@IIm~_NpjMzo!q$OYfd^iM+rW_Lc6x{i{si@ z+OfP&r_t&S!V~6%*3<{ir+!uouEPbRGPLfW=Qdn#+29i)%W`X~E!xK8BhS3>pQUJd z#mh2jpS*}@gJIN;9MkQu+kL(N;AIWJipPY}ytTb4Ui*vc@kn;2W8D*p93Y zq%))#$Amt@7!9?7hv7B_9{PV-7Z77m9q7W&56eEU7$mA=)7e!FZEy3gt!{9fH+OSj zCA{wPTM6NhI*G-~k;1qPFT+83!Ig*&FeGd((5A% zt`Vo(VwtMwkUG^LCABr!$GJWEE|+x{Wm|2RfDqi~o19nIJr!*TL0z3OBFxHfQun+O zg}hbQbem?R8m6E`=-`DEO-XvmPBTVh0L{uPtO=Kp@kXC2>~MBZ%YJ`!ny&22#zVZS zA0^fH&0yxH^P2hAQ2;Y*l{Vp}RAZOalM`d{?acgd-Bub?`+JoyyLH8AkHLAAke5Ba zpaKYu-|e#VVfTz^xU9p%P)iAD%sOYX7L@y4`V9T=YvK>jf~4=MJv%EEnt$f^cUx9I z`-}1wNwATar1BJ$N~!ei(#$&IKTX}3vp@{zO#eRjbC(MuI3ou#>X7I@!|C4?Qp!T- zfGc?mxk@BiJ&T~%3i!|SglDdAfpta}ds%441Gg*b{-eoVD^KxB5dwH^j~zsMMAX=w z#qgi|@$=7L5V%uNZ>_`Qlf%xLI%U? z+O{0+GY^uB-hd9gSmW^~1?puIIn%El>+4V5d9#zAcOp4pSCb9WvFzZSS#pAH{5Jdh^RBj{TrPW9oV}+J_4){-sQ|SuYOQdpgvoa-WsUrH zG4dQ{iORWykA0)4Rk|rrSumWVvkrS()C^^FV__|16U-#AfRfSgrw!1Klxu{DCOGY!ZGbEyA7y3@1S<8Gu6N zn8)2We0MP;l?XGY!DOu#H33KKam`WU&^)czV%<8~ptOTT-+9$HwoVakFwXm4sc_wa zLq`Q5a(04$w>Ztz-j3_Q^B5=HcDWpF8a~Yb%TwX4;%GiASiVC^{ar*IP&Xk8&5{nf z0;FE#-P7_y*xRjflkRPSiG94ZjH#ZIdTv`CHV;Nc0>W?wZmxsw#MAvE)@zHN&Ex%t z$KZViF}aWHH*(m4ph*T3gm-68)EXWYL-Cow{2+59g-PwiF6{tN3PAe{-{6Lw;tR0JDh>qK(jovrbcAwPH+caH^K} z8o=QhVJ#2&aWW)aYj_*f4&H9^%bs|ku@Lv+lLIxS1!fGs=_(%rk9d982& z!URWm-7PdIh$a9w3XkM(oEDDJ^vvB4U^v?Vn87D1unGm%gTXd1j|iMH9%kZ=g?g%J zf(HXtnT0MejooOwI*@&y=E?RNtanJfIXgu{Gf>#_)$C}KU=Wort8dWS>Wx4J_Ubp) zX_*12lFJ_+y+iM50xCFKNM07b<7GD=k%zE&E5+f3dWxx+cm+0QZ}w1!6H2(8wf;_@ zgnWf>5F8D*Bi&-A`2j+`oE(~yY_(BE;UWZPf%FEDz9_@@dM?+gpXO>fl}JQ)=W*eH z_g$u5JX2>WR7_(>e?GhqUD87M+M!34A?}v664iN9C4RgYBWihg7%fLz>`~rm<2TEO7EcyatAKg}d zg}#SedhcBT==6aaWCa9#a^PzACd%qvKO)9ptyZx?OSJyoDLo6AKbaGetW^Jt30q~~ zztqy!@@REp-P_9bO{1J@^Tn+F{w6VK8mn(dt#RvHT!joRk~Nrh(Bt?(jhwTD(r|CB z;7H}PdKGc?XG>AH9E^x*xcOVk`x4lMaRdDncdYq&>Zp}jE$Z%syjdPIWLm3VYfA%Ftt@?;_ReV3k4ElTt6DiYL zm@=FZx*TG>{F03$0<`Yy#*Yl#c<(YI#3GYSMpI-d&w zoKr1rIQmh$A_V-I^k1>p>Tg?aK<~GDVzXpGIB0^Mf{X!dmT+(6NQwaqtH2pN0`*JO zm&zWZKMQpk&CS&g&)i_X2k1BEk-BU33?7(LS$owJm9u=hg91oCj;LU$2el*%vF>Co zJ%z8^%Rm_e&y*ERh0cHnK$Q6!uxgtQS~72e^onTGz&Vai-A6TafzhJV&Jaiw8?R zE`aDMqaA!;KtXoupad{=>T2l&9qE=+*hm?ovfI#SS&wLLJ2l$4Xi+E}SbNU^SHN)J0$PqhQvnTEOyzuckF>;yri5M3b2a6pe|Jk`^j zPWthlK5>m32cYEZaq_Y>E@*JB!%!Now&QDc%ZT2y$X$<)db9`lxcE^3$qZm{RtL%v zVvmwh(}3M~8L-4t2JPhCd;-!%V0@3Cc}W+xY!C>qHLR;8I9)wnn7e#-_)dk`ppL0& zqp`mK*O})5$?jt}7SYTaO?$&#q#RJM4%BaoraLKwhUS5CC2AQ~H^jxGeu^dvdfYNSc%3u|1eRL{wxox}kthDc+qsf!{pBMJlx4iFJFG#wnnF@F&F5 zR$%K(p9hJBWr_n6LWiG+&lzbkQ68DsdwmQlnEE!BW0L^*)i1`vBBBJb=pE7RFpgFF z5+UTluRC1MmF>I?8v8e(3>t1^2+=Ldj}ksuB|KWGq0Sd+eF1fd@R8QYghfwi3@m%t zX?iHVy*&Ps$tf2*7B&M$)2B0(Q@R&OfN zI2UOv{@>)!NSHj!pnR--QkFd|L>W`2u!*2?uoRUCqbc9^C$GG9BE7+N8aI5v*h36V z3Uky<)g6GvotUC>-j(;27~ThsuhG5+O2pl3pHtz67*`WXt#{t$grz=+C{b=q;Qa)(jZDkC8ezRHe-W8sAxxrM%hph9ur)R*#^)O+ zLA{U5_6Ay_v=v5ohbX-=VyH|R3?E%>c3Hk&)xM2m=K^hB{RHb>H3F zELj=yewvZAR(&pLy-cJNp)AZ_r*#VJ^jm|{-&e$=WJQxEif}?&L+BnCHx~4@!+;AK zL3|*z@TasH=so0Z24D+>?4#fMmvugXo9m7}0G7OYIlRr)t9M;T^0aBKP4D$vwnR5+ zHqf*>$V4Th1X?91Gy2N#?8~KbKdG*SD6IX5Y*|O5&9M(0XJLcw4^o1MBn?$z` zs-#w@sMhGlh_Bnltp!Tde0Ev+HxO3axj~~RNmtyh8@_twqRxH)0UjNb;c}+UvviWe zI_S5fHL&pwzjH9S=d1y$C)ZAs$3Pv#MSgp?CoG8FBGgqeX)K_>}TJ&yWKmUvBGV!0vRGpiSvNT&ERID z!Ytv_40jNF@r+R-h^AiL;<-l;=Q93ZPRcIcoh{30I}pU}c}+Ef$%u6?W;*C)O0a2u z?UNnYnEkp=3QBkF#-?}s77C2Y#2W1kM2vFN}uqu=U8BOUJ1HJl@Qzv&S~% z5eEPQSJpT?MKFe4KuMm4iAxbJp>+lcB`&aV{?Vp+#d-XL;dk>iO*M>lGu5Wj*nSFh zaZ>+M42&xWk3RZtuq5I&bmudwiECtuXUq{4x8S%=&mxah1DmFg77rhyPP>RG%<0}& z*F~eke*BmP9|1(&Is6}fW%I<n9q}qnVBI}Rrjw#ngKko@;jZ+qdpwN!6{=~m^XouFfF7AE1h+Xn z@{cWE`8qGQ#Pv&G>~Z&hP*uxOPRxA!1!{dZ!6Y?>F4B8=v&*|;o)dE7tIm7}qfPmS zw7lQ!TaYobLEfeHr~VXZbR%!1lSCN#){C&pkoDV~Ybbr9-w=anSA zeg;CrWk}JD3!W(tT(;qeb^%_`Mtqt`kv}0=pO%#cIDJxd1~WhY>fY&ld}`;c&qj6j zec5OFXg0V`xe>YcJ(X5oeL>O|LfBO^N;bP;9fBYSsueiS=eA@q;@Dhf0MbG6UX$P@ z!5{l+ zeCh9p3srHtnqo-ns32z0vbC+;AMbu-W`gW7JlsumvRJj9Ju4MMQ zRX61#dM~=>hwQ&RJ=Cdl`sKGGv=L=yOdCOLy(A7$iuU^)K_`8-`S#m^PY4|5AT$H9 zj5VuXDTI8zUv6G}LU&S|7ujb~^%dt31?Iac$L4{e*#W}g*}CJwhd-SAfW^sH105NnWZVl>i+W^3`*r*Ln|%Y8m=iq7jcar{S)VMJB8Hd-GUT9@u1mKgrK z&WB=0e%a~FMAq5jw}<(ZZ;9x8OVj}BguWj-W>v(hoPXaHnU zhSxAOC-)51iZP3@gHI}8BXvJrLQIMWZe=DkxL=;^^F6iF zlL>&DzbCq(?)?&NkrLU>KcOTthzDP?3}mT1{oZ+^4o{J{LEz`o#LPp&r5GoFv6(d! zYetn}eX#mYLm**apagKs^3yU_Ni2q$C>G;U%s(>{i@VdtT5MRWLItkoaZp=MD}BfZ zAJFMTrU@*xd)!q(cc?jFEk|Zq!3MBIFd{MV#BVkE^>9Wsuv~iFukXBbSe&+DV}KYe zpk%qvw*(090?UlMvn^sYQ#ON&_djsMFg``*?x062=pZkjoN?yI!v>s?<04KS5kYxL zOco6q@%r88pXa4pBau3y*d?RO9B=xZ5W{Z+k;`XCW2E0ehj4Xtei+6^3UEgS5V#J2 ztiN<%V{7W6rnFAnxwpm1LKebXWVlQN~3am+^uW-8N)D&*_x-}ndMmXwF|cx z3SqNuU8kmI)vuBZD`vdR+b0!Ro)k2m86mq%VPGAj^T-}fmL*cCx8RS$+kby@>fX)> zbEWSp7GKg>wIxsARa!S5Nw9|=U1lNxsXDu)DqdJf)K(f#pJ}m z!5eLR3DU77(k^xd_U<49@6E}JP@3wC)DkpuVbgKygEhiCh8h-*ZX7|K@!NJ^$4(Rh z$zxJh4G5!`j%J0;!sz@MbXAJ^>FEtmP`UaU^lnEi!;f~0W z;xIFYxfkV4>?z*>4dImDcl8LoQn;}#d9Q_GNciR?X-&%-GtAlv8AmZv90*O}OdHnt zR|$YUPRML8n#9|#$%fUvYom24r!@vRs}~9YyEtgKveG>Fuv*;maMdw1Gk)Vb-6EtH}(w%5&VbkF>~3R+GnPkSW(fvt=o(cpm5 zdK`li$qmZJ5lsBuL`l^qJfKXafy-`u$IjxLx>wl5OI8cCGH9V3{XyQZ|%z3&E zYi2LY?J)W;)YonYKhM2M7^3?t)4ip(aD|%!S~u5P)Zh=SQ9{O}vsw7x)!UCP%a|hm zEZs&?Ll08wDZ`7|am&l?O{jdVjjWT?>0?BdE3n63^f~;6U|Y_&U>$}0`5c9K)7@AN zRQ$(px+f4nnCC5wWLX}`NyU?#At^@IIYsKGGnAQJ|wRM7ytldGPfoX5(K97CyZ=$2uWggEVEyiv#IO5 z#Ev72p)2Ei9h#VhxQb5;ZCCDn{?@9aaktJ`Db2*qT-_`ry=Mg>ApE$Tw2u+1si{?aTpR$AtQ*2s0Y>8Ch|Ax`KE&aSwoKYZbBSYsg zG~NREg95+--g_h_u!fKOmqRMz0K2xQ7W70lBGLCa8jVt5-3YBJ87$e3EB9NjI}BR! zFvpaHC!E8E4D44PsbApm`(XN^4ltFWGbSMJlj4y(aaX7G*5+kLG-V$F0Z0}7jFHKq z(6&+6rND=PVQ5n2#cXkfL2E=;z0 z0$bWBkOLh{j7OYp8q!q=#Kx^FC>{(1T?ri(;HKr|>vAk!0s1gjKGO6H|0;PuOd{K_ zS(cac#UA0ST7ORpIsk`O4u^qCgPRlpRC;fo0-`#g4bG&?F!7a;q~>{Cx}KfLUyfrC z`&6VSoDei4^co^)e)jlMc>1ga`wx#KT>-2YYT)0-h_W?x>^0Xh5DBfggD0_rj>tfz z)4_V{jZY525(K1;Oq7#83CL425~_-6)sFC1?ODY@tQ&^(cZ4MgQt%9fii$LWQ7v+` z)gpEG_YGxN3*Tp<9y7=|4j>sb^bj~(M+09N}2@*uiBZ8*aa1CM1^BFAdfai>)a?l_P}pOX!~NKcugD;$0*qpZny9ixT7My z;*oy+0D_Uy#AswIM&};sl|z}*J>x3WauukT5EIOzA40Qt=xeTmp||zeLOC{7j(so0KVLx7)&%%+5Vo1+ zL?4#AR8T`r2Sy+#CHMHK)IpB0%Y}IA>%D1(8lL+w7AcYJa0aN@Y7$m)hPBB}G=q3+ zimRd!e>9OA!ArXOl)gING|+7SP(O4V;C^ z4*+%j0RGpj6FC+;J6!U2mFQG|HV!6TGo?8WL$_j?FI6P@O`s7|w;W#|=DqwZpCsp@ zv>>E%fpBAb88KV`MSHTB0y0zLM=0cbGSE>8Uf!SE^+52rGI>G^x!lXmK^6H`2aOV` zdug_f0#v7rGR8G+1ZUctqSmM7a2W-LAXFm2Ck`Ljwv+e?K4zb9eWer3k!eh4ql669 zAvs10ALAI*MV*q}zJic*uXE{#el~8mk;8M@7 z=D)Q}cZrB|N|W7QTkC)M+iQBH-5|qE5vAn#olrxOGLha5X%_ zmI!zfCf*VeE(q}_-uU&x*=VvU@1im2 za7ajcr$p-xT-;)hO9z0rsm((Ea{I0v^-m~;vgWH)(j9pSpO!|{&* zd4Q6u?cnD6&yvqXul4mbPAPcESF|csxaPWajgboZ)yZqH!MgKgh~H_%IzDigL0W)` zXBdRmVf>t&e1-$)32K7slh_K-8E4}dQoIQUd%WE4)}FryqfZEMQW%pU0OWnvF#|_3 zIpl60X-rBuBf^X2*z{radH`*u^tNOKm8-L}VQgN4KJ*Q#A;W)D;n2fqHTw?jfK11&%DpTF+ROQs9cG`Hh4Sx8!h^VB~}v~Ro2 z%jUIh6sTq%VVp;LC?u+RJ+msNC4ihvgAOY3<{W@!?-{_@{b-nwqdt=^e~`tOm#PAzV^YztX;CWZeG|h&gBc=L&_to zDamaV$QTyQUV4z;tQ*>mSE@*joUMTzPXjabmTp&X`A*M;jkKS%dpgy&JWSDZQW_(G z2bb=kwdihSA4Iwg#JPk^Q4tK3I>_-$hkO~p#SEigPcIP$L=6T)?h6u4FqQ3;SMDd-9gp&KT&$<>dCG+}U_{+0zp<|fa3 z)LvP9Chd?V4@8!$X#IYz`6e?m5TH|V2dsu}r z1n7NyyhYRWm`eY!d7>zSDd@uYD#&Wk@Lr1Tr{Ck^z4z@Q^tgijrgIl|4}zzO{=p!n zi44RmJdIFyo}3H`@yJG-boxQune+NCL79_Rd@+S`d^P7*j7kkg z!MubC4;Z9=m~cUk-JJzVocxmFX1G8hT^V!e~*WTP+{R+)ef4B=(ZS4T9z z6R6?MJyxlXU8S!db2M^1csSoCLX=|P-=E)q4!-nz z2bd{Te`+}Gto_%Wh=r}dM1W2e1MK#-v z>rbDZLp*joVe;Qb>(hJ3BL58X;m(TU(IP~+Y-Wh`bj018=EXUfW4(@nbUa9mQq=Qh zZwEY_6F!!ri=ik{VkGbNK=x~)nkOsA?t1j)-5s592BBjY&Rl+PfVS+_FsXOzlHIxY zUn2H3FO-2_)C6o5|EA~r)k#q8KZmz2tPQ4-Z_6>eyO9pfr48;~L1M%=et-=n@Fu0X z#~fI>ZOWO_sI~fX@avIf8s<$7i>Wz(UJJfEuk->uJyaY5`>#*>_7^&D>^$*$r_C_3 z3SPPEo28`wl}+V0IF#SvQzzEcJ8vp9UI#Tx}#&LQE=kw#L~35Lce3hv5;tF=js_Qd9va_A!Gd>0XWjj6 z9bFC@hCX?sCWsi-zFx;Q{^gWfN$qV+s&T8fuYc3aW%&ggnZ1cCDqnvn>#}{`o4&ws zh5s|V3Z=u-o5|CAV&pxs3<*L@VH`$2ATR!W?A>Bawi@uH}mH6DDJaiP}$#~8O zW9hz(?)tx@vUOK9>1lG}Yi_NeD;Vdl;+=+h*YfIfPHi$1PUS=J2VVn!JOC>Yj$H5Xo&kyYGIu;_SVDPIcrSKQ-K4bs%qKI#VN6R&;yN z=2KJshdnRE&ZYuJO!40F5mXtmCM+2<$lAYmt=-L(qU)0_bIC)?Pjq)+G!(O_Kh{$z zlKj3XVX!WOA(S{c7;O$(W0D~Sv2HVg{ z_k;8++r&(eZf|K|2hjxHVO}-_V8v9eg_aeB#nmhYQ#enX!}dQtuxV@h_wSnkhg%P7 zG~H4=THC9HW95nWubPXk=jPu678~0-u=)aNjGm~ev=O34s+f80oQuJaXMZ$&b~Y$# zpUPVHKT1W#O0rO#$BLhbMvo8m%(>Is18vug56~UAe2kaRwH5cpLMYl;f~BSwv1$CO z?z`r1)9}5!9rlCCeN(;6aDf^G+MsC$GL(0jE6oi$-<`#)0SHs&!K41%z{NCQkh#iX zopwrzn9n1MPzMt($4JDdQ6U$Uda1GtJnM7U#t-jqxify?BL7qmQheY0%PfwnKEm|S z2AU9`aA6D7Zs=Vp&bE7k^V9cdsm04B)8t`o%;1xtuPUQNRc)TGn*gDcs<6t!Lvg7r zjP4=s!&dv)!plQPj~Grk+db=Hx3VNE#qpTg=Vl1T*{V52@#m#z36Kch_xX4T7J z3KDW@r0~4jyusiwqDG^rJ?>9;FC1uP zSa9-A`RXOKL^Qw~MsF@1{r&CPY73-UVm2N@4~X*|2w#4-POQ-eB#vGjj|(o(WMu8s z{KCdq&A|ZGtyXBXs;aud*-k&};;QipNDESBv4$9!Z0+^$qZU2IXOL@F^?^5FO78Wy z|L;bPDw`RrdGEy89~&99RPM&h4SHE`c$lZ&xRl9#kP%1vHL*3_`h;02Y6_Qt?{#CB z0<6@1Xe9x5#A*TSqy3Nl?BXHL`W7c-)NA8Jy#K~i{oLM#9H&nM06XM(qS`#<+m3xV zxgJP7603<(i?Yfegj)yV_Iu$yfiXD$a8{<~b{e1=b)$6IKRNrur#o&-xb=#6r zMlu9zCWI`Qs0AF_*Ha#CF#C%sF-a26XiaPB|5^}671en;O^9=oeRtsgpDZvNjRP8z zj?Zp>Do`#(7vsZ)*8iHt^VR6`v+89oyF~AQoK<9v*7$Ox`!HM^F-&lJf=tq`o2snH zw3PFZnQC`k35d~3allsXXR^1wGjxw8prRu2_nBsIfB%d=cauS5^M-)y7<0vi};2rn&}n+;pylT8m9!<+urjSDB)?imUT8 z2zp1!K2b+ZKodx=Vjy&=mKwj@Ogyi>b4tWcgGbHxM3e6HRuL8YO8=awSM_&lV`^y| zE&+rB(KEGvuAV2CIWI5QXUSlsdOz2yJWWVHRhV=eT;H|$_W8tuRpxHBz?Wi=TSCcU zRN>}lr8!NfhDnK;vh|_2`?|PPVXf9ztRL%TCGAlquKF4WfCOsyO5GAvIB>eTQ_ z!!|OM4ff@N+hnACM-E!QKFh5wq|kklgo^30`|jW{@N&v`zq|hv;`K13X`2kONtC(j zZYd!($Irv@WgfPVqp{vi0az*(I9QmqjKL&q7a&=!NhA?_sa|LEnfaUutb;K(2gmDE zb0@Bf$%~AY7dpOeSqm2*^sYndntDcgOr!se=UL+`MUA#c5(58yYU99BIw~^V1{TZe zd~YdGp+8R!{qSkGHEVnYD|6WMF_$bU%inYISOH^ltZKG3a?&uKvL)SHD<5^HeDBoYDV8d46t3E|qmV zzg}a@8h*EYldQ+B`JI?m^A6|0zM6+QWUwf^8@p6^`UZ3QYDsW&EpWBod6(OEc~LvH z!d)#LZ@ihmyHldIQOZZCcffh*q&2$a6=@uXgZs4l?I&Js|Ko5X$ia5%eHunvH%k>` z|NUF-uK4DQmf=%gvUGZ7y{-cx6a#_d8RkmWa5U-9^Mmf888HL)awU|=-! z&iUL8RYuHI_~_XW2xBTgyo1d%GC!I&v~%k>!vF(hAhp0}bw~Q8Gzkz^TIplG9bH|@ zzo=<$*bfAzy?5Qb>w^^6$vp&=C+}lFppGo&T}RlpdmSIFB}Cj66CoZ*iKFPp|GZH7 zup#Ktt0(9C`grKBpI+vzQ^g`#3?hiT#5Di!Z53E)Z1|Tf$H`NS_r}JM5}F{Il$VJX z0Vw|LtKELjCO;@OHpy~5)xx|*t0^lz6|Dxd6$|Mrs&fNmCXLVCh(kQmOU0SI z{MEyl{r(cbU;HDFMXi#gE}{htF##*_y#`LP?Qhi@{=B_nz`ugU1C^S_@e>m2B2Xa% z4ODD9ervg)hC%b-C^Gk8F}wWH0`)!vf9993cKQM)`;(FBtP%Sgh@G^1H7&MOLYvxA z`-gLOD6&jBkcL$Jz4iK|i?@_CiB>{xFk7q@FJbUN^6=`vr~kC=u3_od^ugyQc!mWm z3_c#j)}8HRYsW2FK{2x2mHN>BQ{Xy0yo!T4NXf*^E+Z3tLg+ntjsz2SPMQjZnvgj^ z&pJ%Y*T@5PwaC}2E4?DFkH?T6#klLT!A*HN2NqGJcsl8@H#zdgu#28fy?A9DWH*6| z`hSEOI@TY_uaemCAk!vLcecyn-(C+lkXi+rDkLjLk--#dBdlw=Xn~2 z6Le#W3po#w=HCW#U?vT^vZrT0t3QJQL8)y5cltnfrygztSME z%X{%j*1=h{4(}Af%%_yTrp%j7m^IztukY+%U|w}5C=L?{)R%Mk_I=4v^TRF#nC4}r-Q5EtdvhVH&5sMEL`mzpSjW>(GrNb z+=k%8S?f7nH`k-XQ?s3wW>gBabeie5yVVqD6;_2QoUGDew#5dPT@R=^`4MYDgRmkr zWCrWbtl2T>@;_nrJ}&x}mU}4^(&quu@fZONG+3<}8VY>qZ3FlN`4IJ6)nhxJCFad{=mHR zz~9It4s=jsYT4Nl?3^3vcW!<|?^OgJy!L22Cns2uwOWp_p7k1BvWEI@m$-eZ+EBHSP z`e#BEh()iV z!8>1+omzD!e(iGCs_Zmrjw??xkfi^3zF6)2%+aLN`#S0Eh7Q_(`hd4d)3PXAN9x2= z+rTrw7G%h7?1{CyRFNbj6^&2DyvIK5`h9`4s@$9_R;#wL7hKE-NrtoLWJOlG{FJUr z#!zEdzdB)PY|p)$4jtLl9Bu;8knNL*UD1;E;W~_(Ik%XDcd7U=zqYJilfp)fHlPD| z%bo9ncPloSr^#6CYU)JkK~4@kRjk2T={~E@M3r%p22P?!SaCV&si%A1z{x%|i1!Ie5X`$g)_KSib=Ca`-z&TQQ#F3>2lN;X4h zOk^PdpVTvv7cWPi;uL}kv`CS?3<0a3rrMEU(0qBHq%z8D8U$Ff7`q8DX^6lT$;{?ul=;({oD~olx5&kf-DmOl8 zeP^*EHy=^zuZ9=n2J)WTmNxz{JC!Ix`0gq!UxZHijyNM8lQ}9s z_6z&a2jiFuQ;hn~pVrW-*KFJ_QBU38M&|naBcN1mYB}=^-RVVG&7K5AVmKxaM&gu! zg-UG7-*`As5x2BCV*7rpCk*pB_+E;Y)~Xl%hyNXaj+Kj7Vc1x}tUUs8X5*)|3exRm z5Z66n0@3EsH$$&68@VR;afvMyDPCDv0S6ar4H7LZxc{y%82vnKPIdpyy+(0CTnN~TtCHaW*vaI7bG_J}o6cpQyM|>h^*Q^iF zz(38aDc0P(exnc*$q*x?;>la(ac^eQSJ|l%*4DJm;YtZ43t~kKbTBQFjBy6d34>-ScP%F-pgemzy||+0f_Tmjy%%bK|(nmPzg!wDjmT{dCg9mE+6qRH_W{@H`9?mqH z$ige(zR~iC&|7h_yY;4T z3|+XXqcyXA!?0~0RjpoAM5{aL zs!(l~eFm^Wn44H78Eo70Ps_f{kM$aDXp-RaD>1>8k&_lrN&IT-n$6c$LStK@g_rV- z=ev{6J0yKOpJ;N`_@x-wJvkqC5{yim4uTAp2iFx zD7Kjv6ScC`0O{=<fZyiF<2nr+CGbY$txjv4wtif z<2?C)FrR}-S{LcbQRkP1TI`|XtH(FQft)R6)RueHs*_R6Wp?WvKmi+ zs>)h884+1jA;>H{ib66rCRc+NT+n`YR8wJKx$VHlp9a}1L_C~p{iP{~y)z1s?FxC{ zwL&$Tvx_yW`Y>3Ww_QvXWXI9YlDNCcXNjg4g1TK=#zGP6n=m3JA~WyvT%W$ho3+bP zNy_AI!^OhINHmDy^muY^%`x%)uT9?% z`sdhDu0AzA{>eT&ZL#`H;(?rfslpKUns`itQZgJ>`e$>OHxQD8+A>Zd@7ON8#n;>a zd5*~yTZ?iIzeeJ*T5@&0cfcG&Dx{i2rBWf4RIbgLR3nun&7o4MOJ^N@_xawwKYag%?frhe zU$5uu@wnd){dMY)wsL|vKk?~L^W_3l>Ftg=7MAzWFXEwL zq1mxAR4gcd@!+N*+JZ6ucsk>B`!5lxlusmda5D4IZe| z2|(-=+>GPF*$fDw$#&3cd)MvgBgb*B@TpY!Au97&*Q3a#cH+sC2j2esrzwDn;G#16 z#n>fflkRt^Stb&*U?w4Kr6jK^&b%FVrZ_$g*X$0lWx!u*AUqnX4L5G5BvC4Bp&-wE z*9rSoiAWhS#?+r+z|LUJ5339IQu4}}p^8*`7u~3SKJeOmU4)LGF>>t<(|}UQ`F8!f zhZ@J4V@J+pFW*#5wF-(_bQV zSE*{D@O8M-E*w{P7-I8{EaE3zx{m$!`77Od=~)D=38M8p|Gxv}C07cy~&*c#=TEEzO*pFuAE!-3~mG7il@~O+!f%PxIcWm+N z?&r{!A_qFaq1#qP4;oY!<5f6gR z34H$1qAsm1jm>=~#~WMjXgy_HeCs!1W7%1L-P)Q>Bf(CLC>ESV2!uBzILLYT9XH=b zQ7+g6xtr#JPR2y1Wxi^4-tyc`PCl_U0zTQ=NfI`O+k>B z{YuM_F?)$t=ol$5VXt;98)e)fxk9j$gxLc`AI~q9N!I7S!cnRHUBSkLdY1T}lYCx$ zpY@S{CRFF#qY{}1aJvkZ?$dQ|IqBEe&HfyUio@(%Y9Ingro+>#kN*-IT^ox%y!9BV zM+sXColNtKhTdz14I=awi0~tj|C%DjY?`W=sWrichxvzG*shHDs^%=Ye&)i7hJ0ZV z^Fde(fZ}+5uGGvkeFl?Auz1ojPPLl-e*g`;GQ0mmeat=g$5|qzJ`_;+NMw*z-h`_!z7`oXyKa5^_rq45%q&9u=a#Hb_Cml_ zMSGx5En5k_yDph&tM|edg4^e|~;?{_oN*A;jn%Uko`}a!IgJVKfiI&@6z? zI&HSjr$WPJ(mn^ENl|uB?+pXJuw_WZ-4Q~Q5t2f~B0)Dj-chJLy7Kmjq z;0|g=YDZhI`z-}FsvfF)d5<@Bkd|$$jy*^8L-hxhIjcBO?aOW1&SYe9@Gk`>0u5kK zDlPKkIM(>eB9ve|K7CfWL35sFaIA$``J27$x%%7`x^SM>uhO{j{pr$=xxO_}hZ2#_ z&}JP4A(1ZxkhAJ>ClB$rJQi*&V27H0ypi8nuao_Xx*P4V z08ofEhnA-)fV(@{pv;66d5>Z~$g`$sU!K9-|d1p z->*Aeu4XXEzt<0E=LMe&B$Ns@>_#=<#8w&B$Tk|gbFAwJ0!9`9F5@JO7DevpMp^3A z_8G?}?$Qwn-OaNDfWj0>thVkPh%0Oot9WHaTQoGWEE%R%-&A9sZB6L5T%V7|TRW=Q zd$TsRkF3bOuwrr7yMEaDXOHfttP9NhR#70nx1ho_$o&nA8HcWpH}iMzGL`r_EfCNN3>uk==I%OD4cgxGWD2@uy&0rVpm3hI8(ACKS-#hsi^BPw@o%qCm zt8*&avRCa~%HVmZT<5ALgClw=-_8c4raoJOt5AteGkV+& zmqJ7f5ckhEj_{(D$8OHQSa~d{S-;8OqeFgfw_ElRr7V}O+`Fz2JYsGr?_4%ZD*nIo zc8Vw??Sc;K;;5saV1r)UFfY&tKz!JLQu)jC(d>`SLGX-+1j*or|5nuBxE%O;$1M|~ zKpm>}uIjU3K77<8>fj5f*k{N>-xt49kfp>5Jf*to|LJQo= zWPUd*!|>2_abq6u>3_c(teFi#*ilg9nOUuC=||$+=cLnXx6C^FvK6`uM9tmuP68_8 z$%e@BN<1`hn7ZZogdTn>-)=i@)_+(!R;YcIllgaLGSxbjDyyL){*IOGi)j z)IF_<1&DTiD2Vl(5hzM2pCLu~bg=A$zMM7|P581Z8gn!(|CTAfme%@+be*_C8!3k? zzBmQldDf^Thf3an(c1r^QKo||(C!g=cb!l3p4+cJ7PcAo1vH0-P7g{TO(LUK8U*h0 z{lEG4y_1qHc~_ez@%-|bU87YW@P#UfvyRxPyB`4FpZ#!iX4QZ4-Vno6A;QC6-CN*F zxJPkm|K@*>@UhKST2b_}zf^Z%>sc=rxmm4<0To1jF|n%t1H#M`@c0rwIQVJ>KTJC+ zX+2B$t2;!fnK1I)k03a|>D{nV<3apaz~3qieB8D~fIz>z_M@Pa_T4sJ^L_BxN`RPp zh-b@^dpWWm?GDNQLSmczo=#XtAN_5Do`OeF{Fv<_>MAlT+wI?l$!W~!lajJ@Gp_IL zOj5RH>yCGVb+4_0?)Q4+-}}iaK}{(1FDf9m3N4oaymtP)$P{Z1dv3|5bL8^k+~Lry$TKT;&i*y_^V#c=M4Y zv~b~x|A*84#(^_Vp>;*oJ+`W@<%aUvzk7*R5V+H$*dQHJ^0KM`BU#W^f_!2`Icm68 z2qYhOpPc+^W%R8?1K%XqrHD?Hdg-xPmeZePEuqw=-$_>V-2MmqaU69fXv{SXQu z0qS{+jRK9djPXnE2YUxk!y)sXPatDNhET~E@x2{tRO0ItJ`>myw@xc31_4_w6PZBz z;;e<=)jYO(z~tZ^@I*9$2+?RGkL!4AHT7vT4>6yZPBEobwrEm1kb*m5Oxdcpzu&uI zVC+NKs(5-BS9Sk)#AWplVGGgb`w=}Az`O_{oC-W$6<6eULI|@Oqq)7&jdb7q;4}1@ zGq~=@i@%^2+dgmS)OP+z_9NITg3`q9ckwTiPkrm(kex_Df!$7E1yaVs>LAXK;@79f zYksXrdzga`fUZz^JIEpWo^soPSkX}Lz2R}245eQhVONg7CDm({tV>U_31QL`R^P=; zkT0zb8OU(cvq54uR&=>~dLQx>CVkc?6y{u@cj>6j!V8hSq*oa!meH3EZN3M(nt*Cl zDLo1(BMMQeFK%I~cIk|}(_pnVthC$8xetH&V>l#R$o5Pxr&gF)EZ^RPsGkj&M~JtTFmI@^;vcWUtOdNKfjk z{Fb@DPWp1jJEb{iV@AA9oZ{PA@gk9KNXZt%Y6IJO2)v19{SurUGcHpQ@wj45cLFv* zSjz~ct67w{2I4AAc7>iGbZnITQsHi`#YlWS`n?XN%Z_y4q0V+Kk7AYaW|y|?|7%sW zzI$~S+7r}Nh5BTQHdcE<8sZ9mygv1EiZ|VLl1fY#n8Nwq9*oXliIivt|&dtrRCRqG9nP|uz>L2B6FltEHYSrhk`gxy^Vg*wR}0dKCxy#0tt ziZJl593RR!dMASIp>3sJ~BQNiY-6|k+YqQI0*9NAJON!Qe_scOfp^Z}HRxY;V zigZiVPuW@`F<RGUqQ~rWHx$?5zyOV+rC~0TLhN!Y2jFey&5`h> zRf?y&u>Y}KC7T{hu}Vs8Jqx`N4V$hF&JRsK+x*MRCB?MGT!lb;dqjxvHhRK=mnKzO zjq*E~p}&6n3ef>4)6V%F{WWclug6+T5Af7Qa;Sx;ICug|pNHrbIlp4L%YHS}0+35HJbd=Er!p7=f|5WQ=Qr zIdi*A;(AtF2M|0F+2!)@9I*jVfEh`Cm1%cuO1cbMOZ%!#ijv!5Mu*NHCvOJGvxU71nwp4+dVlDvZy3V>OndGa#y z_gZ4LmAyM_b5_dIkCj=?GOQo?igU`cNo>zyUt#yp-M$ooDNJK1EOVw!;s7jKNNSiK zEIzWlwyI!1Q9xm9{<^0fCtSw$a*5J*F!Ekr0X0E;Q79qWi+T4cYUdrqsFAJnTV!tr zbC$sVTOq>m*g~^D>$Kp|ES}+lw{@JnmG(OHGw*BDGN`kibKwhkYOhr^3ep5+X2EPI z@}s~1qa6Ogo05KFpNel8TsqY3?bKaWUS4;!>@B&;OP$ zJKKE(qog_=uXEw2s_D6K2;Rrs=9c(Oxe$n0rZ^{ejQ^-!%JPbTK6WawD%wD0EiBW|Mjz1Rf9fa}0OS zzJd(yV2To{U3yMJKqq^VU;pFUrL+}jOGUl30*mgm{q}sDt@eoi>|(=`%>&B`((TG*wV>}`~`#^q%m?VbD9v%7*kiF^NN+#c3lb&QB0_dV=ort7-F`hxDwwq_?XD2i%gVTtP; z)HqI#X;9+EjDMz#{}^Z+eVCza8C6tiA$p&#YX;2QWN`Et^2PO4@dLQ4fF{dpwVIOJ zsF2uMpC8rM*U50r5@vpREsouP^g{n5IO~37Cq0sBdV-}l3-d68pl`93lKbtYJKF-5HdT^!;?KJFg-eMm%XBwaoXfJVDNKpPij(NY30*GunAQZNd~CRxg>ev^ z+4A%117CG*$sh9xx_^e@y_7~FbqdON_T)SE4D3}e0g{qb;h4yml*Sni9oI4%+ zvv-eYRMRHyh%QeG6q&^0WZ5W7#+S3Mh*@m$=yUv8Z zyjf;1O$o}up@qvgd!q%QqBwNrnWMg3jff5e03N8i{n&K!7jO08cV}7`CeLig^x&I~iXJTZIQQ?l+}knM_J>+Q z&x5^}%le_RC%PI3r;UDXXi|3@A(+!!pw-}+@sX;x`1KK9=U1JO@ zB8ni?+r6MFHAN{<#re%Qt7mgt zVu4nZAhfyG|4{im>QF?gKam_{HE{D#%!n_Nrl;ZeHG%QmBM~zW&HO~UqWA24A&|2S69er zHP%%bg-=YfH6wVn(pJ%ev;+BRP=O*x1h9|9jbr@8+^9;G~o2S`(3HXN~mFSLrM2b~r|UVP0Zb)^AeesWo7BB&wwWX}b_>m`=85 znNZ!Q**VMeEB(nB&?*LL0DZ8;VW95bTE`eomL8%BlNQ)$ay{Tz#m`?0#X`BfPAN5M zbe`h`xqT;B!cB-N*`gyBOCU!DCZ=j+rIo2LY=%B!aVx&>8l%HJ{m*7|m@>*lS}* zeEGOhZ(*3DcpkboN4t%0QMot&NiB}Zpmd^_nRFF8^VDb`|; zUcp)(`6z?O=RIV-VHIt7^SZQbL?plFQ=pYuTb3zTS5Hxl#q*DgSN);PmiQWPwjlrv zpHm553v#JJ=FKG`h8)I6Rfh-4%B084-YG5_ICj=VIwI;gvY{+1C_-l(KvwQ88}2H` zF_{qm5+*j!PP(7<*17Te3Mhxbwer@DoWtajJaA(h-WFQ?9ibRxI6%?lud>(F7}+8V zZXsakJ~@?Y)d=6w0Li6j0CV}Xy+;2Se(X2@_x*CjbmCbeBviVhB@d~bJ-(al2IiT& zOz+Pi@! z!1XPTO?*!TIJwp29JiCw#oOeJzRoIuoCMlx!(7^)fqt+%(PsgeU8}Y&>CIjS`L9) zmIz6a{`$^0c6rW{(EmgL(6!|f>eVqAl=I0l`I#K$%~MbXK1D$^RxC1XhWbQm)_Zjr zBr7rcP#+Au{2o$2s}s}7)8t1?L-lA-(jOmdM9*3AXy?(zD6;R~W*Nc(fEl-?7N$gb z8w@nT&APcr>o|xSi!HiU$QZQX(XpGY#75yC@=_DT)Cc`N){V*~iKc*;=erOvjEpU{ zijO~*og`E*dYwt2v-F34_A#BRwEoz zH50<*uz|W#ysE||B zIuJfIt$nt?+afqRfAhpNWjw;)yL4D%1H2ZGW@^EkyVoWt zQ2DH5a@hddSl($tK2zXqmK!^*^M;#8Ex$ZuM!h%&*Gbp9SDV8rw&?fwc*8x)o|GZ` zlOSXffNW8(8(${8y9G&Y_%@>;6PMPb!UavQw ziVqDCuF@`@ZdN8eQpd#W1vNOY5oZp851==xXYBpl9EW;3{^bgozLzx=$HAjN+ISHr zb5;;E;`5n69+AmKM2}(&WeHt~cB|SeKoQM>27qG_!fF=JBltwM+N0W{48RemN7!qGyge2>ylI*tgO`;NEXIA zi%CWGRK!;9u1TjRZH+a-#Y9yv(}gEQwjI4caMUp8fK#51<`nd1LZ79btXXDbu<1%5 z=-vsz>QYo~c1x8IZBQMq&g!z*7uWfeNlD!I?-nkpYu#zTexZ(440%D>>ktRYCP?L5 zW7CQ>HN2tWJ}|@Q0dUN%v|YfPZsJE-j$J43-CwZ=GwoFum%U6TIMxGj4zCkHrVnxDBUv+MJowgE4@Bij3pi5Eef6D!a_^g_=x-%KPdwcu$aSxZn#`-3Z56e4I zqb!_&Lw|84=H|ur+9nnXRI;TUB2NURw27&&$zJEaK4`C5GubY>p%V~yB|WU#)bO#| z|4l7ne6frp?i_<+u!1J3fcZB$f9DnIzgkE62@cf9EWe(aTl=2Qydm_k{GBF&k2E5r zaEmiy^&c8=#GlIt|3G81nJfo<#z;NM!?Jxz326hyycYTlN2zeE#K;8WZQ z`d3Zqx2h1-BD;JLVKrqeVnYBmCZD)gKA@?bGRUGs6XeZ*>erlS86{2Ys8J?b^?Q%b zZ}pq~N&9curfzH7O0?u0tV*uAZOX8fZBWQomx@^VET1g7tCflWFK^x2r744S%UHSH ze0ry5EyO5Os5ZA_Xzc0q8tlhnSQo=1LZz7n(Q6k{%Y{xkvSUBG@bfhWvoat<tRrON_GRV961;V~kw`(v& z153MD(dD9oZIhc;u#gU*K@L_|oo}B^cp(T`-XQ{-ASdDMlNCGxE{|V5MNP5SFqR{d z2184HBe%skr{J_aqz)#2{J=XGK@e8Y(vDY{iI%v8K@|j4In^HW$&&SczJO)|xTLx( z2idTy^F{H?vD>DMI@knt&pas!SqNe+FHNU;QC-X2CZ&*Jx~7I~xPBe{z5IPETR)Pn zO=ROj<&T+Z?ql;B=l?VGlfgz1DG?_0Yg}V)iJIKX3;CNWF|+|hitiSHIeE? z>*kf&T^7MQV)Vv@WHtG?c-@W&P-F0=Ap>Jx5REgGL7ZCbPQ-?DXvTJD@YFf;;GR2? z0NhYP852^yYVbH2x~IF9zogog@9;6{;wcksastciqzs=kMUh887e!-RSnL0oqa4J? zLd{WNF19V2+F4^@EV_Ho)+%B+m6E1?7GiEEL+8*?eEFRgpXfhm%fdbOmk(RFi3yxb z8Z;gzM`bP#sH_5U^E|DDXv0f2`d?-4%~#wSh*L61V*c%**%C#f0&s)C4Q%dAaDHO{bpLQDPdD{l>nw93H8f)AWS`%~4jQ*1U!J>3~=;}@+PzIX=bVKK; z@pO$e8X$k^%+jvt@Q<|Jg`AlQ?>e-%7@5daX^iu9Qxp$d6*8JMqgLwUp>E?;~4Z6M;XCdSsrr@p2=_rP@`U zBBMzF=*Zjh^s1E{qj@w;Z(auYykGB7#|V{^q>6_}r*vz1Nd7q**I#fDd8#vgWig_V z7392LW~O;QxcVODqYNJiz)n6y*R3D5NkvKlgx#LEF%LIf7yDrQ(Kw;u=oP(M6(Y-S z=Sa+tHw2^j(X~Gw{-yV+fq6u;L=J!~B(~4mvn7I0CyTq5 zlGhtQL`3wxuXvl%IXG9|pAUMc?;QznTs<*}&iItsvy(`q8;n@~E{5okqoLhWuLtIl zZ}!{_eFqQa5#tnTm!qSQEK8;=ei;F1lD|I+A;*1KV+y+&hQQjejXQ)S4f%NCCecHX zT$Q4qBGkqy@PjYvGv;A)a_YS)?0=!6(_WUNGRpg0QUeR90Mz_DGl@Ja0HO70>#?$Z&1vwAW4ZkXheXI@=Ysb}4E-4J`j!~2>lbz>L zqb(RU*Ee_yAfFY?j9JF}>R*PWhFc&fdUiO8wlLIqS%r@6CWH1}+Pz?UPki6Y3&AUb zc<8W52k-K~+R8Da2eSE_EpknGjgHdsu#l*y6-}z9tuG+9c$sk$a4Tt&$jw3IsJp>K z0A^xuLwXGGKj5^G;zB!-aQ9AxN`t|k<_WRa$fbueu5ANw?JOdPzUpr{q+}>+GobaE zO??ASUDLN|7a?q-hiFR>D~OJ>a{AbYBA7s#rSJBeAAPu8zK;u_P0rQBS2_fn8yOwr zF`OcOGJz`@nCEmtR^exLLAr&mcZPoG zT#bGi`y8$Ye_nOiZ(x70>ZZgtF~h23#dz)WpKwr)s$$)$XW{2rM4Ktyd^Yurkoqyg zplXT|Ii;hN;Q~OU`vGL@rWL7Q>@NAyh|okept_w!DVs7FyQbHwg2^#gv(Lk9;;8{O zcmfMK3TSuJKX9jtQV$&8am?U~Vq>8+`{PSDB|pENuC}8H zzN(|`)-(PBDGCKmss|Ia52`;63i*j*Y8hRJ1JR~UX?~^Q#(~>I7jE_Mygh`yJubt4 zWf93jtzf#YNYRCHJoLmxFJVgCDq6f!m6@2ZC1pe8`AhpP-_qV(M2zw@BjAR&gnAtH z{Ln1amtzT6ojAkZJ*{FZ6cm+g=+Tkh-y4e!S-LNU+C&x9tTwdFGEu_PI9P3nyN-22 z4jj%Z=F}K}y{j`l3XAVf+ID6&V#nwAA2kM9TDTgW&>Bkj@w~dN1{F;FVY*%+M6YG* z)1oO#F+{)i!2PqU#xJmsCJ41{YKCseKAm~F`Jr#Ecii@YrLTbw(+MB|yX9d3Dh-l^ zTE&3<+Gm~ayuzJyeWg;XWwXY*t&bB6j8cRe{Fm#8oKSD#0Yl+nV9k)uA1jU@pi^VE z?VV1s3UV@|qs?+akasg4+{WNxT3GlIIbqIFHy)zbSflS=zz}j@?VEhHtyBk$5XVK!&ho zRqO5qUej_&z#*#*=c5K%PTx7kh#jn6d*#Kc10xz6Z-CJ3LYi-~N}f8Cqh*d6Q4~OF zAOh=L7kDCYuZ1q}#`xAPemimcOHjjdinW$mfAJNM!K14@baq8vb(K9k7QcCU_Z|Utw{N#eyIjvy{@oXHt;mBz?>0MwP)ZY5~ zfwsMqw1hCxx+U!^UtuEhEvW_ba6($)HW|u11iP#_(-E+_#J~C=1FuK-FlWdB>ams4 zt*bKIp542B^V^l}SB@D)>SPfOSNF~Y7+en^kqw!=M8^T0R{r73!(|VUoe$1-Bl`7y zpyULV5N**gvLQ*9R_rovbr`$iK7HW<*N4akE#@a`MQbaqt)`{=`neLb)}}p0t|Jlg zzIaW5-i;F?gnB&Bg@tEJ#hz(>dc2pqWS=Ncr4ov@RA;9xDnFNTJWwIt`E-A$DF7f- z{HKpbWxRfIjF*9Yh)TDO!P<>P?J08pt6ojMbVq&=E*qA4W1yt%`Y%r+R*!-(nzA{M zdB?E(&I(CuDU0YJlXtEc^gNuYKMeg&-u7PCUW~J4j(ZbB14L_A_NC7hxsEQ>a&?J5 z_0&^My*6(fTTKMpy$M+|q{(cQxX=hyzOfv)>6S=)S)&U;O}Of^PFIN6C*`gzH5%pE zHONAcT0sInRAU8PI2Q5n%fp$-gOxwYnQn$I?+GW;_+G?_xMnkpZZpRsmlp|QoL$~L z3DR0cnx9`%pe-90I(6)ymLSBeE`kjyO4_BxO0T)+JQbj=VIEUHY|~}d_qkl7itmMU ze#>yhTOa=w?XSD}7V-J@HANobXI^MvB5u5Yo$N!XwzIfQ;+2=?&@N;_@y^7P=Z97l za?-j{6lT=NM^XFUIUl3_4$-vNX)S@Zw}-bB*-d@+2(rw;Eqs}vZswLDc#X}0Hjk<^ zOI&W$mto8Vt?VmzUH|!+P`rKW$gu-EcV(Js`0W9OS^*8EIYtFsQQ*oO6>qM)p4a-= zM+yk2H-FZ6{r!)(j@wtUJzpg(unBG_zf59z^-~!0+w(hvwW{1?&hy*Wr0>*-n>!Kc zWVrri(bDBMWtoOe1x1u=w2RO7B~ScNdZE@1(!8<0PNfL_?d8M0#v)cI#->FXI%Gex zV6feBMBaj-=9nr@$!e)$`hOsr!-HPQfFuujt0}k&ykOy&$*ekx#iknff51m%S?$!Q zK7Q)sXQ2g$tzFl-Y_xt;(N3tf$Y$`}epCMEEEa1FVUuf0Ga$XA%z?2l&P*fNWC6)+y*R>Jf>MqLENjAyg zY>>~9AuouQnzHB7#wHekaC3$*FDS0F^0?f`oER-#ql(syuIRKW8!k$?rJfVAAjC)- zj7q|4e~}?=+xXYFwSPLX;6(J9Q_l&@y`WYUuX_I3I-@ZfY8{Vl`1M0RuKUy83kCfb zZM6*Z+7!l*xj8ffAhBc;P++tO$J8%MA;!W`_;UgNGwO-spZJ4 zPtt|iWnq$onP`-sK6v7NE2Iu?g96XzrDT~>w@7766iBT2%IqAhn33bwQJRZlzBm(c z_k6f(*;SilF;%^1whFFUq1z9NuCzk5xd3dRI+vR{ZbN26#R4u&UwgZk?GA2v?IM6$ zA@4Mq9>yifYR{wvHO5^1v5dhrG5Aq+vJc*DWsJ+l_ymBC>fkA?p$t~wOY;%&^7mE1 zL@OBur<1u7x|*}zRe@yIm*%R4h=Q8C7gIu>h-{=b0u}Qj+AKg}iDT(LFF~5)#!EK6 z%Sc(D3R-&Z&xaF*7}o|;=A;zuKp44Ew33jyq!M3g0|^ZRl=IP$JcK9bUt%$1z5yMHW!47&0|N0o z7_h>#|88;Tu9s^#l|!NQhewtnECkRDw@LI&jU!8p_`s@XD;$j7nU`KD8g50;*>&DU`O`N&0&adBR)wW&)j3GoV#X+%cDuP~k?Z(t! zSL!YC79||Iv9bZcj%=u?rC`v3d~Z)V2?J&J+%FI3J`#K?N`%)z?P%+WKC0aRGE6no z*6lvO@9xeelF$tDhS5hhE)o69I8vBt4lM6T#p%LjeYY)0VS*-%fNQD~)h5>}mx&&6 z>am?w&3xRuM`dVlYFSp984DpX54|nbDcNk>NaSvts z%0dw-oSCpYa$gH_s>GxX2xjbZbh47^pVKx1oLRoBjyB`c)rfGw;pW7vZ6wpNrD)x1 zu-AEzMA&L;0@*RuRC`wS+^cZYT>7%0M+6#<{=*AGV5Lr5-cO6qqaC`?f2F{bsUwSG zQ3h6J!>#_I&fEoizHW1Ty=moM=^_Re!}n*}hCtDj__{Il^h(2_%n_D3VjoaEcwqf6 z$r`xXh;OcaJ1@Zk?xJ`G^q@?){yG=X@ng(ipe_AC@Vpg@G3WO>b=Vgmd{+OQTmSD5 zj~HRl1WXG}gpz|xgI_<-_`P`l-#<%DnqgM7Uup#9P1o%|Hi5|gOl~S%9p4E7F&apX zP@dNMeV|T+aQQc#T@Ud$WH^-)OUU?}Oc9v`q;Nj~Hl$jkCksU6` zj;P3vY|D-s%igw_&7Z8^zfIVp=dd`fN_GdDdVH$#vssL0K1 z%gq|gJ-C<)QluiLR1zW05lE#K()>1Q;h3~|QCdRDD`V!BN8}w9N<~LCaT9^f`5e3%-1#J}t?QI3O#tJ$X3*?l- zPG(_uL}9O>u)m^ku&r=ttnl7qp^{QGQXzmq0Qz@00t4Uy+i(B?Zb7Rc0D1{9KpO@$ z$=E`G3Pkib(Y>=#sBH;=uW$GN+kV#d9in;X8?J4sA2|H~Z$INIl{I&dJMMWiF>vMV z{ZlNlhEZT^Lr4imcQPtcdwTdR_kY{ZtLGnHh{$tzHqN;4_%g36-)P-6+b2~~M*N_p zYZsqh=g$nDz>?oR!UCS?Hrb<^4ecNdYs_hDiaxzl?_g709`K;6#B|+B&W(@jZgM_o zNjF}MG=b|mjJ0z9xBF~Btn{gN`>#IpvFzNs8OnceM%(thoxFR%>g8!c5FgoB@c8QX z!$g31_uBPOuatG`9=C051wF3MZtZ$uL1@`~W#{^(W$QbBsb0R+{1Y#LtSn#q>e5zi zm+g{5=7&qp>(XU^|5yT$0S}Y5Vj3nxb;p*~_MH{7>>gSIY`*BebG|$`G*jLX>#*z6mqO{zF|3lh;*&_hmP@bkl@TR%*DU*M&RW@= zKAtiS!Ze+3@p~=4FvVw2wtb8|d6^gKVRY@^KL{C2Z!ToYo}8t$ARY2r3)fmv(#tbM2sZzlpRn))8+v@gHkkUCM) zzw`G#_KES&p;G9;G)qkI8(J85zSkH7`AZWxv3uAwX&1G@$1Xi*c?h7?lfT5+vdjk? zy^Hj03Rx0OhnNKo=CqZmKPGl^>8~OLsJ*_++CTH_5S*Yvxq+{ zzk~FDOK88CGle#~72HDR<6G}RsrJR7qNiCCE%%&E&Eu%R^Zl{u>#%tg)Jw!aBZA;-|WYj1zh>RfjXVxUQVVY z{b{Jv!V9U$v(9UwQyezbl|cg`cmdI$`5M63flx-PBX;?`c}eLW5T%uOJX>`d=ujaM zyknH^k`ddQ=osfmH5wR-5SG~%^@T$d{QJPhbiHTNq|j#CvRf!?bJWfEFBSN+8b;ci{` zYGb5qNn?M#7-0uO2r8Yk1`B04=XRvM3;*9eZ$8zyB?=uB_66%{UDTO5KgTjQW{uUW zlUsxdVdI~`n|XCd{REvZTYGGXlo;w;0JZEWjrcb2^BMQeXIC~tievcza^He@c?2E* zU0SD!;zteBayOjfz-t~=AgCsw-CoiZW(9cO*)AHq@BHP0TV;U53(`g=56H3RE6C$C z^zMW%>H!LXzS$GjG-$Rzr=i5H0)SB3tc&0NV9{Dg58UF=1*T2`Ti=~G5R!OjRV7H2 z$?G#_a3RueQEnu)*W6-DJK7y1VHFnX}PUPrAvJQ&vn)uhE@c6(?GD|rTwn*12HM6T<(x0quMxy%J1Aa`W@ zDsk-l6pK(WLfS>e8nLxXfG9(v5Siv6f{!;7ETUKdQfGIBby@y)kyl8-0tA06QTiJq zh8#bSd;Iyr@w^D(GG#)JxlRdGr&V3aS1Rg^_in`LbQ$ky+kHSbz^g!WVDVM!ZkEEYg84xDpwUxk^f^hVN06s=!Zq$pKU{~45g#i z1gH*QjB>f|3(YoV&-|@r)mnH6{c`_$KVDozuDi+!gLmj4lrs|zDwbcaZxga6UB>ogH_6W!vHLf+0QP+ z6v5hv8u+;_ipJm`$v7~Q$X&dow*>@AAIJh3` z2>{3D{0(XHy{6E~Ip_m#_Yp{r#Ep)oPBN-N{w3eVIx;qbu=VF}!84lXN(9p1y+Yln z>$&t<{NX;C`Sul|jkh)9P&t8@E+K=$Wg|Rb`7!K);TkUNU0cqj<5RhrLGa-oRN<={ zwuXN<4ZSQufxC9D(f_VB@?A;p62ee6A@G0xIclxN>PCphHmR8Ub(QDm`0b=qI%`n zQ9k~4uUdlusn`Q^-UPif44Jk32PF~W+jNZpKxIj|4WN)R=tZT=!eef< zzc@~zr`H5mBfoFRv4SqNIX^K)1W!d0u5lrRkb~^nWSs3w33De5g^)oV7vLh6 z=8O(%na`Fj0Td%5;yEAxkcA}i;K9lu$0o#i7Q29pOppQBN|V<({rULKG z2v->pyQL4h}097N$ zbjxuwjNntun3t}FeH*j|ir}maoXG<8;MM4qG@zPJ=wm@9A}G+qi0?dtt_pg-CDL`F z(2fCfYeM{`)EK%#h*7zX2V}il-1-d$-1iDUtK9OH0{U>F!vNu76RNN;2l1Uus|VgO zG)+{{v6iSq~#3U9U4KkfKCP>*4GbkMet?v zyiaPbxy(CstzOMA(7Zsn$=yCSYvX;!_Fq4E(njo$5_GP)w0_Ug-KA@s95wHO*uyeN z#e=_xykL7;pu@yn2Z%md)_U(!A^V!v91MrqDWM!u;#`Z}3ZBCS<;Kj)j6>Gs&2@+h z;tC}VYd}M+lsg>KigH)|AFAH{pUM7#Y_P$>4*Yowvv^qct zy1L@j6Rq!`QM;?1j>!tcg=j-2)Tg#$wGhmdsCJ1^zx|7@Wov-jfu}6WeIYqn&hneF z8eBN&Ap(y}UD`)$xK99@f=Rl|q)fsTDU*1NgJr|uh^CoYpz0e5D#k@9#-E6^r$Ta- z*UscHR&?JdhMOeLgUuh86H~ay7Ur}l2)0&CxFRCyeD&0z*KBu!E;&;~l8hMbgTxd~ zbBKHk#)W-Fv!_hAtAWQ^#ZRP|b#)@cevvzZIWAi+6KDDdqHl8na|}t32@+|iB5PeP zNY?(<@vCaxoq{nO6*-}W9Pgi6(}zu_wIPfnF_N?ST0OLwi9L^~;`;aIi_liQtlGO; z13IVO?Wy`Aw|W1%QU}OGjOt|{%I;fIA3gU6|CoKKKk<%W&B-Gxw=D-hf;8~8Ao*|}x+=8tov12iq}FTQ zMNhAPd&g9zJhDuR3kU49iZ3Oiyw!xN=SL&o=Gz&~DF=};9ycgAgaA96mAq1H>s3D` zB$>LK(}J|=3BX%AB`gu};h+P=adAIVLmP3gm`T>z4cfn&t(&>|3IMmuDbFcY^Y6p| zc`zg_OpFM$@hO{CO!OL|YU5Q93EGu=>^i7+1S`Tdag2fi(F!)209Pz~g^A*T zh7yCLPj4)%JS4-ZuA=Sin*uk9RKC)aA2W&P>9`WX^^1#c%~c#aC=rCutk=`>IVdKy zi-|Jn|MV3((#9gQTO-!=7!GBIoqfCDz@5k7FGUfy3?V$?kjI&XZ}pc)Z{8{3a~;{l zZ()wE7U*AB76LyBsum50g zAWN%IB&Vx>doc*Lhlcw}C!>?1s|ydXy`iGH-5&wfEOvYN?)Gu-%ngOsD$H$Q`&H*x zfCWp{^gM&XMi0&&#G2*vd8E&DN<5r9|E6QZr^depC^IqYtcd#4jr4j4X}b^?31FTi zq0LLfIa12{-2^J@;>tAJ8I!FOGbj}pIwA#TS;SyE{4xbr=PL(6Z;p#^UghD_M1Tjq ztCziWhrB)}vgdc*mUXUMO%!z0W;qFZ*kjJ4{?x%&OK&|Ew>?Ji;VghB%#qT264Lrk z2>Oa`QnjU#WF7(JlfiZn+-Oa;KW!jJr-|{(V$ES8#<_~Jl?4Dc{ilNa=@zM~Odw}1 z5wj7eA>6viD>R8t`Ya{(G>2ct3@o0=*V5jmB_u(7@)%o1OL@I3qTch%C{jvTnPT}M+Ss(b3WK2J?y@^UkqdHlX=J5M(Ypg|&v}=odoV8Habo8v8)a3Di zEX0Bz>qYh34>DErWcO_Kq#goy;v_1rH_bo@kP-YW2i_wEayCi94Ai9t+#wj$-O@8w zs_muV5MsV2*E(z^*mst&;ijBNMw6&Oy&+(mHh^F%WL6MZ~{12pSg5Q0sL%dHA)@ zfL7jv*T&vF;j)vatpxWWtpo4$uH2Pd1?J2#AJ2F zxPik;GLuM_^@}H{?j2LQCkzbWw8wI+5e&LXtUhR(Feb=@bW&{VROfw5UpBm*_tJRU zu#6ehApx-Y$+nvK7tOI$`Mu@s_6sf3m336Q2-@~`+Q5;@fmKK3lT_HK`rE{h3^LI` z_ro4F$3)w7H7XsZu0qh5X8dFfCGoGtU;e8(K!{ezBHIo?ON3}UDK`2!?&Xa!Z~NTq zpBPV_-~>B(mlWt{!9H}@mJUw=Dq#CS?w}d>gyDT2p?v8QPhRaOh$0iqYTv4Jau>TY zVWu%0G)Ns~!gj03XHWRW9f%affLJl}el--eqh^XlSQPV`Fx**; zjTx2T?*z}Wy!v$pEx!s?j1?ECwRUi^{G)LtN)=)Mv?maSp>!VZiJbBX`Jk?9-0^$Y zttq^fG*dqVLzaR_2)kUM7SY3Urjp9-}j^InE_9xVl5uD-G9H%YuigH z>0umbefCS^>ft)ycaJH0`eOVaDe0D!G)gBD<^Q#v{DnIHAvS%u?mtQw6Vt>?S>9UN zzxR*ER`t3yNUs8gLnGLXsNel}e~)eWYs!Dp?n2os0;x=BC!O?(NjV@H&QJUMZR_hI zJOINg{n8|$UE~K_IEr&_HiV1_h^o3Cd9*cCz9pKrab4AGUiz2oFZ&m*6FMDGX%=$A z_ekigm4|F&@8s!xHb$_39xzKUdVVD?9Up-5MiYu$u1=SoN>GA2M2F*^`MTlrVdugx z#C0DHe-lyevY3VU3z=xOGx3IvDoy&TjHAY)hZW^V@qASc97FL*Vhu3pZWv?H8D=<_w99hP!p*KQ~14WPq6W{@Lxl zIK#N#oda7U&JK+v^bm~b}2t{M%VX{D~n+q6J@NGC^ObeyW^8{9ZmdHkYVBILe4 z{ObCx|GjH|vMzO9@mU)1C+}ctPi;fF6|++R)oTCjbLGqa zaWTVjM2?$}BsJ)mB}S$%#2rqZxt??~sayN?!MoviYftX?Kl=Ju_a4^l%BlkQl(R|Q zZVIJhttUI>!nH%Y=5h|xHgeZrH@}&7#BFeNeraBG0y3fNvNZj=<3Beb<}IBwM}3Xk zcEucjjrEXc-@fW3hSt?$Yf@_hEy}>C?i-uiEzZP5T-plKg`D2GS5>h+(dJY%@ayKb zq1A^q-rcF?)z@_IuQe9=Z`BA1P)Z+D$KF9?sD^7y+0{hQ@65_B z^xS2bY`jcu^GI{S0S`6aB*8SDSM@C={Q-N|=La9;-yJ?Fn~K3!TqAd5`WK^>Q0)=4 z&!&g3|Jy4+3bIUEn#-~E8__0mzN$($)Y>QunFChnlITGCj|T$nw;^jst~L7Ww<`kQ z5d^7}?pz($Is;`MWk_dxk*-Sf|DBA4x`xj><#C*C`%yXRfEmufM}HLXBYnF3pSIS+ zqD;aX^wo`JDNZH0fB^bBsUT0cRYt0AEOe=%lCbc{q7CR%;YV9=|020mnna>rgXHR6 zHOJcq2o3=L!cA&EL5vgS-;qC+x~gF#SG; zfWAI@14?kJoR_!Ih_N+n^VxBcPh4TjsyyTSY9-#Jd`-0sNGaV{Q)!m40UXvfW~2hnq76e zQ?w+v@KKw8$IVp8uXH$LbETU#KvY6suWP_Y0X9LF{liAz_mV?7)-~_2amd&|#$ILP z_m$yRH5QkyQIX$4J{?v3BxFs)@f{*2Fu_(Nd_&N^ktfPApO z*WygszO$<<=6nwA3a|RuO8Od5h)++j-xjX9C8n%D@Zri!1s)=`Lo{U)lN?cZ;fh%f z(iib={PB^gp(dZF=U2|t%feg%(184Qz)st()-1y8RaCxW^*=9rv|vwJq9&rrTE8Cf9j-piQea;?=ur zhk7(H^l9CeY9xfF@>EuUrd4iM@j3SN!s&-swY~u~SBEuKBu@GDA#(9n9b#O9trHVl zgmshHm#lBHrrrH|(ev(`ir4=}T>D&ha1^}UAKWBTxhg4iVQmC~V6Fd@l0@GT6zRqD z?~;qgF^jksWMaJt70H#{NHIeF_;$L}wiRa$2v5%1y=@oAM{t;8GB3;twHkS?Q@X7z zn9(iC$&f1#!$fAV1p0n@zS!i|Qs8Z^ODO||l`4#nS<}AXJ{rx9UA&NI;gP53)tztC z0PydizIS@R59PdPn#70E2sRyjvL_R}QSWq*Mp$Y@>AJ2AdAznPV6~A7%l+BE+5@qn zQwNC^i0GDio^L=q;nTy?^u{TNjFFXtC2esk8u7@e+m=K{sfBi0oq=q@hu|%eXj5yk zp^`cm9tw*WuUx$S+vOi$9wLeObEGeDubzKt^j!L`AfpZmQ<=%ehp~iq<3?%}88IW~ zl)phkD)C4Ld7BeLsm>~7s4#s4w|`CUzX6ozhzZ$IFE!G#GLGiRj#{)Lq_z{?+U`FG zZv1v`{rkq>S-FxP+k|vIyE7O4VcA(lLleD1M#th}0I0PTUiqnJg-gQ9h+D%4HfwqK z`_`|iOR+Ig(Vk@$A6}H23~EJ$@LBZCit^N&MW|J-9l6t=^Y9Cx-c;Yo^Bb0paz8)t zH`@YO$x+NOnn-dBo9>fp^(r!BquOg}fpba)24>da3rqH^PlTxQYQQBn6VFCj*PIJ2|TJQ$%!w)FJLo}f)FWCn(`o)rx-<6<_mmz$4i5$iPye(0-YV7Wk{ zXZ7;)#irD0+{`3q3yh`s+zw0ef({&bzmgTZ24fb0*)G#tKIUkcqf&F7u&laZ#~3E6 ztssS!uiEsV!lcs7lyeIkh2zaCL6kx=*E8gv$vL&9*Q*ZL%MK*YVp7|%2_g`O)RaKp z0OR7V;#`}?@{|RLlyywo$(Xy4zf%q#gIUW+r!4C`BA?uDgm5d{K$W^{yDr-R2)J5^ z%aA~tG!#>8mO7S)X8CUDKbA3@8}ah8=J2WVkBFhqvY=a4Jg6&~f!?;VyNq!3MIaJS zbBTwGENG}@jpfE&$a$0rHELP0jE`+}*ds28mXI|E?3w*%By=P~j6SvfW@gU8hDL!E zSEZ!WerbGnIOE!y1rQz8q9f{FKaR#oR(Qlyi`xpk7nZE{s4FLwGWu{l8(ZpGFh zEoQ~}JCYh&Q2|zr-6%$=V!pZ8zEo3eHlsr=3z*(sn_Z0`#jn6P;&Sf#WOvbpH;Qdp z*lb!yAk%%|rxtU#1lB>G1mYro_J)+0>1PRyvaX%n2B|GI-ohy;=9Cr%lxxabf{HIS zzcCd4JpQw>p!{Y*PqOnnc_+~wT0K;U#hdB|(DAjXGr_3R7WhzRATz$AslFZy7h(en z+!<(V2LITXJ2eT_$Es1mS>3@*s4*40LTYHTtw@6bC$$wM2S95!k$Z~j)+Fc7M=k$E z?|=3YDrTMV$u82C3N{IGTq*X1INt|>K%mDs<z@cvRCtANN0YfI3#1Iajfxu<_%`B*UdU}HvL!c-2{nj3Jeg??0`XFY~R+_3qZ+DrfxYFA+jebv$y`gD_@?Jq=|L)Cg{)W_gQ zx;DP4wtVMw(gVTwu!-6TUU^xCZ_G>1Dh#3BuCe!jmRtfg<|S}le&(FEK;R2&PkfOK zo^BK28ZkM%f@raqWfnLZK#!hZ%BarU*paW`qm~A!2(WGLXVUnES%rl>evlLwFSI&y z_pW0ACc6#GWn-|7eEdgLf-wj)(c{G;EOPm8vI=vocyk+?Oh16xR%YUAx+r`(6~9FP zonh;4{3sV7?kxKZhF-L@OB5F&MC|m31WALe<4sYMFpEV z+WxFuJQK8Z)i|=$QIn;YA;g^Rh`3Im2L3s_QXkyuC(s%b_*Pe@(hDrPcMAk?kr%1wAizU+<|YLxtWG!Mf_gX$G3iL!r7+I>!z5xs>B${YD+4cX+gaYy^o3ngF?G zD?5{u@9zF%EdC_G73J@cV$RM3^>0pY^TTI|F~k6YHXa<~nvAkQQwhSRiPAV=Rb6z> zZ6J_5929`4aWUgYxKKINdTiX}5rRbugBgG;vv5aScaYBLEFUb5y=2Xl6UOz}Otxe~X!Y4cFVAZ7c!D z3e?;ROe#RF>^fxW76%L9{=;p24Qv|7PplCrKAn$lKS3tFVo3pXQ}RZ)<_ zg^lQ$xG6saHJjH}ThKy7#fH$UYEYWYJkH~SI5`Az*e1p?)2{i}yoM{=1XwXHQ8XB>rc_&C(d>)t zflD4*Lf(0F8fbN5LGa#rnt1dswlN7TD=}6y_YHzf@r!VI(o` zw-a9x>-boqpa@^D9iZOBIX9i%iiPvL2jkjByn{df`47_r0 zEo&hUYCC#0UkoK7bE9Ed>)Rl~8UhnyXeb*E2Zkk#5 z+-%2R<3XLmXbA{$%5LuAKddQyOU+|6f^}AUir~Lg&rC1=-^&>R1#$GkOPkAl9^P2I zfb~ej4qy>d7|TKLl%O%v+M7F2c5)~(Dt{BVfLB!Q-BucH z$EwLmeqJ(%Ey~|5#n>Z-93kL!^q&6F|LI>Cu8=Davw2~v_~!HH)SLA)wxL@9!4X`7 z9Ng}T+jN;P&8ah$Kh~mw7VHxlS$Vx1lWkFcMDx`CmEyJ(ByCo(UW~H>P?{W(#goUU z@<|XkpH+_fH+o7wo4Wb$o7>(Xh(~W{;~dA(JK_9WRiLTx^dgp{9wMBRX)xQ)EWMsK zFqqc*302frkX;QrB88dqJcUXCUxUjxaUHMu7H%7mzh^90^IV#Iwp0JayDMrc`OhE> zP*7l=AH;y1qCjmfU*DS;Zy@kpz=biinmtpl-ak6IC;dR^K5ZG8%tZo~5%?I^Z>4G+ z4HMiaFs1Q7Py|^kF>hw;4$Zio&p-w7@{U}Y{u+0F{Qaw6>L;5=rNNg&ao%YV(-bcUnk11gc3{o%HIZnOdf_2f>WcRXw`gscK*LH{L$xc zD9KvqGsbsF>oRF0tHM5LuC}5#7QIeZaVWxV6XmHf5KRWQn~GHy9~XbrZ4kjHIQa=u z&3k>GW~vtzySbm<;`4X1u{Kg5Tr{y}_T!?LZ=Qe%ZWhf0aE;FVm2Cz)uLhL3Y%lUI z*e5Nwr>Q%#G0Sk+D1(o53lix&gk}gVpoa! z0Qqh!;_XyPs&aG=Q22BW$~a)Np{oFH%tM{S+6R1th*W~8&|h`Qnlxas|HYlJEjvO#?APG=?WCX- zG`ds|p;(T&8|#ecjV>t0$~_Em(Mr2>?th-VCQ6FF#4*rjTt~%b&0FGz zKQ9#fD*Lzd*jT4q1)fubiBhhY!Zw!-Tm&>nSbfYcduUX>6w|0I1^zO~~#WINir*4{oyz(ty@uLx8xjNgBGi<(JF* zi5ojVzkl~@iCorEsJ=M;x9g|r{=<%2-~V>|GW+Pv+Dqww+`qjYzqb9u`#(z; zi?{yu`1xgi^zzmZf0zAU`1E?{(pH7%-`_vKfBx`6u{;RCn<|m5d4Ca~pya}H$;OTJ zyavK7CztF&Gb%V?&o#=|NUWa79}OAXm~Zs&?9(Fk_-jVRwkPm0`^>!$$Cpy>EG#NB zSlJt2X8OEueYshGU(9~Hzt!u7`m08#FeI0`mlbVh1hWczmpK-8B}M0Ss)yF~%^3=3 z^NeCMoU44gKu>V@Rq|ThCwj%v{&1P=XpBID;YPU9k6px7^8y7809{8&uYl15`?C)L-!cv&5X&cg1x z<2Ij^e010Rb{!|!%YG!PvkU{HD=7~49zw4}_%Wt+q&@2MDFF1HtmiKu3!G1=s=Z}WLbx|S7juoK@xOj-6yUAq#4;j!9;Qjs%2KZ0 zdvZ8Lpe(_TxJHJV1Fj4k&4y#t?{yLcNuHXwj|g7NRcDrL zg`nAtd+swuGLYmdV|9_teYf9tzT5Y)Tg5~)k=M+(k`m+1S^kfM%xx>cM~}kqD0CvklVXX4(=>mjSUTQ7wr4hrCv>R zRCRTEabh>Lv%0EGla^_7i{d^Y^;TO~Q`>7iA$b>oQsAxK_9QrY9_cdZM=cq>F2Op9 z_!{ew{3n5F;LG)cn4Bw^_%Ra-fhVA*vmnC-8P;9Y{wqcXE(10h^wN(E<@j3uB{U?E zS_Jmz?8{T+lPWajT+{GOE+PceU(WtAxHV0rDN?Ev|TkYf% zQkM;3K6))mg7e5)Ye-|0-b)tNa172xu5hqkvodnI91S{o8{A+67t+4A#!wp8C%N{x zOWN@^90_hUYep@j8ZvF;5S6`2+69Sn6!aX*Megg?_mI4W>7!lPmkSPLu`-kuuA!*H zMcnZ7fk(=ZBOk*_Q(jBM14NkBVpGcFf&q(G3A(va$qTjfi834aXE!AJc1Fb5giW)*x?Rc7PJEX+yz?w3+7Hd32z!%WMkix0!mpn7(Djl8auCbUeIpZmbz< zC>yhZ>7zF#>e4UjE^d$W2p4wIDv4sua?=rA zMaJw0_XjU0OJ+B!;-j%Po)!51w##|4tS&XI7(8F>qqCjibz*u}pSTE&wr2r0PkX)U zo=C9$zY&AXkCbrP-HVT`_g5w%LW&cIs4`c;y3t&UrPsmHNC$*{RNt5R291l@g29hi zEg^9-rkdq6yBjztV3OeerCm)?gg&HFXV@!68ZVLz6P@UKllbjRnle;Y;Z3nt!uPC{ z{+V^h`80=P`OZBk61L{ddV@xcC$feQkJ8TvuoqF>s#&2&Pl4w57A4=kOyryT&>!P3 zpE8VvBlPOvHBsK^Q1Q$bXV%amOF93-L#xz{cRlWmLoq8Rv1Hf?V@XqZugsA9S}3=Q zUx;y<036|4_gZ(53pnnoD2<)<);JdBV^9ZR@FL5t*BW@6XS1-eW1EJZ{8nF3lRnWY zk5|j&_-OhT<(+e%B+zI*OKBegd|GDce1n*fL4{w=Iw9 zZAl;nIlO}r#LP=} zX0(@Puul=m0hfo*Y&f(|UpA2+hWf}msT4Gm>H(Di6itt|nA2|itYqhKz^PVLSZt@| z0w1dZE_dy8c-#I6f8_54%w;^XSOQs?B0u#|o*$9I=vACOEP70sQT@FeuCkK0yLQDI zPL19eM2gDvc5Z^4Z^b$7;jELcF}>yEkXEV@pz!*Ypygn+){N=}WeGevV6T1IzDE4c z)&R6|r+Zo~L4y_H)(+!AmfK0&Y&x}}o0ib&j?cx^BRFw{8X85>A0oSY5jpFb3}AZC zU9EGg0@}$|HVARycsL(XE%9+5djVgZjLrniXLIY#ytUH2@R`6uc=#`2t(v^kDGWGO z^K2-3g%I6tC4*dldlA^0*4fn#@4OqKn5*{8NhW$OD64b$|nsu2(Q+TAd0@tYbn<<|F<-i;v7g7PSfN*tsrfL#wxX zutx=z#_wqFWHhmamYR+(ic|TS03cLzt?AI#Ks0FW>Q`1r+y^wK`Ad9*9qReE52>yv zx}huLv&6s$7KbE8(=VOQhydQQd3#CzB^zMrtz2!TBt?y{{#>G_IV6QyX7xTU zoc3WZai^>lXX+jK(c8dOVxSLG_$*U)r#swm8F-Mai4+*HH0ep|5tY2pIkV#{X zL3%qTg!v)Xl3^z{ij*hO(F`GpJDr)3&e*+zp8QL`0@tQoTb_iJ!y=MU6dQ%k!z?LD z8PmSar4Jv;3GEfQaP@qF4DWU`S*Lr=hN!QMn9Lv|5A@87v+YCa#h^40$)-;Lxv@-L z!^?Of*Cy-r@Z5m4q>)EhOK+>SwE=tt$<=WzbeFe->0y^BXz_4|u8kMIaT>MEOXUD+ zIqUTmwn0|4Zf+c8x4=hnyq1>cmZuyL_4}QOVQD&bm^BGL(W}wbYkqmO!^phr7-=y0 zZ015g&EX}2Ms#0PEY@v#|+N0O5!YS+NVfuULLc@O;{)Y zOFTE22`&;p>w2Gmi9LCoO@Wc)My5U<#r!2FZ0;AJ51V-}$9IBbwM{or%cSKdG$jAA z&BI;j!xgCIjD8$ixlNrm&=L30f6I!@Aavfmr4G=W;^XKFqCDz`|F!k2NwG=jw}ruh zh}?na)?*hh_{9KfP5s`nog@F)UTnGWOwIRBSce7N=~RSz`}o~6?0bk0XxH!$sMt-d z%)5+ApE?(;EGPaCf5iXa_~RY0{{MqNw&&u>aa@-9Nk?v@)&Q%{2S+v5%%&e{?p}L4 zqdvl8R?MvZ|KpF!^^J!6$6Wtk{Lw0gTQu&TvTbD^Ya8`cxrJ>6>AZP)H3mn?OL^9R z<^RDSo1R>T7RNBEK8!C8(oKZ#RzNt4_7;~t9$)>Cb*=vw{y5oLq`vjGu-5BT+KQn@ zd`3nOmHDnI*5s;J^Xmtq|8sof3kR^$Zn=GRprXLYCt_ix`Jis&oxLGS{PE_s4=*GS z>#!`n9UcGqnH*zg2A#ON;jo5BpYE+2U*C*fPQ}GdEZilfK6OysI}oyd$$CBAts5TP zx&7v+zWirVOXJHjk8iUt_m9po z5(F%*g$FN}f65;Xr7> zEe7a`RlaqWuWK^FS+hMl06p9{y+bGIID)mB-5UIjfZF~6=?ozJDGrA6Z>w z_XSoSaUK5AD#vGVXBR+Oi2V9&HtzWL%G>D*XjLlSW77AL=K|mhuO5*5Io&T^d*387 zxa|A%>*vYLN+RLY=Q^5e20HeiE%n|O&2hQ=3{}QLuBRJc8gwso+aEpcos<(4jIl$v zcfR)!-R~q7%eRM|(X4;4d|#td;+Ox_53Oo+3#7O{$y~!K z?f*Oy`(x(X`AKNEVz$Hh*kKN^R)pKwrQW__Xx}2$1i;|u>F6~h0RE_6GCmlf<*JB> zPvxhfXrHSeql)|w@8gIx!|oQ~8+`P^lAa&~J@O@hiLe7+!oSx9RVD7^GrBr;Mv96y zSAIjA2#pNJIR%S;hhBtt^=y0nd1JgHZ<-$%^G5fWaMg)z3H6l|leCuk+~0?01onWB z!5m%rUGK3mqGW8n@Hsvz@4y*U*VOL&ZT{{*B_|d65BTvW3H5X@ zH-G)JuTU4n1+ESD82l_s=X0aKp|LEG;cTw*dmIg=@%N|kIQ!~7N*OD3f-jZAq%TSy zY=Q?^)&r#Nnf00VtwM{7r*tnj_Bfkw1Q5-&Ol;{h{+%D1i(@SbSE>u$0sxTaF-b7Q zqir^4BkMeqjW)PyIdxGLYP&0k!lp8xFTdGhdZju;ZzOB_4|fdYra;C7Q3LC}Xy4A@ zmsUF#F*pU$jI#92evu{MvM&1)t6(wL2^qtE;ra0f9xXnZ7YE&ukym6oHW=6@85QTU zGG?4&=ZC!AFMA18C3L(OV^Nm}kMOUn&!T)9Yi~m<2DTxdS#HK6kQ01%ydrFxWvTLnQz{l0 zWL=3e+%E1Zo$@R=mOtDsQTv1A{hc0Dy6zOPVo8Tr`Q`~@%XHm$!mRb`3hE)}a<;_pZQU|M z+MDKb;e5i8RL34CI)3B^mVs_AUSEG|(KBK9nfN8F_YMBn4)zteHX31Rr848Zwa18I zM*DZvPojY57k4k6dCG0IqG`?|8f~1Sbxl5c+X2?89Cz7w^LCTL*?bcw%HA4v?VNoXGB=q&ud-Z!lQj1!1G3o=rVUk zzQQu#a*>9Mk?M}jjr+E3Ru%MQCqA?Bz5I!WW593FCbOKYzIbm+ky*whHmL1Q*S;z3CfLHh%k!F%3uncr z`d0;PN^dON92}4GlSR-osqIT~-0PFr`xrf5;rePww{Je*j*^l8j-5V!z6!_SyuCdrqc%vNok2{|qwVyPwv$VhP)VyvZ-hclTz%~I zEzNbeA`V{dF>c`5A08PR>wVAQY&b!?lE+d#t4t&0Fi5f~!>?entR>Bqgd!AKw{iW3 zKkJw$4*Q5dUWBD8tl8uB*LsYU(Lv1=w}sn7qK z!9#uidN7=_#^mWh{)$p!%EtZP==b=Qr@e@oVvLg$sQ#!8>lRjloHg`#j$Q%jYN=(l zpM3t^ZuPQw+U24>9*-QfYl)#B9tm`$9MTnuF#!OE#L$1H-7Df0?N)xluhbjtH_Ho| z3^w%aqli~>p-8;|&ds`&s|wC~KEHqI^~;-gQAy&+s|}97m(YsNpnnS~!JM!$N9{nr z*i|z0N}Otw5I8Zt2UDcaLL2BxDCg+uk%s`bY_zk;g~pH2Mu9tplt(a> zFtf>+tIy9gGe8InA_f%zmiZ$~@U*=Tlcx~U4hc3=1lh?zN5I{cM-9&;ePUs+6!3kx zIS03yl?f>_fIKMY|EWle#?zu7g7QrU_ml*X7|Y`*uk|9hj?g-x$~Vc1P5AW9)!V0W zA^okyQGl{vx#mp$cQ-?WXawv+{znE)DOeOG8nhq5(0EkM478sRuVi*2o1JaW6c*B0 zf6sXH#l$y4N*oXDjVGT60&4?kCZSNI5Vuc4UO*W;0%-rw=m!T>SrGQ6x_RUGk_LNQ zKvr08iehHjPlkdlZc*2)`Y_dGlTan93r**3@MJle$%rQ!NC#y2Xdn`*&Uwi2UV6|1 zb$<;(b*m{Gud38hp79t=Pi`V?02C?i1eeKGNf826|>GHNLM zTchba0V@DlKAcNXV?sf>=z9yCQdW@Svyj_Pqeuy#c|>y<<@-5nu@sxF1lO445hg_m zB9yjdi}00*B7x4?hT0$}-#BCVq0K2U7yYwi@i|_+YjT0M6g$MBL?D$0So9r7$W{sl zGO_tEX-Y~~{z>;)umg)}dn$nofX#@MP8GA4h?lCr1a~sYb7CdD#Q91)dxpFs95;i?B21P$?KU$*k`VLK$J)bu$QM{5=K5`H2o zDm?URdCJN}ZOzGGj!^Xt9ef^9&N*@Tyk=WW$nHU6wD_0 zSCHdikSWpdKb3IFMfqFUqhuefS)L4CttW~5x?YiPvIvJ@h>k#cKK5I$Q!?1Of1aFL zmyz<8nb5(jSS^ZD8Ao=*ste{s5^#ExSI&AFwpLDfBqC4q$oAj%bA8a>n^hww*A@{P zoV>Q)n%TM1KGv1v;voaWnVMHV;=_eWne&>}&afeXNf(nZC@Otd$lcsz!R2D@-D1E% zs^8>xCSO;bxDoS(Ns-EPUIe0r+JrtKWn4gVJhFtktSzs@B0Mc3`Y4 zZ!xqFTqnnrrjX0E@;Yam9ojD{>scoiA|n2vQW_cUuvBZ8kkTvqCzOW{tb&|{P{2WS z00L=3Ugr_OMd$Ler)v2D&2M<*L0Ra_suOFUYVK{voUy_a=$KFuX@oG>0nhYG@yeH>^uZJLJ_d)yco3}^3UtN z7Pda*k(hv%t*-o~sY(Y7#n@Lek`lmOBt{zv!B0n=0>fPia`I;>X5zaTK6ZU^21-e4 zwghQW*Z`S>>Xnlk-;+Uil5w=G zubU4zF8~8!Yw-GrI29F z$y~vPQaca4k?4GBcQ%^6W4-1uK1bbzg%T(MLO$7>j#A-)J#di#c1=3%QY}$EyNj@v zhnX(QA;xqRdja@bf))z}iqY3Ns^<$TTsV*?6Ec%q%VEkhHu-;extO)L`Hs0qm)A$& z#yutSb{p~{{`Uo>u(7`-#g-f@WflsRV3ojehlDf@QwGH<>VTE6M^7#lWi7j8=?p1?skZx9@7v0q(XV!#;=x%=7?i8XV4nqH$P&2-tzP*Tm`-s(0;*2oijfgamxx6H?1vd}rHWPk|33%SUwp)%%&HAVF zbQPif*hx&I2UeU(`tk|o$b=G2wp~wN?g-O~nxLQo+$ z{FULi*SXzn)ekZZ;NM8zW3v8W`0rqFP6`y}^yMl<`?W&gC|KnLhj^1oNiN~6*iAK& z5{3cFFblKc+9Q*yi_m7&BT*Mf#gbXpcs>*ft29X}F8oIOuy9+NNs_tPmCsCaR}_rq zJS2+=&_~ker@&ecVYAqe$lnj~Q>G-O4KT_?blm?wdf0s=d0RE#4~w=ZDs^|tV|w@! z{i2;%u@eC=#%&r zc+>l>S3Dh_hj4>vhsr>(V!gQ$20KZSG2uJTr*F$}d-Nv8ZX3uaECT7o z305xi*R$oDDG&+*Ysa9E!}pkvDRiJ)L`f8_H`IA?@pw6)JX-7`_p(t5+7EQQpIClW zh1y?mhIDqxa0bF*(urr`+ss-@R0pM2mtnUc-_6mQXea{*dBUp3@YFM4E(Crl1@^J6 zO;(wht@7?LPFsw^qQA*EDHEA1pf2#!#}$s)o@<{$|(e+B2ro4 zk?#!vK}iZ(Lg;o>_g=-O-t$f%Q7q@J2S9q zvDB1u3&389&yYHu_+J{~AYo#Y7A)%K53B8G- z8mS3gDF&oTGgOggXad%igx(B_h}c3AQPC$LDk^Fy0xD`$P{bCBiamDpQ91d(bN1fv znR8~&?BDl)kYSi)-S@ga*Ts@`ybdGmczR`XfrMhvowpRXDbhu$m;~NFzR_Ql|6G7= zFO<_iNo{xi6C=dbnH-?d;dX3B?pXDDdgvLd%C8fjip@CM?@aU3oSVCBEFQn z_T)}8amBTYRxn=7XXV;q#`_NTF*{ynwy`}7j_7Y0e(PlE3{_v^125X(Kj|JI*} zuM^L5iF~2+)N-{g0y9A7S@(T!?LU80`bZ{R6mVBGfaDw!5 z;?~WPl38RWS^NK!KdyZl*zB0~talY#6nqe`r`SWC;X_e#lDL0glmif+WZ?c@`@i$Y z({Yz~{KkgOBAvf>-AZ(-i`E2)4Cg;Okso6JZ~nL`qMN)D*V&$VXr*QTo4BNN8zcfe z`-giOW!>lG8+(_}S>>g?+rwX)V$9Nc>Y#D8}Vu%f_*<1n_bkCK{_XI4z8n(u~RRa3$U)g64 z_~P0Q)>n|(v1WS9^+_`Rl4RI^joXis@gbt=j9;ItVbN@*ZoY`Ogwi^D^UjTou1DTH z^kRE&Xu$HPRa97f_lV9$|3#qeSAHMO_xHAGA;D!2c*%>3#ckzAAxp>g>7=N04`E`yH}M$2WEWAS%IP9IVuiUNme@pLhd@ zk9;U`iYs`yHz<1Jv7mN?4O?>H0#8+w!BP`vR_dV)Zq5+In=wJ=eKVC5HrffZK zi#dVZpks-tC}}P@Q9O?WYfi4*cywQ?Mb{OT&DZaE6X!~ogt@0Tj*t=YDHk*Txf-!B zcdTXe@ouna^T_`EVMg;h@$<4vsmDee(>jPM0~=EO@O_+{eM_h(vJ0=jo13b}?B7s} z?j!c+j2ogkvVCEYy=( zFUyD!tIb;=8p5bn%aj(Sb`MmkVADLGBQvDty^F}J|V@g zmJ>2!z4VOxBqtMJ`g&^YHs14DVj>6YR(49_y=4)5o~U8gb;2z=Im`w8g;l}35fQwx z5$6(Hp7xX(I`iTHxsIw>ahlT^rGl8@`>UcKgwkr)4Xk+SkJ_ro^Hd2nL3#4p(&?=@ zm+ln1y%r?pG&ZGx+pf0>Kv3rcNWYiFBX-}p&^nv@2M##Y7xD)n%|9yW;G#j$8$*<1 zlFOf$9MgR|%d5NO^4`EmKCoyJ@Nw6O8dXC^ zLfc`$>H^9T%+$ehDaP#8m4Tjl%-$DG=#I^VNY5c<IypEp z+cDV$2j8@-UJcGZOTU0Nv6J3&eAXCY5aqqnln3#?h4<|Kk`+KT7H)M-G*AD%DtCjA zkhGA1xK^9_o?{u;&@UhZ9D^Ty2To5<2aD$j*B$Lxs51PODJ&N+5Iswq_Q z+oQEmPdrBo?^pjWXXW#RIiw+2^J{KZK;e@*CaCq9>uZmjF%Vv77;6YeS-mZD*E%1J zvQ(-MDe51TxM6MD52FI8k6%4A+UczUD`vraXhILQWMTMU=~S~PYD-O$T6NP1qZiAI zw1`@6j>VXj?Zjs*Ip$) zLgubU#Xha}G#53m5V2aqq}YLWFQZT2v}!Lu^)hk*(U{}tl|^L16*A)XbJI0R7|DmF zC;2>gcL|G-4Iy+g2QwI{CkeNDR^stOYLG&g5uoTQF2%cv+7N%v+Y}m zOAXF580-WHq)|ph4un`bu;+N=B(JJoBgerU<_jeg&3jEPiW2LO@qWa15I0+?@D$l- zzc@pkkIL23AtfD29kMWw>lb!WA55@G4?%L|J$&et+9eAZ`6sMoi#(f+EM z+ov224`bN}me6?di&vSI2Oh$#ESZqID!M>gaZ6;fp+P8!LOVCnub;RE|9T~=TNQ1Im>rZ9!3`_=1iEt~ zS0-dw1Y=2iQ>k^o?Tz2}DGR75gvd8_+mR)G#6PwqVE*1{L5Y7w-*~E|;m8(Z|T0yix`m3ax5?pLX4~ z3uVgo+~3=p9gD;%B(yOlN7XxSru16^J`+Jz-VcT=TKoqPxiFY9lW|r_qs$BThKdd{ z=jDZT=%fJ(F{|JbJ_o$3CvL#!F-R>GausSdn{*_HzB*sOMFOQUMM+J{B<4!Tbqqrc zZ}pg00f|S%_D0*mmh^?lZE2{iCIo!ypMc-`5nJhQMU0vMXgCo{q`AbT@wvS4DbZS{ zz@eCL&N9(w@-KaX2c04ES^}(c1*kOC21P1&ia9_zJht)3vc8g&7f_rj$hZhpC(#I% ztHyA2n1TvBbM`uEw2h-pzMzlFiC$!#iWKyGJQ*uhhO z|JCPfL6Ph-RA*TTBtWEr7K`dy*cSY!{nfD0NuIjb7)sm&D3WYcIk>3WNY4c=D&R|- z7L0yU0o*rJC3TG1EF8_aNBgR;{0Ru062Kvf{x z`Wj)f;}QL!+=Z{*$4{UVG61BNv}GCctTL%0zYi5!0j=>l)D@`5`-03UqFE~9PV5U# z-8`MBRY$k`m}8>dam!^@c9A-#7q;8qEx?eYFa7e?g_wfd#Mg zjx)S$8efAe*epiyB;uOTR)U8 z(Za#x#<28O;nA2CeO-c+|Bn8+i}k}a#A~UUrNQt;NNyC`K7_Y4QE{9qImg!;&RIYP zHt{W^@S=QuK2;!-AsKW)>4LHrZSSXio)g#Q_C>_3&dvSJjKhx%NJ5age;+&}ti1;m z0Of)HWjW%eBIZ9j>4h*? zs~8N?x*o)#POhV`T%i-QJEtt;Zs_^+7(oTJq^!f2UFN5W%hD_09n!~BH1JoH)isc8Sum+blBo5+}7#yIiS%` zO-2Qf5MlyPTZvr;67!4>iAy+iXib4tg3_*2MLGyaqHt#D4f8yrkK z0KN$tndOF9_S`q_eAEs*H_?jn=_P3kK{G8_Y<*cE-_|(p(9sj|u@D^JM`+18PsGN6 zH)f(g^H2bJ^%DP4=A zPD7bY5sYq_$+0OpNkM;Kpxwe`z3w;L62%1uWusi>biyQX- zI9mB2*DyY;^i=WO$K$m3X^?FiG=xB^itZkU@mw%R4@Tpr#r@iQ&i_NjXmwoHGQaAD zI%1sx6)z&Qidbt~$cjay2u6u315|JFVG_v<#I56ERjd=*K23r7Ud)8dql9I}3#Hji zB!P1?)RwQZfZ!hsn7 zK?~ulAPRcPz3C=5c-Ia1!sClJdA=oU#OO>ONC9B=bt+%>4wRkdr;*U{eXyoS8}1Yj z*7#Z$s#g>X1zuC=;0g#Mgc%C!IjlY^6Q;KaxQ)%;IGgrGWZ%@d@svuVpsC!B4tI+f zrV07R{;*PC6RrKAxx8fil)96L6vK#(?CfZ}6)D)GREaQ?{A zYeZx1jRxDSlg>Olk)8(70ig73Qw$T~2MCq{ywLQ^6fR$_La;+vCNt9SX` zSrvy=cvP7HTyTETkX@^D_K-R85at?60wt2rsS+4o0vd=^tQO1Km`E(?ZQAQA#$x1F z^WZ?ySO@g}d)YCHh=($Vl}IGcD+L>)$~CRkNNI3R6FP^3$c}y-O~e6gAnpWegQA{G zCOArcx??lfvx+aoEL$Tjr!??sV%TP`$r}F%+PV+Ks1n)@g#E&Fh6I7Lf@A?NAJ=A!6UESota~9q;QYT7k{RDy=@1cxuA-(1tIQ@Z`P^?&i?Wm)}mkIbe4quYF+85iT!C zSY7~`;u(CT`Wm4_!<+^8J(w!}g3wfc0F%brdG%S60pe1BK`e2uY_laQ_LT2>BX|$CeV3yc8Edo~?^e1_T!sav3OcC(qekZLi?O z4)Eg^y-!tsKQC&*-?}R)4m$O%B+BKv9-Z=ZS#R~4p9gm}qnO|$ql-y0K$CtP)1aci zcueu10=O3|_+uBfA~37Wv`x{cFmKK?|Fmu0?mJD&*}qO-#hnM>Pr_djIpYnNE@?B5 zX9pS;{P=Zl^u>t$US*c?IzplUJ#ZmU)IV)?uJGS0yKuXYmeW*Yd)IOr^RJI20#_q{ zTPYsx%9lOsEZCcO!x{hL+WBoK(rR{J(-|n>8%m&PtG>=lzwhqD9io?zn+2pO{wmD2 zT(33v%C{dM`@Mx!p2{c*=#A-MS4pSi18$w%*Sk{tB= z`zo?h&#r`10T*8@Uih)y@UH8t(Z3&l{QY=D=`?!jliAYe6-!_I{ttir-{6lPDiCw= z!>di@%1rk^zo$Na8U1HzXWsX3qXrPtZiQ?+VQ~XhFo3P#>?EvScq|~PFlc3c>(Ua+ z?wMc`3e>ZkIOWpq71RR5x;{?j&ErK+tH_o`3DslA8KO#i!=i!huB}=I)sC=2BOc4N z&}f%U4NX$<>6ZDt&^dc?K2JRrfPij<0NS-y2Ya+^Db(rbiyYEsA;$f6lw83YcVkks zKVMjvy!U(DN{N*$>^?doOT@RPC8$f7u|-gdWK_AyB| zm-m(XCZltT=8EldtwR76|8abv^Ojdza&t$|CDg6V?tD8;a8TQ^NLYd34XavYw(g?K z{#v+hz{Icfw7yZ1L@?nR)8XVL2dPM|`7UbcD=c*MppGm^UDba;l`kwg^$9}HSREXc z2zMz~GdS6a>o*`KOwA`e^&c)=Gd33TjnqzWb)^nsK5&(a7f$7luk-fk8mL�g$!# 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

SnzBGt6kyScq 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
xk4yY_n4?1!-r&w>pmctjV1kGx0I9AfL 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≫g`;JsT5=*yT10y zC{VB_BI0cj%rsZ`spExwJ{)pU*zK=w_1DOiJItMcvUD~z|@E&G$=ct8rsxA!x1q^L@ z-iNnWyEYX^trqeK49b=R3xhnuWg#B^^HEwCrnx^VyOZiUsdYo#W%44XZC5yYvkj9^ zpB%mG{4@6)m)4kkm9WNJO~P57sfVY)yuq@=&r>0v}iHV(*E|}({rj)MxNon zClm4^)d~?l5NoZMA39^JzvCu7gCFzl*IV>VrVSU(g?GX;zM1}UbZp7ORB||ZqU5F+e{zyzB zGrEax^Bl2}kchsQ97=x!Q-jHh6O8Gr2kP zN;k*CRwz*ZBf#MP6<}NeeV`XQ@xKW$0Dw|7`G2RAOm+S4wVrx#g#N$MN%>CgX{R2Y zWai+t*8C@(RHB_CZrd_=hSjj@)unU^HV>Fe#EIBXPx!ao*Ju z-;)7Ri+N}$f_MIE$)N@#2pCv8opQb7=fa%NX77;C5!Q(l9k%JY%s+3xyj^(z`tgt5 z-;>_^Jw>Tq)Yl7e^aG^gtfGm&f740c!>A8YPfM0zh);4g=1Z;DAR&6z$z1)aMBQLD z8^Fc%8P}SmOcTQjIb2sQvx4;)7xWd6o&O3jZwE8Uj6v-cR9zROy!TBpivH!Uj=0Pj zzh&ldSpM`z)1ktJNvw`pksHN*K!{&;gel;q>m|IMJ<4%)-{d?j<=4pvNQBEt0hi%g zPpgrPd2m(lmbtq1cp08C8QJ~7Ae;$8lvQ)WZbfrJP@sbbK+!#VQpe<7)AHye+!fa} z+e#T@f2{67PO>F9lN2~Waa%b_=XVOV7}DgXMzraNePrx3sDxCnE~Bz_;k9XZwzPyH zZHno{`v3eMnbf`Gz4>l-2ID>+T8lby~!i%J7~zNdp&#pbCR0U z3vb6~;#97Zd#R5*A#Abrf#XDOI?1B78sudO>#u(9pyYJ{DDm)rkRg>v!mqSZ2|984+FyHr)LpzA(77?SlNHP9A!NC zhr9@cf%T%-t_# zM!319ri`2s)*mx973#j1DU$-T90NluzhnXwKg?_@!yh?-vjkKH+NPtxJ)d4|YhgK$ZSsMKL&6uH_Tt)R^%|t!WwzWmZwy9T;`$=* zsuaps)ADWm<;h$1W637ejZ+C?)TU8A*0-dSw}RJ%v^Dm|N8nB|k=$HUDqnF1PFBq= zv{-I3k^kF-*7K9}eC)@}%4HRca}|otdd#3a-3tSr+%FQ*JrS z1tuicwWc90OK|5m*6C@WuKS%Od6xt7NS?k_oaqkBo*}8^%^8o?I+#dJqR^p}yhG6WtVb{YKmSc0Cj_pnN=IZS9 zj8pC-)MY$uB@Kkd5Kxr<@|o2PpO9e3t1hsB1?A-s zh_P)_a>%54QNq%+&eMUzt~23x40oE6WlU(D1jWI+6Q7vV-Fnk8agE*TZQkNas~<-d z`aEt%_Io;hX9LEJx?>T(X?o?-TphFeW$(_b?#j}Q%|Di93IRN1B~!4mkk(s&;R`dk zQkonxrTz`}3~m#8A6ynMseErjpu@Okz;HD}si!>x<$7)B( zo^4vb_tIhb%Y8?gb|M!+a2S(z=7Lqt6bu{)UBM%B7~8wd707*8P8_^m203OOh=bpG zaZ(7Kz{w5wu!!i%>eK0Xz`Ct4HjFP8<8wu2Xr~77<~A{!s5|vOOkH!YQ73SlDQ9zu zkN2f9(|4S$A#gescj*_{)wYxbF1mncb9CjCzLrHbi$Sfqku#5P4bEfPJqMY6){}of z@tDj}(vne|tz8{Y$4Lj7U!DKYu{vUyjD@@LE?>KJD!`Ce9mnLayr`M^7@wa687W7C1P z9NlQv>vfZt98Q?Gcga(@%wc6-8DA3fg+%%NXvyf+$`CSP=G}M8WoL3|Qa0Au2wW=Z zaySa@Y;CBew(u(`VBq}m}bB3wLR^V5dKbC@VuE@D* z$X0|(WLtHLiBke{G;`a?{Qlf4%9rbmp3%vVIHc}VfC3#uG@?9a5*9pxnDy}%a9)6m zC%{8pBEDL`BSXA-omg&G1d`cyq8X}j8t{Z87sXAC?A{wc2{9W`smzo%VWwjkC9>1B zgex~CCY%%yKe=F)#K`xOOcD!!*-j(OgOpC;Ot>RLy%7;hZt%K4(o+Cj9zr><-xg)L zcYBK=1-4K)SOb_1{K~l4=6Kx}ejT-?i!KDcF^U*GlEXg zu%eV3Ha$D!8LPdbSx0Up>ET~FmILv@erc+F1=r$JKOavjNWv6LJTw%RJf+C60gwCUVGp7F(h7L;CIRfGE z$aOxOuJ+OQwOj5};KAw8TWAJWIa{$huO<^LmoQQ|Q}TY?A>0R6-i3 zlXPXkrEirvJSHL)bYr6L=IhN&B55Lv1%au7#5Fxj%Lhi$nS`H4P@x^=)DVy^Ai|2m zNm;U7Dr|XdiKUW0i_mELsw_K0CkbT4Li!3ZpR!12*wES~_44o2rc?JaK8r9oNgOQ+ ze(~^l`l0w@tvbQ3(?axeE(q1xI2N#~I@N-`~aIB%Ui3O`Ryn z1B*=Kld@q% zUI4iX9ABv-RTB__0w`Q8H^TzkcBmP{?h>pNaY!}iz&M{RPu?7riq7q)QE03^yVC+3 zxSO3LC}xV#7fYz$iBXWuy2YiH*ErOo7{9v&~DHCgvNRKw(fc0J!ynu;Fed@<0Vs3f+VfxAG=Jg5D$D@SIii zoQcv~0uZ)$^^p?%dnU>3spezP_z;yfBOt1ii@))uxO>kEISHr%9X=?F0L zPI3%fCo^6qKZJK#n?&z7rT?@Ro1U;IJ6Efw6rCB}Qeu?P8Ip1SHkC$|()-&<$b{&FD^~gi1>4?VttHuy5$( z8a6~cpOH@^eP)vy{v$I%%j?ws4xXAwAxr|ZOGk+t>2!aN-^wZUE1>d{FTR2URqFK6 zqn;fLGK&!2-@~$aU5#k5Lclw#7g>ZpxN%iP*hZpv*g%fUJU$Y3@iqOHSjRvA^a>?nA1@UAcrmpvFB! zedz{A8VVi-_{_v1SO+BQMys7yt4kkei!`kVy=|vU?U}dB1>`=CgC2TK&8@NBsagm+ zaY{@)LI*3RFZ+GjdeIu%Oef7USE`*EYu0+XGiYzinf+xfSUE*m$iP{v+wQEgt6Vug z9k?@|(6x6wYaUghMxNvDZdl^r)(8+QIF(LxM72;(2M5$B@B@&Ft0J#Y8ESEEJS|T{*pOpYo(F`kWscHb))yB3cH$ zJq6GpM3!=ha#=G;Wy&M-;5ngOk+j>3yQzQLEP{*sXi0EzeU|*{O;D=VZ6q=C*1#iQ z#Fb#^_L9V4kPYsB`=(4=x%jZ$5O*ztiOkGD%;Mnw$mkBiGY9{9>*dn_fk}QK!j(gy z5f>_aWza94V-eqpqLr|X7^@M|EjFQ$)}D2dwEJR$g*Kc>Qd%#?cK~GP+r)=L(#OrG zI$wQgJpr0hss=&)@fbUOe&tSAYrBvV8fKwd~tP%er8>r~Hs_>n>3P4}J@=mqaez zzxw^#^U`f0E57smzNc^cz9l=p?A-TtAH3o}f4`jn-B<6&`>v13#O~TYzUSmd zt({NypA7Dpt_J8(Bu#R}dC^dXi+BSa5tG>B`#x8`m2P*wCF&vsCVayHyZ&kd*9!j z!@BZxB0ic_DMr6AM3t{a48ArP`h4(C**`|1W_AKRz=O|ky%ZwgO{?w#Ic@jIl+KXP zW5#rfMP#BNXv(up%XuGCEqL1d(EpK6sTb>2H;*dR)b$H@e5@70x7PXt<$B&^ zZ70D%*!;sW3C`(%2ryB%_MtS^eF!^3R@e725Gbi20#3YacggK1Y1yApdG7XD-P#MI z&DPflld-$u-_t}nP2rQ zKJ#(Rk_>sS{;zb>$MN*L)QO{vgggcBT`|{wM!mL5Z+h2_6tMmgb8%F^iWCSgC!J*NS4|HF zdXw8*#3-#YL5%!9wC)rS)2`GOu=4ZWwg)9bnLZ;}!l31@7lX?+$m$&F63h2)7_cR)`qT+zcO@zR$0lKuuzk(Siil; zb|e5y1b~hE<8gYcX5eNK3MpK>9!@9O`9$wWRjseeHfcLXvZ9|4-+FDP$|dnmUX?-H zRXFdq?Xib_)SDA1`-m+Y)PtjTy*V{P-|+%dnVnbm%pbVAk%uwNqI2ae;B=De z@Y~lphy+GV(Q?mw69o&W7_kRzZ&Nq1?a>Z#yuBZlr3A-)>*Efu_f&md@tlj;fR#_U zo^bSN<|qUB+V81lFF5Y-vU0m&$6ToSDmCKnW2wEG3Ra8n;|}@Q{hLm*|NFiEcw0C| zJ@I1r?3+7Xw>nbVKDw&|q*1jqH699QXRQ@1IMS)M&%M9BOZI*Q6nBXy-0~<2yR1{d zl!q(ltM-iV*bWfu5{|Q})e|@(oLoP8U8`_?>f@;65sAlqzuO`JeRjdI=zb<}Cr`7p zuU4efPkZ`!`{tq4t#z3|mxs(}`2k9ZprlaUH4&wm91yCs^G$l+wfQFj7jxA)hO7In zP9;cPDEp3u81KLfRS{x8Dq9Hp%nU2>+w|I(zBPP3lx_ zW~=qf$?Y-l`e*TaC)LX!6`r6lP~x6l3T64tbyr`^RzU2C>|RnoClnKBG066Ql#y$B z9#UIiPPi)at=lu&3RuH%{*?TBF*kDd3_?B8&`#R#j+=e9T2)2fgIapxJpB*|C+Ks| zv$?eHVbfcg(g zc4kOkHL5VzsqvK;sQvn|H>0cXVc{s@DMpAe`;L_Z5KULx;JS8Yk7TXtF7Aq6dHYpF zpDV>o=s7a{^h;8WDuQ(fQfeZ~MZQm)$SDt1 zsW_yzW#nEnMb7b&aZz&z7K{PQlD*xK7E9btSI@V6%dC3s$wdU1pXirX|AuV=^g6Y6 zB0+$CFz&`-jD`HlNU;u-Rt|*}2OUTT8lXtC&CH6N+ZCkZ+M6;r@TG$-$&L-QP%w<< zw|xDq0-v7NF8tQztg?D^&gl}!S=?C?9jT`g!g#4&GsN2!jZobMuhG@ZH>i2EHrP88 z6)FJY9##XPMXhidTEt5DiG*$!8d=Q>OEOERl)|`;{;7^bV#cEk95w$iy$*h+$W_a$ z=OY-)LqmrYmPthUcEY;ikl>*Ur(43t4@u6%T#y1OP|}LrBwe*=X`PhfWi?FazP&Xh zD*CC~{2fP*Ndb-q8u6D3n&3gnw375M19{5zyTcyo&aMxB(dFSYpNC+;DJ%g`{scuM zd2T2&E_4X93V88o_^RpSV%ExIPacy7XxKE%MtKYS@GU9xk!F{-rk%$FiZ}UcX#+?N zIv1%M*6X>7*#(@tRu*B#tseVzF|9{KrIbjcTnodDTIldjhxJ-zZm0LW!^-BF_>rZp4DA?YR$T6>-^aM$enN6_OT^?pIYY z0dz=BZ#@Ag3+-BNIHoeV>p;-74rDEWNZaThnyesvnZSF+MUlbZ`q4gA4huP2M@q)# zfSBtS?W~uc)~)kfmtHja^57}W)-M4IYesTG`7CzL?I zhGNew>gMb!CWu4_;v-|#Lny%q%ctlzKd#%ZQscUuN%hzGa2n-1hg@qsjqZB4>v3bw znUe+wY9nSxNvdfO5uT$-cbY#*nw)C%I1c}8Y*wYR3qdF<*b(Wb(ND>#>N-!WJuo(0 z&{-Jn6_M{B;-(3YHsJ@_f_``t;;(srXVZ1L>)kJ_ZJf%}gKu`d3ml)17=BJvcmfMp z4UQ!73R6?HEh$HShpN)AFm|NA9&2eG>(j2iKC}05d;vreq%9 zDi4B#X1R)+UCm%(}ZQ&;4vFj{r1nKpWhi_vFpTrAm9J>HqkZ9nsuM zSTakGwG2;=tH<~6K65X=Y z@|~Z^`TH3Pqbm(^_ql_FUD^&xON z>GNC;WAn$|llESlk1y^uw~_L5W$b-~C#{4}g5uqb28|O<%!T4Rd*3kUkn@y24&S;Tp)YOlTOOC$ZA*C&RF=r3l5WMXhE6Q{G~79H~^q$JOMmCE!`P|Ew+p3h#i zk<0BI8ih8n3Nk6$s4w74z-e16iU*%p!$`1F*Hc!@9Tz=Bp@RD)MRC#b9MGhb>v~s= zCA-$)5_$SzSZ!}e^G5!%Mxhb1`>s$2dmjm>Gl(GQCL?Y!YFVOZxZUN}DmQoO(D=%1 z%r7JBmAkv0H3>0}hz&G1($QScb2*i8a?1T~?I?}#G(S|xhw*53HPEu=?wSwXbAbEv zaxHtIR!rO7!0f|lfm<@5nObbca__k)#;UhsHiZF-zCB?B#m1WXD@28El|7MuMT9Is zPSUdx*~^ZUi&W~3`B0T*-5ZyUiwo&Z2*FWn4K`Qy9%{O><#O*q$?@c8o@JvNgU@@n zA{(|p>)jjcnM(9bGxJJ+=8=)h$aM0mY}4QQ$79Dc#;($yR8z(tq(^MGSK8CQH7~EJ z8s+ZMFx~&B&w08p$3e|43=`FVbIh_oC%e1M@;J4yVCigOsieH${pGcevtSSpy%~GQ zbdeDFvft>X{nH|DvqC|jG#4$9Cy3iCrrqf0j?x$%MT>l7Sl(!O$%@8%^gl*`7@ocH zCUZblu3qWDs$s$!IT3kjS$t#MIHyWPq2_b+Pm4 z+0??)i^uvmPG|yf6D!LCwiav(PhM;1<%^6~Z?ca$R&M^IoCT{Nsp;@IfKYMZUz~1OMZq6)kj@- zv)fX4Kipa3Ijy-uwMC>-s(W1ql6WQA3IS&FTz7CFKG$n>I^YE#Vk%)+?fk(G=k`SW zrzR#qI5)D}pSb%mw&ZbN!{fmYlDbI#6s)7bT|mmg%tIC5GH@A0){Jh&m}aq_FZ7@Z zRA=zVlk?tE3xa3}NV?`yQ{%^GR=2JptX%A2x0o_rjpuoA!7GA=fwNYD0stXT*j?JM zeB2}n6x0by^~301g$3h|XcO*gTs)4J8K|@Oe2D}K$Cd@PLy!?~lkoKO^Zc$~PrmyF znK(B;M^aKL=p}+UH|UAj{GOkcvz_&fna6Yf={7j|lAkojE#<7a$gL}@G3VB;eZ;4b z7CX*TJ27*BvwM)kVfBCYl`x*pxjxrZCQAyaJ=JJ}*nTRTS`TNzyq})95#pD5zJ$e1 zT!coDCCsg=kBVU7jJ%bDrk#6M;}ZI!qmb5o?t5kJ+X~FquzWWWN@P8>dVDD4ltzxu zQ!@KbGAG|Kk8fRggN?W!?|(DLQVXm;oea;yF%bwl^z#=w>0I9AvvrTURl{nR|HmH! zRHbzNtQ&;8p&uegZai4I-JsItH=qVw)THrM3X4mwXXMGe!drnCP`r;ZmUOOuh1rIR?m{8zgvMp(b}`AL7*Ujn zc5!@i{jk+4LKT_46Y(BMK{s6p8nxieL2a}RogbT0UiP31xtDVC*`h91aF<#k z!cwEmvn|r+z2`$@QAs-&`lYcZjA!k{&!_V2#PvxsKK8=Pr{-rkAw^51n1Zu{yvGmE zoN7jUCHh~ViNd|Oc9>o^Y)j(^k%}xmJx;D?Ju)@z*^G0G((%D^84iw)OdRIQwb$=t z8myU)wpoaN^RUo5OK9!Liv$XiWH|wmuRA~Xeby>6Ccbit%FkryM&MrlQC>j{4XOz1 z!NjOOM-Q|BO$hop*q!l}U4`WJ59eiWr{P0MqI@3-SC@WAQ#^Kmp(66iwD0Xm@ADew{r4^W8c<1i7)eg%qDsFpcRcq? zd@@}Vyq1u~TX+CkxbZ1X$ctNiFGVu0Rn}T3&IE}d+uHH#i+5DS{2f$GLVr_-FSEpl zU4-PqVL=0}Vw-!d?~)o`Pb&UdfV%TKpBcpLyvg4bmhZnC$=n6$8aeYl_*aiNv!&s> zyWi9-jOX0N5)*UdBo2|HTue&wYrjqv5%jBd#gam=XVu}gL*t&M!W?^Ee#9uCyLe;L zCqk7SpA8gX7D7`pCQja(s}Ij|}QBLOVvEZjo}mYu|MQ zTn8EOAQ|meRd2!-<}NBs^FzKsc@g)8_!O(=_mK*Dzx-TV0y9rp z1&6e_e%7G|Glxv#7C4!0mHWrjqlLM|1n97jz#u>U;r(>fbu9;??1h!1QY9_xfh{a!jQlt(uQZEZ8Z8N@2V0iPs=&U09Fm_n&BACh#?SOU?~IIGN|f zedt>6=0)bb%R|2n;@4ZPeQ{Gj6#qq<%HwY(vf;8*RRW8LbFCu z&nt3<-RF-reQ8xwjjAqKTDkJUDNZ5mN5(bfZ^IVw1So4GGQXh~yVSQLfbTBAZcPNx zg^2el`M0aL?N?hkpUMrDU_x2IdB5WPYMv%DXH6I~gl)1_g7)(U>i3*>+v!RF60x4} z!i2_^FU)=0l)qwUXivN9xkpFIiGbrAW>YmcpGg=02ILY!^LBm!^HL@a{5G)lT8iq^ zds`BKmBE}A-S*8-NC#bBi|I#j1GluWLHz8w5STvD5)$X8%HX7$jyG?GC}B<0Vd$WC z;C9daWG5-L&{qg-^%7AEk>1VlYsYPRXdHL{bJ86ERalTIS*^^3e%%AzBe3qSSS%d$ zWT8og=aw9t`}0xU3Ii*4HD8{}a~tI4OAm0+8eZPOx;H*vpw|ZE^lOkJ(foiTFigtH5Rt{ zFFXi+{OIr2?883XFeaKK{yN;6XDj6+vVLm_Ah|-szJ7E~WL>G=9=(ojp*0VewzJOr z!X9n}o`i$;9ER+L1=HV`$7`*X?96ocsx;styqKu3!RLohfa$Z8lDOo6KE{jX*LCaP z`*vY5ln72!&i!l7f2E)n6MD$Z*{hD>u#tz%q?bfKpO*f)+u2Ao;&}pv8{Q8VsR{WQ zIbCluQ4vF?R-mZ>>n3wv*ApPw{m*pLA+s%C^zT=izyi$kpxEAOl2J$VmIcFr3RMdm zy8G5B5zdwi;9PUP%QU?sDw}dYj9-Z^Bii%}7S4H9TV6}+Dg0(SDvIfA&0t+|A#R_t zsu9a_y`QMX2H#8OY*jtwn{g34cdpz_D&}JfPQCpx>9^EXtXeRwHu0i8;fM`2^^ncm zAj)ReP&#_+;k*M*Y7NiEhUyW{RfZ8S*Zi{mFzT=(BayO2%gPMX$f$G4=`S@n9Ou*K zdGSS*D_Z;Vqs3smuXBU`wX2#l9d{gqOe{CpKP)MxcvU!V;pM@bLj5;<{-j22PxMB6!%3g61x?!er#LA1$le4)*UHF02x5Oy)+S4D~=j*T+sQ4 z+x08V9cU%a75cP1zI~XQJH@(P;;KkTraf?4dKxBW9xT{8s$aY1(dF1e`q}3?flx;M zfaCKl`7UfQG4+-0SaUs(>)5(0=n(bhp;EVo4^SDSP*cW4ue;^&w$TYUc+gCd>XLhS zo%Sh2lOwgfOZ97W1sZ@pJTp9X;n&FNjhj1a$59#2(jQvo=}Y;g3#D#8P^i!SiA~Of zQrxPMKZ9cA#=8~TCa{8JdWB;rK&_tTNI{~vOrR9x{!`j5?`}gUI-SG{lk%fNe_N#F z^iDHxsCQ|+*!SYE`vFyTCF@7FFb2yF*S~*s8te&6Cs~HT1T2=P*;d9_#O+zp`y~97 zi<6Yg&j+okE;(dxT6rbeK5n?*ajByk*mCP)ywgJ1mzZhpvZkAw#_MhR)|om_$>8Us zFtw0gloK%xwGJQq;sFNU9O_d2$Sh$ZKL5O#$xiLHDr0msr+VPTSGaEXy^NI_9G+)` zZ};h>IbZXqZHs?`?>5s5IPLuO)@Z=5i&Lf6gSqQCgF6vSF&$Xe)`@XM^18=%YfhQ& z^Ip33GjyfPgpc!BV#9#Z2`t|eX-(rHX2dRFsdEui;_`Ahb>GU&WE1T|i}#UJL`G#b zO}ww&`a8TcB`J@w-ovD9skMxvcP-+7)bh&hfh;XKn=v8(%5d+|g9?Etn=YLF z0QHQ&RROF=ow1iO5r#{@u-$-1T<_THp97oQ^m#fS!|WdO=1m7~A2#OlTkh`|m@k@9 zy5w`Z#arW03waBZjI-$QBWKHy;GB!rTPj8mhBKxeM0p0+xd@>w&ogUM^KEA?x=@x| z>AVTOO&B%4bLolwcu?F+u`(|H%X>beQ3D?=_jCa+^s=>GX4kKjct&8rD% zM6B~Z?WlMcPDC-7SV>`yW;>hMB$}|TeL{%J?jm95o?ni3u)cFlN8^2yr&b7?yByer z+$yNI&3$tpjr`ww5=;PqdlFs$6Q>smJ9DuASDb#JTE|UupQK7Tm}{tF%aKxRU?Qul z|0pB<-OGDzXCD6#oW84;WD=@)49d64zU2 z9#reJ`s+wsW*-ax#pydPzkS-Y_WZv%{reG7?1K~jH?DsC7pH&q@W!>zuf_lNByP6P zPxV)rZhUm}`U2dOfN}a;9pB!Mwk5xQbn6D(ljts4S{8WwCXCZRJ-_ks?OVTp$fh2g z47_t2?n(TM)8DzXv;?4yq+Fy*qLha0mf|8RGHKFxhWW@H=Y)_t8AGre**%* zAwP6`Tm|dVndwS|v)atzx8@ErRcq`d2372;zM1Oi{4KLPBg*cbIs<~cg@vz8PqO6TTss< z*zNDrRaJPA$Elii&)=TC0!lmeUq%M=8cxc)Putf7MP{du6yVeE@Ba+{9h6K+^^MAMrPQ?#!!6{$RF|Ez4Czy0<5IW)oLf(&8iV$=VV%my%ync5J8#8ssU8twPJ`)p_jbT@ z)!0{l5sI#4c80mI?}B}hDq~5~sr#)_uM0z`bawZfWVrfYy!Db_s283sX&&GIY3p?s z+3!5CQr0N%iuKYgcca))I`da_u;6&y_#cH*l$?_^vF6Cg?X~{UavsLXv zgzC=r2{>~xSKNb8?N0i=p!au(Nqeu^)&&Mqc?%>*>L)(IT(gD0;#p~W5xD;$`R^|s z|2@4n@450k_&=%;A?GwL$dPkLg6@O}Y3`~*OJ0J*!M)g**x*Af!XCCO=mD1<-0fQN zzr>ip#LgE3o51b&lGoyhI??K)!hLZK1UkSYl+rtJlY#pKs(I+!o8;ubUNAIQtRw4L zU4Tda!>UteE7oM*k3aa2vx-wNR9+ z(N2LhY4d2WtS-=Xo*d=Q-DS3trt)T#Vs@9W{CqBdWdw#uzAWVY(Sxu=n7jSJGt}zW z(Nf(dxb4hDZRX|}oNz4*57U9RXx0$gX~aGHIXGm~WP_}?KUiVf5^sgM$v<7yS^>e z9-_jzwmAsvN_l{rq+vad@l+nMZ~;xQxF(HXIH7#jfJX!IEG9yM%R^^9^@_T`c6HC& zlAUlch+H!ET_6rtzf40J%JTYN0=y#fLl&9B1lLHo45xa+>t`W#k$SgS1F@=xg<{2b z*W9%L5Q~XFOXy`2FzUkf#Wv3{N|YQMCpTJpA`|I2W~-SO5_GBjl~!vx*^5Tw`$$|U z92R1k^x%H)L>}#z4iU+2Zr;<1gQ44kOL(L@R0MeE;Ri+-0Ck~1pIXHPl!!cx*{#lg z4mW3cBbWG<;RUX4H^NYaNEN^nLDbM+6NJk>U$ahaTR6dCX&NN37RB-o=X1iz6Uh0n z0&Hu3=xS7YkiNGULS#wtX9>M7&KRx^U#p0*aaH|1=V@QnLfAloNEjw0Up0qZuFuvm z%sb+5oYZ75oKhS3YhrFDZkQ|n+TI+*(^iou#&a7qMg(XKc4y~ur#j#g1!Fr&xv}Qn zr_iN^)wSv2*qAb5LKmDqgi64vAaG z+>}DCx~{R!E1Eb;Y6M5!yq*bR2<%vIIF9U zD7G^_a!8E2kUDB>;KOtp?97#G663tG-bEf^xaeILBD>+^z!;z}24URMAMJ`bHxchv z5I#_17z!5iiowRfva;J^;3_ER*#sbhv$_=K`@;XqgFQQ$o{lettqkbq6^+|Upr05_ z7hMG}Q?Z~-L(e??9IAh*viH2EjE%iCn|M46V~gi;b-X3QU+J^`!F31Sn?BsXuU;s9x~j2kO3cck$jcUxqn48fLQybp-)mXF$qvryl<&@j7;|u>Lf2 z|3~|V_omn;E_9y#iMfL=u*y1ZZkq;Lt>ss3$eO@Yo8HtW{`o?<+Zi^->NTRfU~JgZ z_l%qg%A`bYi=XgFn_l+b=ecfF4j(rUF)>IP)Masmmd@T`qG#Q(MT?s<3G^z#f@qsj zj?%d>H)S+i{QJ-!8@pX%Eyt(>fyp^)LT(Ot*Z0-ySvSos0HBFFIK1qXF+9c3rPFjM z3RGtD3Te{PGKtO)UUeO~ATED31C~W8vvJ46P?pu3NI+l%8EJIUdBXzNTvSIn!66O{ zNrNIVw*n@?-SHF>4786dN|BOozft)wL^! z`ZGv3Vt_yn5@WmGSPIf9|8nS0MQNWB)FZ6Thpfo=WvCrSjy8+PJxek-xLI&h%7Cj3 z`_OUGhrDrId>hl8PNM`%AgCODla6(TzoF%n8v@EF7RfwDkt!vO0AwrgWaSKo**ByS z6a7<0_LBj3*JYjy@`FK2ctkKz&(T4Qu%Sa+Y1r!m$MdnIMmB17pMUL6J>N9TNB}Qn zg2h9?FE@k>d>cR~yzB#Kgk-1=fp~&NOrR}vH~e89kQ$(ZMeeGXo!c^yBo^_97=vJX zyi?SG@%G;WEDqSFTA2%XGXj}Tc@*LhlibB(njf)0KWo741pByHVY@q{n={jtjL|7} zqEYINDEf(HGl;s5DJKQ+VO-FhjUy_Y6Ss^os!8Cq1W+0VEW`*C14{W3 z1Y-e-Di6di>5$QNa>u>N+q`u}iP)nw;(Z$VdmqM^o9hlB(}!w*u?Y>KQN795}C~X?{n>TK~c+XnC+nu-SJxbWOH1ZG=w~vkT1yCIcjANNBxNni9 zf`P9_>^2?l<8CL3K|MEHBrXrZD-CQWe z1c{JnX5NqZywjHEsT8?K6!JJgVuxTYC4Tu&H^}D-TDbs;Ztj3BQ%nnsyS3D z)hMNO7&)cWM3GJt^%nJRops#x>hrn2*U#7W}Yv|DKPc(l5K82mVhx-1Lr2fM+r0DCUt9i4EEg2pOV`c<7a z`OxYLb-_~{FNvav1JhrMA?axwO_)(htTo>mGwX^ z1rclgreceU_a-J`jD;ZF^uIj}^W(y^Ho~nHkR6=A{RxbseaDQrWz@ZH3?S1vb(}&| z7~CoatyqQ6W&(D~Zvr|pwt6s5zcMD>+7#RGoOzJ5_$dm1sDnX47)WA3cs_b=*SMxm zxri_fHA3uy(u9rN*yGQuZTKyB6b zoSnKy9FapJ0*mV%PGtu;Nmslf(iB@`yDX&HPAlx&%WzjX)zS=Eq2IC?V7 zT@Fvvz<;HnJc2s;k97@Y^db>ZUe`4N;16(sC}T4y3*93j9FuQghzq^Gck2ysC&Zg- zNGP@#Y6M=%N@29~hrm(Ldx{F2<+we)^O&Q316akOK#W-EAqhcF2^uIo@8yJSP%?@4 z0DKh{9ZDzpar~ewFQz~dwHyMh4S!dJt7DcpiyKp2fJ!mpF{|AC!-XBYbSwR|=4FUe zx3BcfU-N{LkrMo@47VUf;kcM86JP@gH8h_(0}ytD6&k8jF$g-d$~viQ?j~(^4~@c$ zfp=i(Muwe`5V9%2ofhef+s+Ra=;Z+92$d8^B`srFHT$E!s^BxX6%+n}HgJiL0F`9c zwd*FKW3I_y(BZutcaMs}gqamD;Ac4aBP`^|Lm;0?3YS=}S*5uNz_Gi-=u+Pm<3L&{ z0Ze=}O3;}UNX%-zWESo*1+@x(I50BovIp@l7YnU~q${mRX-uT={QOWGVT#wc{d(tJ}b2{ZvuKZ@@-hO$Qh_x zE^?>n))|nWrr&H{%0sD2`{1f2pH=XZHfYwM1I3za3|was3poH8$c)UUy=b`|Nk@X! zpKJ0Pso!=DT~%HF021AM49bIvZ|&TcZ$-Uyby@VfdpXP>xo{E*t#HP$zuAH>YPual znkk7zvSu`)-iYwYEFg3{Q~PsNM3FN?-2a1#MT_^E|GW?UCM|zSoaPedPR3R&l`$x! z1qsrEiNK4hc%6tLDzS?Ry3n@GD38VYNaJXqnv$i&AtoKLOVHb`y4neknU>ToBNL*PpOxj=U~*Bo~9e%fr_2)Iapg+ zW?%P&$!EZtiO7(kKz{tCwB4KpeReYv!9p)c2qzUbQ75c)S3K6?Avf4tM`uCyk3v_< z!6Ffk!v%un7u~GDQBmA>(^#y~Y>qc%>R6WAqSt^rUT6qN^3+=vSP5Er-^W-(;&JP1Y(l@fWA zONv{3J*Y6SZUKBobV#sZb0Ued`^$ zx~>%w3DY)u`1f=)QVcEr6s4V#tR|#sB%RP@HbdNL%*dJM@h_t7}7_#_Z*;m6Q=syz7@hdA<>#zZcsLNjj0T_GdBiwSz%yd34ae->7$ z+ba-_NZf6y=UoW~96)S-UJDjSUWzalbP?g~+&&)?i3GP*s7RPo1CK=!Tu29nAQx+q zC@yZe`M0aoGmJ@=G6Hz?%GLHnxkh&?>hFTf0XfPNKrDA!xNwB-riy+jCS;1EY#!Ev zg^?>F{1kBN9tWF1Jyz87*0|NxMMe)PE2fF>T1ycECi)Ny`-Z;a)9-ikBlNMz?VVy^ zhtRq4V286DQZs<4P<+pY{Y*u0;N#<8Z7ul(1R5gK#PpZY4r50))Nvo2VNB zVUWb8$L{lN|*cF{WHjDDl}O7$#)z_S6*4= z`#DKd_Kk!IL3LS2I`6x^Y?<`fcB50K{1O zC4|^ULMrKt!;(dGR2Uvu3uf99jTS3zFtkZJO%&o*($ez1-?#Z94>L!O5`Rn^emQ>h z$Eh1X+F$%QtNbA``q}CG^TPU{7x(_`KKk>@jh|Ov{JgIGDK+}l=liRF{jb5jzlM+g z8oBZ7&Wm67l)q#~zaRMi9$)|a(ca&aM}JS<`2AG*;`ejqZ@JN*m%e{y*Z+CF_s`tX zKl3;KynXQpybe+rDL?uuKd)DQ-K$(Ys{C<7`Rj!e7^TbUd<5Pwu$DRPFTfl4{NME? zR=p1UADlk?i1+S4aNQ^?1`tqg7*rqiCi3`-Vl4!zt8LY(=>OpKw#>H3W10WK={q;x z+Wuuqemd^r=4aQ7^d?$kuB?3ZpPt0?i`&M+U;P)S-_-mienOEnSZ?4esGU5wX854} z`ayl|j@kY?@4ZNaA9E@9au8FRhu3^bdt|lj(7#XDe9f5ZQW{(rY@Yg>`TSbk3{pj}*DGdyQ8VcuJ?$P$wHkBsU>I~^JL6B0%x^S-{C7ng@N#2v0dYrh;0X-H4&pgj2X<5+jn<&Wxe&8&XE zjgXbwx{Zq|fe7QOj7N}76>2pa6G?~GBNzCDm*S!NxU)1a+Q?sXTjI{Myg^l%E=@b7 zW&d-V75VMGudpjhsN*P;xx+~1E0^cl;*G7BUQe|VR29eS$?jnKL$vSe%ZBt*U`l*b zk6>wL3%e1bo|l1y!K{zS^3?OCCj)@yu9_as&GdN%u)bXtY*DOXK>3WeWhZJdy2C#> zcio3>A$lGcY~YfobT-v3c|PN{?V-D;!dMrN-ld;Pi=ExFgt^{($1^>X%_h33-K|H` zYvO_%Sf8JH=e=s_-`q?vMemwiC#7%CTiAv=`$fQRpH|E3SA~6YJZHH#yGNY;95T0Z z8Svoa3tz8Y<2GBT5nj_n>;Ij;@WN-W68pkP`Ny4p@75M4cpz&Y%4meU$vFSC+}^>O zp{s1iyQ|HHAzaxPCg^k}w(re>WH(x0=`;#pu~9mPpt{CDRJg=!B5J;~(SAJ1a7<3; z_z%;`UuDs+A;7_YN4s^*b4AP#iE4Y>v~Jj;aK9wMOKMcb_?!^hr&UQ>z9#f1Yf*rM zWB^3c3xhxh)L8uV)(hQ(PFcqTS@m#e6baigP0G&bH(j8_>ffMQVSkZP))ErLnr)m* zjx@%8>K-oneAd0{a)HBx%5rP26d7a#F}T?e3Em!QQaat7(fU%n^l-_ zNxP(vP&ak}IcuEGp5@Xd{)U^b2D(*BRs?iZp(7P=pGU?5RQI{yKX**&_haA29iK4C-H(3N_f#k;z#+<=~09m}fJFaCA0JitN_W1h0b!?gRR zGJAWQ-a}a%a1%_g3OjhZldKp|Mj!6&vWawf0rXCChMGZ-zUSwgs<7DUb%-f|7^tCt z0{!;6NCwr6g6e=5idL&dgX5>P>KifrTLvlxs5>8*h9;~iMsnlQNd>Skf4z0aUhMXl z7X}_Cr8eeTixXNPa4u0j{lL*F2mB=!MZnU=>9V9m@lJV>amJ78r`wpO>OG_o&wj-b z)2ZVDNHTbJ*t9Q#b6dB1vG4GYk{7=WFYQn69(SS|LwtX=>-gK+q?>%<3Eg12Gqph` zRL)8j_Zo*d7=3%KW51_e)8Al6>8akQKXtnyC^Aw^(K<`IRLd7;k^It?S+aFu{!j;i zuPTsDr{~uKJD#n;GI=U++`Zw9&!t*gSrtY_Ijyk+erTJOt{kCXQjiwD+y~%e1Ltq& zB|In?cQf_@&u7gK9&k)e!Ka(?fuNc4^0)b$?5En)M;N14A4PyR1(M9U=647uwaTi! z32ob$(}o{w@P?UL?$d&fb)Z>)PfI;DZx+K$(v>h2^B`B=gj2LkH zX~QUTxb;5FG&Sb(RCq3w^jZ_W%JIz9mw#_(WuN_|)u8_>4ey6;l|iZf0eX+x29U9h zpK(ryN9%0AC{F$6&EC7In=7Q>eP-f&ZeM+{_FSOT-BE_)z{+FXD0-Fh1*aaVd}d@ij<>4Y_sVKQSW zF#f{r=e@8WFA1MemA`2D{*{qz1$zA2B`jzFZa&oVSRaO~TVa(66* z4*SzufDuhK?X2|ueHa+>>r82MuIVU-P%XvdDBl&7SncTx5S>rlLA$ACc#9m=zUg9R zVlt7ta3Drg6aDk6yV2f1`)-r~RNv~vLNzNciFWzVJQV79_0I-r^_(d{Hc$#{bVN`y z5!7!{=l8A#Xpwz&h&uq)`L%%acH4v~c@joW%V9v|Oq!Z)Q#gIC(3S#HLy{@zK=U!kZaOm|(W zP2X0?=F}5eVmOp@*2d*#S#9s&`QG)88p_I(kfO)XI7u-$h(geAF1;fpbnuUYSU<@w zphVremZv$1%<4w6gyfpun?coR-D&=rP}CAM?_%izeL83{hQ-D1Ul|J_@VtZJK}B;U z{G=eg8yUp}^y$#B)0XO1{plnm66j;L1{Jn7_1uEn%BoFenmc#$O*@d`IY8j)fh0S$ zu5qAJgurqjdL+#RzHuyMyG)?m$RXyeWn}29qZC$~qzGRIS7#DhpkBP|&QSUIkf6Pa?#PosP>FQI zgRRSWbHM&9f;bW)ZFm{A_E<#wt@Pw&wpoI78j{duA)-@ovaf6Ozp| z(!BO+Te1pW9c?OYBg8_Vj)k^LPHk4I^n4CIttV`X)4U!wlrn6`WCP=-VHsf-Y!E-2>qIh#2kbDw@1TS#m^X*{^ z)%J>cLHZ3~A_5oTsa)h%(5g)leQVq|vZ39T5k`{pm(;?2 z(Gf~Bm5(kyS3g2Wn5KlfFhrOC@2P9=(~lcf?{9CFRRC?aS7hH7m`|P@MFCtQgMU_U z^f}B*{T&d37EIenG`+8Xn8BfpxlHECH7wwLJXUw(H6nsbAQkT9gmFk`UDQ@m-t|1? zkkoS#)yt8Q5<&6FLC%IqnQeJ{7T^scnzR-gjdw<^*zDo3-Ipua(o&^aE!?SKz*@p1 z*4nNr3%V0WciBkOD_0>wVO_>GKIw-nIgpzlYc$Eh)BUT01DpUF=!8d-br8NxKsy&2 zaJm2TsRy1bqHcdundU%l=p0!g=4vgvUrOupdv?ly#jO<&J**)B{JdH+3u*=MqLa;6 zXYk0ZVw;0S2zu1&-<{3uC7+UDFmZQi|G~8wsHqjyy}LR^*wPpq$@+aXTZfx8S-W8p z(0Hhm9Hde7#y*)|=OL1;|AKC9woChMbYub5@FC#(V~f-LL0t~djY`|hebnSQk$up6 zTacLGcq5N4*leJa*aNXJg|-tgCY#ylmT&x z)koYOfEQtM-j!W$jlDM-ENws}w9-Vzc1B!Cz+&WAaHuG{Qy(j?Ha|)zfpnz`)-qfT zCM_x*`KDHpL)C~gtNLq&5l76AmgvA()Si$wzIqrLCma29s^H+|RW;0OIYm>?ZUHD+ zwDLdleKRUwhXj}YM8FRZ)S#aj89Z6gDWHa4JdNkAW_x`-aOd2y_(}1#sh%eft)Co? z4pspQ1aSfyv*%`8e24eiXC>9nk|ywWF&;o=%Ok#3`+g`@@#PlCfny`lhDU!R5!rXZ z!FcaRksgApNfv;oeQ~ANQ-cy7dcfi?3zRFVkhbczAJVMMz7{@RXE=TMg;tOFrS~Nl;gu3QUJS!RfBrtyjrD5GJ%3vv zJXd{X9mEPPPbbTr53&Y#mJ_7#lKKMDWKcq{8A=O<&YU8JpHZe48brshp3yWA>FRU& z0rLnaiVb=2+*yvO^eQriQvee|EvYAy8V)UuE!sIpTTbI%MkJM08P|0*vE=DMdrDox9t9Pf(gQYcIr0uWZk)uMZ(>0%;9$a`- zaCl}ZX<~zf`{ws6B(!3m1k$rol}5HWGU8%H<*|WkZ`x4Mp4U$uDWzgn9D~ZCg=&i+ z`GxgdhK9D12fN%(%&M?hIE3oe@i1oyLMH&+-E&< z?$_uTs{*au<<<=%{!T)O(?G%3oVjAb(Zdg)fsZjM*@c{Mn%u(6<0>FLN0r*#$dt6^(C6)kpBDRIzU*kla2KM zDOrIW>CUu6ZX}>C7o^sr5-4z>Mc~4TnA}zY3wS&E3wR{&qj)v+eU|VoII!*A$o&gz2&47C9i1pD z6pa&=-2qZf;oq287P)B2q;DZ$<+<0IImEo=rR@n^-AE})*dhpw<(4L)0ec5E2-lnp zW7KWyYb5Ks4BRc%@Xq`gbSX@=Muh+Y9MDL=Zf?uHa@ku_Dz=r(GA0FoM%Uvyw_BK8 z1$OU31xkl*Rk5$+Twt|v!E@53mfKZqzhxiNY;c4`V@8!qi!iYN+k0lmIbrUF+U=-O z?v^<%_97KVPB%hv!oeTaiU;oG!w3~h!O<*a0uAmf;j86V?Annx0&g=T75?c)a>zwdsm3aL2WpM{PP+m+ z)WS7ZDDZ*wdK}?HFL?Rn8n5=p>^(zLCx45Slfp$PNdobW=2qd)tXu9~s>RW@+|bh} zkW{!I9T7h)xS%ZxG5Y>p^-Iy!TvRW2wd@Pnjqw%oqBtXGUVIoY&0D&s(0o|OL>6np zfN0Qp=4g1B73%Jxm8ewNH2gYc(uP>^Ua7@~#JB{pVvmn9uiSD!@QZvc3qVDSxuNlW zYyJ3U45%rC2W3^~h+)F}dGi@0fWh57Y?nlZ!7tIPs*8>p7aerZJxeQJr0lV(s|{wL z(iZv9$%fPpo1^~KvIkI)sG=1}Ar?TY*~LmAeT6F8P8o9w<9?x1mY}=gBgKYPQp^SHU!ey*hza##|YW8UwFY7YiI9Ri@;Fu@_ zkF9cP*394mtzADL2Y}C~@3$lkRoSP1wVS%2wp;5CK<~X+@16jR8gH{v(_XuJy2ovP zqyVcuz9t#_l`^gDFVzmn=oneoTjLl(jqn_|`kbCAYe|ThomjRf}z#lUvH&#;C>t=s<;d z2GZ0XP;RP3Y0T17iyiY`*D;O=UvC9+LBRcu5E4-1GZ(9=>QV@1BNo_Wx6Lq(Cyx7> z?-{UYPSZsD>FsNDzGuyTD%e1xT;SdDy7Mcs2x?T#w%S)xT5s4SEWc7)SZ>VCJ`r~nnqbV((> z&d;1?cj?r@oogh|>VuMS?}P=nwaM~97}4Vg*UwHaY`LRv<04(CY~#HG)P_rbz7IES zZ{BZ%y~8bx4wM5o4Qk;ncWBdv8}L>fG>7d!4ZZq-`J$pfE6!dTx8j;Hycf2`L*ID7 ztZ*^5081tfyR}_k|3=Pmh%G~(%A@?uAKka{v*}&9!>rU{i~TqisatOL67Le72}ofn zfAU=!h7F}%Oy?MXJZ&sP;Yacjmlf2QUxkKG>RX|;O3<>La(hkI9oOghYq|bjZ_4lm zkFO#s1F(j<+?!ezeT3=au`CP5dB`|9H;Pe?8~EAeepb{|U?g&N@3Y zBr^REn7y%pznG9N81dhyADFw?26n0^ES;}Q&Ogc^7Gl{;{s+u{)hCdh((O)7sNvGL z!ci4x-C4Rwi~G7JIPVSr9QiMpee&nHG+gfjOKpvrvhr2|5^q4`lTw?e>Rh9-o&Oum z_TPQc<03)7MGeL9D~uUjHtmnDd|Fkp*W3%x+w)&A``(Tk&3Ei-IsACjP|0AiVtgaRJ@acU>o#rokBPMfgl5!{X#@mBwMsfTi?P zCcUJ9sA;V83>T)N4|QRg9bgHpU)S2XJwiJEc1(imgE^EtP6zB{ld$ARss9|#4gV*3 z=}at4#YuOnlLruAgPwDt#Sg7DKktHb3i)_PVZnNvv^U3UQ&g%VV*9i4E(ge@!^c}| z(&kTM6DX$c`{*+DQ<6cYjqS;0`P79o-LLCUlwSEdzi>_pdd?;NTIp{)hAmFN?Y!f* z@bF$ne}1sRB%z8P>TLg|$~@Zp%fk@QgfEXGHoS8!TD#>LeSH0)6-OT>`mVV6I3vDz z`_$@7_U_xZ+_eAtH1|o0`_sH{%FS`lb`8DzCa*+fx=#y-G`nH>0nfI*6rJ9<_`EXa zy4Hj?Kzx zKkm3%F?1ie%-&NX(oZops9;EO6?C{6Wg2-5f@2+F!Tsi1v@jf!>xW0?_(rA&_k}d z5S)L0Z*3rzm=;FD=TcrmV!P(1XSZ_;ylxWk)LuZSBEz;xNqqW%{l9JH8^R!PC#w}6 zc$rF8vMHgvVbha#Yh)I#zonGTg%5{{2GRX68(D$nxFaDl3IaPh3sLhS2~)4OK(gCF zCEuDVQk7~>igP;|{c<#t^oT;Bw$qUcl@}UNNCXYa60!=tm9iGSXDp3r zuZNk)xGsxblzpl6L*enF!8>$u0|S)RQ{#2ZD5O*JL8oEWip(fe_0_|t{=Mq<^rf3z z2Z6Ch4vswKFD4UzgC*(6llSx&x(GLR0rcj+%sF4BkoKNhoosgfUS{(LLNE(}K_B$u z%V6Ylv*Oh|YJ)wc%-biPeoRB}5ro`-!rh!iS5hLrlI63X#NomM-RTTJ^&Ao0jP2oJ z7`b07l1B`oQ(!5E=f$Bq!?nFPeBB;kLiug$d=1N zI#}M)T$B#-LL2VR74_4v^q($=gs1kN!LNBqC#qY+G>$Of`e7ob{!`Xr>q(ezYcBwB zwm%Hcmd4tWaGwoz41)h8pEds)|J_SYXb=rL4K^7+>obOSc(1@ds3ka72S%G#Y#nu( z0z6$PNAdC?*mH^~%|!}qMLx^Dw7U*VhhWQTaQF5md@4r{^P>_}^F`dv!T_CJbm^nW z+wOTk%Mfq9huw~5;Vdk>FY73u939GPIpuAUsQQIGWE!RuZ%Bf`D~AV{p8A0HZ4|>{ z!)vb^Sh~cLTcLOoLVfWu*Fm;R7lz3j$lRUsb}`@<6p1@JOWl0Db5w2`c8P ziQck@gVxu@zDGXVp`ckje@P{-pz)XCswVQo-{G5x?a+G3HmH8$M}{@037XSoQ-c!oHTL#kfG&5#zHv<5LLC zPR89T^x<4upQp@>I#{#^z6gu7DvuGtOu&C$$dfiF_}RVP&mQ6|kXd|ncwZUcrHS$q zP?2tOH)N{aPsy8@RtK%C@2Myx3F`SE^i4m5P6q*D;Gl$XiM#9~e6tG-j;w@viAkRy znNM&W(^k3G-9((FBO5jMq;1k+CjtX>0%*y?0?V9Py6&W`wm|s47{X)HIs*~=je3Fo zDqYNI9wIAly&`25$}^$~@&ZKIB$!oPB#iC>wcIFCMSEVt)ydH-sYr7cJlbW|vC*)8 zDsdMxWjZF+e-&Y8F=;)W6b$MI&Lg@gL>UJU;;AE4m0Bu-%3RqUlJk(Kl_?|KRniH; z7qHE8F!2p_kuox)U<^>vEK$LL*=1_7Yc|Y^Z|zw0O1iuWvfJGh-=QX!fMDi zGiW+Y5~_`f9R@AkRKj^Wa_%);%^jvVh!3N$)CT>Uv%X^DI0)%QN0>*-G zkRs1fBMmZ)fn zZJr%>+EBFDxnRF;=l(Y<4dHwks{{R;0%Ct@Gu=WTRrCS}XDc}nOr=n#p-e6^TLX6$ zAV}GWjTQ$?R$0ND_P9$`LDFdy?MUn^{=@_=PH?zL^PgmWL=`ksO6;dV#;U6)n{0?w zhqm>%T~J7mC4gmsCDyTrhc9VO?Fg*rWiuA$I-tn;_VI)$48Cr*MV-lR3J zot!6CZczxYkSc8~1}C(i&>-3~g#Llm3b<-rL}FxCgNPg3|p z(}=x?oW_#t_f^6@m>a?{&N0&U{nX57GF%rukwHHiNLub2oVVukk*QH2OGnc>Uy1&84iS9FF5S4-?0nWSF*=S;a+6k{yzG?IycQLMX;+k20~FUC*{sEb zQ6wl-lBHFz_oUbI8Wpor40RPjt?96L>*I( zwss|p@R$ST=XeUm=^4h3cBftu_StWhsJ3QF-BvdK1@lFV|q#XNn;U+CkkV=fSp&=iAGX zK^JhRrH~!E?c!|APZ@v}x8r3{JPSiB&{882=M|h~B;C~->YmEuFlUlzltSpg;Atq- zJNYmP%p;^%pH@GVi>k&gumW$6T^P6$+?G9$uevVb5toYK6p%q(Ul0s(!c8?<SB@(9xLlr5e%uJB+NbE-0YSL>{}w%Z{3F#8Y4{d<=#OkEBX6NyOk;G%zGJE7+LF zJ`AgbYj_=}a*$VsRUQLoeM|^BN7q>b1%>hw1%f2WvazGtm0{-R5llKjJ8|KiAbL}; zldFV;lHmPe&>d3Di<{uR9VDDu-BT~D|y~#`8 z|Et*stR3uE?n9u&d*l6JV==@jIyjI}IZZ)jaDc1dB?)N;drDJz-M9%cAywS$>E*nd zv%?oAeJlYfdte16UhD|l6cloPA|bj18st>ZEHH?cVVbGT7FYgR1c;naX=H_Cp~%W8dhWY%Q_^KP$mzDmg#^6}Gfn zmI)7G(1D%c&O_{JS1xkc?AG%XBbN|Hm?#bhu?&QTWyU^|J^#8R`>4cZ;DCL?_?{V{ zgcJYV728EebHtF6Zv`$QI4Ia|kg7W_3;uKaVW26ngNx~uV8^M|bzB6R1rMgEGi1;b z8L@OU&NZ)ftGBzh92zY~?UUl~%J6bW7;ZQ05(arqtE}07ykxT*QIQ-k9&`)_uKZ{U zVM5OVgqKoWod})GLBw|-JZ$gok_SNTTC*b*u-Pp)#3g6~)7*7hGgQ~GqPdetVS2oDRZ8($9ly6;eb4`Po3FQXC~ zB*!j&YkZpEW+>I)MWPt*&d5}mjF7_&smPNQ;usUsOnwnlpw-x>^56@6q!otUtRD~2 zsy$4IlH8gKmB-Ae^SQ(^3e?=AU7C{_Snw&WNYLwax(&3S_OVMS^vS$2OfN42vOKE)V(r zaW!P3u@easiu4)|)Km;RW*qn375|Be#(jRY`uvHQ>n`jM0C-bb1QtrZ>}!z@ceut! zf-MXVPLJ!M_3U+Uxt3%a!UT|mN&r90Rl$hhbV>N&FcH*a@1jBs6&VDxxr|TA1TpM1 z5a5#x6FX*^GdmPA{9jkQ99849qW-!2CP#?gJ8*Xg?KlQ=qQWBOs3!n+9DJws1=}V% zbFN}}*{8T6Ax*UKp zLl4DQ=2w8jl&s|+)wX;*{WRi?Ibni}y(q<0C=fOZsLO2_S*8N^Q^rV~YY<-RNuJ z`P;TkT-OX*Rd#*d(de8lZ}B2{?=6*V(Purv755+Cbaq3mZ{VU|U@vG4mJ%2E2=hmh zX;0U02X46d_<_%M;#JW@;l=NJ)T_>k39IOH^$|awJO_9(bi0v9q1yk?VD=odIq3g@ z*@u0Kbff2^{x_Jtu=;GmH4}s)`fY6I#=G@+EdAYo!R*`4XVzRvocRx!y{;sC;n9D= z?Bt0*K^d3+17_=eX&@^$jDTSFI-NMDXUKF%5X@ea^Wv^>>Hfc-^Nn|pS)LOZ#9v%D zaZDL;fADbprAIfrHor$2uBDCL)y~g0JhJxt$HtQKvEAz$zURz8jQARy-&=00PHb*i zossY>_oJ5iCV5FllM- zg^t%X@$EW8-awf%(+}_7=&*F=UwVom=SM6LA3v-5k17P?B?{19-~VpOjQ&-mZj=@y z5p8?@^6UC&Ge8O<7n`YFyzD^DEZY$HwgnDr&Fw2%nxXokQVn@k%&@=IZ)ZP)Rt)H- zGgksAlg#ev60LUDiJ@q%ZaKu^pVk8%lCpg*hFNsSX|83Xn1?hu0!$NFvmlsIh1R7= z!b6Pi+TOOW$O8%Eb!aG>BBVf3`mK!VeYxVx$7>L?g)Y(2cSp8zlcXmtRN;-e(7XCu zDNu~|VC*r&P2yV{dC|q@7f<7K#Vv*$D@O=Ob}KYiSf|8JH)Ngl6O=%%-tLUua-+!R zhMOpFQ$2pI1f;HIvpExM6qk|JwiLEFp7Va-Tib@1$-(+Gm1Qg$dkZB=V3T__xEAwq zWA}7(cN-$e)={pp!bs)0iDv$w&PGJ={%y46%FQF4YaG*0a*+nPv4>bD{^%m_B0c)H zDUeQ==mZ*|YBcrdfaJ!bf}LiEhZ0aq{oooJfT@YIFe$cg zYZa8B^xHhr&fkA+1w*kfWbr}jyccD*F0-h9o0o?idSdi-&z92TgpPXO8gZ^nODeQ{ zquKqXC+k9d&Rnc+gWtervo+*`ku(PRN!I=Qf~&?JC$$=}&@l3GU5=X{{h#~mFV#8U zr6Ray2>FNq}QGd?Y;MH{k}QA#z&O6~yM;$=Rfn3x{8WOOl#|yU{@H0~yG93H zJPGBvXK}#&YlqdZYd<=dac;H0r@lH@npt7JE@@eOf!2_AE9SkN5ed>Gn zE%CaA_5l1Z<%~HCFagLEF?e;B~wg(nYydwL|rR7XNmKraq9} z**4@_(}7V*UdFg~tttMEKcj1rr#B%pToRW4bY}2X?8CQ}R4eJZbb|uS=O1?4L%MH_ z5(;!?80%6hdwJN|;uE_nqd2{erD5#>`UdJi%WVAQ{4Fr!L4`X#$SPl_!G|0Y{%a=( zz>%S#E64m`-`O5{U+5rh?PTG<^_8X8aw)=GSTz52>BYr)bE(3lXecc#Ni!Jfy`GJ7 zX>`Op+VujLJ*@(uO?AF-0%)RjpK;VHlh-KXt7pL!vZ>HHl)?hqB( zHFcC=IG&GRWR7%%i@Fo?A&?MS-=kbkM}g-{zbP3)oz6TLSn%X|@EfkBVkO?O3_!Zd zqfV4Q;wx=4Hsn2I6=J-wciQj#`~1nBD!?=G63dQ-o`2bUW^0j$&F1@fMD2-0!|({G zpH%y$7ZSCW1P@2dW30QO`v+HIk;11XrZLB`Zjf`UBoGMv+S=Ez6Y)Ndr=G{;8Qoh| zcMOJ`sqgQu22C@CX(cndy|LtF*G#TIvGP7>Kl$Btr;n|rnaP#9xr(OCPV{ppKE@)* zgEX-pjzFgqAJ?L^Hvijj@x({iQWVPWIH@d)dK16&cW89M)DE=a={GY#$ddXG6+U$F zt@tgRKpkbU@oxhoe+vPeRsQ|b^ZZZ#Ilrj=D?!EX$GPayvpHIOcOteMYPL!8hbPwU z)P115zRz$`I;Vbr*T9eGi}oegu=c9OxZI12L&eR%`XhBe<0x8kaqvRixZd0jU*|gI za+Je|yiK(M@ZY=XdDm|I5efIxp}9pgX-C-|hZfn}A>Yta7}sewK(E^h76KG+6C>3m zoxcL4`$A`OLDn_k(*u`Rk%smPBs{z ztabZb&Ce2Lu?7D0t0C|pL;*K^7@0MUT*Bm$YA@CtfX0c6b4Ufj$-T@RKPzeBRxve% z$=x??#rK0k(M35xaWs>=vnlAP3{thB%g|#Ws!`9k!2i8z>?$Jw}@H6qzJT_!>2^4IvO8&GwXP7M9ELf%p@#^G*F9@mLaLKfsV zZ{TrbNvJF?J*SsuNQMN+it=Jnu+JAOu9k4qxSMB@TggI@)~UbRWT)zz&ty@ikRyc^oVf+32NTS!}I+3=mt0Z_>#h_)C)qQX)AuDEWmwx=aO`_6cg0Uj`7 zsRnYwp=-G?gjM0O3}hHdbi!qMwL+tSDL~E%*3F%;%j$Ob)Pi>VaAb&Jz#6>Pz{!WN zC1b)zHR{#Snrt9}4JZ|b-Vbii^#I*Df^_s9Zw7Fy3{#_uHlm;dvykzV++V}{`>I=4 zmmr1@6vdb>8!s#&v4MCtSIJ>>)7oHYdKH1vQ01>iloa|~0cPLBo(E#K$^>y@B#0+E z#a4IK4mgac9WDuf6NpKs6lzM~qEpDwNtk(e?|Y31N+XKL5O~lEAY`aD2cAhT22aN} zO%{b&!AEyReC^>O7mxB3`;j7;3z@4S;>TC<+!U}FkmBzC>t3&@9Do#E-)x3vvjuw{ zxyBs6nTVH@!6TwCI0|7~x|wmJ6N*`xP<;0!AIXyx?cfxudY#ZG*HdH=T`Rr@2X-S3 z>9^Rg^GaxJ))A;c#c}j3Ypu%*8V;2d2G6+1Rj)L^wx8bT@OhXIdQL4CxvI4dlpyui zvH~S46&b>abhs;=Hny|s0q{apmbA!Q#?@eh3@5}M&SS{U(nzqb`Ec4Xe+6J~R@t3$ zS`fy7JJAcwDNt>z$TwTzN1sLpx(1M4yo*0_z2$;5N^vF^xv?AJH(B6kKR!G=UP`CD zy#iPb!&DH06bdSxEr{C+hfUs%IV^k-ANA%FV8tm|iw=o(8DD{TguNmbM&8(5b$#ba z*E|v&W_2_LzdGX8(zjLD)!N_?#gfhMu$kMyETQMtXRBZC^4WIn67i+O>a8)yexB44 zP2}y4d67#%aSB=V0*jYE`CXTYYj{a*$aJn}wc6wk*OyEfz~o7Pu@>Uo#x;C%nR_}7VJkUWwc;Y;f6;cIUrqGyqwgn~ zbdnHyhtLC3LJx=-I#PoQ0)mDj1QZMi(kznzAxJSGN>MR@1+WEd*h5ngODwm7HGl=h z60l*p<&3}m-Dm&Sezf;l>-+&c875hi&%Cbp8tZO z#}iBBeSVFQCKYKQ)39Zs^-IPx)Z^SgQ-EpIap!V7+WiEj@GX*Q4pG!>Q}uHiBez>_rM7 zgfgMsFqfT{%Ff&1WHcs!w$Alh{+s$xv3?c*!G z{SKuYVzB8FNLRw^t@^l4xEBtbfjb_HdLz}ooDqaD zfcCxk`OA+`HO*GbO;~&@0~yZ&z^Lf3SC!$1Dx=ApwIA-ltjBc{AhrpekCQrw_Ob;b ziO)YT*F4+wyRi)%;9I8i8RGJ6YT0Si@o$Ueo4zLQ8&M?{Oq6y4$_y~E5t}gv9CemI zmLn-tJ^!sqv@3vZ5V}y_xS-aEO5BH9n=tup5owA8rc3ppe;+txH6}*_uP^`g=wJwN zxiEPru3bsnO<}TYFd@-1tC7J&R=4_YlH2#_ysY6E0}LaNl{9ePJ78P$XKVBI-22_O zYcRFYW{PE`tjy3Gjbf~cSfjB&{a`!`P~TP&l7$ErVUI2YTyZLjXPTX5>-IK9X*51u zUXwgUFHJp)#%uFgR@RxES7L+LML8s71+S_Utk}X=9@`1K@ulpJ;1jROIiv)^&=nVb zYVxc5W^Zx?;)nC*fUtC?^q!7%(Rl=72}7`_A9`8(rs#&Jsn5DKfYV6NZfXG%{=V2Y z_K%;GX+Y*I9N?3I#x~fk6Iny1l*HyPo&#fwxUMa{g|q7&@rw+~oUWyPUh9lkcX~3F zt&L@OxPP~OTmFvtO0_m(GBsUykrkzs5SkQtDgE|Ll{V|`@=oB;?lslEe4p+$=^bx# zZQr@==nWFl?ZL$R|GJpcd6`oCr3&-qCo+%3qz`lm}q zx90jWkT^JV%?oA=a4vor7^N1&u3>c?w*E;_gfiKHZO;r@Yo$OT|03xt@2*l&+=r&k{U3UFkkuFHw2g z<*~xJ3i2Fq?~y$>ay<)8m>&PM?TjKTN8wIp4`!}sm+HOb*(yqj1IX34=N6DR$Y(fU zxCom$j}B${*{ zLrh!`q%P&9*}Pcl)a+q|O{DB0+IJ4KmQP){*i~4fN?&p5p1SojjVPx2n#Zi7-S-ho zG(QV4uU#$MD)g56B2DSYd+%CTnXcE|c}9IQES9{_BgmghPpGWjtHVP0GBC0H&2@$` zSzGTsI4W4rEQ9)b^>KXO9OCBr(oK*kj`BTxe{6(#{)ne0D8wvet73E>Ht#{q>(C!= zlwe|-N}d>Phf8o7W zyz}13sHN(e(`6w{=-VN)P3H>dw`~}?scJ$mTw@JbX(Mgq*=!2JBJE<>b`y>0m{VpV z6zlDZyamAwVMOYSa?Tla@ zlo;Gwr}w7l_<@rHFV^SZtTPj#w}^dXWzbrfTqCmwm5=WTUrzx{4(88efa07nG)bnH zXhY`3qMgb~t7^yKG{oK#l$%f?f4$?F)Un8``R z=sW%}Dx`g~%4pTO!wL5-$n_Oi9Xp^S{nYEe3d8)l_isO2%EW(R_B+a(TYH@o3i|Ui z_jGI^)&Fn+pu^$qzImzty!+cZCz1BF<{xh|M+c;y<{(~$wzB^j&h%i>t=4oGeV_X< z^WA>!B{wI4!3y2idn{Qmw6x74OLrF*g(x0e_QNst230T2)ZNk#XX2SlHFh)|YK;1P zBbEz~=ij^8lXm|^=3dM9%|^{$|0aor>VaR6eVqead3{fm(Tg^I^h}QBa5QdG`BNS> z`tB_Ug+8C)pYL^>Ot)tJ@%;J4t9J61$QwGD{ZQQ(XL2a0lx2F#f1AkgY!SjMO=LWB z%=ebQb?G&5^O!-RAL`1}fpS3ksej8lWJa&C?|%R<{x9J5gaPmA|0}?Y!ix`%>;min zT%r(wh_sNJealWAzV+YA%Kk_W#p!Uc#~(X`0+IKt5izShcz^JjuD@mFID@#;M~ze7 z4$krv@_uw%-2Vc+cJDLp@nRikPsEmN4zpU(lmjaLkFxTHw{4|(`HV+uRqkLB_Z7@o++ z=WG6}ti1nXmpXg;p=V~VO?spE%VkP#g(nji9A$EwFaK3m{^az1#G&zBdWpq`5+!Xv zh+@24zsWOucz2p%@qfz7D_1Q`DcE$&W#ne}AR^qe4^(Ez6@DsNr>Ck4aE-g=f6K~k znN|n|llI`)iZBbVAH78Fmx}iQ$&Jb@MI2{=HSU_8+{wRXWwZE;_~mz8F302^Z zPn5a8R16Z=Zb_~#0PFK!Ho$;4H9T#JY?;dpYoL@!r+WJdyjSX!Dl@CN<+h(8SOqH= zxW7ICVXSF>@HSBF(nmH^fye+xt?xef_h}`h0AeC~@xz!?J5WC4cW;k~kwtq9-$Lyc zIQmODSmUCaU8;gDU2r5ZikhkHj^5W@>-mx)DcSkqd^WUK>tlWiIp`+PZ*X+DJi zNX9&J@h{-L*|!eUAItv5dld0=m>u#l_ms0rM zZWISlb123s+@*>g`4IYS0R!HwzG%$3=hkvi#giKO)L|yZsZ#RF;VF&x^nP+^{c4u#L8jS~U>wgU2`gJU2SLU9}Gt8-*W*GIjZ%??ZNPBNgr8q)>j#Tse z^DX5IPgjD~1uMKUo6*m{PY6dx%fJe^kMmQaK)WA>f{3giuNu=%{CK@D|KpE0;&Qv6 z(+3-}e!lHEa^mN^W9L5poRM6&`}O|xqpV*adf%M*_3_g8kH26IWB*$*sI~F;?6Bp@ z-*Y$JKK=eI3$*|D%Y#)L|NT0acJkkEPxC+h`(0jc|7ZSX!^S^9rjMNb^Yi_=Pk(+X zuG=sC{_<$!!oTxxPA>fU{T<$701(9hHb{!pRY15 z?-8_H!ET~gSqZg%2Nt2$uZmn(>ewm9uWD4gD-xB_)d}bX?E&4o6oK>URCvns^*6cXw`6ePiNx_kkoQ#74;3H|e`e!U8_-X!Cj6uBzi~f(+9)!5K5* za9eGKId23IWRo$acX#OPhk-tH3dv7el~$jW<;let9!v(6snwLbNFQZf3V1*pt)wdk zOkU5z9SCS+*KCbl2gj|1*or#F-NB=`A_}&=9Mx6u<{9lelkCAejta>8ih`G>!}AX4 z<^}BNK}f71d#N!w;Y*^y4M{)f!R)24p#Xb20lF?!o#rgpF%vUUsQzBhB0y~pz}j8m z^3!h)Xll^$8v8kYN)$2tYWW(og;#B`k6AC#f$Y1C$>~BlxJ>G|^hEZ;4nIF{G(Xe? zb?ZDzh1K44PJcM|#QB4<(g|QWhmVIBb7toz>s(})Ek%p!vNL40N`nwSNL0g@P1c6h zzH}MPCX%;^!@L^3Rp;nctIY;WS@$%_2~f zD}_BQ)J}aMM%zODI&<F_Jh#6*^s{iZX`RiMVlLh6pU<$%g-`ID>q<76hYMJtM zqV6ZkAVBzf4b<&Hm}X*scd4r6I+uja`)c5(tzzLR zNM%1ZdMh=<`U=E9IwNXk9OA}oLq&pu96H{JBQdabyL#Q-bdfIhWM#S@ptg!}V z$J4DEl4Qd*1rTtpc?9U<;`PPXoSMb~f3q((MnK6TKL=7~X}jK478;!@2KARr;IZ1* z7PGtgefK1nkY<27s%K5wiAU6=;^VP)0Ft()Pj!S6XdMOTFyC(mb~AU;ZKQYg`?Gnc z#-JoUpc73Ek{L+B$#>#N|tTc5@`?D7mlR)u18WF$rI#ez1M*VR1P+2}#iQ z(;uM^IOsCVGWfX_Cc3`4mOQ9)av1MK=h;i|RcpBoXr@Y~b^CECsN2cZRgg4Rj2k?~ z_A%;-k#3`Ebn1v(RV#*vZ13Hz&Vn!2arNni81`sD07UuL;SbuK-httmwjvYPY0i5S zF}>`QejTbkANL}yR<^31i@EMG2tXw8!lIucK1%9saXg|oby7RXMP7)&%i8tznHod% zQ7{F~!}tdwG{=l-xxjX2( zGivWSqpOb4rv+D>v9%1?#N6i^rUKa){Xl~&Y52hllp5>k5?hL|A$*EAQk~Ak9lMCI zqu>|;vvXx70e-xo>mEYyGBcPj+sgYkZ&c6-=hzxQrKPev$GNDuRO%Fa4aSJ1tF-}X z6dH^+CM1^GLeS#hbK&4ml`3?H@V&n~)sa}Y`PEmhtE7UtsIHcr$r;eS3<&glxsa(o z597@BQK}d1+`wf!H+tg7l?rmFjqmQTd=ZK#PT->6x6R&;8A7E(D1w$T=7aWi+6l`0 zyI;I4!pqOT4Yv=tLp=u6vWGke9k5$Jyou5l4tW%fmszu!`v~?|6iWktOP4-FkU2XR zP*?uy_X!|^!CwQHB_bZQKN=AanxnGOHOOth4$XL7ShtBscBZ}?SD>f!QLd?|5ElL@ zmk5`971yyUEX|kd+4EZNR(@-E7JA+Q5mqF4i4p9I;@m(xanuGDzD42uSc1m^JOfu= zL;Lo1fqDiI{uhMT<)U8pgI+9fCN05EjLdgbeoaMQ!4??3;;Z9Ic$U1q2)$gHaz8zJ z#d344wpA{vC@VI4Rzcn(Ob+R$mvdDA8oA)_@vv=3ugmb$ROg;tS3>h=HHcn#nQMU3f7I4r%w^!T!U@f9T zVm2yOf+LUJmIz?a)&tp^ARBj-NxZ?1d?qCdx!WSxrp^j$SUX*3A$Wd*v)aOE1q}EV z$w_9!eI|O93_pR123d^pd_h?@B2IxWg!{d6;$xALDjj69%p*j|6qfQNldx8{Zs6+@ z4wL=%K4N0nEDJVUGK7PKG$~PXSl~LBovD#qQjs#u843BF6h)G(rx^>s{`59KSj6%RZ(h%AWenvNlLJQ5WiYi zI{{$69CyK$^hiuXeTLTdmOcTMR&jxsY7tmG`5qJbz1yfUALUQQUDb%M8gFb$)GC4j zDjTiBE@b4a_JX1U0Cc7tM|LD{FpY1ET|yK4ETejvOac?Q!v5u`?=g*Vv(}1*`AsLO zQ`kLy46g-ju8L@zQB0G!7;f@{whBZh+u*ul|M#@Lx1Gpk+*A?-P7Ks^E69_S{PkQ6 znu+p)3ZJ)@%`nkh>*`M3MeGwRcZdMDJ;u8`t-Zu8G+#Kh9mqSq>!BKX0tkK;>xGiR zTu%w+&Cj@`9v0$JYI4(Ak^)e|oT_fc>4w$f=BXq-Il@J55d^Jv@ktC2Bc8Ccx4RYn zvx59ujQTJI*s_t;QbOV^)*3?S1)@+g{OKGb{3HZYi=dzb0)$?qNLkJ#aK(TXgtUd{ z7P>NhGRnV6afa-y2;O=BD7{5hxfx0Bn6CP7iY`ZNYRxQYJu~Kwm@NRzU z77{fAZq+_e)U&x5a}l!OTy_w&4u;wU_V%HIC9VoDEh!^Y>a>lOUbB3Chzx&*N_qse z-G+!;q?WBe))jeZJJIoPDCB7wtnt`ovf3XAls7vsU+R?Xo*U&Zs@SC2B35o-r3bQ- z%iKXL0G$t8FcD!~)&#dRm!7R5$$?}!wn3T%Q_7;8ZKxuf+-Rk505R*})(6duFk|>i z5ecGg*XMZSL!gxm@uCZRMq#w)K`>%j=ly#KQwcg-PMtJv%}F)4lH-Iqge>}+@lDF# zKs~l>zXnXYqzR`4sAT{c1|c1o+cv8O1uQU*pL@$umZHzlmG7|;kD^VR0wQ0E9ag-y%iCq505$s+qGnC|JFO9Og9SZ%_Q!H zsBKY~LxTkP_Z=hE7;rtW#HQ{FkR1yWo$)9~*~u{X#AM6Pa<_~vuX7LPF=5_@%0=>> zWbh_pKFk=Ub7V8giA}4ILjxh#sTd9m`TZ60gb>u?gFg{y_}n)a;y#_vg=d;RDex++ zmO!rY%^fHgIJF|ulF{*JPoJ;8k5v4ldr{8Lg)rJsN#Uc_@H_&B-CO=dr@fAR9fI?f z-8y`j&mwt{L;XT__;%Avo_|Wn@+fVBmYDVnrB5ie|I%N2N_uR3$YCe9{H3;-hC-+tvaI%SgfR3|Qlz z8f3%vI&+x_<*g9PSL=jk@5br7nV0}+@PED@0|MZt9wTi@h|m?A1);Z{tu!(d?akJV z7>+38!Z$Nqq(FklNLv$|?SA(cgWDvnzzaZG%#3~eo#rG#Hz>AEa7n#XLa7MLKHbor zt*I@kZzv)hW#YC`uopy@l~4LtZg7{U;cA7Km&;L&Z|topxEhEsOeNb#lZqE|=oz7% zMilHdxa2Ea|4>RiKC4@}&wUxa7e>`8>p*vzy`KnaCq~DMnx0bWdu6U}zmD>{y9`-q z0TtIHC7zyix=}mQIE8@c2lzl_I6aYD*HSx!wBurytiD?0e)(r5(o#YiZ%(2ZzxlvS|Zi(Clz^=v~DoO*;|pX;0fIS1IB=(*Ci~VZj9hTm1?uFgVyq%UpW2 z2+N25mTzYX>6-=p0RvdI`{npSR^%iTUpTI=@?ortpvO~?r4poi z5^D7$;m}iLoE-B4AWczmJ`LO>!H++zppm(l(4XktuTVOU4mtcxLoVj5=;XfTdoNsm zLITj|pz5l+TTk@_t0qF#R^}TO7|-kn1|-TkBK@Bm1fTbNwFd#+iYSaeY3C#-BMV7Cj^ zh4&=}-S(oJQsbbLe@QocoqBt{#y=#PM5($6*pl=n`ux_dqF|^#;pG}hsy3T`fwgS@s1#okf+4KpOU6O`radnlgpuOKVaCI ze$yEqBw?eXB_uhE#Aa1C|MA*qNchZE(xpcAXI^j?XL|UcjJVkAbmay~-+?0mGa}Sn^?i8K+ zG&6-*D<>RdopArE)WgnfKVb|{yM&xqijlt~pY#Gv0OHfAJ>htBxWO%XZ_Bk(uB-lO zIQM=b8F^PkbLf0On)6{&0S}~YQ?vd2%c|wNg51GMhl|tifg%6xQl|1!NiFUtm8d40 zk=PL}?BQ4S!Oa9J6p2XI9HXJzFZ0;IBLsm`uf|9e?kB{8%OUGhK6 z$}r&Fv59lH&AxrjP;=CO0p2zHgLl7M1q0p||Gm+f4xQu#d6sCQ%D@S~q|FPzh0oZMbq@?B~?m`)9A{Yil#xw%t0dlFS|d zobm8@!qxCNML!yMd|{AR@^FKGr-qhpM43VSJa=-)_BEQ_6zY|EY5JI|B{?Po+gQE! zdP_oaY6Ja64#L%5PXigBGIBAX3-LRG8b6yOGG^Z_EAA)X8Ig|Ml` zr&zwqht@BgWlWz>)d^H*ObSg_ZAro`n!I~hCxplmFY#N7c3FAcGc%<*uVa}nS|dX- z5u#fl_pXdmEVHaeU^HA-CFGO3mgwrcABhan6!UO!v(@A#(gT6r7X{C+uS!31X!Bw1 zv)!rs8G|filv%-i&v3B4L0W@$%Q4r4yhlSFm%+GYsRrxAXH9v!LfI~%KA-MG2UZ&`UMw(IlCw9X@0 zrxq^23;y1`1VxlnX!_&sYt3Pl=|&jvKD=#SRqznnpM6ZF2xH|X0~_M5E9M^6wX`dgZt+jmFzj5idAFF(pZf$#g zed%`5`|WGCFDx_+{}Rsa=>lXBHdF|p9rXZls|pGL5as1e!ej)z^|ZwHrZEomlPyp) zjldYqlVql>0L;WjHw#2t^^wGY= z>g0k%Jh}j>5_j!L_~0VFH4yX2+1{Y#k5lOVD@a?kJIdjSecdLuFY4tt^Y*(;EWG&6 zaPltATVK545Gpl1g?90~UtOe3it2X$aY#>^v35D9k1*D%mlz~(=vx@H2oa=HzMl?M zo<(Af;BB0CTk+8nkL6{akvqS{z=uU6sh)4kZ+uBFPg^8?;9_TN1`qgS*7|6U?vtNM zUsIy3seQ;(<6UiLxP@qp6xI<}=5TOK$c0O$A)IFB)d?(Prd3;S}ZUn^*(rP%3(Y9olz^`O}nIkCU-x=ZQ=CcH1|#Ll6rg_!3#Wr^xOz{q){%^pibtFLK|G_uuoEVXtr1c31)Y7E&eK;Km?C-!ZZX#l|Z;DA~7XvKB z=sOQI&zXNw7jkZk33(~+bZ-qCrygJag!rDf|1xb5vBi~~ErDaSjN{oud!+~@l|0+q zYDZ}$W_L^peIpNnS$m&ESoG^piv93@?$2ilB3`Zdnn$PrL!9pmm0i}j^YYYqQB1PV zXs^K8Lb{e@UWBHCtzco-DNOGhE-e)E>P{*>hjb#XMfo?8G>n zs3xxWkT);0%R;@#Ig_a(T`lj5p;-H4i(&?Jmj0RB>?tYZ@y_?-3PTVAWAgfVB*OQ` zs>XxtQgGf!{~t=A^d%=P;QAZegj<6ebgG3u$~e?!6GF=(o4j7Tom~HZrUmJ(60SgL*WE30PCK~qZ^9Ltt} z3P+?J=T#OZ{KR-sk%*r^Yog5L7n@b&L+78hsI36?@3WCaw$!C5u2}!nf4!NQ9sCmU zYB*KmQZRuvjtW*<=)$P!m(0EYSAX2*(^1CZyJb>=SnVw(aHM_6KGX-wTkoHJ*t$JC z`LsT}|F|@@a8<~YA2kJwoq9FZ3z{pHHhK553~zqWVVZV{F7=1B>}`o~d^y!7l`>mZ zunPBg>t1M}uXSpC7QuyqulL8lFL)KK><(3*%N|&kD|6iSed}D`^7?aTeTQ#z1&r6+ z*iqVxpQCABnQI)#TqsEkaiMhf_5F7>!z&$?5`^V8g2=JUs)OFU8wsqbN`JQH8ZL-p zcImQCX^w$Tu^5}NllqqkDTQu9j;)C?m~5uN3U{n5*(AF|o=2XWD6@~b=&^y&-i^>3?kJnaWCjVzK{X2N6GSe!QCOSO2--;xnkpEgqX=3- zFN`0r%RHBb?kHOim~kL=7OrsmZ;4oS9w=jYo}X+&DbT6&Dlx%8gX57+lLv3AVD{Jf zAAvLk9i14!I|c4{7APr@0ZZ!_DUYGHas+E(uE#})oZxXf&0IfZg6`rorYATL2pV9? zIK!)55zuu3zzRzYf1zOx?J&zQq-mP4O+C&pwy*Rr9IP;D5@vCr1U4!|yL|F9b)kI6 z(Qz)MqlR6{<58%{Ei3%~rd}m&sdDl0t~%u#{1viVI|mprWE< z-#C;^t~v~L%p^R0POZ7TqvlJ$O8m$^DnIVhkWLUTB?y-mBybt4!!Qwad3jC;bQv-_ zKUZB%lw`i$6I{q!9E1KMZM&9nLp<+a)*;B|0BN!^ml!^U!#nb2=f(o8%GhCCLWIy}9x;OeU$G!}xUDku&}6V7u(}+WEhUIu z-o3|Ph!^4%fL09BS6-TP6zzBr8Y50T%7Ddu%Yj8NqEy$Jc&RtsSlB2A8>i}30_&TbR`4J zp_V7q2e}q3>P?R9kn2o1Vbz!ML+&GtI0%{yTq-GD*(iX6jhaudQ%U!}NuiA~SQej` z;$Uea<*5hpj3NGFMc)_M-bJVGEsTGu#?l1&3=~nZCwHH^84eC=@HKI~=ng?H6-30` zb=ex?^R_fkhF-RdZ^_YV_ttC(Ax`!9PsRUChQ}2k4oiQ;fN!Zdg71DBfPYexknq5_=A8W4 zLN*(9kF+ZtE<1Qa$%Wr-P63G-sQ__hPa->uxbDqKOE!nwS{z60f@BiPoC7Vjtt)PDn?_)1|5E zPuJlJ&|FG+TqE7+&qU{|Xyezd4jp9|-F1jER%%AA|2WC8Ch!3F@#q+P!RDJ$^>0Zo zcPM+nhi=R#ATVkw2-f|C6?L92uUp>*@rdddiqe_wZ|hX0%GtClo|+b-uw<`mMlGGB z^@sRU$2~HWk}n_{-P=dJ61yWW1<2S*9+tv}5!j8Sa7vOp)S3=WTDvaU_iqZ=W9zls z;}Z&@rY%T4Ukb98{W>)XA7$2DJ{qIh%EG)nSqFSGzy`-eA??_&K|n`TRzxkSD6XVh zq!NaDI!`Zcp7YR`_j3FZ%3OB$F_x^6>n9d$x&Zqs&;p^%os@9dCvN2v}1u~ z`{9fhJ{}wNj>8R09D}r2wYy_$RoOGy9q2IEnNtBXB~-C%5IT>oid0&*^Ju*q5}PVd zt9`g0-VY4~@jfGU*%C;F?&dt|Yb8Z(5qm$|b!#ZgnO9)Kfj8BtZlLE4?DR$Aa45H; zYgfO%-;j|~0bCBB>xhNp=#9K}1T70g~x4Z@+J{nI)jKkxE92%)LM+X zH{T?dafq-h>i2YaiJyP?C-)4c4QFvn_hiBSY6cUqEa01`PU_G;HK-vp-@X46ZMK;I zszR=_WXdT?4rmEys8U|&=*D<%iP3IFL9qM#fJTf0DmUda#N(l0EqkBd+PR-w zx{W7LK;bG0*Q_UnzEU*jUuUj?jc`%+l>q!~qIi@*L62A|6{ z^q7+2h?tOa4~Tj!;WO(+=Rq`}MiU6U)RtCKfwZq(x?fdw@2t>Uyhb93QDU}S%sc=1 zuk|sLJ;i+wE3TT5Z4jMX$2gUKB}=uoP>j^_-3_X?wKtB4g8> zS*5{5Y(k5}#cXY~TB9@WgtJ#?X>t&D=rM?z9y@>4siZ!h7Mx?Vk>afNwC|g?60N0%N)3eFfD@_9HY|`hlik9o1ZOv$uQdy0gk1 z7p3z(uSOf4^lTQz_Po9$_O0Aj-21ugYWs?#Yi@a@uf2K%A@(kr^Vx9v_@TrrS~tYOGmb3+JE&+HPiT~%vv z$vcAv?<%-8doVm_C>mFGnPK9sw4CByO7>tl3=oE(P5U9T4cwYdDN3o!RL)&aVvOe^ zd~gv|9!U0@mx8LERo(cqgE4*2Yu90{r^QNN&-|sTr?ALyO06&1Q^B$%ExXAYH2mV+ ze#;Dg9Hh011s*gYE#*}BUehY}A+j5Q@S`w17aRsukJC0ynOfl3dpj>%rRRi|#6t2uLdC*juYL@i$ql1y|g?@@b zm0^?h<~UyHsT$WKy$HmBa>EA4^?~>9Dm!0h^ZI%>#VzwwN*Qdw<+7K~{cy$-Zq23z z21{-+9->z8l$P0q3}OY;Q#FhNoJ?A_bXBHH%GvbV8=enSCg*x1Wcqhp9>(*Tph5ic zZ;vb2$swfg>J^pfp!;+T{WG)zi@4ss@ZtN5;shms+rr|l0Orc?v~Ld}w~vhYN7jmJ zSN~Nk%#z8fHYw=26sD?4`0!qrc9CO^yS}rWc}aZkV^LIKe^{>5BZedJ=H#0b#VZqi zj6+J=>!pQnF2Yom)xFVF8LKQUhNY6OV1 zl4|O;X;>PHQ6!PSw?5^tgQl5hYDJsMz(K&K%7=QIJGFdL*ldbq0#puDr-eu6rL-X| zWXbXKj3(1H0Fo}2S`hk?{#WkWgSG7x1RZdGoJ1YtFtuq^1ai9Dcip~rrj4iyQ#z+Z zqWOa~Zg4A7Tg7q(_9Rh+R^7rINq=OZ z3WsS#cpJ)l(24}p+tn)HHW`LTB1i?Li@ZC-xHYx=ga{K4jR`V8_kQ)sw<9`K?!w*z z!_NYXrnDuWngkd&weo@I&2*`ZY@>hVz}7FVSQKAag1TP^_uqhzqN@DRHb83{0)OKN zQ(V~wmw&IbLVe-KVJr!*B>}FD3aHlSbnVic0p9PKA^)7OP0N?Aa^jpLhNkqPz}|H0 zLI$AWOw~XZt~1wTSA_mit9XPQ7&}&r^JwgXog~KGt`@CfCbaX?PX#9>w=q(aJUA4D z@q0X&@U}1gpT-h`j})_3;-h;@JJ4;9H&KaW*>AkfCLu-4bS;ZzjZ!$)M;3S2@x0JjB>Jd^hi) z?@4V=J(v4_ z@2ii-3g&<+SA^91vIwhNj6}3KD0}_B>v}vh@nC$JXdSIxeT4y^8AqjLLq1ehZVG5f z!Eea}buSL1EGAiHl$iAJd=uuPhuKOfPv?aZn=gG#LmP^RUJACtY}f_kcsIdgj?fx3 z+D~cH^uSs{HurL+G9ajW)Ity1U=!xwqd6ExE=6ZLEbl6J=CU zfN8vkagH&@!jqW=O3__WQCmRX1H5rKBd7(fT5543occGh0rf#Tq8Uu|a&L2}wI&PZ zyO(>*^iR+)d41C@U#=Ns(p+#*O);QvGS8&Ip#~e{K6I3@)RdL@*e4_zq*3J3oAr$EWS( zB0g>~$>1OE04&AR2OnycU+fxOoZF2g22I2`b2XYP*w1x1Jne7N()hi9w0?L!6SQPV z4LVxMfo4!}5cMRv-r|%FuHUGqzDKDhr<0U2IOiB3L!OwDM<%ZJ_T1Bu%~ih)}|_tiwlM^k!INa~_!h zCt0K!3ie7q%AJDpgHXjH)n!Eo3>Lf)NN@)OF-WSReA_ z_@{8uj6!}aCVDt-QYqtQOl{}nX+6ECETtoyC5>=f^b*~I8{ zM~;hgOv&cEhAx}Q8VaN<#Y)!~1*0xIIr8*o{8u`8D|c~FbYU3BF+!->XsH?41AGvX zSBg1s=5te>Lre|`hsIRsM3`iDeT~=67m#;FSnbgojs)&1$W;)+-WLTfSU7z;3w?GY zeP&{ApUJN<7Ak)(eJs!#z6%_eTJS}HFB|0o<3DEnaU@D<8W|^D!>0pK(5B`w`X&`U zxPr4W+w6PY+AUIe#k!Rp9X!_N3>(p1a^)5-aO_pY_EnXS>oh)00K2)weG0S!S+;&! zqoJhu0h7=r!flWs7Yl7RnV=0|Fi$0^$%;~O)ygXb#VqCC29k-~RdHtJ#%zQ#7u!gM z2`fo?`0vyP4zk>oQ?>UDc@2HJiN;z*Z-wF&u%AhqktvPR$(O{4kt3DsCjhtrTPVR< z2}||pNJqB$6w>XblvvE>ku+<`Y8G1bos(i>?gABuqT%QrJA00-j+5ZNQpr0h2yHGZ zPy&5VwEjndE2f~Wsel%37ip7ix(`WCCxwbRJuuItR@OIEJmF~EhjSk$z!eGkqQb?L zV_wWMcqs#JQBunkYkmdp9#7KC1t3U6j+G9=h7!kOjq~I}HZC=___D2#Vkq>|H?l02esAsW~;RL`#I8;UJ7es1OV)PiW&oMLWTE zR6#xfAhtX1ezMHsQ4-o=9b9q*Q#GwTS-@^8`GE*WUsjoS*HDeAd{qO9mN&TTrac_1S+ta@Tr4$wZ*_>TYM~>={}dCH*C(nShq7IFH)Zvqv*d&}i1>&}enfHXdrNaybQa5$oiz4zq<5vhOo_);}V1Lj)A5(;PEvO$zo!ziE76tkc1#qT#|T7rnHNSs6Q7Y z(><<5b^jzsZ=743H`yBBfa=Ksj&paB{ZAloXilc+8HjLSCFFGJ+NpjUZ5ckTi_|N{ z|BWuw9gpognVh5t(utqoh4x&)08{a*4rD60$z0+$IcD>X(w2oWz!#$ohmh^3P|i#+ zfQ`yx6GxzqX)%09;WeZICVI5Q<@mQu60A@4&O!@iWo{7MFb9`Q@W0rL$74@qbT1On z^H#9|tpKu7Tv%11>& z;zdbbAG&-Q=2HVytD658W>V1{I`Jl*+{1O9FFNOtV-}Z3dd4Chkr3d<t2Fr)F85HyUz;o0WM_2!+^Ymt;wpXnq$v4^qJg=PKd3JUQiK<-Vuuyw=+++2nE zN!~==-O^K<9H(UZPD0JslY`N{XqW5=-}x zRszknj&>?6qC!fn5CfsS%L}Vo$rS8OYm6y?%&*%a$+0}`YW9dua8R(`kM3VBKo+O3 zgXuZ2$7S`x>(vc`n?(a%vM-U3qH z@j!vbHj3a<@Cz9*A?06$TbnFIV{cI21W+w^n1Yl#MHkirpgm*<>q*$)|Nd67*prsn zhAuco3zwUY_@KP&uqUMWdu&quV6r+;?>so zvJo*~54Cg#X{$ilTfCgoQW#AmB3&Y|GTHn69s z{1cUMbGSX}sAkax-1Ety6`#-dd0Kq%PMU;p*5V#NHpt+n=1zi45elT>UyF$6eXi%@ zwIYI(YOyz;gwi;ZN_L@$)r_hm9P{e$C7E2}Td4Z~q3zz|nU4R*@4xrn*=*)K$L4%y z4rxTqA?DbUYNVP&S`IZuNvHQ_W=a{!Db++0#VDnchC-!Ulyn|SI!{L(UGF~M@9%g0 zet%rI>v#Qe{f|HFePesQ9?$zzZDr8@8@lurcrNG8_s+@(TG4RdRHT5Pe8@2<2$A^OB78LP1Dkotf?&#g?M_rKAliw+JBV zp&Du>9Tmw!pO#&a%K*c#52dRZriz0HBm;}(_WSe?ubPJ{fWu5G_+j*3y9uK}s?qca zG{q#D>(Llc&admFw^Ymk{!VAklfUq3DvOvkD+MtuRHS52liOA=B@#AYyHuoVDo_~u z_|dI}53~@lb9_^Yw=xF%UV?G2Tzr^7u{>E*`S791^FN6zW&~$XNiHVI&}Q;nM19?) zgvgO)R*W9OtY)lG!pSdb3?j`eCnQU`>ixNMWoWlccq{-IC{KOL8#DN@kR zHJS9`O+|SmHPwrQa_8Y^7{mk`;A$`d1Rj{$(h4K+g18)0Z`w46dya!y#_Jg_d@<8| z7TH?Kq77=!UArZ z&bf`N8C)&3Z*u(D>?T)Pg4If9YMKIHt=iNnkp&+c%_S{NxI32Q+ zf~SEa3G*J8M@~IRsHjVKJrRKf-}0E`)o+5--#6Sk+4b~+dG8f0HPSLuI1w+0_iwen0 zFZKC0KyUARWa*Y1Xx_Tp>N1(yUZqCneRY#hmN%&|m~dB{tM@rD!mncH+5Pv*p4sKZi{z zGU8_?I^tkHTSa^~e!^S*D^h68{Xxoy5Sj`w%thn*v5qZozk)hZLYBfkyZ=rd{rl$1-*?adewh8MTBBKJIxE<; z==0*)#Dpg^9~}z*oC5CtOI6WC)4+=VmsC{)Q5{(6wl<{9X;qidVCm$4r>ev7`K6u^89uRaTMF7}`G2h0(3g+yzy2?4)@a^_*mj32H?AF8 z@o{z6&fuZbmqtEv{-vtB2+LmP9Uy_v7a7NVO1g1yeWOXuxM1R9neTtB+1?X{Hamv_ zY5?XaBlrqz&2D+#vUk=18~Uxe3tNZygPubC(|4x3%Fk((`y(=cKjismP;iW_Nw*+wQhpc_<@? z-wQc(wFVuEwT228V&@1|bK8yCfpao`+WMjOA5|_K~fGRW6b|8SGKWJ$2q+++S4Q%U7n z&6U@RP&)wsaP#C_XNjvOulEVCp)cE4tikr&<$FdIzp7f36t6@ZB_BM9vlNRt6kelU z67YN1HP6SM8ENrF*=O&HC@xZ4WdUvDs5@@KQnK*qq!yW)YukSO{A#U?!VyDWMLcRB zQgs!94Rie(j|z~)U@M7+Jo)PUIU;f}`q72HszgT>6`#CO8XaO&$g?=IhfpvtTD&;O z>$1BTj#h&j>B<7jySESp0*%!ts=U;*IS)#AV{*KW6S=`g+~`UU#(Yylx5zS9VooYX zFJjEzlD724dK&lBVfc6T-|r9g%2asjfi zYdX2O{)4a9*N-n5fRtTB>rOmv7(RX`&TMe+YRmz&Dd*CbvHbqq!QF=TUkW+jM(1Xa zAIeP>J{rE`}#b8_p!&9f_-=W z`WW2s=W|WZmD!nBTh&URyjlo0F5YcZKmxR~J3&v{c5E~iz$rxVoe}><1_x8Hm4VpM zJ*z!ri@L+k^&^(awvbUJMxB29QEH>lDmZgV`@Kz zOAP^a4rKz~%rhxNfj(n+bi-Bc+L`n2-=?iImrU@Y#wi*caE_t^ZLA|lT8az8w^t0i zed9oGKkt^fOcxc^_v+f}%JoOcSU0)~VKk+T+v3QuX)q({t8voHg=<3w&+D1ru(m3g z!ZyjtXKYY~G1*lJ6VcT||7fQjt%3DHRLX#o7NmhY(1%$-Muoj*V7JfS@FN#01TM1L z{0lk2w-T@0g`>QjtHqT0_Q`b%ol5x|-0_>u2#nLK)mVvW)sO zF`Uq$G?Jx!0h4?mdo%zbh1`v8OYt+lI$G#^^~3QkryXWjBgnZMfkdQ%I3E1yeF%%P zE7_%7EBDOYTb4D}l9~5z`PX?z+>Iwp9zfUhsnY1bw=lsV?wb9rZlQ+GH{5P8pN>K_ z-m72kbjqyC^VHpd{;$brdd;ew1{{b4+Ph0zd_N@FZP^#+C`ApmjrKGmtuzJ-A~Q#Ybor9g>ND@U z;+BOGs#Ep_mns2wMUU|QWA|@eL93Ai@4c(WY!@S1dNr(VjEts7mW4~v^4}YIF4mE` zQaum)Cr6KJ&4^#eC_R6DNI)b*BSR%1Vzc!~X|pt>9sS_4HN2Mvizc42q63U~Rh%x} zS)Fh&o1^`SnXeD;9A9@A!Yrov<9EcrOiZIzBR@bEj?;F^bg#ArS{%z$ooaaaAbB)g zfPDnXG75VZJn%n(q^?^xf%$=&roeUtgs`J`5AHYaQ9D-S!r=iZlAdAhN26{hvV%zi zj<2?#Cv3mSfp??idoo)= zuVm->Tt%okK6xD%>MzhS?$$`J7L0sK+0qfLZLghHo6yq$5p1s^tu+1A$nsnB_jd!L zhjf>AovmHilE5!fznF_hm&ymO+RpMEEl7t~o$Jzd*0(*#Hx1Gjp_3sYgh1dPUR`QF zW43=GLm7gf6BettVAI@6IpsdB37y2a74}jdL(R6{krqfPEQxz^NdVfsh$lwv7y}}y zf=X<2WNvvH?Qi$_TT9ff&}okh|FVvAzqWS>7hKeJn4g{)DY@4jV_e{HyWSHxInLwams7HwP&DVw)C z`Qp8ME|(E3ZXo#g#<#wYvv=ON>+d}-3rg%7?3$E6-%C~@!>{;uKPM~?iJqO8a8)5TuTWV)X$1OM#9X~ewj66MAqlwDSz<1 zc8-Id2FT~~HOaUv*xh7cG`RrllKanTXwg)D@|4+X+bjK_uC!GgJQwe71<|)EehB-^TN`lm#y0Rxn-9J?5HHMzYgu;~hmvWJ{ z2f7=j-56PifFZD;inF-DCWgp^EtpVx*Q%+HP@v@uukJQ@GdMICnZI5Mna=lbl9TY2!w3rrc&S!iWVEP>0vC|il6fdJ#d1Zb|NW?a2XLsB(3LfEA)bjak;A(O z4(PEFS#6>~D!}`-==dmVgKEJhWnKhR_(bUyZi{rVMLfFX(x>Dv%BHU)i|iiM~+KjyX zYhThSTYVL(XFhr!3(`|m7|9pxbvOx&a3?Q_k{imr6R%g%1aJ;+n+C0>VuP8G83i=K z+3nBZpS6UuB|$t#l)*fAOX~Dm*2MAx7#BpIpMf(^`j4C08B0KOTj+q$!OIrn58gP$ z67jj1C@!Qe$=%J!L#xjC8dOlp+U}`*1D-G^8|%V@ijYmlopn0&8#WH*J{h4~Hiuer z5l%c*ag3m~ zE;fj*DUGQ_c-UgX!}C2@MjOvYRN?&i4gUNoh(Kw}YC!7JfH%?QP-}gRD->FhzmiG( zoOpXrPcf2$(Hja|D$u14=;$^G6WQ2wu5RMb+f`i5N=dE*4TqKJ!_M6%wkV7PTnf2) zURnPlteCop<)Y)iOoISbs)?37Sg4g&kK@D@4w`E2B+I7G=yg z{vk+LqW{IWYz%u;IO_-@3~0xFABHYg2#q%WNzLWM1C+Mm(nJ8 znX9JH$n}>CV-+=*Pc~byBHT3LI!xq2hL&euTOmBj>W1RwSGjM(z3qZdc|;#?Xurh( z9kS8MJU;>#G1wX80G(YsiXu=D-PBv`9!*1fL>ybBcMPVK??ug3!^)4u=GJAAb2V{@ zSU-WL7-jO*Xw?h~Ua+&gP#U+Wo>fo=KN@R!xepDOCoJ1zvrn{j0HrR6mTkXdAQQwZ z^3ouYI87AUtC=2QZG3&{cG$R{arkJtqETEE#LQ2k@o{v}oZVzVIrNYD?Lc3Cjkf(9 zHCvlA6t6;FRUd8SR=7(D%3P#$jlcEH0Tcz3t<1eeUDlkp^67f0poX=$Lf~r4H((-;pA6bx z41!a_tPXTh(`d&ci}?vFK^Y)r~wp_@`b1`Z@6o|O6^F1tS&TqSnM&Vx6@r-}#G zP%-utgn_M{Im|zkE0d{6i+gc(T%yinT`Yy~Is=9&&{?qJ49C7u^lYvl<*Wfi92&L zJ3HS)EHLAX0+j}Doz@gr*d_NC$Fs3)2#pRy_Ln^W@kcy7d~a(S#DvEUAkp`IYk*za zKAHX4-eOOVhWLx!vxPY*bfdnj@x2+c_A{6<~e-bra9Wr zY_O1^EMZKOq;9Jy49^=gbPlvgD0Biu92USTSY`Tb^rA$c$g(jUBi^QlTAYix{s>%m z&sAfrxhHSj@V#0e?DSIdQ#pAnWf;R42yuHHl}DY$a`kyYo^A)ovDIUVp%vbV3Bzx91?Dk6;fb$;++d?;Uu(z`UiURaUUY z#!wP^-3a?;=i`NjDeIk63NN{N~I0irQux zk`klN@XG*Fu;Mp2E8cX4rW%%%5015*4g#$S_u;7&P@eF5x-rdZywlUHtqZz;K@=>l zwPJL;)(J#*X)za@E9>GwNo z)Zym!m^gW0_c-nTa_d=34Ak;ohmV?f_DK4t;&SbQ6rNP*041NqEF9tHrZKU159GP+ ze?3kzA51|eNHBhs)MtI-%7lHoqawisI+Y8AR!p?@eYmy(a_PJ@+hA;zp0-|jS=P}I3S?lhaNiZQk@gFQC7g()E6IC0rD>{&S za<@#u=XloZym$$0Y(};a2bEx6@qVZHXxkpjU~N!4Z&4G5IMszoA5iHn_Ki%bWhl_% z59qMblrvc)$c32oZ*!0Md6=HRP}*>56U}gC1!$0spsM)L5`F%bcGMk=JsH@SwW*|6 z(}6*rO&t(^_((1^7g4&wm_(*Z7Sub^~ijUu`J5C zb<5|xUQNfDvf4_(Gu(FXp@Y6ZQneYESex91k(oP<&Q^D?Kfepi+IEADA4)!QAf`bc zkuQ7ed5}PcHnN=8H$aErO>`AssB}<=GJInx<@B;FlXvs?c0k5?4uLY7ZhM~v7ojUX z@xVXJbvDbH@NNHcvD<7}YDM^Q*E7<`l4T9pbRK506j)RAZRaCz?F|+4sVp9C%j#nY zTZY{_1!mQhpzPwiP4j9W){0rJfersll~vfczXL7uxb? ztt99kc(dZ#4B_{q!;gK$QvgeMT-{1?8w_ncbJwDWOv$~78JP7v>E50KD~z8KHGH>($alX zy^4~Dfo`fz5$jLklw)Ah=6kj zc{^TdukEwl(eX*JUB`$Ua6=bj$v^HeOsJ(({F}m|olg$D9iN*)$=~Kaa{t7_eUEvN ztKx1-!}lI<{dKNG+}zU?$+r6sb`r| z@1aFD!i3di%tJVfBi2D8eMjF9Tc@WVa5@p=QU1m+w?5SW`u~Ed=Bk;5X1=&i z$edaAw*7V4+>CpjrP;i;hJTo9%G3WURPo6j3aJ*I_vq{@B>I&fvMqk%#^JF4DpcJp z!%iG&U$bAQGfR42Hr6ZFc353K!#&Pff-71Z{$GV^YW)n~aqJdcsG3GxJo|dM;a{P8 zvHk4>*?(iIk30Sqs+Z1hd8ar+?2#v(-#@>dxOue5yW`idFQ4B&-~FR&+g|`jz`Ti-ZC}j|1D-pnQvJ(Q?uI;gz_A?J`z97hf3Rt zLZo*?JmT=XPq$t50F`{Z2gWXGmswf)xB<+R5_ zYT@yNxL)`QRKDzGB{%5Rb2cDsD}hPUc+h?(&YhqKgqKYo*`c;|ZI+?hv3qU;NBFeY zO2=Y9eSocaRV!&*S0}2eLz3o(?@;-Z{W_$1Hd)UeLPv_rQtVSFyF2ouF3<4g+KZ=V zrM=qj6}0g3A$rc6=FTG{hehj*&qR8zf&ipupc3jOG6z-beIpk9NNBmYd~fAWT9EA4 z-1|BLNP98$PylJ(6Y4c}HCf`Vxfd3wD%(|k+u1xrYc$EinxhhGk54jCTF!;VIA3?o zGlG2=vVx;U2hc9L8EZ*<)GWxeP<3NV(^qdoS5= zVL$*As-NRF-_S>PuKje|XC-=t`5$pF6HhVD5RyDff5H8#Vl&aBJe;Z+@LiFf70ELw z8T9sv{QZd->|^%X<1O?VgQ`8Y6CEVJy5i-VaF}=#npT`Wd|xP89WFOjWzMeUbeq2&raBA!i8N1{%pXW6G&g z_gAw1+vFRDft&Zu?O`k7&#adiK?{_UHo@MMn;U*lqtlBm>9w4ikJ^X_Zbe>3bfw;> zQH#Zw-amNJH6POgx!<y z!_cHESbl36TCGVA4@=)wPqhTWVS6bGAFPKSZ8lV9UyUA|*G+1RAe^kox3Bx=tWl+a z-%0t|lqrG6!>T-=&5(Nh|5>3rUBD_lrgMUM%|3Q|4}0*K-uZ!R&No+K%eKu>3zJyTH{wRtoUepfA(Ol>Gy&D1wW^YAoV&bHe|rx@RLLwUY7x| z{141KG62g#$2$u_}NYrtAD-h7INcRbQHfOj;uGi-tfV^QHSy zuTWA_Vi{2$gyc@&Os~?ea3JT>B_R@LUR2eq&b3(7=ltA3M8(p*ubgzrv$;!j0;_i_ zPPiX3Kt>qXkw$f%$f%>S>hDi`IwbK}eW5!I1Aq&iFySGqOI%$tHzg>_M z6?hY$WPeiui99)a7(0ltVq0{>%lPuF9;Y+^o?`p?iKk%O&oIuZY%2y!kaAi#PncZqCF=xyDI(&`tNi>gt!zuHPKm?7{C9zrdafz81Yucd8zZdGv^Qks9%=GonLZI?Xj$nUUpR(l4ORrpn@8uFNJ27$BorFFT|@?zV*a( z6U!Q|c}V?8>0iug!BoLe6ge+joU0M*+g5gH=M(|rsB?IEZdc<;S{(r9Mvg#JYwrG( zGywwMS&`}&_QA_Moa*F=^bHL5NJ4jGs0yU(DSr}=jliiaB)Z?{?>~UQ=3UCq z!x?wuF8}g(-BJuUt`mkGv+Qd+PpmeaU;Si%v;orX#h7Tt;m8<2c=MY=Ar5?DZZJL- zim~Obrn|eOoNa{H}qL9>BbK|0+vq_%F|#i96XPSe-;;B|A?`subv)g|GwWJ({XMh*>Bd45z0MqScMp^OTuLXNt)+ zW~yXiv1F@GbZpnFU2f)9S6&(#aKOVr=CE}B)&s~$cpo#ol~|#El7?PEMhv4ZFxe0; z+x&vA#p!8agBkC+C+yi~HhF?-=Sh?8gi0Ac8NR6E2rSrEtFJ-&Q~=)kdW;8XlAYVe z*R3O~Ra1#0WYU;Yy5y0MF5i-Cljg&4a8;1r zD$(HCG(G)2;HQ|4;+;em<`0V~mZ2~_TMsFcK}PA;BI9!ry(&^Z!&+P+?x0W$8**bh z!YQNbaALxhp>|Dya~Y_edfVxOY^*}$OW%h}pqeUnHD>6f^9Y|L9N1!oH`lYJpgVx# z2cxKD+#3mT@eqQF+w+EPF@*-ySnBDnsm|vOla_#o<@g@i27H-%suVQiY>U*V^$65( z5*td-uAyuR5M>#R@&62{6J*<){*|lfU2^JX%%lw*5qHxjrd`0+Ts z%=thjg7i>alV#}sMbCf%#C|6Ir%g=HorhebAWZ;7c+L60a+OhX$+i?1vICsR9QDKg;gF0~2$iR^9}V2fBD_@YR69oy%P}zjY0fNrUSmv4@KaJrN9DNB zay5{;6CILwlJACB5x=t>Rg=gDchOcBu7O9mC()Z!pclYb6x@o}8C4;Gw^D+4P-0$F ziH6k5yA@RpetKjw0bWgS#RGo1Iae@|&NP%A8I{Aszmn;!VfbK9R!z9-;pM*FEW{ju z`-a9v{ir@s40DvYZ#;taEEy3g&A<6zogajPBXIa{G+cWg-~cY;C5lSZ(=j%cJTyj* zjOF}`uFE|uM{vcq!x&hJTf;aKA$4rXbzC4pmIb3Kpj`x6_Ldb#?>+>Ew-LuV1YKVB z*-igiqg6n>U%}3ii5=gRcr7L9u5xJu-J6*XuyOa2g*Ym%>L{prFowV<5i40}3}@R} zE%c{h_`V7rVL>o{n9dJ1QX{|(s@(3Spum}eT1-O)h59CyG+V{Ul3H;;p*9!8?S2554&l2c>Xv1k z6J)IIH@4q)lSDJzPoO!B2J^QlrgH1<@>Sj(RD={!@fw}xCDYh;TAx$*hJ}Flmq+Sn z?J5ITLjTEpRVQJNl_+ai|I5Tg0k|qXn4xI?qnuxCSI%Y>MM=0E0+47sOA8DWi=96* z(2iWx{>@1JT+{*uXsQ4cW!Ok0VMy2SV3SFbCT>7Q@;^^FCBtXJ{JO$rAPOi3S`2xJ z$FIvCR3S9T#BVIDnbhTBJ+dOZaP#bAM|ztU2k^W0`O@Qfu!frOKtX&85c?U){o|Pn z;09Gfd`rdU7HFZ_?I(&6<&V`qN(l}SB1(nQraNcnA{PL(l?<-}8sH*0H}%UH3`D`q z^W8?`O#pK|@!;(ewHX$i+v)zaE@NyrcxHgRCm|i8A)3FtFqM~msMWJWV2d^3<>oG3 zbyE!na9FPX5mM7q9ScoFt(9n`WDv;tXe(L6zR`xdF@)AiVvz*v3ZQ>_Bg?SvOl7+q zHgH)rzNbtLp!Ss~HdlxpEjYMy98%;c@d}TS4`IBRGP_QS?Pl=3qU$~^Uc<<$40M+w zZ@?oAD&m7#99zY22R|l_mMlEm;_mJbPj}nNh9?Ha2*~WwxjKa zW8qsg(rYCezPKvr9B7mxQkLC(pK`g=%Y!0!(cA3m2YC#}f~Oh82_<%ldAWXxzdi(J z$SyhX(06QZe(Sw8o^fFx;OZ*B9J|L+b^<0|!K1Yr737k_s{VtnPQ`L9A%`%|AvP*5 z{VX(1%D@cJH16h|ZQDApg6%vJmA1)FJ>RyzIo=l}tAA1vZc{x>nce#POk8Ho3EvpR zENN!|4e1VeEg-LHi{f(_8gC?Nud`1RCAi;8^}@k8i>12mmrZQl?>*uWSG~rvWhhV9 z!3s8#F7wczAz4CNUoIFXYNCJhT-y3pEQzQml5y=E(zEYf1LO)##kw~0je01JqmWl3 zzbA41h`to~!MbZZI`Y;}4@JgR52`&>?tDnSlIn;?Ni&`%0Qc@*K@p0HG@ynR?Nc~9 z5pPYRf$1{bBs_qj%o_)3aHRW<1&`sN@rt@gL!%LkM_&--wllzC7V$N$AX4de<`e4k z4&o!ZdaVpEPKtfb;NUKIvIv6V*x4m|@j6lzMTItQo@Qf=*-#JnfpdL-jiDmf<~ zzp)O~V^N8U?@p6;X|FIpZX+`W)7(mI__V-5p?yMD#+c zA8t>YCNp^)^^1y~PbEZi&SiM>9#M*YOK!m`QPf~0y9x|}@NReQOD%_McQ1T)0o_m4 zNK)n9)CV=_j^VVqXV?6CwN%%cvA#g^9$0|fF1>pCSoYO9pNLR<4-FCbq%*!xD_Zut zcXrO7sa&_YvBXVe5T!r`D1IBi!zw=h@hC-*B+e-v_)sYr-?yRL#qHfk<%dwuku3zE zChbWZo$QwMe~hUfSia|dk1JO82#|GQ9qx-GuI%&*}$PF@iG zCc1Ii>HmqT?)o2v>YGfZ@?Gq?^ru~U{{vI~??Uy@U$ik>^`AmDsG2>U(6`TIq3FK~ zRi`z5|Andkr%?UE9XcLyH0W^b*Z*LuaH0Aw?NR$|`t!cSE5C1ec6sOQe+t#{Yy0K| zABp?1Y4X>fhO){uQc6SO3ZR_WmEHy5{eWpI_fU z@Bde*{{8c37E5Cwu$D3gjH%M#95qSi2N$X|f4ohd%%9+Ll@>sp_a96ZG}~7;k)$;R)<|(i&{G;-=;RW|y(s^&ttWB*f~d z`so4dN_DMJ2lqp5*DYFJ47u5zscs8%o%2g8+@?Qpv#a|VpSBww&wn=!&fS-(9XbDV z$>vDUk1vLseRg*;?l}Fj%yjnEaPpX4a{h~t1u9TCFWS+*dk}zJ#Sc-rSZ`ePP3A)M z+r?D(4hX(_Z^dY%d5^TCSDew(Wn!I2Yv-)1Mx4+`QP!Neo<%O5r(xEoUzzA3!-X zxN+MHN`?`Dx2?sI)UpeKNQ*kauPAZkde(}lk83HmcI(hm)S5;_@KY^+s`-STT=k$T zVma}AeDT&Bt}HBgVUcM%uQiEpaHL~QRJc%4I~r%9%t|`E%s*=HqT3hrD(pBEK5kB? zf{!&l!bGU&lsKWloUQd2XX|2IX2uVt_SJ}r?9~V8$<#hfPk~<7z`E+CGO|+I_#9(r zgY~YNsao=hu6#-5sk*VoJSvFSf5h}UT%`>1sq>w=FsUDI%^aID`g@z54@bh?YFkbj ztSbTQBYnQ??Rk$fh6CUPp{9iDk2Q3=ZHA?yuJr0{JGJeq@LYi2Z@92$%VE)Z`o*j!fF3DtZ`^4ouOutu;1XdMY3(pfuy17XF{xA z--5p)viZb%NS6lw7%i@d7kc`f>~D|u^ZlVqHs`Z2J(E%a`2~dY!u6<2W%*ke6NbZ6 zJwW3+U!)#w*5>Oak-Kv-0PkUnq=Ypa14$(u?{{i zvAx>ZXcKVtN29q{Ml3EEm!F;4YuGMh_$Mz4>_EScAr*vDOI(Xmd=m7>fnXCgiMxH* z`>^yzoPSC7zEsA97PceA;MU9uiy@j3uBjIounlg!b=~|+ZNC+nth-?Ot)dl!tNr_E z0yDi$Nj)j|HBBy@3AlURJf*U3fO?@m{O5)P9K&cE?G@Jp%%e(+EUj!Kw%y2xPz%5O zM%Okbm0onY%H!S;4$ zpNntIrbQj6k_p4EiFzX)K{RXDAS+heyFckx)t7_(uqXTVGw6O!sth8lLXJ?mzuLUz z>+g zvzIp9wzJ}0P_Bl4?kZA($SXHirl&5hS+f0eNYxMlu-u7tr6@tmFHVVcT#q)4%Ws61 zniz8d>-L|ABFP@HCO#(Q>j&Ou7uLrWB?DK#JEo)Eg>oK zDm&QonC%1giR9je=BMcO-TZ_tp>q=z=<}v9{OjX)&Wh4ES3axRer#mMvsFz;??_+J z#5t#{4SoY^&(;!`70yj`CZiVi`QfX#-MfC4Ux)O#Q5fzxk;z-TZ^Iox-I??daQRQB zO(fL49DKWTtuz)v;z_f$3f(v4L!CAw_Dqkx8=`OLHxDuM#C|UI{n`J(CR+j zcu$$%Up+q8?Oo(t6D~u&lV514{Vbp$0LBa(ZIKx<`%l#uZ)q>)w;*jt$?wS|l8=HQd4WFWxEjnDiaPl{W-8 z<7AIZd)F^FwGH&CzFQc^l%oS#v4ia2h=3_Elg=rUzrsViV zw%-^7)bOHrYKa#0!`<<$*$3-Z!CAo$| zeN=JBX_~cUtH)R%aGHX>HX~<@TyxxVV`mTfl(api(Bx?0m8i&M8Gaiyp|gg29^bte zX(~QXJf|IOI37ApkJtY);wRqK0xy+In^ht`#cx72a)>dGa>U>LOHXgSbGW*Lqy4%1 zn*N?0LMmzunXYJ6zE~E*5?%Hy1oF5VH z@e|YFZ)?~>{tX`>0bE38Uh7Wx`W(IKyBb-#0t`d0fmYTJ9aqZg~9}c@!*d z^2H||Ts2-7vsr-Q@r5eUtPq#KhM8wahDz=hYlRo@{N(rX*Llxa5k>})XubE26+hR4 z7bN$FC8D!f;?>MD3SCUf24dQJHA9X^7UXUegAUq(Hoq|QGDVnd6b;CQk0boxB`y{I zl#_J>dxS}3Y=R78e$g5F#K$!B})gPXyA|ljv4_te+eIetx(87g|M3fyr;07sq@h}#Q_&i5ahtu7;G{nPuE;T6gL?X zu<0^UGK@^Bkmv!(Y^r0lSfJA|XLAE&>K^piU6c8y)RURlML3PmUXV(^jFn!#V2(9N z1755X7xd2G+;c*59j`9N@YtAn5bfq&zNP%a28AdoTj)OkI#=}4Dg!kU zr3s;^T|5kT=8|6a;fHU$o4EDn!voR7;DleZmB}#(4 zR(sXY>Fj-DcYQ^JXjl{JOo473Fu2lq7-G<2iErzEfeeqzy`tuC#8elPFxKmQQiT2h9lc@3E#beqD)QyfN$ zPs=M2`b@sXs9?VG(nTadDGAh#*G<2Pu?G+on&I)!{N{-{6q<0QvTUKa-8s-&Cqwo zX^21u)-Z2$RUzIG6cs-X?QcRj(J|Y^xn{m0+Sl=*vOa}u`MmJ3thiFIL$E@M$>7pp zJQ+olRV$De0!1Djpe~QESAj6Zfz*b3^7Z^>^866aJ-mmeP%OCf23{;}_M)J&&;a2p z$?N)+7sB>YC3$Kn7H5Zu!aIa+bfj(rztX7FnB`E=h$hB?_;%WsLS8L-T zYp`K7^qZTxgy^I8~r>rbIc{&`an-A2G1fskoXO!xKEzR(fzdV)m@< zB*@RtXXU5Soe$L-o3aqTJYgLBXxnMb`h^0lDkA^JJ|EycteAcQiL$YX_t?6Ls zVv`1hzLam-0Qy#-Hu6Lp*y!X8J-v*_B4qx`;yje}$;-DuxFSD9KBpD|hTTFKSFp$w z!U1p>Ou^1T$JU#eaF^Y>$hV*iklA@#$$3b6zy9?Ct0^IlvHbHY_$!<0 zGLdL5->d>*N-?U9aWw~EOgTSM!v5%6%$s&c+&)rmYm(8iVxCOk#Nz9Soy=LyUDHq3 z)3A?!`w;cC%6zb!Xt!6((Eh4iUCt3}A_()!a4rlVHWRkQ8)iVBJXCZ?UM4P|C&RF2 zJVp>9Hf+>xCgzZFf)&1;#0EV^b2&0hx&)1f0cbhmpdoldGk-QloO}4vqt2znx)}h1 zCB`a1I2P?SSaLR@sw&SJ$!&88sy!Z2d{#aW&&l7)K;3L>0mZ`gY%Hu~d+CjTOl=uL zX;!}%Zsnl0WesNRz8oDP6_X@_>L`^5VPtrH2Z*BkWQOE_wtw!RS7xwe@B0ueEb-2x zHm_B+jNa!2`i1C(@S_#^5mGRCIo4G&plA9r)ZYUB^(~UadT8EMhS0|NW!^w9XZ1sZ zOmKoP%48+`9$b4cNjvNrxqq)G54TovJ=w%{o%vc#gbKM(1+g(NLVec#y#gZ+fUH-N65B`WMQ(VEunNaXh4)ntM1&v6-R~~Jf(w|c%)J;ijE}h zi@Y9MwQ2`FZZ#R3G9@TUODvfr`%c>jFnuti$Q*@eEq7|6XuXb^Rn%QKxOt~j0o^HK z#4@a)Eid zarDHM4H_$d6}yh2HZv3H%9EphRjKZLQIp7b>di^I_Vv|8B~SF-RG4%MHi?YT2fFU> zt!z^}lfe-tq`fWXtQ=lYG|PYsVh(0~EsCyUK8&h5o|>CbjKT0ihsqewJd5s+*JMdr zj?MS3+iPG}jrj1wyH>Z#HD+tNOJ9MfnRN_Y3aV^v^OYojCk_~KfiUqSMLu_N5hcFW~o4vnT9Yi`n*j5 z^G@>`JnA?u*pK^p1smbzo(ma(1rNMwr?OzYO#|}NR00HKw#m%unr;SIIN_&_h38`^ z5JD%gN^cbOqhm7^uV>BQr{B)_$h`)F zyPgB;L%{5;Q`rX2d{0lcZzZo>`uE$sLVJq^@#xdbW^P-}>$jrZdMesHMYW9D)|tY_ zu2!P6Yr=xwyz(qsw;Yd(hwI4B=7sCJ#En=&BL;pG(a`Ym2yWv_5K6IgUN}?6K9;FU z1rRtik13)y9_c%~ar5uusu(PnCn8^-@3ipiD|rD4ho&o>Rz1LP-qAu=m9OQX*Kz?^ zlJ>pvepN7ut+8jBdg)akIW3mY8oifBH|BmPt?w^i^GFe@aIblm3;#{ATNSe#ms=fi{=-q0^SFH5E7(Um=Sw`%xUj{aYi-S=0L{~z%2 zi;InbxN+lNX}CvfI8xkbrlwYy=GJhOwgDA2N2Cq2g{#!8aHLjNXjWEMI8w8Pqq58* zTed#lSKo2Y_m}&e`~CwwhvQ+s-_O_MwK|!-46*}R(hQlL`( zMug6ogJUGu7mfDVhyU|xD*z@U-CrUZKvD8EH71c&1MADjsaU1XNp=2%ss2x)I>7%A zrh4y?7R&~aEE){TP!rO##UhW|o#O(IUW3Gqhc_*hH&6azJY4U4)GF=W7n4z*_1P})@;==s*l@bwm z{CY$66o{aD^xktOv3gDY%h9r-R-baIuLrB`vp&2(MvX@A%Knxa3$)$mA6?y^zVOrb zef@u!S1dpPR{V`V`wIj1D`e-3VQuSThq}u3?`prMU~%I%S+wbRHmGI{&nb_1}mV zsj0aC?0HoyQ-&8sXYp&wgpu`i={n^t=NUbGJ-<``j%W$EJtUk)cXFwioV%!>8li1n z+})k!xABsN3fJ|a|JBZgzY*<)-8#^}eJpojJ$0ryrqwxpj`sVOxne5`YW8!zAUf@51ji_UECWK@shv8#k8gQ%{m0EwoX$ z7f{qh3L96j`cH}o0u{HB2BM3)b1bIUmCyWwTFqk}Oov$u>Ty*Zh?IQ|r#prNN_e6>iAXw1Zm zfv6pZ&2zP-8qzxjgg~na4>K)P|t|8LtZ~ro)k?>KHu~0-TXxn%Iv+cUpeJ{>ww|8_iclA^Y7cm(^wjO#4Bat62!bN zbUxc0W)4VrPZzppkEDn@ruIjjzx=*4Wufcs?W-5Aei@5e(X+_)JAeJ#xB0E-f4)}# zczszpRoFC#bC&kv?OPH>xch#>n~LGj;`-$LQa|0+cvO^eofzl5^$rx#KELy+R)2B8 zu@gm#lQZK=OsdNrjoE zeSOTDGP{T_kGCO+bUAy)MB$NLUF#m`91Xl~G`X+EuzNZ&2EWBJi@k0|@<*oEJ3tj=b8TYbdb z1h~#i(#P*M3H3}2y)8cOS-@UBFR~wBF@r+scd97M(eb2`gpb*nX?Gg zzIOINUVwLEuhv{lS-ihH7~g&xR61)03w2kW2fUE3{QP72NG#o$X3*AJo?PT+{3S|& z897pc5_7c1=a3piN`YQ}g9|jIt-+YUd*hkrdV@M+cI|GgI6cC(t60KvBBN5JBgXeJ z{pKF`#+!zQ3;D0I^1=Nhr@m=SVbDdq1bG-o;P9!$Db^3{)#v69iP_HCx8L80r_SkXOm61(E7ESL?Yw4B1nMgN3%)ZBk2a2nVh24VCZwQb!>)(Y<|#E2_WL8wWJ`hTj`L za^*_{wXDfM!FQy3^2-^A2Tg%F_eM_r{Bo8?Xl4}pj@GJuZKMY@ha9~JNf2L~7-h|& zXMZXl3I5ug^{G6p_1@#I69^Epabc*op$pZvCNF-_z%f%z&Y`a@EOQ(zlm>H(<6;R8 z@`x6-@$2RJ*lAJ`*^~ssFMSp2W6#O^T9P7*Xdr>4wAtwX!K5YutVG14*{JhSbXwaX z!or%K_Iwn*4)%ylH(3F!AG$K8OQv#2V?)4$vr$ECwNFa)ZOG_nZ5F*?zj2W! zxn+Y#ut)(Z$E6v%O}($+P;MlO)Day~i zJG6(Snd=vDI%#{nscLM5T4OEjIe9<@HyL}@um*{9^R7hx=5Q2q@4=_$V+th*eddo; z(!816ehMj`ga9{r9iw&pes$dxzkDHxN>^e%n?3yL{za22tC1Ja;@c;GB<^|r?zD<> zVpCh1xZwIbf$fpRvli8l%F^GR3X*RtT{AiKt73d`#e>&=>gz@ThdhI4OfI}0k?>=& zqwXn+tuSlsP~YvT=+1kWy=DDl`s45?wKfg$(#@(f^cW2rY*Mt|VUGw#rKu@U7(yer+ZuuvyHR@nG`1p!uQlE1u{Y)9yTI^YXB?^zaZHU0j3`X<#{o~+skfc> z$A3MuZrG&$F3jLFbUzkCp+T?gG9~e@5qSlb>p7-};x?^SQee4}0_&Aw?DhvijkfkXkiwHmDpIU6zKQW-DIgz6Z;Nqk!LZj;r}31ZRjTEBr%i>}WG^OW^|l$6PKu{S3)7nRa>oZNrTxI>4B4<2 zrl%*SM6Og?5HrVBo5Y|Ufz<_-lxJf@Yj#hsI#eFV>~;2}1rW2vT-DHCQUUFj`S4KL z#_p+ON0eOxE=i2+OXo1}uJ$r{5)RR(26rARtl5^F4f{?FUCDWic4$4|sV~AhB*`Z8 z`T6>D6r=~qbJ=B7hl|FrpJg7{>sz3U*+EhR!736-i~-J8=zm7O9H?*o4+&2Sc{RGD|c!EBeIVJZjqRJ2cr@6|N5^DqnB z%lH>wD^)pF$Z5)5dF;qupJ8<(>F=)ag2R~(47ej3Va*5KgvbOY2BOCxxiXBFpS@Jl zW0h3crQe^3X-EJuOoXTqZl9rGD*?@^2vac@iu{hV0Jq@$#(}b`>9UFeed7$&FrRq# zGvciS-#%lXOYN#*Dy)cipskG`$dz}70#6~X{}bZ-(VfP*F6IKn7XfjYCr`%g#H*U^ zvolO>#Xuq3ZicTp<6mSgA8vb4%d!J}%9IUV7MEz+S6~!MH_qv&wnC*DVT>h{382FP zq=kgyQdsUyfYu&$vB^|fl|-}otlc=F0?6s>Zr`vVWR7Cbj^Ui`xF=s zppP?%<03qh?P^gE4-_CTF=ZdK(d&farB%tr#}0rqcF|%CoRRGdDh|xho=}LF1%Q60 z%Y8*z0*i20imBuy{e(rYwx={)Ha4EIlaUhoq`GD^`dbu&2tf7#)x{G)(3lE69k^Fw zU{*|cz{ei~(7V3wySaSKwxTCLn6ivae%~4(@=#rGNQ1k^r<1R&XOBTt(&DG)>{(~NwL!c88t!12IEq@;lRUE;#D?s#jLx%RH^ZkyAKl)3Dse2 z95tt5+vWP-OPX_7qCg0;XoPto4(C`6V9E(B)N3KJN(h**heNrr8(%AU-0Pet9<$7< zjd*v)r%(B3PS7O=v?3bW#+Dst;kYc&fKr{IQXI8jXGq zw-$~1K_%dYiF{MTH;&o@1`^790$9kW48n|91rj>TNyrj<`g*(OKRSwGB9%$W$x0F$ z%E!$qm3OD=tSPWhe4?XIU0U@y>po?ikWe9y-#1XRt{b_Rfp1~syXpFs44bedy#&c$ zw)6BH{>57~nY9L&iKzQbJS1L2|JgWest2o(o#tc1NkXPC!WK%~gvdAtd=KSsu;^za zkmSNZDryrG3nlrGNDcMa6aWra1yj}&iX{PCFAD>f!2q0?_!;`OE&u~rh|wJi1UlTD z4+hat3smA+2vrVGf9ary&4y_Uk-J#L8LEuj{OYhOM*+UU zFLmhckxg1`(42eEVvOmPraocP zVaiu+r@?cArn7uZ91CTzEQXng50U8GezWj6Y{m9n?F1_9H-(@~$q3k?;6p+@dJ0BT zFkh&|161Hqf80chPK6p2-h-hJ8+MB|1j}ET}oSdau2v0h9k+YdfMj3 z;(p0-ySfUFmf})X;o{J(uoiu70DVDxdR%nnn#jdPUOA8o|M^{Lz_Nx9RQbNE+Pn@g zrQjO8)SM`ATep)mQ4MGIz-JOV3@0-At$je}5(7Y8AQ{h7(XF`(;rg7@6*y(q-j*{$ ztIWE?P_PL2tSRv&R4F*LW}Xv30V1HTaw~Q-(y>h@T;$$#RxLrC>Dl*J0FI!7bx&IC zCV{ABw&x)sdJ~Ck4iq`F;hOLD7S7^Yvo>#cE_Ii~Y=4JFQ^`~tL^#Bg3W=Ai+?!}f z3d+}9u{6myIS-8 zDBPBcFsB9;u{^N%PsP-lZTH3+h}@xLYDj92?ShS~551ZMEJ?ES%QR$F(V&XsNg8Wk zcpPwEO0l;Af%XnBr z@G)t;Q;b~41V)s{N{_=p50hrcV2KkMu^1a%S>)>WtnjDF3!g_tYK-8XPk2t0rnej^KID5jY3q2CuU z9)tKq2==pDj7~z4IJXwvPf!flZ43airK>ir}M9(TU~apLfcl){e#gv zp;gh_3eSHKK5G& zxqP2(4_dv9uwl5N4LTSQ^9n_@YgD#$1bb^2*o62PHFSjdt-NKkHo*Q>$J(IPNZU|| zdA$_6HfW9Qx^>}OF0BjSRA3vnKB3`KSk%^Aw&5Fc{xYxokaiI1EV zOXvE8(*<^sNoN~6pPx+R2PnhsMOLVPZ*K-;i8rua!7dAfLI;Kk_zz1!Wf z&q!mrvE?p?j@Dd{&hEIwE8(iI_J{L+SRCB2*D?P1O!BeU{H?Dqo1aYj;Fx%3uVG|j z-GO_Tr)7X#fM^G>Xyye6&NwZb9C|EIsYuQKF@3v1`+`$yMd0^SzSL^rG6d0UCr#>u}S@EtYA^&&~Jjz9Uf8f#4X9{usYeVEw> zZH(v99UZ-|DzK5XX_S8a#OBKW9~O(wl8fPquRX=-x0Q)}GRHwHm)3`T7W2j>dA>E_ zh5&DoD^Ozj&erWGCDK3)<+jnwg1Px8QRBPEUBB%ym-|ii(@6e~(5$*`W~=kB(sCyh z(N@y$|HLe<;^Jw`duIkvO0FaY-B}8HMh}$ZGvLqx5&12E)|D4&5YnmJ5XEqCmmC@n z^>|#L8rj{fYE=z4(x+~e4WpF}o8;#a67xQ}V-)^QXFHLm!{e#>D-~m1AJ66COhY}4 zaOD()G0LHNst69*u7>_PF-6oogKS;Z`EJz8X*P#*=-?hxIZqdn8}`OPzM+i{D7#V2 zTUUBPwHf29{b%4hG1^^ALP4sLBpwQTky!I0k5vK~A&v?|ygMETQ)hBFN6)DBL#$=C z;D#cXmNG9y83-j^p_2@m6QVn|bPkjfPGMZDnCk@xF-V)%qvN|aVQXW`!f(rCJC{Rm zJBbdWU^bFHk5=d@I_t>B)YbrT#wE5I!R#Ks+zI;c>5<~F<_vL!ECoc?x3PcIjt$J&eeq)CO>(i5ERdI?AItQ}( zG~r{tCUJSu-Xd`IeEJ?o7 z&M{O#`8Tz$<&T>Ig800>LG<6z9;SlVrCS@pPT zbdp`V!(m3PZRy=`?$5Bgg486-qB{=NLoz8vGjei`{D>boqg&jhCMWu>W#=&t#vnCa z<6HzSR%O1m4MtHEt}Q?~i&2|fZVHS3ypEqiwAmc~3I+?%4oimBIuRVr3;iwj>+VPN z9lM)J1lTfRma@s&FodOBA9@nNr)h03y}G5+a}CdMtoNeA!1`LbQxvjEhp6*JQ~?-* zcs>??DL(GrdNcq$%^2iX-L}z@O>K+bQKY9}?Qg#0QGaL`&m+0Op@| zq+<|g)9Bmr8-5EH_g%xXl?L9ZRWWE98H{S9K_>F0z>sRl4nZHl_Ej&)1KlKMij4$^ zrn&3BQtvg22DPWjw{Vl|r>)$SZiP+z7hH@Xyet)=jQwNeDa$NBCY9FZY-brNvp8dN z{ub#9JH}8bzOARRh>|abt-4)T_r|)0vs(xXtUmzCy(}xtzT#K&fu`8j!=xb zy;z+C*Qpk7x1`To4N%y>H}3Qs-cz+cfP_;5BzqJZ7Ar?HIhT{$W&I?JN^9q!asArs z+em=vhClBvZ=lF6O?YlxZ90dF(9x20FF-^y`liUe+a8m>sfw)OEjK26B5hMBjj)@p z!pCW`x&zT~f(f2gg0i68US-dmvSF95XOXqX)+-3hmM7j4ZtgU%^ljNw79Y2(!Pmw?W3j2H>Xgn7KdO%}O3kbT znTdD!md~!{+f#50xg?|Pse6|ky=JN2!y!k#P&*^)R9Ho988D-C8~fn-gn#5yKhVMx z5@R(=MIeG+`o(ld_Ujz~I~t*kK^@8NfuYy_eJh!1nGk;?muvN;-Lw1RL0IvFs(!HJ zcwS22AM1rPF~@krj}`C@k9Xb(c{rF1tg?tF8en=Ab_4yYlIX3+t8}Wh#1C3MwEQr? zCROd+0!1sCsHY7u+-aspa*>CcBK6O8i#Hq>*7A(n42`EEAaN-V5nMSk%0V=RDb#ZL zK76@%iLzzPEH_x=u>hftC%NgIp%!#L&7+uP0M@Hl(+(Ko18~D49f624Pf~Q#VqiD) zz}2ozlTypqPq3HXy$K@mvQzB zpGDE~mQbF-SOTr~>M&cG4|+Dcsq>-l7Uy+j&JUZp0loR$IUb9yWsnQ_eXeZ8=BN4= zIz_A!C3a|3)sc!2%TZ!OFDhp->i}hiTZp85K*v%0gu*4}l@u1whXJV7V>P>BCm=+W zjY`9q->LGT9q;V&)zPoKj-u-nkl{0C;?VIRfLjopbf)$)Iu(%5Y=5^ORCF&U&|$*R!C*5F)$hQ+GL=>rx9qMRP~rDr7`fVMmU}cU(a;$ zCtCtTs`We1efk7L_1sd8z+_?y^|`1pJZE6)Vo;01VF139Y!ygHWr|Tu0r-9B=4AKn z{lAqs2)PP0_j~pt0ui9QqFeZ%wZ2atr2o z%5an;Gf&9@lqJJF_yvCpQfBuCN&fYi@}`*cv8lkBc2r7{$<}82WcR=>4YSP=s60yH zrmBME0Ti(jrn*$FR%EHd=B|>$!w1PJdUu7U)$LjuT>$|)32-9&*fk#ngZkwq@_?{*5<)lbtYl5v286#M;-_S#qP z=is0?8pCy9r*#+FU^s*GRx3wfQ&g@p0|r@%$t*_=SalZ6fB9Ty^9d)+S9x|g8yzOJ zH(JtBn{)j*f7%j2?V5mxUA-h)p-8Q-I-SH3dD7J*W#)A-9`r(6U$%}h_=Yp6A#gjE zYojYF51_2h{_=2S^aw;7Tq(`l%7ViZeN#`ED6S9Svbk^Td5+y&`NSKFR8U>S3DI*_ zDT42VqT8iMFBMfVDJLTuc_}oMoWsGKJPWQs@HYxJ_OYks$wPOdMJu)V0^s}PyfNUQFH$fUk54rg|_@*)yM!L#NngA-=-5>ANo(Mq`9WJcc z@2cp|)#nT3$-Epk5_MDjYxilGv;ZZzhsfmyk7zq`J0QZhE>ssK4qOZ=#w_u2=JH4) zz$6z`IqdnPf(ygsXHpBv)ONFii7mx>Z9st;l|4l9?3>dzm*(ZpImJcf!5DU0HxJ54 z3o-;KZw8=9hbj4jT;yboIy_2RE%c+X&nG`m(ZRr^$mc_0>9;r(Xm%L} z8+JOi(HPNF7Zy==FLw^L@jNofIG@adg?#1=q;fpx(3?ps)h{V)G^2k-ajGf3isw0!~y8EIbJ*)X%F3ZTGf1TH)2V-oVz8I%OPoRFSX{c)se?* zcb~DAl%+Vd+%LG?=);lkhC5++D7Q$GNLQO`NLWH;GEr^}cB4;~^Q*NPy1QNoUjHn<*7hFwW!-m$P0|kB#-g>WQ5JJ z*x4ih1z_?ET}T8YdX1X&hH4^Aj}ETY;%ygTFJC1FfU159at4J8m>1(y$ z^}#*|(8QR{s6vO4fO-F!ElIH0JX8X`(4rd{o_U>@dm2u%j<3qcE|vd{<&BdxXm5-t zfCmE|H#b_1S1CFb|Kt6e6A$n2?&PhVKv;L@DM?@|V(sc&n-hH04pts&j{W7ivYIHL z*$wWypVX5Gs6E+GANNy(xY>%UA%xAjX{1q*n)lz&ZSU6`J7P^o$K|fnWpP!R2CT%_IO_X1H-mn)D1#?? z(8R&6&mWjh1xl=x#f?SPKaVIbAj#aPK6)9X#0Dj)r0G%mkA!{F6Ql^PBk?0} zfR*34HSxCcVW1_0$@7RnK2K^R9%TtEz1|mSd(fdb2vhrYJN53p{G=~$ zu>_MuQ0FSj_H=jfBjswHj`&;yqfVI8;%T5{R7vO?@kY6*m>tGIWl+QIy6rz?eoR}s zrnpb$*SBrHCK>>VZ6`!-b5AMm9-F(dPaVpk+AHj%x~GvBNTaL%$J^mB-7IR?t;p6YiscU5=y=lExo zE^n1RvmP2eO5_*;^WT5t)aYEk{>e_Qt@S1Wh5K@ScW7&Gf6r_LG$`>J0vP7!#@G;! zAF*cTvn>tA+Y(mp*p|vRhsGH0=bKKr>Wa0U&J{2EfZn9Lnz$#8l9wkF6d#g#ndXHA z5?f!;n>H?)qH|1*dABd@=)JuIllRkS$McC>*G<`$0+%vJHI8pLa+jFbp6J>*k)gG6 zmy=`P(_tQy3A}dGQLExuPS__DwNqMut=#vs$6N8z(zhK#p1__>{tPo=!Go{x;`nfP z!j9VRUE%S+*Ek-O&1#4guyq{3an*0hF58=9}U3Dc>z#^z1ZuVo3$Y;T%E_@jbvq zUR_QZuXr%!F7Z%jeipf?Rl}q&{vFZ&uug2=j)ivvOnmE(G1{wQC?-9m9C6*`h(V3p znD|Q0=MM|N?4=TgshzfE5l=6zQ;1%oW!51gLOIlEaJLeA+K1dnQ;&{5rD z7JWy%Kq)d;ho@>9I*H_tDugPbTF$}=j#XrYob@3F)@nZ5y2LLk$w9Bob~3jve);)9 zfB0~Ol#^v&mHXE}rFf{f@f*rAFHbG$9}4z$G>F!Ie&}z+sNjtVB-eNl&v?EN+{7~! z<%8DW&4#(TO$7WfJdttl@`l4TBvv*)1Cxjz#kFlv zTbfD(0G%HQB<8>A^6399T?SW17v=WCj>;1B-JcD##`0v)yt4M~sc^hU)9m_rgE{u? za%$|o6F%){9vpYbNFJ?B+i=OrpgF=RhfqzGu}alf%{x{Z z;}@AQI)ZYO4+Dszov)hzl`d}${4K$rb_hAe-!OtIh2QRG!)3JmCt~5$FCDfsq34cu zC-1(%l=RM^%2X}9=2~qZJ>&HWJmB%_ogMw?lkYXydyVP=hu`u_9tk51 z?Z=Cf{`$Y&c{G=t1FO~GHn1yx-g}?SocTR52(=CuQ6uIL=D@@rH`knO+ z>ofeCJrZD>YtZL~)lTK?cOK`<->f?vhHFfUcH=Z{u1s8()a@9r&tX?Iy>6br&_lFi z>zu;eEODp~$tzN7^vC!kRh-4=>Sr4sbJSnFKU}I|kWcGZpyWa=^lqWu>vkwz{%{$K z1#T(rh}I1_FAU8Jukfq&d)-Xz>Ey1w--yMj%Q;LT2sX}^i1Xvj&9rsj?A}XnR^FS~ z00&P5-**l+ziQOKA+soq(lwYBu(Hx$43dU|dHo7{FspiIQ)o>X)(T9P{djt*ls`(;LqY zY%zMQ5$UajN-cpCU6;f*vYw@^Li0s-9{N`A;pK(zFWFHBL#hdJh$P8RH&e{&@!!+l zpqFzEoDlF*;4$JkD7|HWsaY2`Ehx0u>0Nk$c*+wLn3p^Hvjy&4!o%k_1dC@GelHGG zi8s7G^ZmoB>7HeaXP(U2tN`o1p5pBHxX8VEa%)HOUYMRvG5`H_BH`k-u-Io6flmIr z0S~SW2`T>kxK{IporrJ>RbGiet@l{1fUH>!Z?MlW#yJd`d& z4Cj&;Rym`pcyVI6s0L?efSuff2K4$6?ZYSRLq235RTze7Y=V558@ z6T0Olr96l1D!7#tuqR(sEoX@2mQP8~CG9SePh=hWnmN#K=#&xCn}o34ty@ThQ;j-Rc4J#6S?nh289_e?Jv&gyYx6s;fRD?hCmf@+k0r$CTpyx?5y>c+# zsXgZYiU-zbeI9IZxm)#k@QmGY#Rr76&&MVH!S;6)9%fdLxXkPxb{xO^P+VW>yfNvl z^Be5Zl)leLzYLyrO$b@`A30HU;upS=W?%7e-(;2m6954SpQ|B3As<-R=!sTqlrd(i z_c8#-PmV+758DL*-Q5%dF?>BKDZ)>UzE9VSW$*%}X`s-$Lq~>yKks7pz+{yw4(Kn6 zRTNf{4CJYnC)I3Em?Hs2hghO%zaVm)e+v}u7;Sd_eDb0k&CD<#OV|y04Wwf}FsaYE z>aSHwW$xuP2x*|lU?P~_=aa8Av`^X|o4I>bIXmV+Dg%a~(!}8&cIEz_OuyEibDPuN zTEdq=jj_3Axl#eNNsc6QqV6qt`_jb2dzsD_-JUKTmis%yKA>D_edrI=vTV_eEPUc* zLc*^n7nU*afL8vvrKbcWi_1{72ZA=zDxJ6Mm2JIt>*CTh-qy({lJyFXeR|`kSaM zg9cYkVuP?#tbF9H0JM{kxV>42Cxf9})_K^fV$_CYPSmOXabYXydpqh%OnKe*+RcSpIL^ON6>A#-F>$!JrPB3SG0+sJvE>_lR=J zZ|KP?3ax=X7;ulfPs-k~G9X#w^;yCdXiX6LU{U6KBw3dfzS%Dz1-aMr-kA8dZRt8> z|JcuQy+gsr-VBwl?RN9~0qbn@NPM%Mxf!&K?Ce;BL6WmGCMOBg!>;S!1AI9o3gS00cmIhsY>Y7t zMxe7rD%VeghXk-KOP(rfQb%6YGY0~#o7}9!cZ}2EH1>24V66|zF$DM<%VdlVow|6W zWbBu8uQ1Pb- z<(&7{Z>uN)BfQ$xFNwH4l6URHhd8Vq7sz#9*@SI;IO*BK31C+dKlmV?b{k5+lS zcv0B$%Vi<@z}Xk*N2Cso4HVx5CrL(mPTwlmIq+@YVbaTNQOTQ6RrW=2st_SxKl3hZ z>(7Kyi>1Nidnp>!!eOMl42KDD%2r>SIUu)_lUNHHlIicaEN@fYwn52etB9Bzw3~Z~ zLm6zmN)x#Kj8i$iu!2mRDG&o0gSD{!T-T|X7!uBgt%U4#Tz0!4*tH=09FB;A^<{11 z$`AHxT}lLGNxBK26_&NWEnktrhY&ez2@*Yp`cb&UoXT$N!rx=yR!~R*6cQ3T)H{p( zIu6W@18+%0(nO}WkR*GQ^pmw`mX)SzoQeC+##utAB(i#mJO3DA%$B%Ra-Nk#o=rra zU2dM!tzZX-?5kaQdgB2pQ+c}I1KptKT|$t_mi(W*{41k*zH{jx>y;h8=6_W#ka`w; z9t-k!D2P}}51R|vfZ4hU!;6_nk43OId}nfQ`mBzznvft8qD=WK zi*Urzin^_>RXVvL#HQKexClv9#fKtO}giQx)$`L26Mj|4{I2FBMF5 zrzzCz&$5MCFykC4NE3<2TM-Npu0n4spZo?pDwcgH!S~W&wm__tl%i%wtmEsy*HI2H zIxz7XFc6?ysIp~!tAm&b4^JRTmv}{t^kV?;vdi#0lI}VXuL?mqDI!ovu@xXs@lBqK zAOi}M!9p4g7gAI!0+)GEx{rQMBgFCJO?JSKeP*?>{(^y1V#00rP%Kv6zPK{b5a^@G zn(H9Ll@ac55hemR772GsYVllv>*5v-BMx`i$sHHS9_IsKtn2GKxR1o$gbh+z_MiDg zeYSGklc0E?aN6xgYbqfU+0 zS=-f4vW)KVQBa(2%LmcJHd`y9J+8=MNXHYaai;^KjZeh#;8lDRXjS_$3AT8djZ*YP zZ2fF^Y^}^U0ky&;;7QZT&0c^=7uxnsymAI#%0QAOh!0B$6KHWb)Qm}i&B4A+*we9L zat((NiBN<^CG2X&DNy0y_6@hP2z5;4_fJZ@$-$U=oL#P;zbO`F5AHHwd%uUyB=mIwR$h#eW5ZV1Y1#4J%-GvDC(MU@Ch3e1phvUm-5+pKE73 zBElv&0YOqkR%{HNqVFU@c(BR2NwEP*bw^B{Z_U|j%TXW~Q=8>jm3QhvEMg5Gcq%1k zlD40FS99L9A*CizxD#eXla z>)5)b?xK8&wStbE9u<{M!cQ*?2piVHy_6AWu0R2#DS=V`{a)MNnKm@8y+Khf&p~#W z3B4@gg7rqXC`3JuN~XBwwr|J2wXGK?ZI?4(!8F-<8WK`nb*}C!kPrrGD`tiGb{5v| zYn#lr*2rBe)xi^)CDxs8z%8i%X8}5V$jh}|XhtTAF-J*w@5{+X$P?S1+UArfmq`w8 zh_X|NX*kUQ$rStduWT0HHHHAF6Iq140PIL^#{n73NP3tm1wv6}l?BbYe(thN2nEN7 zvnssVr<}!ldF+bqjHN2WW*Uexz7%X$Vr^xG(hk93sBuR|jyVV^ zM`EejV%a;(RM;j?*HB5%8_;;Y5^gPm@PLI?TX#8HPtSxJ(l3OSO(xheq1+v=!h`>_ zBjGI*_BEp9b&B=H)}F6opoh9*jEXDgBQ<~UmP1>z&zWhvp}$gyXQ5jIH6wGD8=)=U znpOCnhTQ3M{Z*9cO@-5<6=5xadch!kdyBsc;Eph0ChE$s?$|1DVAq+18PW!bJ>LQO zBNX`A$2P8b*&^nZv&S!)uBcrKhL*+1q?2G4RMcJxt_c#VX+*slbnBWU83VQ!67+4c zjFe57ViMZf(0sN&D-W^qEAgHrX1us5_!;$k!}VKhz-xyc2eHUBKKhne=A54B$Flov zlR+pn1w2{ER0*bya&t!7N~Ux>3nFt^_|Hrkc=CRwo;#a8Z}sq@37?7pg`+?=WuG0f z2xv)ix+gcYB4azugam)eB8*8eP45vSmg}p;vcC(k%0h(wH{K4vdxyDBiIv2=v`)^e zasn6|Rt(dvk-oT z6Q_mvy-a{kL1rXva0F~aAeEU(d@c4_FlmXd)P}UzfTy4vO;yFlh$X>YVjhBqGsFU% z`}~71_%(Lla5FRla`^AEMlWh}P}XrXES{&<`nkupvlaNX%p~gaLC!09_ax{6AQKov zSA@iAHX7tB8!ZmKu|nOE5+OOZlJOUhkmu(0c)MS&#ylra$Ij+Yl4ZG390FeUSm zhOL%qMtGm7M@atSY=bgwG^zKaz{8c{jIf*z4 zJ+-LFUBib~_1L$WrTl0?hGMjTflwgQtVIBkeBGREeSl&b|0aDGk@kqF95WVFv}n`3t>K_*9)fhBTh{G zF7!ML|Fv4YCFwGOhWbOn=b0cgXE5R|w@8xt=|B?&PV&d+GF>c8xfDVcz(bXATZ%n} ziW;WMZjl~O*0MQrOtyU|g)Cl}=Hqp#9OUW?L=ybEP-c`xfIpRiHZhnkGdrDW)UkuO zpAxL+VVGmjpk1u`{e^Q#01j-rl}@oR+Gp`#5skEv*~G)VL3 zyQM(jCNxOIM{)(keJ8%i*2&33+Zaempl=mn5n;|oIu7HZX@^ACnTwpFeRXoeZeq6( zzc%v=V(Yi7A-=oa(LV%pTVxPLPpo1ZhVD^ur=SF$0({?iJL)s6iWV{{T_{rikpIX` zI|dk%5=#XyYH%*=NVsz}e9BV-RKbU`qj!F^Rfqw$mgCd;wl$9|%V&X;LSmN?M3b72 z%zzKOq0bs@EtBZ>VuNSkLK6u01Abl$vgkWPc)~``FYiGppLy=cQcd2#jK6@xFnd0z z-q6kcL(O%F+VAUo!|{%h$f+N|0i9Rhj890&;3f~8~dw* zXS~WaUG^eWLuTm}P`VsCr*qh4y?i9;uAJxVGIi(N{@qsnzCAe_fI~Mxn`6`hjQ>rS z*FpZTrgb!_|Keng0V)!ItQYP>JZ^KE6wG*k>L}zxAk0lW-bG*8w(#QL{_iepoBu=C zyT>#62Y&z8&SN%no?~-9YtAETPMLBTAw&(4(qT@8RM!q>ghnc%8agOqM2%E)Ce%8T zP79TeA3EyjclEvR`|+b|-{y5}-}ut>!%PmcZcg3y+8j0g@Z$GxVWk5Y^f=ktk_)l(C2^oe|ye?s&lq5BS=ydtx26$&`HUzLs6zXUsc5sElrAG zGwBq+f9Udnrg0J0&Fkm!LAVxY*bwt~HP-iNdea@gUP`&wEDlc54H1pUZf*-OhtTB~ zB|RbeWL6~zppBSqw@?~z%YKc>(|1hW)bX)u{boo8KH|3cj570;_!>{UI-foCe z7D*Dz(g$B8<&P?Pu$BU-|AQ_c@0PbPUj69jA%tX(nL!HHsL+H%tIJn*KQ9)-vPYX> ze#`y`UDo(`5e*M8KfYW^IIU0x0(CZj%ZFJSM+vkx*QozNmp_yr!EK&>w3)40Jm;jK zfBA`nza>Lde=5<0v93Akf6(QCn^LvB3tq?)WEgl1Yoa%5e@<;Wbcln|qkN0~hc3%` z!b^20cKZ7Emr-RFhA4yVfj3y_Qog_zmZ!UhS>pPt@`+2NoB8n0ssO&qDpd++?XaT7 zEB#Qyq-}TcinE=`)w-r~C084$oR~T|GKeEF#lailI~$YBk&6)>u-Tn__ig8+^K_Oh zFoX12y|m=cuZ6}2d*hW7UY+NwLI7a=rE}+!ukN^_Qp~H$s@OlRpr1Ma0_!l<$=6Gb zJ#4IuGReKl>Qh#}rM54!jGUzRPYet>flWxSdliOs!ak9tw*9Lxo|(zI!<=PXty1D` z^uK39_ewH~uaMbfXs)aBO~Z4~(>)XsZReFz7DZm?iVr!1N%BQ-N0k=(MOWb8h{d5ta zlo!QS-7oM;h>>$_|0t6_6Ni>DFS`&Q%J|!jD_xuJlx%}qXa%%dwU~L-ZeEI-B5MkN zMAF|72Pl?e2kkE0xnl6qOF=3uaQ@2#&fO6fZbBwX?SvfDIWJ$D^Vs1Py zQ4hA8Z49X;Zi&%UBAfj*JGArw(xgdm{unwFt|zCVRR56Zt6kbc%hEwbUTqOv^={d* z{@FSYR)MM$$U2TpvhZ_T6L$1&#W~+3tBB4uk(citY2hW=B)P4Pd3g8emHs5Vtj@I? zzui4{1DQ<8cMD9=yjMBoo9u9;GceiZ-tpVKWT!K3LE9qlRZT4QC%bfX2JPH^ulhN1 z3w6LPIQ{6on%BNt+#hrX@4gJ_iFjK)Ub=AGd;gY|Upqtgf4g^T37JAexidJL z_eB`L6mN|#2H)j=t#W>fuc>=zQRMwPt$~!)&RwCUyYJU8Lv5w|xrdb>y?@%=Z|jx)?rZg8B$-Z{V$U?V+yL-mHD114g+DEJ$+ev zL}Rz-nu_@*sjgx905S}N9M0c^HWS)WReuG1-S1@KLPW1@UJzK3fOT$dh26=b{Gj`Z zdR6+g++SBiXQ2b<2Y`Rxx-Ex?{Orse$-SRzYD<_F@-DS!DcQq9tIeGS8*8wrkuQ#!PQe?V+;j6yH~X(8>!w<;x=9Q z{Ien}YDQI&+PlB92Jv3f+%rKAL?Pt?FOuErh7A#(Qdp6Oo?Ib#_|8mv0w+N*qw|RF zgRMypa7|QK9EvJ%YXIQ3N!t$4AqQl*Arq@r)r%L<>_15q@TcGJq~`YSI|wUH)vJe_ zUv58YOe{$SeMk)%PP?}Wc|l)hbS_D~m#rHQwK(lxPk@z7Zd z@WBKb^0t6H!iRpHvEeMVlH@&k6I4f}?h>C7p;+sU@$hWpD=LZ`xW5OGcbLYmRscJA zI0(uhwRPbyXpd8TBWJIFu((N-F2yyqAa*?bzG~U1@CNmla5QDmeUkH*r(E&8aGLRlDEo4q#5L@wjcp{cCZ6Eg6(Sx=_Wh1$pz4iy_ZdccURc(qT!kfoS*Z7}0m?3$7b z_ltEZEUX7EX8BJ5ndMh#=yAf4fqllAUAdsFz~sN#kcx(P)z3%dZ=*t=D}Qx(}2c(GcYO zzzbGI!IdUerzXp_qu9Gh1>0B%?Brz}Qd)PZtJ)1(=bE*88N;ol_jp$P|BD)YNyvHE z{eRNv#D9hAR6`EF?3gkMu?cd7M!}A(^P@)hUdaX-*!+X>UF!om;Y3Ps`z2$Et}z`( zokY9jIzQ1~olw#9466*Cbrxm}l>RsvrBoJ^3A5eGHl0J-b)y*)c>I&qN=jB^fG88> zC$o^)N&MQ=+J$s@w1pvq#zlysN*>DM2~ttLE2mhsQSs2!RsJ?sfchn8kU0ho4M2a;jZ> zHf8nRC={A?s7k2;nb9^xhO@;LjNE4!-cE)Rn03WR-=1Q zyY*EBou`S>5?yu*Y; z{EctnRVXpfg1xuFW~Tri)A@c3xP_nz#{!3o&QlbN9H2k^t4Ku%NKR2&@aoqk)>%*T zlf`^y6d=D8(gnaFA9ZR97%D-f$@8s=MV9QYq$b1Ytvtnm0ve8eX^xWcSk*-C7d>pm zpm%!xlwANh_9Q_fNx)*3#EE#`RJN9cyEVH&a|}Q}J#Wf!)Vw!@6lzsdq1U>h$>gSX zqc_k-$!BnplegF@{3Y}-FM!N7C4z>)!Dl}Ud?~<4+XXGZQu}PfZK6;kD#vV8U0=w_ z^0=Hu#<=@SVh= zhv+aEEER8^<0v=Wi9HSbn*y_CAuHR_o9E!)vwP5wq@7_fr8#6Ay};oPKS_r2hWyp! z%lI6QI+eXUyTDG+eJTA;n11hd8{~?6Lg?FV<~-fsBTn`AeT`Bzd%rx*66P3&ij10A zN(Iomwd^4`xUmK7@MGxMjaW-%tmHlX2F)gj1=|}Q>g?kzx$!@LLabCBMY6j)Roxwm zD~N)K98!V51x)oxxd{n;OvG%abN}PGTYb2qn+xH2{G@p(12gkSIEM=V}Dv`%PR z(}@3l5HaVNvBHb6^@E7Y31d?Z|gV2jQYJ)3;4rxrJ-CdW8 z?VWLtJMFWNdWs#*WdqtE9O4q?qFIHH(>n|XmGT$4=oI;er5ha)FNUR79qrs| zmH0|fsaBy%QmtLd*0{iSVdQVRH=&som9hggoR!>uir3JN8})0wA%N#rLe_D{rdEaH zl4>(LTVoQPJ?uq%$n3tOX7(pF_eMp1eb} z5iFV<;?ZIAJYOb4jcFKK!685jZ!8))=iiWSzBG(G1fN501_}Z!$eOF|VKQzIfKJLL z{1PFZq~L?o3YK&>wE^>3p-2#wu$$u{A|XN;n2Fc|H&H;>j0;A_fpqA8LcV^kv!(-1 z-J?621w9uO-<_Gx2ulQ_V7upaH!{#$Bz)gW!+m>o7Gh^t*C19rQZ=S=5ON2IH$Pm+ zAu?9)51PRZ7TeA>2MXY;1T+?%3j>Pef2>JAa7uFq4AH8V+Cpt1$5(*aLaj_<-1UwE z%xqq!sU8x^fZf=DXc3@Jg1Z7LDc}r*{>C8`p?yW%T>lCmiUEo30vV(ws8etFo0JBx z>j<<@p3Ox9wj|v&5pPMu0u0e(+p3G)=4uw6beKR;u?TXZa?GNj7GDTN!t14QJr^Nh zwqS4Hx^|GqD)<0aK5O|zTn1lyQ3${-J zK7`oJqdkpGSsIj^m%Z{_V5Dz#@mw=d)Z&|rk z`(HF?RiafEK@;M1C559c-*S&I{nKR^}XvE!smW`89+}ZYSrS}>@=9QdN?F+&XVOL87~^Dx9;Rv zE@?DkSi{J*Zg9Idn^#ubZ6gZl6)z<&CY#RkJOQp_6z8EA+_dkG3YD8ajHU>VYpi^| zbB&r^CErL5rX_}5R>wi5y65mD1or8X&!8t|O*%BunM8%McxD6D!#%wwWc1!jp2@9s z=~hFbm(XWMh#OlA36|^x5++UNasDc3Kaa4tPhml5sbIB^F=xaFeafOp!_2%b{MgAq zk1qZd+cN*l_K=7(Kot<~KtZQwzfmA@Zks{=^M@O(k$6({*vE;T+o(a8qHsd?gUw3a zF!&kY%jXv2va>6X8?X*zwcM(6MDH=r;!|zM(i? zXd%F;kGu3SI&wGb)^o|QXl7MJ?277*iy>0L3Xvii{ zxK7^++6&QHWQZq!JM=<>EG#r3u7be+@JbA`60H2TiRE2N9WF>+L_r%4<81gutL-)> zXW#j(4d!c&2YJW_UA-S${+e-e;~s8j*o?k9d#;eT)bnMX1_0BTOiyE={MPjPiBwcs zFrx5SNC0J-{0Jd>%U%&&;y}#Ub})R%)?Wzvl6%*Yzy681(I|jx_M!X*aEnDyJq4!s z=e;?F0}USb3K5wZ2mjl@h|UHSqcKUt(7fQCWl--G5*T#=lTw)<9)(;b=9px&BPZBh zZXiQaut6@mk(83U?FSmK0%`nBj`}K-xw|GmJGAnnqfn-lhk7GIXs(n2z1vBYG=t2$ zF7kS6(5mvL1DiS_u{o8LvN5UvY5~|tftUGCc93I;iY7!|VrQqbinzN4+!dMh#4%8V zoF2#k66#B|hl{TFBTXCNN)6JbjBUy=vh4fGp_HAVHf!}(CaAmBVVMORV#%|ym>rY( z|7`pgY`<#{(%*t;(xwbKuzK{UUX*lsN`5$m4UjOI)O@DiL>lKeMekgr0Q_jrg+sz` zs(g^d`IhgRD(k+B5uo81Rh$1ey1X4LGXCHGU)6ZN58)J(D|; z9G}B7>>Ckz7yNJkF9AmR(*XH@8^WxU=VYRL?s3*cs%5$H&|z)Uya=^DW8PfMx{0h(Le}o~p{PX{2J-L}_-PgQh!)!h-b20AM%aK40J3-5dpGIV# zna4MeIqotD{r0}|*12`Am3wIoo8NWCtwX0il3Z$RJiL6@$*eDrUQamQ_*A53pFBOR zv1RNpgf0ivo*OETUImtwn1h;|)XUeZ!(VEWxp?>N&;xIszmoHJxKTFljEs;N7U(Og z$7ddU@Y1l*zhu2pk>yE@5kTNI7!}*!q$U>qZq4?}b$Tl?KI9oWl(3Eg5^E3n>ExJ{ zx5AF=0$Y%Wu`p$_d0cr!OpfVMlSh>XrIFdjw;YxV_2gn z6?+fV3k`OwtIB!XX?|$Ktyc-?&3Vz|7Q?ZZicK-GgXZ-m?lE--RHiGX)=7nZbfx`) zmx7(QVwunDYm3~i_U?DcHwO5V4!51hsoq|=)%{)}jiqEU`F!WwuErhvrv>ZWrf7&U zb>nVYzlx!6`IyHEf{d2ly=H}NNA@2GR*%fPS4@3$KXd@*OHAVuLWb8Ia&9&Pc65B` z`t@;LhP^i31){c#bXD5rJi?}z08g20bCuw{Rb38-q~1X<@58^2)-K&FQ^cETw6nMp zS7x9u!Har_L;iaD9dy_dlz*YTuX<0OyRKwkJ|$BCd)pQ>DaN4saii7+r60dX%(BGNpNC3~@`( zkOx9o`O7AIRoe#Q$k{33UA5*leiu$YV&k5X8N@{+0+q3BfhW;^4t&S#XfV3%e5;{X zTDVYzpO&B4yU~D=G>Zr}v(}SRJM}-)d~q@FRc<>^1kOMx$m*-hsx1y&U-6&#>3pS;d2^HhT!>w1kR7`!~!QlgV^@}+l)xPcb{B}HxhPil6y-qr<^9$tRc7?6PF%@?a zX6qhZUAi7u;w2jyeUuGDEG&hkj0eB(*iNQBZ_uj65Eb^LJ>=mIVoZ$v%wB(?_bh0y zoaSK!vpl{r{HT))GF{B|+gc1*87}+PBSl5ZPq}Qag}uqg)AgA}2h(SJwC@T{x@rqt zbR2`)#1-yYaG0;y@TY@F!6RVL6;nEz_3M z{k57Kj%u#PY|vTcQ~P1KP|AO#gxHdg=<@+VYYGWp8Gi6dQ{Q!eE@(FCpfn?ehfk2~ z1=V>k&B`1>+UnSzBigZ>)``!6yZVDkN_2MAFr2V?JIy(RXXty62uoXFNFm#X*+o0+HD>HQ&kCt=FXkxxgjv^>9ofdMJx z?0KeCpym@)HLbcb^^%+{{N!6udMeIq4rZpTSFfsEVYRyoCI#1YJ&db%4&dU9+@AH` zda-$RVam(}H;&Njzq#j9E)KI_L+M(&#>U~rNB0~AD;nP_R5-uv!;SgcEGu)65<9Y_ zX4EAXrMvsbX9BKqdGYl>n~os!qOY0-@o?I4Pjzy<`KO&DaFQY68pigpLyqIab^X}o z#24J8xR=5{mDSj=^=2wqSv9D)doDgfC4hL_eIpG(5LfoE?pNC1KBMGxPte*A{CEMZ zM}(-WAXZE`9WLN26U`csx}T|X zN9w&D$Ph(vhv z*1!E+bw}~>G57nKhQN*a$nEwKRwH7Cl~YdjICD;a{HTX8E)+;&{+Z<}dm-<@Pk$Qg z;_$VUau&u5wI4R0rDkM50Ir9(X*a-40yw=YsAgpZhoog~@>&KUe z?lGM>va{5uNH=!vso#skR-PNNd&Ca69l9&}ui#v^fAJ!B3?s&uPw|^io|!$gYIb2* zZR66jd!TY`g6gsq+Obm8sx=HBy$W3zb~9~NPOP$qI!T0n@fBQC;tzig>RU_g35@U; zfTPUYXs)&-^~9!X!H7{tqcw|)^4hpW)sLsadqbnI7^DHfPept&MoSox}t2k zzPrl0Ya=w%hxR3w_r3L|<+`tr8aBnfuhV%dTkTAQ>HPIn+0N;U4@B=7bkX#+RBq^( zR+bfRi-nqa5^rJu>%o=jbki8>YWHa}EM8cw-bEbR_Km`JbV^XWTd8bDAnL687Fg1A zwNG1b9t<)aDc{j8Mbt!=w=cqAafmZkp0i+tJW&-PfggI6Q4$fwMB7z*DTc8M%7W_Q zjonc?dyc9DLbgG_7<|srUULMyM(>^+qz(6tZL4~1bx>AdqbcOLkUp8MrAUuw5|Ngt z0i}iP0+J5Ha%IfAfNeH-n0qVkfe?=S5Po~bsfML;&l-f1)8lir18QXs^NBh}bT8a) zlY={66k*eHypjBc(vZOIK8O?d@MY@V_Stm?o>j_}iU0#xa{B?R96*nyiZ)wh?IiMA zA1lqjyKzQ+`@s90@1vUz77oH<8wNaX_OR9T%C21hu#5FqOXZx`2jG_ioDi9O+?)j6 z2s8vZpz1cE_Ad6N8y#AcKvcf{BtdV+REj8vC%kC5qUKUa!a^;&;becz7U*`>%DyC1 zkVsH_$2wRLxcPgEbBdgoCg_IZe4bm6E z%D<*gMHY3m?h~TR`*c>rdJ^}^4v&#~W%5NIjj-~Vo&TWvoeElEP`4F?<1RHm{SXH1 z&`RK>eki>n#RRhmt~6MDdUaa7d>xSlhnfNY`tu3*IU9aYe~etyL_exv0~JPtqIztW z_iQe%{yjUfbiD|EJq@3K6~G>o`zK+f$rX=(zdFU|fLroWu6h0>99H#KL2#x+qsNPS z*#Pw@j1LR%o?{%!JusqXokyL~dPnz}s$-&0F55xr}v{_{S12d!z=i+>rd z_kne2@9JYrER44PWA^P|E8Hv-uKoJ+U!%H<922tGtNVBUb%*w}*6qcX9B%QL&pG=0mF}~}ZJF1vh+;NOe}7|NC?AK9=)m5RzWtw=n8| z+pBnda|J{9csLvHSMgW8Nwz5^AAr-LtAq^MddGjNZ7D8Pj=3iT?vv5K+jgjsI1}i7 zJ6O2SB0?Y~QJR1sC1U||4kaaBjsYSmYpX>tKRI&6Sta5+qabxIjkL>E-NRHuc);2~ zl4Nj04-2PxA9sub9bRl%(_o!$uds)jR=0Go zK-iFCg$%m|*xFLy;dR!BS8jK&AfxLIn}_Lvxc=pLKu?KAaM>p2(PqI&?1!X23K& zTLG+7-NcMv5dy*^WhGJ|@LRU#%k$knN8llA2}Ro$*?j6$`SVIEZhY)u2cl9eN++irb4rv`Z*M*D^lHa<;dnY zVe1zF3YsuIk2Rg=CjB^SH;|ACDmRJ%D}`g(j}8;a0Gk01Id%+mV@zpQ@^Zowqbmi+ zD~mcSi?M{|`T#B8WSHcU?>Y!@V@oHwG5nhOGwOuk*x-Ppaj|(db&J2SVFDFmmG64?_Z|n!zNVA)2daoScs~dGiR^ zMJC(^@o+Z&to-D{qf^U_fVa`aMK_|;>r?2r20%>pjR0bAAq7vSdIHndmN7#EbBV9(2mv({4nKkK%KAQ-BjB z`?~|jgc9H|1bjgRU8ONjZX(be{ZxK$Ow(X)({NSO zx?0@Lsis>O&L|y*-*&%vKjz}Y+>4V{7pJ-|KAE}*0rPU5=4tol*_h^6xy=Zb6LYyW zF7?gtejY#nz4@_r%SWr0!jaWqwzM2o*jIF}<;Y0OpSLYVKlV|fn+XN+k8NUJq4?_s zamhbrFG0%-9;ozL44bLlIJBkR z=KRJIQQIRK3Ma;Y2iyZxJlxiH*eC!=EZa#gK$0nbpI1QA9PO+x>ul|Ku3}FC5J-yO zeQBgVLuVcC%C`p9okW{0?~o7`y+hu9nQVZ1cjc>vPVT&Z^a{B02*MdeLO?cT{N_+# z%K$arVR5l;k(E9A$~>W81ap+CQGtVwq4*gQ9umVA%dz&5@mg10iz`%7!TbjGh8}1f zwMQ_7m_ZS41ezZJS1XyvhJ8q#)+^1!pP$vT1UmzDW z483T<6$>%J)>s7X`uMLK>qz;0ArzZNUs5Y?Gu%{JgoLvdeu@+cf)@2WejN-2;jU6K z%oY;2%aL>tc{FXyN@j4TRQawLknZW#cmhBZqQ)|8v=n71Vp!kX-ckvNb_;K5VX8`d zCGYwS8&uUIoF>z8rzi@L(#u%vzPE(mk7>jjc&=-Fp51ELecb~ZFOWKA+q%t8F!UTi03J~S`QB@ao3lj{z&l}a`rFeNhdc;FgCpmmMvBl-28FMsm5x9>}? z{{#51J@^|!MaZNc0iZfhcg1@kIWpy5)}@obI@j!r0IZ4Ywg;?NfwhWpZ)Ervpl$Cz zSvNpDj|iq9H%pb@N?|F#3r=l#7#|lztiG?C35#GTw4TAq#c@m*#8IyaKk_y4CAjmt zIJQUIfj`0OS1o_3yK9S)CA1^>I6(Ot&mV-ffPPXbG6I0vr#?D19>~_u;{>gou_s#3 zuyAVelJuU7q@5}$aaa4qCP7K{z{u!Oq`9T1R~yMuy%D2{`G zq&oAAjGPzUWigF3~;$ zJ2II6&&JeMLcxhe8-#?D=qz@~+HHmrU9Kaxy*@W+zLIuw zy^g9F-vHXd)Sn?vr%U$XB0(5b3%PdJR>h&9EDQ4nRJ!qbCSG?o__P6~6$QVn1Eou% z81TVAIctJfj^0gKU60$yK&_P`mI>j)0mRGI$U|+tOmZ9T<4f*FK+ofM}3Cs`jt8FfJ#|iSRdNm{?JfYcg`R5c?OR@o6uZac_e&HK2Xt6cgV_ zgI%44e*MrbQrt9ypgI2_u6fNJ1T1kLwI7N;$hDi8?C>N)0&L^MP@)4)nODN|xze@35&2=UYi z@$;`9hl;0P|IB~xXzZeNlT2vOpSwUFGY0NRW=KPz9R)T&V8bvFD*hBJD3HIXB_}#Q zagg|+f6Nnd|8(qs`m=cnSjIr*KrtKegLs7keCgzbsIosI|Ks0}W3xVmAoMhb zLDQ4~N}sFr+a<3RibQnl`hXt#^zU^f2PI9Lg%`U5-=0ix${NyLf6;xLXNfv2#m02`}8+|e&R7KR$biv@#(b#m}MKg zpSiqh+vg_I!IaiGCbPC49=dCrF;(@0Eo5JLS~ug9p&>8!Oz%9Sv!m-gzsyRB=5210 zE$h|X3&xAAm+bl}K6uwzabJBV)0%(`cT6?E6q{0;Z@#9%VHr@P zFOA(a#I&c#UKAQREuv4l=`k~IJo~vJ^8&$6z&V*&xd@;QvL#*^Es40ldSgF???-5+ zh(^Nxmk%5ju*x(xVY339pUvqQIEgbVFxIgUsqJ0q2CN9(Yy9o}LFD8seQzwI$L3)T zB>|+B24M8o%-wC-@XrVS47c8$tdrh!exTSYoSue0q2q{CAi|IPYvJ3o4qJqM2r6uh zeD%WwrWF1-;I{SUt*>;VO+f1AGJmt<%bN!!eg?mG$GSPTQ zX{%hFtvXFw-~q2mHg{LR3&^pg`lC7hIqM&b&YkUA+ScedeSydDJw8~K`ow!RLBpH6 zcB|H9AwvUYHTvOoLCZ(M!R>b+Az+p@!n%Bo>kB_;Fmkj9tLNR0PjJ{}R-bC<&Cavh z{;C!W=uEXY=c-oD-JIiSr|Nn5pJTU55#*SZn3HLBrB^Z@tl#oShEt>@!x$C)j{o#^E>f7jZI3iPG zXl``>g5L?m#hw98Zy6Z?LOpZ$Zfhox2CLGV*eFd_@N%zh@0Kvo=APS<(#=&ySsYZh z@ z3?(8oGhqzxbcUTWS&wt*-E963s{gyqbg%J{b7oJ02a}BhMhoE?a-_K)S@S;{5{U%* zWBx()#dk?zp@bbmAKhz9z@VXAsu%SXP=JzhxUyEtsXt0p|DgICeHw72H?cv2a&8L1 zyH${pDI;F0D@6rcn-FRhBY@)rHwda%cjUaMDSQ-Tw+a%qb4XS+oB8_v;rXW_dazAdi zUs&^IMDYu?0LAQ#eSLJId;L|q((ZHkWNA1thvJ2gB_g5z2X?g#Sn;q2*@yquy@XOJDYavBQyk|r|4d%#(@zd<2T7#@>l4-z#X$UzS_|ENRrB1~(ltODX z^Ml znig}tVwz}(YWDty|FNn2qUZqR^##ImP!#LiaKCX(!)zImtX|#<-`$?EZR7W!tMMdo zxxA-HLtWnP)u0`dH-Dj~o2k@a>93c2)P2+X$5Y`8YfK@qE`kAEg^wDAY=2c{Vv??k z9=_G_;M&ez&VXV@8`@H@EZ@FDgt8OpA$(+tN!^JW3S!5rsFm|e0%uVUx@*v3w_#C$ zuOW7MrMe0-R5|TSFTTn&d(e4h`N8{A&fgV*<(q6 z%bqAPm3Gqn9Qs?Ww53v&uhddqN@f3XEzcQFHw`^ZJd{@KjmW1Dxwo~Z)UV(7iZD#u z>0Uygl_saQ3&aFMqKA*zuoAX{|XNLe!1$v&xz-MzYiVw`}M|wzu%uPEn%d9x)f$2g+m_{d}-Xa^T_)* z>IC*^-i;E;L02~IXEhDiDE*!x<&V(tnWRr|rC$!y9_LDlU#_e4n3Qko?&AYE#AVJ%x{GT8n5=vnib_I95ApzG_tVOV)+tNk`e;M1M!QJP5hFb9? zXG0~11>{?>xclJ+ZcOjd>b}=F??1yWsS?P`2&!AaT?GXYrX4^9L0#XunI3J+E9XXd z8dC6{BAYHev5E&i6?Cu3TzPf=VC3ZG7$&GGX(wmHjRjo)cC!F0c;_8lq%-c#ZkZ)~i@Rg2`dD6$z%zy!en+tj$8?f_yqslHA_E!Kr3_ z13wL0ZcHMzOJU?nm_;Qoo5kNrYrX*+T89KdIG16ZZ$$;sIZb+GxRwP>Dnmog@Gj9% z?)K~2kKifQU6J+&*Vh_aOd@k6{H17+>)z*=AAUXDn!ioVx55xBYtfZ|T}R~82fDeR_}E+==K55K-bV#AUnG-x{dBKA5Xj!6{ijVb~L zu4s#0`Qb%Dc?R+oORP)fn3I7~D@&Ak?d!fWdILI5#CIa;UXrQVq+lT6&qmhK`{kP6 z{gZig$u%dqWj4%~j(P+AQ$qF|o%O_o7vi#kQ8;EB5urh`KdM#`!vMpaf*$*LIeHX+ zXyqqCvL+UCDObXe!#4F_4SMpq<&fYQU1F0gLM9OlwweSbd)%5_(OYg&`+?m*GtVua z8h%@I4VUR%`v%vaSFn`{FBJvP=Xt8;Ne@;IP)Wd=&9~>9EHiRLN+&r(jkh1G-Hv*D zdwNChf|5-B>$bKHL$1ppkIJjrA%#WL78dldYxAzmsMlMrj^;6jm=(wS?D zc#D5FVk&RDq{X!#v!BZj7T6;G78(2p~$U``DL7LA7``djWefs3ez4G4^P)a>ko9m(}w zO34oUiCiZ!>DP!4{T!`?^`3F6^ZBJtO; z@V(KDm?;71z+NAPE;mNGQUPPy`M^F{pkcH3@aVb*PHW8rAzL%eNPQ`4#19#ybS%C)8|?}@lfW-6O7bt1$!L!;Omeg}V0!)T{QE@|B#_nI!s5O)(2h+>HBFg%Hwdo{-|ad0(7RgvEWgou!lltqsepODN#1q zBXesXp(|lRI=_@&jurz-x)bfwQYTI%7*yaY1&OjXgEWq&48DqrX@Ti~tVX8;3d^sF zkG-7O-*K||Ou_1L)y&yuGKHfqa+MG`hc~%xYNL8lu)^Zhc-{rD z{0x4^+#@L#E`{%=`9j)pYrXJSJ`-ji^3jl*p8+RE-C6K%`wV|tR9U7ui4djMq|ysI zD=xg=0hHhaaAf|;F=T5$VeVaA3md)X&8hLUsgj>9iUU|{3c7qP#)FRBnxc0z>)w_f zS_eNS=IYGYhG{+%SxX+0#9lLJ zKB1@hILP>qEGh-8`m1nrx{-fK1~Qmv)-c)(%U;bYOI1aA&vQvpX15I2zq;T9HJg{u z8b*jgZ4uj?1z$xBK3wfPin3ig9)!-8GY!67Qzeg=T5vm((5q;mu?3t;;cuo8uYW*A zPlDr94c6amToo*aef!b#91{|3*<`sM70}y=nWzbIGBBZ9puxw_rhV!kbT^qAz(~|G z6DoH#3mHC{pD7Ha$ecSIHlEIAq(tG}st;R&Nhg6QXh}-dX{N_Hhwa+}I4^DP` zK&>$2m=7!PKD4W6!<_`EWD+JmN>|mXMMbHBBnpoZ0$YMj)eJcy6(ZlDWI*NL%IL z;e9C=DHFLT5gKIBD4Sz~ZC(?tY|MfqsCPmbXWs*L`v%V+tdu}|5H*U+5Jy9Qc*;tE zno}?M6E}GL>>FrZwwqLtBt_z&6%CE8&MFRn8weL5A<7+F>2h$~wnf6l@hevO96XVQ z*P!s+EIVzEGcOLhj4SZAW@Fse=KEM6DIgq63ZSGZ5ux#r1txN(hGfw8542m8oa!pn zOU@{O~zO)NGJdirgJ-6$Z)Eqc~=HYCq0ejpu;D zBL3WaI0^b-f1GVAMCD1)VNtLoea&U>X=BNl5C!(Zo{w>>xePfnUb5@DC%>}!;Jp)@ z7OsPip)3^nELM;&6%hsJWyG;kOiKRVMI@<+`jExergQ9>+@;_}D5(LRT8@1xu{s@j zZdYhpS|#63c5a6{Mz=#u21QecZm;K85@J?{^wocq9=@aPKuXE1sW`#JQ?^o0BKaiPf9FhX9&88QLinNdv5bsF zUzONZ{xp3dF+2*ak`$g8A8AH%^C$)QC^h=3C%1D!Z!j*6l;5G95I^$Orb&7*3b{|j zuQmV;shsMlL&Nr*pgYUWvR9Oq-n%?qq~3x)HUo_Rc(=*zF^)(3LuHFo(9slx69v|N z0T$&GrB|80NsRFpt#y6fbh{3*Uy7VcPl^36bE&fA%a5x9no$3G5=5})I}_(?qR2*6 zFgP0%$1K13aN!o5=*fU(Xif;Uya5KxqTyhszqIKMGMJ2>dyn2CL|b8DBq=*-hRyx| z_&WE0ru)F}e|DaoY>snm&LcGEku=8~GeS$$oXWX5l}cUPY%_)CP)X55l2oW9sphPr zmJp)mP*Gh)hby@%_pa~#xF7c~_v8Kp{J`w9&pz+h^Z7iZ_2^zdEio%{-+IZLZ|5%` z*I>X>$y>43oyX%jX7$jZ`V+fY`)JP}THxV_8UD&_b^)VWt##|^>q7Q1N{N901w6}t z{eV`{C2wr_GvztxUPrH1y7^$?`~4HNG`z*?4L}K2SeHj z6ka$9CqJc*q(Pf`4eDiw2j{v#L_t{x-+!qhhRN1&>{j(vJvh$(T&=>+QQWjb4H^(c z6vNjD^nl{N<2MhSWzYV*Z3V0>e4NDQt4i7v96C?Z*sNvU7SpWCWDth~-bBQulVI6F z`(HpJH;(WRmJ56{KrXHx35+9kik%BNdLI7{C`IEUko3WnQd=LUi|W=2YzzQ z$R>?FK+ty0Ss}Uc;8`Er>9v$JQw#r|Bzwzo?&A9wH}-vY zi4nk=3ki2y(Ls8Yy&*SAVBLOYiyr9{XKkvCma+BTZTYA^@!M3eA|P|s|1K(U|+1%*KXGPMyEVhhbVJ{W`c{TBf=#%q*3RmQTbX_!}e#uffXwSli~R10rviE zk~`f+Rr<(j1R2fdDYzIJpFh$bqQn0l(S2M?fn4T}chUrTIZsmN1c1s2Df4LnPeHQ>QMNqS)-Qcl5gpAkqnG+T%j`pE#r$(E{h@& zC*P#+ka^3){XKCIRRyVn-Qq_Mjlm^!=4vfRxIeLOs&x};5f*-)Yk8x2a8{#rAOmZ8 z&_j$*bJFFwu9vZMQQ)D9yBi)1wAkgQtmt}a%XP_8xN#?W+mPL4h&xIfZz~|&`5ivE z%ae}0U}4)sU*=+52!pw4yL)V&n6LLRTkKu4xSJD;zzMw&RfY5;M6PH^thg|YwB5I)9U~I z^Y6u-TfROqA!?IgO6+AQ6wiMnf+ADAYjDKcjr%p0Chqo}Qfrm3{K@NyY>!S4Ha_3_ zL%B^OFnM>)#ji1I_?scRR@8-A^B@)f!fty{1j zUfOx3!N9a?rHA#UM3U4z=2?>v*@&#U=~|SOeH<^Bm!RF;p`G4(usB(sEfD~q0fWL_ zH-+E_dPPa&(U5X#zg7#^8ivMXfT;aVCt zNi>UwFl$U>Ca7!IcFfak#=9L~x#lZrlgw#IFcMR&9){9K`w0PyILGetxWh&t6~at}%>`)%5cOELWaHfBdyr<&YTWc$NLcd;9}*3si}YaYY|W7U*nn<=|??uua9>x(<_~23+wqfrWZ;d-nMDxVPYJ*LhP* zLf(cl8ImjnZ49}5tg0@vx#~!0mdd{qzM=Ez*YSPS%4!UQc>$AGn+R@;9ey_ak00Ke zneuy{yMYm{3Ql3#h@XXF2kme7MFz#E9gc8`>jT}*g4s2BD8#lT-x>1^O7Fil`aw5A z|8RZ3+3>cAPbJ%(ZjXM7c#N(~v=;*>DX#t_>t8R%s^1$wyP;guY1gkWr=7lg?#o(T zF9R7+nh%*pW*{47u=AfDls~h~H87v4ab&Fb<+zcXnmk=krFZH6VYQfjEJHK&&aF8W zsASL@XH~m>dwha?72KBHQ>gAl)$v)b71^@qL4bcs%4bx~U82Xm8amM2OZ=i&Jb zH(M68;O0y-kyyi#v@P#H-T21hah;z7g=L>#p_w>V2w zFmhG<+SX_KOTN~1jxt{_>@&MQ#g6T}BNY@q{_6q8H+0toYy-aVPj>6EyaF&f<AU(zt*d;rFVC3V<9v+|3Z$6+DCU@~{5=#ViipUf$Jj>#+nP z3cVpF@BvJMCUO#iCXDV%TxLFf5QQi$Q zn|*t`t?kv1qtxwl8J;ZW0_BW7Dv&qSwvU@M+-)tTb^bA?^c8YfCbF|e^?7oU6U&N0%G?b zC+aXV-4(-c_@F{Mz=%}Md^AqqCF0>15*tp83GWbrBpUYWzxrjE=L=`{esvxjrmV(DQH$?im~56L+k4K`#(mwlPLG@^S0cm$zASk18Lt zJ`PskHH~&|Nhvyp_c~|TaG>yv7D&Td8uxSfQ*Q;L^`UaHUfksA<2FgJ2JgfNqrQy< zfk3%JMctr)f2Gyk`K6HNSDn_N*1Eal>gn(jllQ>**Zvc4@{2Z(VRVko7fe0BvipH`0ykxee1^j239;J2`=*fG^GKon zn{wseeXnxq{Ge}bXiz*Yj<1Le;j&Dk%;m1<$ zfLI91S1P2CdV)!l6*>t_-p^?+d>%5Su%Y<^9V&D z>ISQ1h$_$vds{8UsS?x~yKK-+atDmiQKB|5DGa@yiFMdpU}kOEMAx~?7!S}ZceKn@>r2n$f?3C2=~{i`MG z2Zg2BxPvXI53SdY`FyL<{TYSUwc-+(ih;M$C1nfbu%a~vkV!foKhi>4eF(`NK*a+F ziquFKDd;v-J()sR>@Y-bdO?F=RIO|MP9Ck_WYw+yQN;@$eN5w>zSqWQi66{UNpzmd zUrz75QV_Qz_Mnn^T?$r%1sOvdipZkZ*sZkye3NV`h_>})0&nM5ON^I+nX-x%v`@2P zl?}1no^q?x>{hyt-I0(eNwKTHCsfg!&FZ)K&|%=!I*EJtoI$6`Zv!WhHoZuSbCd`4 zI(^Nc$kEXI=JY7fZ$YBAn{mNdwr(mfw-@DMv(>JOLE%2LJ`y!(H%s4!P)9f~LqXdg z**r10Zxp)nzVZ0tK>p*EY6&KAfd)xjUHsvJrthwK1XjBI!`@4Si5#MikY??aycQ_? zl}e=b2pn$v++O2ggVmPu;1KsTb`NeMEJ6E!N_jQLuq6m5M*;jTA}`&pxTv!_h@K6~J}wI8mMjlL@Bm z4cFw}EtUj!QLpRbwXR$>W)$(oWw?QFlc$2IG5DG6oMi`)OORaNyjpw=W!9{oD5S}q z;TNg-!`u*Aj3ObMt4z;$xO+$pvygY0ovAfR3ur8yRD5oK*xE_;bFL@G#86OOUvF9} z+GfFOf$q#!$f2Te)sJ7F%V`S8QB6|}ucdorHlgxLz*t26iK8pI6-GXBikO`O0}OsE zzdh54FjLl0#DXdm6(anGUGV}DH$YaSAuaa+$2a6^MSLk~KijE#p_mpGBD-jzRTU^+ zRqn-0)MwiSwp1C2IMNT>E0H%HW(vX?G^-mCC!&?`LrM5o@*;GQ^FZpHK_YPC$0%r5@89DHwvqFlPUQ8~^_P{d&x5 zc{uH{NJtr}zQJ~P$)gGOOUYW%ND#2mtJ-HxZsxiq=>pX?W*K0yRkQ+(tV9q=*8QeNA;Xvqjn_P=Jq?}N^hnEGq0K_%rX6vmFd^F&C`jHAALIr+ z3^h>Il5tV55^71%8CXnx?}N7#K$TiuN2LYS6)YZ4EHDsP!o(Iv1qRP1`F+SmntQJm z+VR|+<{04PXLpE$$eiun`I|-=Rpl9wRnN#I8`P{h_Zfp)(kJ_c| zMG?ddc55C%o`*~+|&?HzW~@Hg_O$8HdPkEe2Z+4|Ao3m+8T z)j?B)x$Bw5MYB%P^?`sZNo1wS`c@6yJ=giCBd9RR(4YkuJXmn$o{83L!P6s0KRe9> zAa04N!=+nZH3weuobuf@vdFHf4gR0gS{fiPr+S@`AGoBCxKY}x9`M$GI2&sfAF$-N z0%p%k1=qJUbgZ4qzh*ECcGo_gm=}zJHlc8_tWj7gHE2WZLssdDj9rv{G>!N2GxM?) z1@9FasjeB9;SK_a#c%26>T!5)ps!u_5zf<$)HvrHKI9Es)jSj-(-P-b z?|Cg2Jj1&ib+_`vR3~0B#a0gf2|4TPmT@~s%){;1rHuW6$+STj9*K4lVltr90 z2I7w&w1VOV|#FE{%rGq$Pz4-7!)vVU8sZ*CQ0QPnhoW+9q$ffrb7Yk|fb5B4% zygp9@&`7}+t8AMnLUohfE+EoN-b!GHui72W9^ajZ4Bbm#KP|=%t^w%FO~~DNPz9Iq zCknYJ!dS6Dlyc!gva%zA?=XjuFP@DNA(Rk2CJoBV4F$L>^v1#E>*30fw_9yUSz zrKcJjWAA@k0VO?lUA|Q*Rjynzmrvh);m}Kj2(Gu#+@@fdTxi(@7048Z2pbn2B5jyp z3u9al+x$6M#VSbIM2h3hA{M_v?_@yKV!#8oI1rh-n_Bcw_Mw+C$cNG#W!gp?G3@Np zhC97hKUS0riBm|XXwM1Yl9o$V* z`Z`eT+G)_=hHD^!R;t&fDcM`lVb?_%w@egsO1N~>)Cn9BZjolNFEqC-0Z(v+H`$`&MebWjsy^vyO|jUjF8#`hii%d9xIT~E z1mQIwWt{lL2PW=_y8lF3CWpCOMnT{K#u--K$EI;Z{?`5KVc{|3$b}~T{TYH~qD0!Qr+?c+*^W5t* z=f$I-J(tgC)x!LEyGfzzhTa|>X~Ib)z{=uz%%oV%uX+}X?PAJ()1YgGxrBaa$3EbRrfl&$#vCvX6H!E*Hi99E68uEx_95M~%<$r(y}jWfzUqy~0= zX@i&v?;_#e=utLR)cR@)uz1JKEtsJuTmlQ^bf-4#(8aJ)ExLG%l*U&Q*Dy5eqEYMd zX1D^H7TT#UvAxbQ`fLOqrO8%GcDj`5Yy5l1rR<7JhuY;p%cY~Mm)M&1T&H?oc)j3I zy>RkOFh47QZL(h2zPCv8vcN37!0hs=N0 zi46^_7it>RcHeGjdM|!|GX1*dmDYyyHz%`hw_mw-IZuPr(4pDLU%YY$mECoyQF{j| zf&%cjGz_dZK77w3ZBwR`Fy+#H@0yQD+pi8&uY6Ym9Y^4*tkWkSU48pLA9jJTffTll zjLQO|CJ$Wu;#6=Oq+z6hyDLGDiLrAPNncm5XL}m~G$=>`cZmj%C1KzE1BXbq1OGPp zFI=^Xg1wev?)8AW-oP){Ra}NN>u%(}s!%3K71lv z48JADy;zgVg)u!Wtk(O*fpb8$fQ z+necK^7qkg%yaZnCXf(*r(UZD%LL?6f;pDCr8M$-UE9@6Shv`CLISPwymk5IUC2BL zU2|tU6Np!FrHTR$#3A>+L?32FbbPogee9Hi#(c)x8W{&Whz#qO!4YiK<~nTa8WZG8 zyf^w!M?<*A^~@Wu_dq|^uXB ztVxxIfpD--@l*l{zpLZwOOWJ)7^f{c#wyqgl>%B!T!1q^YE23l(+8Z*Gr!AB_c;&P zwn7c**cfyCF$&)BR}=aG!jJZ_LI5(BLusT(^}m7%gV3jJ+*1nvsr(7w%z*CU_RIdE zIDBWcgxmBB<4<{fTYHc)|EOsSNRR>q`oLlH!NFt-q6`KGica1sJi0CL*4|ZfsvqLBM8uqJhE3$xoIF$Zo7h;Npi^QtxN&r>ok=)e*Si zDZt+xU)k{#YGJ%Ve$<4=fR`~_&7rX0(tPW4aY91N>2tvc0HXMD@d)476CSkwr&a@?!9KPD1? zrfyvHTlu>Pr69$d;wQ?d@kMx-Eux94-^$(qELa3NA314Z1*xl?Y`8bsI6Zmo_hggK z%a%^x&Db$>~>r^R{7L?KW>d;PvW)f8)EtS6doieHePBJJsL} zdTsOZ)f?Z}()F*u7QUXpk~j2d`q%W`s)i#DYO>3Bvjlr(N7sit>Hz{4%y#+pkE^l` ze%WfSh;MiV7|2z+|60Z6W^kyHJxa0r)K$^y3@KI5u^I7QikWOeDbTJtoSG)PT-PpB zwr|JXGQp}W>Db+G-B7HYNjra!h4jA-|JP{d)$&{@8gSf-jT8fY6kLZ4q4QhLSkL(X zX*U0)%@+X%vi?B{GPVhP8q&DaMTz7~3A4lhl@tz&f%f-V3D@3Y@d(~B zdSMF`=K(QbAxf8gCgiQ0d67iB=8En8cejt7TNM=;;K4XU6I&oKm=5E}ke#w<2?g}6 zW!Ej#VuvPy3&Wu46{{RmSDLpc#jwTed?aZDu4Pvp?kc1d_LGkL^zf`#md|rO^loXD zJO#2VdKOmop`$`YNs9YGK|t}~U^cW>`7~A4zD8N$0~@0$T~K)P@pc7K)r*{V989J_ zyjhI*)+TY!;qs_a5b$Zn@>A0zeGW_fXdba!0wak&(MbA=KG1*?)G7%H5r1q;{d~7V zD-EwG&vcN}(dXz$E3r?9x9VxJ;*+ z{92=7LqrqvnnBr*^uG@s1;M5J#dI)%72O!3di1|~(0|#j#{l}y zmjnO)Uf8qmGNCAcfDPLlvhhhbq#TB*WGl4LZRS}h4M!v3)sKdD9Xbp1UIxD#2Q^el zkk?sMZ^M{$jOE)L``w>Q)-~ubx9<5C|97^kD-+_vgjxWiFHBrE_wA+EdvpHsJJyU` z#beMSh!0zn#@InU3CXzh?KAzugxmXzRsTNZ(;r?W#!|jw9l;&Fn(0cao@<`^2pRe_ z8)@FKwBye&>F4d;HJ6X_tClIa$4mt!5!l@tlJDo{MA`$zqrQsKMCeZdM3YH4Sd6Ym zIeo@WfYou~5rby`U#$p3kS&Q3{Kof~x}|fx$KTVpwpBqpFJI{9E3R`)*FFfI-P)QS zq?HweWUk~4bNyXX?omvGte7(XHItaldAgCS zneWXb9|$6kyh-l3vB|vabU;s@p{=cQ&@|NyVs8X`3>9M zU$lPBBVC*ew~c?NV@0CR^|WtiDUFp`ub>4fRF#v7bqWcutqw=KGj1bGYX+2?6=I=1EEXmHMu&+&*v ziReJ)fJ!~9@%-{L(jv>fEi0rzg{p3T5&_n># zRAo4Q{1oiJn{OAU9AvoAt!U0qS-&IUF_UnlWic9x-$Ml37^ced;hF^$H}3wiYA^sA z^GLoPdA-+u=P2&VQ+!l1I3{25uA6C?K@BNYBd|qwfhUWgo`UOSQZ5Lg$L{3eL3O>O zp(+2hA|9ObJ%%}S&Gd>!>D@)B=t+PQTai^?ZFn;I+A}XT813u!+4a#;FpZ>v#X5~BDhmYH&(;U? zXd^y**A(xTL@V#Pdi$+YEmtvhj}lf)sZ~2TMsT0Z3(X1T+uU!OKb2|dJ_i^I2lSBY zeNDYpvE@j;-fIYx4wmp(qxG4rhBNLkOog|eU|*jG3=9e{P}+vTKN9m84H^h#*ekAR zVv{hb@08tr28fsTBYlK5vG=bD&IIPZaWX8Mb^&CH6dG107`ADDNW2jcrF>X;Mgr3( zCHwJxGlMRjO>LZcbIPt^;L7gF2Z+r~Gi;D^WuJT7**y3zqPra2$p$hE4Ni?p$O}IG zU_5tW*lS&Qy_*q54;@Lb(Rx7=z}j!LEZIppN=fX_#%7FP!6#RTct1!y9i3z7wicIJ z5(?K8v-eHaph-yA)1*v@{-8W$D0NfS?^MVtfT$R;h>(~cG~It#KJ$Kgc3#Uch{}wD z%g^V^dsqrb2K3|B$7nT1fH_g)xr%z;)u*T2pgM+nNC%=D%AaY>l05Zx{Tih?I=+rj zMbe#b>$5w>!FWV;0)cEa_MDVUUFz1>VuDc~(QnGFN>i3yGzVLPdA{4~=Em-O$r>rZsaR)R}`0R2AceV!fn6eN`SC z0v`9;?4RF+`Q8S%P1QqeX2@M?@tp+QnnoF8W`{Pu_SQ$o;1Zm`_YkAs_P+R{!LQ4F zGYT(86omZ{I!B;7&zUPMmUxeIH@%qSTgdlYnB+3}rD2J^j3Z<`sjCg-Co=8Tc`^0f zSR|{9;5&Lz4TwU=Q#|xLK-hG#TQz+|73zl%3k7_%UQprBne5!#q|S;DbT4fZ`#i#9 z^!i`-e9=_-u|1h~d%pdA}Y5cY1uFLP#L>S0H| zyIOqYC_ueCkq75GF-#^hRJ%rV9+_uz;W!-0d?7*935)TDIEG{fFeP%M-;Eks5;%aM zt=~fP)bqK>$29H&f?^A(Ao<6Trfjas#$|;pnt^t?T)K*Pj?pyfF;a|&QCsqb&OIcB zb>4e7B)w!S$}Ve%3D<>dtZ8e*l4_A0ySM8Oq_xf2rCeAW4;zTJP)QEFCn z@vB+F$zr~<~8IgIB#|je;`hoE6$aL%xG~>Ng(z=5)%!|ed*bC zP9D;mhMG|Yv&8#t|9l6o zLvYZkD}B#UuE3)wj$z>|ZYH=+Z2Y%ma0u$qIOy&jn>IxZlEU?RkO>*&Jwn>7NQj0H zJ7V?|r?KoVqx9yPkz>=J=~~u(BlL`bOJA&o z*fVk&v|d6eSX~WhWD8%L_WX(!1`g z3bIS<9&rn`JqR1@&jnjbTz6*w0J)bN=%fnIFEi|q{`v91mOjuPP!E&p<@wixpB~b5 z*T~&jo(Byta{clESthyC=8W(LQz(KYK<)=_G+4^-@q-=}VYbu*s?2)|9-S(+sE+bh zxr;lzJTImm$eLB!rv*9NX5ZXXqxPh|C8NpTDpt5|6t-gv7M* zD>*fCs9k}js%PG1KGJn+0D!Cr4&ou3o@0;)tJEYMBWbQ1jUUNCtjQ<14enPg%DNpJ zk!Jb-!2}RGsC1{E4ic=*(v#1N*N?;J^m8BQyPMZ`droyt*7LF`?f;b_*i{z6jfOO? zVmu_a91$x2@_3x+8QT+N*fkLkNvyBfcnEAL<+Rp&3<8};@q+VF_lyjBcbfOYS!`1I z@wRl1Vm!zI$u(Rs+VbUw+6p(P91aJ1=em3MdUQ^RA%t^$A3E2D&XN1NgO?Rd%0bvR z8^QpP0MU!L?N>O5g{+*DPj2^QD{dh{$VASi#S)WjFk~F=Y<|DdvH$2fnj#yroykvb zs!A1ik>}1|ItT^}VI6MPKbtrHRW`7kVTNFH)@(?S?c=a_+w6R5`Uy=Jvj71$+i2kI zKxx6Iro;IdDLcMNFn0_H`C3gdb^OI^^27QE7DYTH=u;tNj`Kcru z?{39m(BLh|JnryACE%|3rth(201tt~SsW8)t(q^`c7f-|uuY?iLq+T>A%4rs)d~Z7 z>EnRnN}>FUr5g`Ytmj;BfZieGISGwk?szQuwehq!u%D4x{bRDx21Jkvgz>D0V34u2pFe+?oQs?Yi3i zT)#>L>(XS0B@MmGvD+3RSRw2*lVhwPlClBp88 z4I0R5=#i0fk5b`qspq2MQ}?@U2$CP`jYyFS63hAFj9eQsaQK(936V>btTT%T@=Txp z@t|}t!0rs_j&bi4wjjKottPvmjVvO@BjCq5qu-t?j5@qr29)ceVcvOJ3%SJ^T$6a4 zzqb5Y5cS1K^yK4Q%0Q;_4i`M&?Gz} z8Xvf36}N3DiA@yd-M)}-20XXF^*qj62_h6EHNovhdmB2Q(|YCigX}FGeB|H2xblc+ zqyc^bYA*Hs6FcH_am4plNFja1Z*(N!&B)g8BZ06{y6R|<(P*&U=r+&MkkHZ4xY4kz z(e3vqg7e~WyjqdCnjTjw`d^5W1`{-`i7*lmD%4jUwZY;)gEH-p3E^cg3*4SSD zSp3Pcgo|T|x5kos$C5|KQr?WEejnQhd%;qDk!JKF-R?z(=ZnnH7g=#H_Gi5~z<-f_ z^2Nc6FAm*$ak%$I&ghFHa%?0;Dd^kwU9fTXXlS?|WA{bXozCMs0~i%M89P$O={by@ zh2v|2vy8CH(wps!?N=E~FULcN#>-wuDd@y!iy`ir=Ro7&~?^l`!>D2dW5YUI(7e^B9~GE5yDvv z!6u>4o8cM_st)8xxW?lMKbWW%FCXN07k3-PEi2*cp=UvPwkwbCMNZqlIkrZlYbP`T z*&Mvqj!VxwjM5~zaLLrGiy@EnbF)P?RB^Fo(AF6-BEC)FM+HW+cKOB?^&|j&K^&Ds z$G_HdU}Xqay&ML4`8jfA2*h3(s`MjTkwlw^XmXc7j0GT8-LzLKLkQMvxqO@@7C5oN zK7Lzu+4%nw36UzQ$Rih!Ok5|ma&(6m|jDGD-|JU z31iB+Mnuq?o?9kl_AEHhgTw}QMY-MsTxE!OmcWMw80dF9AL1h4A|53WU;U1<3J6~t zk_Wgrc!|OJY&1ST_l_8j8*d|5jck(T&60V@Z1h@ObKv@H`*ar6juUNlKiJ?Pa4{0W z)Bu?mRcvg6$vZ%28@4&(MurXouJs7{#m^>{tH+FS@$^$wi&c9SxDl>~5ki^X2v#=q z{_%O0dqwF7h5A;pA6=mtLW7;T^INN=f-K=geGH3%sJbk$mFUqz-~5SvlNV309uous zx$AOX@7(p~XTlr#Apxr0IcnFNGvCMa%FREA?upp*w)FdCyk%hNNk$TGTe8|j;@I24 z%%ans{iuL_(fz}h3<_}4k_Uaa8VZo!qh0T!>` ziNEK446*=?V;~+igQ>C}p(PM@d`<*^R5Z%OrNTqXJLSOTVv4{o`-vP`0j2f9%@+4r zPiM%U$1H%!WWbchCCH^djB`%Hgq^yH7oNneON;~o(pDdqO0=ZwDMGB z9*Y5ItjHrE!dq{trI9tI-YCSIZ9B#R?RwCLpQT+JPv+%DZCUZCb{V$F77mPwcG7rm z17I=`H-_6h)R%lZt!T|k%0DQbH_Co*@QAayn#0~$=EElMBIT~@`P(2)z;6<4lgAa< zxkNfA?b)@5T3v^|7IdvkR7J0nXpc2SU`^VossWA`jcee|F3U!%yDorgJ)1=aeXbq1Zy3`srdONEHcX%9s&s$h)zSS^ukc3WlYFe0#SI61~<8%6^xw(t5EmGi>snxv+F1GKXpRo0J*^X-q?1O^zLBHZvHru;N&XZwn zH=NT-;(eFnrF0Hq#ofr76E6ym6@x+ILQ3G5i_F}uZBu8SFEyb>1{2%>a^3+N58~Yd z{3W(KZQ$VW*?uSgth4;HO*J?R`wU=jqzMv$+&Z&wfuGxI!j5$;u$zQ6R5ut*tf=@P z?Q}f!9fW6a;)R&#wr8vRCpg~6$g~eh-f*inaKpcKd;Z)7e2zhdu#;-~3`yO# z(+PHogs|NLA3ED-AT%I_@4OI!CtE5NENy&I_l z`E_CQ!Y+e=8niHXSs>UYd7!#!bVB<5U_IQ0!ZMVC?UDSzayX9wKRA5zEji;F6Q?fz zx{U^bWFMEUtR&I-Q1+9`y|4D}>vj~{7%GMmR0*1e-ze~?C%%?Aa}g( zdH@j4_w#la9lew|gZ=f($lZ_)j9`?!glxm^T8d?;Spp=1p>1FS9FFas{&BHQmgInE zO6`bTR3vyhL#)QWjbPQYS7_4xkkslJ7(5+A2cNhQ41caFr@5MV@Ydw!^xU!dI zGu;S+Y1KC)u1K#N2FS4%s8kY@E7IRmVxI7Su@SObp>}Chfo5K{X zGaEky#k}Y^^y7=g#La+~tbX&GO$0gLvZf_BF3uhpI%9?o_&4}k@=xoxgB1=L_7fpA zQeaPcG5S(~hLJ6zR=blk=Y8Dz*GMrSBh^IStvv8`>}<6wZ{J+Q-#$z8K1JHL@y?Fi zYE^35M2B24)a>xj$I06npFc&`=8AM%nU^ycrtDIB%xY;$D*4BWfA3nn0O_K?* zO6nkG76CIrii;sXqo{Lx0#uiL(l0R$W9O1d>2tN=#Ev;aAr05=3Y}!y55P}Xzu#}7IfUj&v8cHacJUu zpiOI=dUd$aZCJ-E1N@y85~Y7rARLmsLXl-2#coWDl0zS|h+uY>Y`E@1f6j5XH&pR-q7N4?8D~oPy*s+`co6cpix6Nep_YiHWi25e0b=w zm?0xLZJhnQ$IW8yrMwmKVjpVI;rKdD(g>K~ZQhqVxW(C(t+z-rc;V>+aiLBHU@N!k zB%OPnprH71HS?um#(k#`!M!hi>^@Mwdh5lWt9C7j&OyKOpFK^zy)|m; ziv5j2yEhD=p)ByqnbpYtoqyf)*FY+ru%EZBe{53JBR-s7+TH|fDV^&7=k54T;yvAg zfw{pAe4>;#u=d);|48Jgf7jN$D`o-99*}D5fWZF0@AYC3$cy53BQ{GRhl1Svs?`;h);{Mhnj!C^J;eEN{@#MfsiKn)$3{+Is6hi)0 zRHiG=b7Qmj{aDr7;>Hw$0CslGs-DXA0~|F&f1MB#fa&{(r$pPUJxT2~9+L=EM{4to z3!?X3$lG8z1_iha{f6KAT-IG^F5;Goz~jp}7Zm_9^pJzie23V#6s^5L%d_9Z$ybPN z`fGpAeCWc-;*BH&o!RjnPZy961FFm+N{4zkrWUiEK>lQpB?)m{D)gA=YMj;YMUBk9%0~%2bo~>s$VR<`OT~txthKN4jRa_&z?b|@H165@!shrb37B`nneAx%p+)n z+oo%O@c9}98o6E%#|)9c6!hJYn$LzEKKd4BZu)rCMH%H69;0@JS=IhJV2 z?f2Ekp_r!yfgT^%MB^Y=X^pFC9Qt&Dl*jw$ixNVzEFgWv)Z9%=a)T4YL#=_vE-YIzK=oCn*nZ)s@Orh^B9Wkcp=gZcT#ZZ{=%>=6 zz*R@u`p!BAdxuLDj$ry=M#oguFE1CRicFQu2i%ZspL*tGd7{R_t=3QcjybPv?@b6D z{F$tGA~{)>8Suw?j}wcdJfCa7uIZC!u>`)o)=hJaxW%C&2o2}0+|Y&FNR2ZPI|t`9 zAJAZs@TP6rwy}uKf_;wM@Y#JMEG`Gcn|A#d=pvubeUlg6%!_BvyA~1Qec` z3PgKs2?F%|db&%w)V-OApf)_qvk|WkQzWdtR0eOftXmG?jkq|3UQid(8-AQ{WEBqf zs6oRgx^x@bPVD`=;FJ5+CZ!S5c1^l}t55IC9X3sgHrkxeM{IJ;0yNy6hJ%DqZ_6+b z$#YE7CZ2;*3~1euL#fuTdg{oW<{*prpo*5XqfmmMYv|LK|8reE*70^j0%uqx4=c09 zF!%D1=-9WK2AG*E&zoqKHT%8JZoF(-EKRcS5pxN0UB58RRcTh-;bX{N+;!S#+blh5 zSF%2OZ#@|2B5D>J_9H!|w2fn~Fkmoea<^hgy(Z}&c=a!2u#AIlkR4AHc3*^zf1g%9 zUsC7npyiHRPqri=ELGUa!bKnO+Oaf64`(2DI`~(0k%~gsUU!@s8^GwN9Y4qzCm`c# z?yejDEsc<%PBG-+>6xNbYK_{xTbv~M*8A`K?ix(WwDu2&f8F?%fsa`pD)xFO`sGxf z?QWNURKIg97-EEq{v6T|!!plE)4`X{=6C5E_dY3wlR1(W7FCQHt^LU;NvWyf^C-NlT>rwlm#fA0*V}W!c&o5Df@ac~Yuy8aV>rr&u1fLYbYeK6jAkAJ zaVDR;lXAhl!sFi|{q4Md4H9HE3#5(*YEqKCpItEY%jWKfhsGDr&+Cll+O@$w8rgdc@}Bc6%-3mUK$MIpWFF1PPxkn=#Utf zY1@{Efyifq-d~JrsE!0lKq}pK!fs1C*VF ze_2e$oig6qVyFlLe0GgmB?G87Nd_H4m0nyduS;p)9UTpJVL;?RaO#(ik|-><2Ly`f zNzr|GTW-qJ`w4|1|AWe$0RR{VcYy%p8lZ*L_HGh)<|38NA_khGx-shT9;Lk&TFUAa z5nivWrUs`IyeB7W@86onP{0ykJZv%Y%cI0Ra&Bws^aE@%-cLQeap~!K+TLC9^tyG; zC=1*4`Q}W6ViTLjn}_?iumPdvjrOuLcJ(i=GrN!J__a3f;Hd{klps>ow4uROQgPZG zoM1@$1eESA3{n88ha~=eNX`67CtrE}uEBA6YANi?)f%u~eqXyzrIVfXz0MWrc9^2^ zU{l>#U;VZ#yN24o$AIrQa!QTC2KaSUF7Y6^|Eyh7gIa-C#0|UcJ$tQMjoe;>o`3 zXY;p4cDcT*c93z9TvZ07vOwM}$`EsCXq8nw6sME$1FYUZ;NAz(DNvXBy;T)PaLIM` z`ds(U{a9+hKZuLoFr|0gY5EuU7|WoFD$cLDN}d-fU`N5m-{a+sdu_cwQq!nS<{tU- zC%`vfwPn$=H%*3A1k4lugUXEGb{hSrW}vj!Bi-a7vi}JXf!a!ZaXGTN6U_ZP-kvwN z2RM3F+BXX9rsKOYMxji3(~T-)?biS89n%Q`s4{kCWN|!RB&QqS*Vnp?NPzp)HZ=Kv z$A*||X3=40cdQ0ciqNpCL)7n!doN2Y4}es5uQWfjGJ0s;iShVfjGg;GlYjj1uWM&J z*&OFQ=QDF2ISg}1$_No^&T^=cO7f{49Lr%&rIMy3NwrE+sWya4H6=-^ksLZsNA*$e zeZJpc?%(eFKiFf}c3s!|{eC^4&r!H4=~t}pJ#|=T%a*n#?!x<0@y_>Ihw+XQvGEdh z`vYprlDFyUUF}JM_V0&!MNK_F(l%zlo_!I;R4>=x@BW?wLa;ST@pOe-rBJ*>!BRFv zh0syBMc!?*6x<@E_Polt#a>@w`n8p=tFaghmDg#d*O?bSMq80@X%1>1Y{k<$A*()< z!+OCGZF!B(u{`^(>oflLwYFDT(nrxf_{z1wrKX=E zm^yisMyO@h#nm;pgHO<{3qlio(%zr)n3zblw7Kr1o+PDdJ#X6%L9BDE?!&ptt5Fz# z!bLwVZr=7!#xW1myYHMt+PVifLD^f7+4HY(_8C^*fZ7YunM~+Z>$5j`aMB5%CoV;v z%QB1)Snjdah_&k#ea7V94|<)U_uU_d%WkZ(xWYj&z4u;N`3rlD7NPru2tS$_0sSxl z|5RH-byRN}G&`MV#c4z;g(`-akvH6!)?4a-TlPN-=`EZ~ygi>g;GTV&XL`{IK&K|=GWw?d4K-P=tiIrk8 zmc@RfNJ^9L&hNh6j5?wBd|ZUw#5(jo)5xL9o(nmVt?24b-XQo_TaF=?#dN&U>?Zd` z6b#<+to-Dj@&f90exy7ilZmkH9>x{OV6X&yayNGfde@Lmn@rG^q!l{}IOtYfa>-uo zt3-JjCs*tZT9bS*Da?UyQ&NQxD$VSJSOJP zVWoGd1LE?4C4Kpe8W$7GUV-W5ws^wQ=x#O59FKvKjld9~QLw!tb0}WB&KM zem$}E2Ah0g5#uEp^gKT~6cCwKlnDud3}}QRM1mW}iyRCL@Lh$vrhsE8o)pWS)h5~a z3_0B|8HXF9FGAE|%{II49&nr`BEiD>e89}xs?EDPbOwZmog2uc(mWETzny)FE(hE~ zaoG(#1w%F`F#e~T&SWZ#LqKfSjpwcy1?(r47TNdfSB8r8K?gn;0~yiZ;V(MRjF=?- zV539HzFISc0F(0~2LnJKCGTWee9NvYyCd6fp-^Z&BOX~z5x^Us_8R9csG;(lE(+nJ zi6>;O$txekq3agCarSSZ>S@h{ZiM$8f9)-}d9j3Q6ea{w*ZT)K)l$|>aawL30> zcPg^{9RQwPzdlLY?QeSZE77QvM&P;oX{(TZU2F99W?%?psg!Hv4)?lfW@+Eu{_=07 zc|pTTe{~vx+w`=kkk;KA*d@0HFrdU8^)p7%Cu*Q{=(>I>8%JZqbjhl=`Q!n&^LgXX ze!C>T>i-1qlHJ>yU$EZc7V8v51IAgL;98K zK^He!Kf_bPfJxBV;U{aa{QKO0uSt=bmA=ZoZbO@8#)zry9EE>UY!QgTIMTnaD3}Jv z$ECQ}y#8QzZ|i#?DR#UF6p4_YPdJz^25OrOqRr15u(Fv-L_?)F3mfT>{W6%vQ^65B zMQqsyR&HTQ!KZ!O=Xyq8H`Dbu_AEgjH8RvK^rxV^qAuTc_U3%JlJa};yO z`wlcJ1#VTPRb28DDKlXJCNOBHCT37|dBW@-8$_JtjSnTH!OH?1hvHCOV z!}>7z&g6i1kEaw#)1(E$pdpGqo~)&Q&$kR*)p5hhsGNcf2?RCf<8fI8o|7Yisq)Q^nTTU(**rgPtW9%(QDFA7p%nqKU}e}= zkw)vq%ETzqP_Qct@BH|SPoIKD@DdFgoSD0={yfMD9CS=zvu_;Z7kXiQlv-$oKjQ33 zC{%F4V>_g3p`h>D^DnqcKG#--r*Yn=U)A}Ptm|y+hF`oaW>C6K#J4>~MmLHbY^E0P zT}2uY<&DXMp(xllWe4}}N@5Bdkri%uU-gFKkm3rMkG+f_p~6#gX@A&K0I|cE^Y9rJiDCQRq?`s!@QKnF8N;<`XaC zT+J|=qM!**xW7EUAPRoIB7y5O96ZcQ#7ZP2pW;fzH1Sb;*>Gnm#FbGf%q^Q1U`oFD z=mAh25Jq|o2oc!#6nq^Mt`JaG?p^ZZMBGWo^+$8%P|^C7E|xlDwaf>%LkNR2v%MUk zAryt4QOs7p<+s!Wq*};cKIR?;FV7L|FGed%A%O>>fGYYuA14q*2myrqSJ;+uh%wys ztN^SHtVjmEXHrYl;lwNeyTHVqao+xQT-TZ&ct{8g=g8T+(#MBzMg(7Qbya;JG(v=^ zBxAy_&@3rg0U{Mc31W>Cx`PqfF9dCwP#jx5-%fE)UQ|A!x+vSW_~Zc`3-W<0C5ArL{JzEqukc<^ZbBGM;Q4k`EB6fivx7ul2C%lWPD9=KTo0>cN z`+cUZyX{!xFNJU!ieDlVxS@vMCV$?7$x5VEhu0Mff%5`NEo~e9Zi6_%%`e`Z zOn|M^U&R2B=lSSCz*I`s2^EG9k-gT=AKpA-m`Et&uReOF`QSHU{$YMaivZZua?~D5 zR3Iq6qrmr$IXs<#np2=x-yp6h;;xI()Gj2Ptl1xZbn{^bKmnR5xRMnDgw?6K^uzSj zc5s(y$3p=3mStXd_1N%E5Fx{T79yYm2x_-Koez_zV=S-2&oXQzWc)uAfMa&t6ZF=l zDEt9Tj|zZO%1-EZO0Kng$kt(S>RC!&M;Lt?2R3Zs4tQ};rS#M6hzCZZoGafUYmxJ(5?La>tGkXi6j{PGV}%7Q?6QivnC@9q|6hg^xy&F@keD9r14KqqV9% z-V5Ry?NM2cdKUn#J3%RdPJ17KB{;V<-2vhSF!07=|-iJ%YE6H=a# zA-a56o_Z#kpzziNvF_mIe_mYMcOunP-pXNu_5_$dt81Fy^||v3MvJssY0eF7D)3+Md#87-F#8&bFPasa+z&wz7E1p_#P(Q;cEB4N5!XHSq=-dtoDLGPUuE@%}~3R>iZTr+?jSdfxN~+i!Y?+4Y&goc)v*9?fO7|>`-xs zE{C$?{t8(%##TtZw$s00sK))S2ROhA!xacmRtMj0oV-gR4h}K!*^K>quBeMvG=`(8>bUfy+wZmeL(IS2nSzJanh(EmAAYbp z{w{d$N9{*wH!lsNM?ZqAzQsQJ+4IOctqS>lcv)LAy{qE{=&C1#SN*boWhlXBZJQbC zJ}1IO%ltn)mZ)Xr5{yW6;hH>ps2fb8uJhPbjjS%B8;_hgu6Df7>akVD`a36;hy?Tv zA%1#=hCWVYBtbIAM57sb8w&y>pj&l<*Bu)l zs53<~;W#NCN5eeWVUZsPZIV5^OvujmRu8QA^yWii$e7G*v^2D(@#VVhj*$PLx@rZS zZ0LtJiNHu6lkPACPE|i9UYmkC0JMk}{1y=}?$`@WC_n(9Sg8V1e{yl9pxM|^ry~(| zAD3y_0;y(VplS4$%$Mrlj~UAWV>00pji4kD{%Gv@D#wo~l;%ABCof{Mgd1leST*+R zPZjI`0~9GZcqsa(dvcKl{wNvz-hA3?JIr5-SlekdNII@ixqb~9@|2B(d1IEHfRD>0 zIj;SW@ztkll^*MXbE2Lx3VJhnU#s#o(-`(%hBfgdY#AP3Y=mVW#&6*tSNlo42Expx zDBd?r*6up@%JmQeh@&9qCBXNWfXQEkpDE#J)&m>qvoRW)Mb0)&hanklQelT>)XRwT zc6ce6`U{C1L8^+@S$g*MN!H|AK-Y0#m7+DJ8KUhgmFw{mF!c;-lPAIC6;ees_c1fn zfjPTC%?e>%lg}iC(?-hvM(lhARLSNc#2Fm>?U!W|Nj7(*3v`r1qG(FPlJIVwcj`~U zs7jPv%o;3wgyBL{_M$Th;8BsHly#HMdCyb@Eg6LGacC`qq>A`_nuU|IZhUpDnep7P zr;|1lA7?|@Ndx5z27mQe7UnyHlb;2yCCE#K zsT4xu`3L`gTKw$*gK{uD{yWTy4Z)a#gpLrcj(^qgh2h9>Y&F(R?_2mA2qGT;R=S@; zCOFuB3-+?miYHjJ2sV$PaBq}fDt_(p@4nox(CWPK3&>#_fk60-Uov>8sW%R&+FcD8!`VA|3y_9$Y ze@XDJ((9LRf&z(ITzCAJ0)+GT%&(>@vZL(R39sKRn}4_N``vc@cl+(%9k1opqu)X~ zAMN#T=jMOA_Wj#^{NL-h|LuAG@2!=8MS9D+g(SUwqu(jkhK9w|~st{;TNq;M1dT z-KfWlwz7vE!{4{9gpNM=wekr70UDG8hda~$Ur?Fx+9vwpu($V0ptxIBLt(SQN1U== z^&eh8x30_J!>8EmJ3hWTwiIc*>3^Xz(&?B6^&d5=jZupU0~Mh1nB~}F(!F}? z&3iXKm1#HwHYD8x(cjV@pIW=GAWXWuaMGQ968@L8*S&lAt1d#%_=+mAcsn+YL6pzoR;St@W_RW?HYmHfu<~ z)ckm$K05!^fg5bgl_3mdZ<~A(6uT}@ z=-bZqA)I?s4ry9rPKByM1L5kW{92^$)^1LzDY|V&C&pl?uDv;IxpTwjeL4#c;6`Gq zb_&V7u-w5XFuvINwfnRJ3L^hF3NUs>NF3*FSIjo2905mBsX5>%t8>9meH}VlTtp@t zLlg)DKP&{FF3gFKIsIg%|VN5skcbBCJ9 z?8_2ykThvR74!Tx|9W_1(R#GvvUKjq`bmZe`qE~sJLRayO<=$EgXaK@6#GvvO1S_` z)y@cfo`j=D5&~cRklt`jKhyU?u)+y_wwed1mQ$w@Ig$8Hy!MjabG0Z+Uavw_wMblKH=dSM!#rs2Tnqa#>TJ?BmD02LzNSY|oy#5}LrlL_ zJ{?eV{uz&8l$h_JCKM~?T@E0@RYo`L zm?{~xQb?FR4C9zKu~fqXvakjybB2JYx7|X951zg{cgrqB=2{F@9Ph9%b$R{mcbWdf zf|5c;$&1cCznr!ny`+9u8gMik-E3E+meR(lWA1>Ox=#UjgeBU#WMIj9$m1(daG~%L zbtF~lsF$73i{w3X_p4IhaL^mimB`-Tpq8=F7}Z zFjZC!Tr?UzvCGkbd$yG9xH*lX1;5vCbP0ewlAYlnj}6r_T(5}?x5g}+A(5T{)Mbi^ z*vRHtW^%CdV@j>tLq)Jl>RyZ=_Nz{4CvRcavUhg$$=#sFx`}=~HG=$zy7aBhm|bN6 z0m#0-(th0bO0*^uQ7d0zv29;@mqMiybx}0{Kx9h-hTN0v5>IxA|~YJXwgO;WtW4LE5&9uA#&8er2r=xT0@-eEJLs!aHBy zAj2)SRyV^NBmve08T$af?1b&Pa!I++pB9&hC%WKKZ?4+=1)p>Zd|yWEP+ z1Z7Y!!NqbPl7N$RHzi>coxOqKtNoJYZ%@lEvuA-YZ!)B%Tmpj^ywTm>4XkvHPDI|j zzQas#2Ie%TFUVzx6L%d;Pj-{R*R*g+_bD+BNueOQ_gxOD^vy_u(#&Q*z3-x5x`-rgE7md~tPUKZVH!k84&58&(sFu>ZDzEq@d_f#d+dlFHMEC7 z={dnxnF&B^eLggsqIFZWfur)Bx!o(3RLl#o= zPV2uRl0j4rg!i58drUhK;iZ`t;MOX2(0V>3@DB7*VoD0}jse;&X2eRJywr7XenGN# z6gwm}gW53h6+b@By`NJGojl!T{x=0mA>i_4&47N|dLte9St?OqK~E6r#&6qFwsT_K zYY`yr7nf%=^kEFyAijWAXs9jsvb7DEkYqI{5Bf)4APm|_nQVP`@NrJN_#|1iP$N^U z_In)KYLK6q?^T3dl((z8$I}eD1-QgfgpIQue8sU2fE0r`-k0m7sY&n4g93HKrv3noh?9ROOSSrv3-1(Kc=g@i#$58H?;v!!JH4#^0}xGZIr0ZK4*DM z{rocoL7=Sv3E@g8!1$O2AIr{%pzHWmxuqhm?yme-yK6Xp^NGsn(i$Up16L(?-L<;} zTUMdNw!NE}3Yp_ji>T(A3>fbUYyar)TXy&;!LCF3$eZgng%|Hd@xTYUbyEFvJPqvB z{5Mj7&TL1df+eC-*`BTMsjrwlx*{L!C~c|0O3I=A6QZ`|3%5GUl!sJm3Q%Y zVgXsfP0HyTU4Xt=eQ(0TUHjtUhmR0uOszNLa5eUd-_F-pbtlLr_B4)yn}7p68e9q5 z)B@}*eWPp=sA5ioe7Ns9yymoGH!qh~OrliZ)m$|o=dFf{b6LEq97stvs9FjOks?OX zC0iNAo@Uj1@7-2XQCKFhH;_uwqu>~koV_}Tvveb)xGyzM#_zc@aRaL!2;UP3+kUB9 z3nkxO0_AN+|M9}@sOks?8%YtHV#`<>P-X-2@Orqb{I(d#RSR^9GIvs!aKpz-=t4{6 zsP|xA^(`%@^SckNa1%({t3i@PX?Gw}sf}dT-&dJeO(G$Zfs(Ccel#EMzyM>va*o?` z<-8G7a_Yuc`;m0Ey%d?i1X97X-1ZuyG>>Ja5>Eoqf47g(U;1dCE!W})qY#?_WLDaL z$y{xQiD@9X3?e;6YzLo{i^{lVDwxkGv0($GKnPiSMVnnOC}YbbNIRBrv&wf;CrhzW z90tqvom{O-9ngs4WRXkK1L626h>!0@x64?x9eW!A8O4UeNL&M{5@Jo`qIs-7%s7!_htc+CV|sgh4xgts690C{ONTPK~e+MnF6km#~U?K znyL){>@@!$6NCJg(noo0mFsY25s=PPSMTP^xwIV0Ar=b}N8yF^oPCnU$v4tSA;TjA zVFxln^FY|1{-XE{&uaR;lCncZ?7DAZ(5-Ot!Q|GKl<7zd4$BuwzrLg{0#R|+b=XLIvWaHUm3#kgK`CAe`$tp=7uBF)8tB$mvV*{}-Ay0l z8z4zM>+IqTJ_6qjn6?a0B%ziAVX`x9HHwQS<#i|_1fIIru z!05%fWGKqA3vDlfo?DBy-AjcBcjOI&{FOv_3$8Xk{Y zIYrR{CVmc22k7ZCZpeq)lAb62=ML;e7wsk#Ddh!y%&pUqSr|yUG*RJpc?V^Pv3PcU zfbrAYlD1qb!fM{YQ~+wSYRLknU^wS?L5ZB$yO=l{_Vno$DR&E_#DjXxgfc)L1q0T! zsYMm;MFrcwl*H|b?2@rJHXx&cOQzk&6uyJPd-j&4$Q_Ix{a=q$RX1D^@IB^BG@EuGzq;-yX!?)==V34EU=3Y>x*9^BCBfSDDzrb65}DQyq3d9fB&_K`U0xW8;U!PdMYXP6r6xP;VMM4k%G< zLAaXrf2_4ph%H$gWsamjKlUA6c@0pc^wJr<$ufD9yjC-i8zCye$g%tRF4o)UZEMl| zOtw4)v`a9iAsjP5%(0a|Qw=_9&kE|To48bg-tLFM1cI(39A9mYvk118d{nUm!H_|{ zb2KkMjX5I}grB_;k$*#*%)MFIdJc;C(pK!=JaIEQ_OyU6he!9wAcXNFb(e`o4dBWM z$8MarJ&hgBe>kA}vXv&@(2ZorHq=2O30B9&aE^LRiH}Hqne=kPZ~xwO*y1G!mJhj^ z9kG&}?r0?7w0yr2^AGWb->ati)6TRW4R0{DSqW08x;mZXLqsSv@MoTGYGMJ3>;^f0 z;VuEF?p!he+0ZPOXEDr%kXzc=mCs)--6`{!*^t#%94do(v!TjMfTrYDeGF%39@2to zu2lCLx~XjMGmRY))W_BZ@;v z>om=a%LYo;O4#_~_=DXyuv9Kp9;=hWE%`d8!s^{}XhT>WI?hwCoHFoKn4*>XvoF%S z?SD9&krQj+7JI|igj$sP=ch=MmM$EW{G@6^*Oj-|nAiu=Pj7{u@xNL%d_$cu%PAX+r zfM$riZn={I5)(Dy^{_7R$IO0qV^Cm8?h-7r83K;(S$;;=Dw03QVGZ)suh@0Y{tNB z=Gbi3?CjPbv)d4JEVa38lerw{x$XXQxsh`_Qs#E{~o3EIi zulzAzg;?OLEmWH<)HpBH&N>d!7P<=b+u{~_&Q>16`yJkBdDvOJH9hj^PPZeGjj>O+ zta`I0Zh4^zD2LkoV$Q{fBMXRJ8E$*0qH+a&7r^lG`(e6kff$Yh(LKAYRWj3U;&ubWsr+v z%+$K^Gq*Nfyh_2Ekqpf%Altf&vl(!>gxS9?^P)&mPE`K8qYx$lJ%HjJ-2^N(^L}ea zdzyuu1!N7u>TLI8P*prLZ*{BH`b&eej1xUhHmkr=$&}nlwa?7hrIznW{kt2f-J%Y3w2iE zb|E4aD3%K(Jl}9IuZ7|rPqr+W+PzqrsUfRvu5?DePeDD_k@R`7r zEpdZrrEtAnDH}4rEBz>xec$oA>BP zG-CI(IQ=68P%bU{pi5xUV6@1e^~d#^oUtIPFs7~dwE^O9;IH;qgL{zaUb_!yb;FDc z5%E%h)Xnn<*ihw?-{_)nV#WB)Ew=nungJlw8+evxfN2`XmbN{OzctGCDc9>`saH+A zutAZr@z7zJ99Pux7TH}w&_(s_RqN`1zTc@AVGxZ6r1>@a2svZ+^gH-*GBT{})54}$ zV#(D<6r+5D*Hb4#U!dR zZm`DssFT&ig_LKP;^qZl&Bm{n?Bo>!L^YY3M_9D$Bi_!qjkfNViqc=K^zT=97>joJ z_@J@EbiMPxs`hLQ({lUPGeVj?=NWEIn|_m9sU4U{tvFIq*o!S)_2hiko)5`&N9->5 zeEipCaL{GfRqwANafF)7rMY#wT-Ught&_ity#yyN!=Yi&d9uCAWB z;joIPJLX;>?OmU~lRU3|5m)@IsyyVCH+isQ{aQT>rVK_b5HnFu?~@E6dFsQndPS;Z z#bF4bL$+T_vw*3z&n%jnkoa{0A%cc*5^+|WQRMi2Mt@rgq{XPj2PT@sG?NEl`RDbtg-&GiQ1xmgBP zPNxfq@h9s>Nb>1a=5)N#^A6}Rl?LZB6p- z*Zo%Rupcs2WR`Gs^2DiVt;e@!y_Fo&?B<*_}wa;o|yu$cysz6?*T&Ni|u&)S={7h!XtSmYK=Czi0EeI$0M$@npQMHB+Y)C*!UMs)4Dsny&P^m!~s%y8k<3GlDd1GMY?cN((H-)J(~{uNH;zSwoz^ozL8K{cG5AqOY7I%=!yU3T4tI| z@^+lIdV_?l`}VdE_e>x3HXfxF1%jU*pMRo+vR*03igDkKbG%BZL8>`Rm~pZY0f6wD zcab|2wteT#xVFj`U4PW4>*lX0!cFy|sBJ?*5{Sc9Lw zis(?wur1;v0cn6@v|g-#wC}CCLb*Y8`3||~-Vg=Zna0vFU<-&RlmawieE!2|VUZ22 z66(o-Q&B!@!z82=K1cln0fgQn1UT8~gU>&{E6UVb{ipL{x%==()S8PN+-yK`L9PW6 zhN>c7ZoBik$InNdGjf?7_CA&k!I+cs~41NMJyNwGQx#aiOtRJjq47jyb7b~@q z3-k1QF%OxTJ#0f9UN)|+d}iow=O8$3zR7J;a>Fop8-lqcZzYZ3Qq2-o4hd;;F$baE z>XL&F>W$OEDHNQ)$oa9N; zuSn(_*6$^WUaR@l#M$`!ph*aaj_Utu#|J2E`Y8&$6WT!A-4k~AL))2kE6Yj5-%);$ zCdx4J6%*l`CPH=r$PE-?m!ZgTT&qan`rib#I45*3lHV2ZNB+BD|e)KU8O)hNkNb$mu%ZVT9~V zG^f{MMjs!>T$!Rh9pU_(=2z{wk`dFI@Xql;`-V1W8mL%6S3t80O<7OfWHH)Gp7KsW zk|AQV<@-&$z9_@#C)a!YF_+f~1jslk)oNHN-$42Kh}(P9bHKETd`w2YMFjVxLFn7q zFm>`;-6V3D+1tR0vpvQN?fk+2ylf}2Q<#s!0VnP1wnuW2{k2K!+$$&ec7#6N`d*lh zLEnRe`m#bEdPB938LxF; z?l_{lqJ!%|gyH;}kruvuoxvk1nEI`om9k?{Uj1V&4pW zWwVTDS{jPWNjs@t83+(#e-*0K>FY_`ppIUxF-kY+&UJAk_5$xKsDh>QnohP=wc51? zQ}@vqq(#(LF-HZakEF`P#9-FBl)MuVJpxd=vty>p40cYGRh(Ogo))4UFC^~W9^m$# zPpRY)N%Mw^0R+MB+&Ai1sdViG0LmBtGOV@sca`IBs@$a^=iM8c4RJMY1JgR!qr{w2 z(bMO9<4ISC{9RC2ura~luv-es-1ug-QKQ)ULC^urK}mFI`}Hx6Ya)$Hb~p-&h7M@6 z-@H)@v4Qyz+PdM?p^N2IdSK_)E+@Z^-dIVcl9k_ensIk?p}o_`9?9R8A3iGfywZ>H zTW`J5Rnk5LQE_ZWH;Yd44u8`n@?JdESbHE-KAxSkgaO{3a}gQmaO8q8B{a!`exQ|? z`(AX4+ZN!~005Nx)vrL8OD98eB-KL@y@#w~#{rj*2cG3C{-(vE`J$&EmZbl9%j0aF z%av}iQa`79le>=&t34n{Ri6e9S{;e6xct(7PTeI~B{S9uGAvc_2IB9R(SnT#0@bgC zJK$tQ_5m%O&W4fl|AyYPMF!{wd3~O5ck4VfRv%G{a6NKyzd0)&_O=~VJd`s)Yx7mt zwNXlXUU~WgRPgR8FzDDuftayAYIX}Db1=n^saL#jS>J-2u4sD~8Q&+Vr~)?@T_e=8Tult;!Vxa#`UwxB}d#pAh6E-!SVCYcLv7uU42fqlL(R@N^o~zC)~}0&oG4(1@_p z5gSWZ>m|ii+f5z)LkHviO5(1K^MKPIBUn z&K}F#kiN`Bh5I;{%1sqmU9|~sCz{bD&#Zy1iFnle0JxPY)^LQF)l0 z?>w5bzOx(!dbB~2G}1Og%QnXZQ&Ha|I}TtZUL9dbeGsLv#Dzurq8D}jZyol@L~Yci}r_kM%Oxre7-S5|p*FleH<(8zmZ{J475l;%5NCm_bM+4@6woPZWu&b}cMyrDf@5A9xnAAz!&3XdEJk*+(PD?yUQVe>_|jJTvY z-@TcY;pg9`oe9z!=epP@b2a7@%xq`)}N1R`@&E7hW#f#MV`KDYl@Qx@LyiGa%Xo(PdT~udB$XM`V!~ zd)lgRSHqK1|BXmT5v-r*&KDtBoBvTGpMA?QZs~O-6uMG4y`5%Rl*HsLY-V9Izj7rW zp~9ALooN$jdamO5MG>}BM1a-AxxGRcmf%bll1gKW&!-*AUuZ}cncnJM#f+1;x{0ty zzMjXHu^^c1!$bL;C^tWBGZ0cI(lJYD>WwyZ_Hi@v4INS@NNF-=ysRe@N8?z`^DIa} z&EGQ#?rU*(y>Ib#z*zhAN=kXlqIjC|HZH9Q3 zgtzSS@7Kueb&d6<7V`FnarKNu*R1#|rN^iYF3>;S^-gcsElYp1)`eLxMPElBUN9GgeVAGc6?3iL>u2t|^nqS_$SO^AC&xuy02zN&A?B_yV)w(wQzs$p znW8e9=|gRK4{zjTV68>mb;q=REI_6QbyZGitLis8t}c9}>EHsfPhtjjbv(bE_Qcuf z4EacRc3sp1LnE?P_-XH_?_S=&dg1kLJJ3;d6t>bn~bJ+RUA4B z9*no#{IGFhyz5y%JP{D{uWzx_EnSQ2y!P|6wD0Un9Zs6c-Eglz!Vqo>5{+E8N<||# z45=B9t=whiw{EYj;KoN)%_6i}eWd>3^`&u&EK?%;zaCzSmn*Bp`b*lA`^MOA8c)#^ z0Oe}2V*9b7;>JDy*y*53U164ic9Cd)Awq>T;=Fcdb z{EZ65QNl$OpKUka@}Z@H-7@&9XB1yVI#FMaF4|w?2W>bU9#7jA(n&yOcT>Z}7|4>@ z42@oMX0C~{X-r=5WjqPs_`7rZD(J(5P$GFU`+)oBmJt!u>+RjSQw^HoHJB!;Ttxyg zl0(nNJw6Xsz5MnV(65XNJWHCu)x&K zg`XR)JS>JQ^pVOuz;Hk0zvY zgltge*ez{yAEVT;cY5#qdA#GD+Oid_uV;H8jO3mTt9LBm%l}wQQ$hApK6JkVJ~P!u z3@@?D2~9K?S2;b5<%*Px9|shcI*$vo^cSgR9m#mSyZ!aM5fDX7OUD9w!EM)BE@mPj zwA^Wo3IQMLeU_t(*3pq{+n+jp9E=;gjfcOjW7ntJ7cTGGl{V0}oVw2)*4{lAc5F+| zt_Ft(>Nu}O%hKBeE0aetG2z~ty^4SWW&xRp`Ub z`{cgv%HB-#%(9ZZ)K-S}*GfYL;pB?~X3Xwi%H}=0u~4u555o@lRP6oz+3z5oZ95%n zh(qd)%bGB$%&;nF$!LN&gfTZ6yWj(cv?7nr^RTL9^4esA_j39vqF*qf%H04U)4rFS zEd0Zpc=kFKTIp+Z4P1xy_FpCG_IK`KgZC%>a&N^{@KsX1)IAPh`={V076LeFSOB*n zbL%@=RNTv#b||iQ+PAY? z1RGeaK1-p9C`r)AT8U`IJmWdjws zSwMr$>Llt85yb!283%DHYIeD~pQ6OPVIyZQ$V+pDU=FD+=$Kep!|jgxtHG|Zx|&ry zjoE!{BR(dV3GWjYQ=M~QddmZ-b*%oc4T}m60&nofm43xzH*xZR=}WB z15mEC*l9QqmyjulZGD0DP~9CO1MbR~eLfZ+h~)~y105+pCCaAnaM3|a=BlJKc}?~3y}^AD>-i&! zX#(EnIDM5S0>V}V-drH(9>AO%LM@n%of#`1ou|vo z&rIddMW}6Jf*%`@OHA4tn$i^4LDH+?rjOoT{)R|2+Y)pP5}rBs{bG>$+mIiks-Sy5 z3VO67YHmAlQ3df?=(i6;U=q{@Bj$OFq7OMu$?PL14emsq{ly4UZ$*m7fAgryd~;BEcv)FwS1AY(9=)f4BA2;l&S# zOD*!{+Yu4#a(osmV;ZEu+VZMjIWjFHG6>6J93wZ4t(i(8<6n^iY;Wbh8g2b4vOSCg zelV&stP&MT(x*5|Nuee!UinYyWU4uw^eMa_x>Z)}+(D#8sC?Rwiu?@6dROH3PXTh9 zz(4Y%M%-430zInG%e|U?uIquhS2V{Kcw3$k>HINl_JQ2eYSmE!MY|KK>ayy(ar`Zj!i2umM_Y;tAy-$t{>pJC`075R-cfD4 zt6sOR(8yI%J!jGkTK4xvwFk0e^gbTB_(8w#L12-_IJ?NYKme~;tiVsG!1LSsAo5Mr z4nY_qpB6&WDy3P8^eZzvtNJ=0cCAi&%01fRi`A3Q=g^Xpb!PoL@xqGVVo5!V=4)gwYkz36eU$~Bhh z^+)w%h-P)gj_^c$1Q~EM9jOPex=PJf0!ov03FyZ2K9B7C4dH4HLzmQ|nsuH@{5yWu<~+1&Ryx4HW79u^%K}bTxe3Fz8PIx?*v;M=hg^V3 zzM|<`2?Z*x)%WT1`**nKOij#*o-rnf)-N--D*aPlxVcv?Jyd-ZEDd`M23Cq z73-Bz%H|F)->7-CbG5qwy_>;PnEF&vz^jE&Bz;k$1}*@r(oi<}7m`aoEKwxGO$#a> z`BL-CRHZK`6KCxc5dkYslWf3Ld#ZpDNcZqOg7rsnu@QOo<4(+@$x%L_CtGnuQ<<|N zJW(gW*}Qx1pEU=yFOc!mvYcOYPI22eb11%23DS~go(OKBK0(|i;~xt_UBSMeIZ$H= zm@mLDuyCbCzSRNjd@wWyzpUFlJvkF#s{R3wKBu3=C>s$_BPx#1={1 z*3lflWE)z`-~)s>r&G?WkVSh!l@72K3;XQ9E^0YSAPg3AFGb-j1@}yX>!pCSAIfL1 z;;*cT00#nW@uIgY4Q4Hb9TQ@VshGWj?dEAEip{aO8SoH4{xlm=_Z4>NiPoM&SV1WA z4_)b=m|0Q;?sh11}M}pC5sdXnW5wMdY>0d%q1|+kir)-ej6G1 zOV0xY;0Fot6hOQ^wBXJh$5F9V`a$@dBd5TNsL6F8BU*do5wBp0yXMyyV754s{kF_2;{72*I zDAyidv_i{pZzR|vq5V3cx095Wc?cKI1PaA_`#1(Ey9lm?sA4EekS9??h8P~>aK}}~I8hq@$M>gzNgV5L8a5UJ zEg^(9YB^JGzjjfMJS|qPknU7T!ComR$1wpq$84i#(5dvGc+KLDfKv@zW>yxM6i#|C zt}2u%!_B?tmYUZ>RCy9nbH8hLWaMTH<`+wk9WGvYsiiLxzY>$~GVv8m?CXz+57B1p zLT>^|(JDm5FVDXDQR_wPdKI1$I$By-;ijUvjbUF;>O5Ef7}C{>y0iR!qz<5xKn2PFuRyFnsqm zH58L=HoO5h#|bOkduDxn{K^g=@6ALj1nCLA`qr;~X4P2z4KSF6O6V{5hQK4Cq{>D1 zj`hE_v}nLq09(oub`^x)@G*3NN?-saijz&TL!Oi_lK|Kc8T&ot2x=4gm(lq{fs})L z1CRBc`wnONB)Q121QNSu2p|QVNN*p@AEOhDeqFp4sHtZTL;|Zn$*>qPg61EDmZkQ0 zVmT6o2>`VJP}%YxK^N^ZlWlz=!KSCwXPzx3e(?HCC0&*Pdz4>VP1+zQEXtH3^hBq#ClPTJt9)-W|6W&N#zuD z1z@@52be7{`em1(wPX|A!~0%ywP(mMTXH&Af|*nV#(P~{@=42<#>iprTf<&6xe*y~ z9=(Br|;(Y zS1fBayK5Cv^NmT0P#kWyzGw3S2$3oeAVB&eCFlJF@`i?C|0}|IE-dQNT_SbL z{jrHfQz}XTv}IsdLdB)B>4jf_z@># zXFST6A|8;Lbai%U>2C5~d`Z4EhAsEX^{+~6l>q)*A03;~fnly72$Mr0A~%?{MHhxp zs;^71BNy*Htw;nEAW4^R4S|)%kVzvLsy(@gxlT8?`;J={Wp9e^in>pfWppO;peO3Q z=Xx;*|D_x-$f+OyriO*8#%M%!s0`+;Y*>lCOmZ#DXHUx$`O?nhIlXs)vQY7uHS6Rk zM(4v7E%s8GgjV;O3Df3Te&NrstVlPw^yB*AQ{8sex7 zUfpG)-^}*1D)nN-gbxtRaAz$~$3;~*QqVpqTaJzJ8DH_yT>@w&c!4=P8b{7Ruz zTX^%)@14cWW?ASe{7bye+mUcVf)ZosWIj1GcwPK)hf@37ZKbNI1Pik6n z8O(7Z!xn*93aA`uW}3P)QqJ=`I23evy@9OTkLqhe3j~T7jhL1>rg|gkz-JlyUSONtM5=9Je5YCz;pe^ zgZGb_eS6!>A*z4e`1{TH#^i3xH<%F#UM=?Jrhh;DLqZ$Lde}QAqW4e4o}P%mKau!$ zBKhA5j=^N=s>!q+lj-{>Gfz*hIMR^)b`n)-!FfN)+i`TxaY|sDb!oBcPQm>ttC+yz zf2V>46}jY(ZH^!JpFa20@1y63Hu70P(Q{)cx=W>RKBRRHq< zg42q4JvQR>m+--6Rd&@ z^(nGWGk#nkEyjWRQ*^Y#VnfOh`++CGoUs$*zp%a_tAAX)`q)(*e-V(BRwHK_dSr~I z>Z+e6Ui8(wDW)utN}GFo6hu{AsGR1QHl`mi-oE_G!o0%|gvwm@Zo=rkt1*Y}Jk)Xt zV*@*_bLU?mru|-C`20(%_UryC%GztV(cT%%g9&#JB(s9F9k~BWA4R-UcN*w>1rf@( zeYoMi1V(Jvz5}`qFbF$fZO-J(nC;l2Vp=)x;6xBAM{@WL?GKd|3?q&?2mm%Vki-OB zI6kxgpO{seFhV~@i^nSZXZIq3ZyjCSP4bS-k$f{Rco#?S|JlR)4_$;KYwh-w7?4|o%()$06F6u82_DtNq+}gyGVl>u{Eva!Z|280a62dz{&iy~=;_pOUSqBJ^ws?0u ztN~rOD_;uxtMebaXsoL$M3eRE(B7xVyHegiJYquKu>lFU>YhpV>bnc{Hh+&gwaieJ zlNncDNw{fw0HePprpSBlVaXP5Yj>HRM9nr~80Xb|B`TDH@^C$?a+3S;FMQ$5!p<2^cn2Nv&+ z3OT2#S)HWGpk$8WTZN(swOr{XF9Yautq#68hI)ZmkxJ`gTz@eQW&;dsBmiqEy`Vf@73O;}jjB z9q@PmTxX=^kBT{FKQErp->O-u61r*Uz3YIwX(Pheg5A0IBGFdLgx6a~KWtjc30k%( z^3aC0{UyQ7TbrwVuRJ=QQ2T8RTy?5*`D<{fC);`P4W2;2S4$9enS*FoW` zetMOCBYP*$Z@L;eeI?@oQFuga=Yjuvcqe~rG_msnJkRD6m7|-&3k(H}h(e1CO%Vr| zJ!C|dI8QW19&*RHM3woOH%A>=>+7=X=%(mqxQ8cji9Q~4p*i~G?uRZhr!pp*W6m7F zxW-l&nBR##cgWW@?tDe`ow$o<1g`OyE?&5^7=QWNL)Qejhj%C8+5^mr#D+)acN4Ea z^Ieg2b13?5((QMG70Jz$7w#tC{rYgl?t4Ec?(TlDh;iez{@256SN3yD>C}p8NqJ;g z;Fj8Laj_-!$+AaodwQKGTlPG2$F5B4^Ru{@Hek5qQ`(D7G5TK`fy|Y2gE0pj(}%+^ zuKc+w>CxZxHwT^_{`qbzTy7N_Z5rutjROGq0EVko0NY|Uc0#JpO5tq46;8z z(7N*T%cBGOxj)?BpU!=^&;7x^N6)cx#KQTE2mfB3c(-=nKRB2CNX8|Z$8wd}dyx8iqj)6U z+x0>NZ*zacvG7DL;-p6@hhd_9Zn3EYzm0~hp@4Wp`1Ja%5e^4``8#LA_$E7_#fcEU zXY^{3<#{GFG?vB6Us>A9eNB?_1A=4p+l?U_WOQ(d)rr`Vht#7Pp;KVta`Y$;BV_`A zXLm5YHY2@vMIuckAh(LmSMA{GyqEbdOZE^l!omTkG~7RqI=*8aG=onH1Q-f)Xec9` zE#zrXoT3z;mZx_!1nv&H4A3Vqi1tjZF_FTxU~n4rZk~LZchNx-hE&(`*Vq zSY!0Q4y!P0#1o{_VTbO3j(*e}(o2NUED9&3i1zs2@cu;VeF?3Iiq!d@>#2swQ@>N! zhqa-4E!xbe5Yau$B$S#y%~HEV0W>CIovf8q?ny)ZdcHJG?&ngj;~ukP5F)eCs}6gh zl_9{&ANQFAm{eL2!_l9^uvlB*+Tfjy@#2{Q&n~vkwr!qx78TS;kR#6^9vb0?1uI)P zAULipd1%A-qEQG+7eckFDBkMggtdAwFN;!iuJHB%BKCc&m+v~E*zp0NtLN3iv$nup z)hLP-V)}{N0PC{SL{aM&{mOISql$K(FQcC;jTa(4IRz`lo>~~~P7N}Ard}#1p7asm zX!Mo?i1If7>xvAIqg)MQyN-NnMomb0Rb$FCygAC(9u{-IAmmkJIVt()7B_8kcaegm zY7d(UBO;~=z!RMi%7LkskeD-{1OnWDQ=&LNy^Az)jW;S92FL{unMLZ2}q+So;wK+h4+H;xq{^nONke;A& zNF}?&kH(7CzGG~aEARNhL7~#~*X(!}ocqAw#u=T%!SM^DfZM+R7QLu7i2($gVg9O( zT;OZzwO5V~H~81zSoA(M(KdyWm7?i+$=3PRYhpdL7d(m=wQq$z{3_7?e~))Kt;;(}cK3SkFlH_?hT9|ubhvqU>mLUDV3 zx7`UT+D6ONX_>$|KyCVe*o9ky zkG4hF`lM0wLt^syI2Mp2@=r1sT+Q9R1?jA58a`NAbdfG&zLGBMBnR;2xSO2cZu0 zeAI%iGUx=yWBMOvSwoRFQ$2yMg7jYshsyTWVuHnlJA2Bvdq7DL*3%L?H{75*tlCPW z?AC#pENuJ&!gyPY$!z7~c5NtJc5vTs0BM5Iibcj%ViN$geHfrD@m%>*0~Ern8oDom zYmVbN_H%8FoQ*5FHUK7PI4{+@O)JW)=%uoU_u&A4z$wDAjgyxdYXoyO8yS4JFrd=D z%`dBwNjns!KsZ{0TK-(kDf3pExe0^kqbLZXLl3?i6x{VLY6ZJrp-2ow;A4=6gJ(>6 zK@>q$EhcpeV?K*SN?QsjzDt`Svao5{K>pfFlq)k2C%;W&*U}UW*C{O9ztdgM_n@8o zKAHeexnL7s>srILW9Ruoz6nj3y)>@sG;@>6GB1Dhgc4Tk7221Xhh&|*oXS%Vv*p%% zFPas>*>w#}C{~FB>Q0#(FO;5%=c;qKc8rzl{2`0W-n~zbNT^)91)iszp9;{!Yat!k z6}?P&cM43GuB1c2;`NT=`pWHP5R51V+yRH>V5{Pix7%%;r7+&#>s*ku^8HmiIUH=o zu7YVKR*@rt%ksyjumr9PJPn9@;Ev|GnaX@R6blsuTY{&(c!A%!?pw-C0q*kQdWN{e z33XJ!Y)u)?*I)p~(2WTDmD%*V1SxtW4aM*$H~pdN#N{g)ud?n3^@+SUcR;}j&_>SR zH_YFe7*NbV`onVRUdqZgfJmzZHE{fZF7)==W{w0C*n~(hqAvDSQ7^~l#fdz9yYi?C zP}!er+~lFx)oH|Vk6>%WJNRE0p<}&N2604v8sf+Z&w-8fQ($6bn9VFmuKu*}rLwSJ zkPLU3!qA=yB#8skXq2})yrLVBSL0Ld1Sm)b2liB&?{K4n&J_o7E4QKlV`O82rm$xv zDbR8SDy~-Wb4CykThTm=E@$&JCA^cKD1`9LsD0ChQ08-E45pIX(!&+~3D(E)3X8#X z2)jyDw(+>ELz#@ooo{oT}MM6Wj?;>r9 zk0lk!uoUc|6eLbP8~=87Qx@bPUA6#EHq54mm?V||LG~!;8 z^X79mOfBKn<*B^p0r#Z!+!Yi)JN7=C4RBO3SxliSQ<h&n__XW-gtaD~_Py5lbnH94yIjed1f3~3g7EGfat!1id$iSz3#QZ^6B+lepN5&0s6QA77B@d zV_BGWQk0nl)W*3*sN%F-FnH-J_0Ojw`@o3Gf(^7KEBZzb^&wy$Go(@wr&F+K83={n zfeB=;#qY-m=oFD-Kjfr2{1{y~eDt-(aY+*d)3VN8`SDGdV}Aj|R_@#1S72xM}bzb~toP=UMQ;6EHoAYXoD}5^-cDu;_M2>uQyt790&iJqsKvYiXq|^k~Dq z8Y|Po?WdDWBRW!`G&KP}7L=XsqvkX9m;@_DK=n!Fmucpr*8PY_DQEZB3gGe<0vglv zH#vUO)|3HxjH7Ut_LsN6Z;Qjhx1W>+bf^Tffw+g&FSru|5L5iUvV0BEowI);nWZv+ z|D&%YXirNNJq*6!RgR;%E9eD#!$f4^wmVnGyX|V(_yUf%NJkTQMAlB>~DD@|n@-&+M#rodAq#GjRzy;GQ^Si$Dn{5=N2>B*CA zFEvO)Y$gRsVGv9dm-gM|vBJ<1EX*QjIA+fj!dpkoJ+1exC_jhES7j{UX38^CK&J9X z@N|AplOVdwX>EUOw|0GCQ^8hNumuMp#oab-0=EQnZO&m*X|fZ;0~KqkS_%BU{#ZJ- z!Cb=CtL5skik>}h)!JJY$Fe?a8qZD^+Q98O`9aN0p7(RmfZahgLqNKwS=8nOkEgo> zoME2Jj0$-rS~?k1q`p6J@bYj96OG1wa7{yI z%LH-NeAiB1YU-Cq4FqMFnHLH0l^`yy6=_`Rxd9u2|>cW58b zqlhp$Y{4oflF0tXTTRAkeQ(_?WYiYS_+kQw(f2Y@cBJnXyQ?I0)K=EVeZH0(Q&Md$ zsuu4yA^oH%wt|lWQeQjm>Anw8sa(bby{8GuD<14wIr(GN&mZpCS*F&khsCU?^Q@QO ztoNo_pO{(Sj9I^eS^tXJfQz$%w`YSM%?1z6uAZD-^K*7Bc8;Yr7h*BD&UtRV-(2XX zxeYOM8#CrM70iWI%x%6nx8?TS)<<*OhUT_U&h7X)w-YiO!jk!bf5F$MGDU(ez;&Bx!K-(fvufloLNO$#^L7WbK!5ZVzlR)VUq<))4(?H;m;E8&pp=6z4C-pALgNgO6n(r#XVfJ z;E~p3 zM<5I1za}Z|-bx8Zno>z^9Pce2ZE`?Uy zxYXn(yZe01?>*O8Avoy{TJ{B+`DxeRyA*jxE%#j6xiIB%SDV7m#L*+f2n{N?$nD65+p#di+7!fBxtFU~nUq}Ql<-t(p9v$d-0+hf&yTh7{ z2iE%E*1Qx9WQZ^rQLZQj3X)=zETfc|;O;T5Zz9PLm6z^MaTa&aAWl{(nDe}hJoDt_rvOg-fmel9K+p&H5&Xqj%%D+e7@@Kd0pHQw09{>9p z0w1Zi=>HR}#o`9a&^2F>HedIDUDUexs%NGWp&RO3qp;$fK;=R(W-DAxFmSYtRnXe_ z1g-xEy4dxtqHu1BT{WXCV_DR#T zAG^hfErrO6k`64@U+8um9!5E&3^KVX3L5hHjrgI)q)+oUBTcE3t}`Ox&L?iTDmU%$ z+G8yV4^-oDI_2>E_dj$od1k>bs?fveMk6L!=cuyn*!bP_D}&`-XZ?=YCjEAtevZ?3 zlx+Q~bKO3rw)gVJM<`i)UB-_uFuJIC3-gxLFZ3yB(~FL8Thgx_H$lYYt-qH1*L8lz z>!8}QFK-xL${D9zf-ELl(>_lRUElrnwCm5WZw-wv64r>)ZhZaudu03 zvE5^z(ISncyXF*~}!HPcjR z$mgK}@-~{GXmMkai}~@Pa4SO=zz!!eBRu_(2pN~D=nU5%SdYKvSV>c-D3PzJfwN{s} z*uFS>qzb{&1d4ZDFE&)Ek>p!*Pko<29=j87T;FaTU6sEv^+dFVJgn1u0^Y{dgQIm0iKB&XV}GorO>fhM=RG=KDIKlk1m$g0N^S*^%38_yMCR_V1OyWHgLJf)V$k-bYd z$}XSjSTvlkje4@y=Tc(Edta4jjO$`<>qfgi$`R%L;9!qa3Iz!5S)5zJ?!R_l?`)?# zDEGAfUfGVq(e;XvBuD=~g!XLM9unOcN2!;rzNTe15U+bP?R980J$dQawsS=&hmMYR zk~4+dffWQ_hsn^;5Z0^Y1nkd4ML)Wh=RdyVai}JYO3PPs9T9m^*3?jL#T5L z_abdK4Cx@eD~>Fga@T$^KX6L3qNe2aA=J-`%nP zoT|y;lIEA^`OG5q?*CY)cGt4Xz{5k+!lctyYDe}R#|pX!&XwK4`dIBp>b;oibQ%mP z0ErfdJR?dp*KrTg41hhTT5tHfN_YyY>?J5|QkRq@gn4OdNZXw2!%2&DCOet#u**xF zR?)U=RIlF6L{Z1r+)%ojstFHI?~A;nMcl%smNl%y@<$0#X9?H^rmiqtxi7!ZFFf1) zc6|8-COlAXtA+m&xWu;6(Zus7*Rl3zHim?Oq&uQVt}SfMAfB32Y=G4Invv3f1GcsP z9>#w{lu#{{z?GUX0 z2j6uK=v-ua-Kml}TTnf~cM#SPkairuG8??J$aBTjYNE6B8GidgJdRjaoTk3!Qre5M zx?7T>ZN%|YIU829$n@e5xM&Rx=so5XEgxL))awE^VnRRk*7aMi&IpTfouE9wlGcm$ z2Rw93Rj#?uaFRD7iU@4ZmT9J(m|V%X6$Rqe*i7?BW|OW^E2u@__~e|IRotg2$2cO@ zvP=+dQJ6&xGKE##EROuGyiPphWCC0jw#Fle9K?(nj*U6nvXFN{gM>$c+sUgeC%b@X~7TsfM9atAKJ_`6VJ>LoCdH1vSD$i1|W@P3D_r>Ob zJp)X){xWS1s)xB9-jkfn%rh6u34`zRF;DGnf6Na<@EBy3xUV>fB}IFS4OQrWoGE|i z^#_KT$kWBAqHf;t-;=i}b$*+IBND&ibm3To(`240lc_wx!fNw-!(c%bxjb(TLQq8K zCrOrs4GT=r)z8;|ZyJ8{RE1?AE6SKbkg@bOmDsZ`#Gi07RLr$ej0&-7w4%Vk>+i|% za)QuAKMq%SXF1MZs|uvcGx;Fz#RHz9-ad~wq|;!vl65T`WmDNo%!NJ`AxFiPGORUO zbm7p+{0E4U@3Rk`3#m$O6UsA27&|CLl^Ms)%X+Dk?y+Wc6+JG4LzFrBY!{Vt`yR?VNY_5 zrS!*Qs+?~eW@Ok1>;LuRKPm-(S$o8vsdPhv-4o}fsU|lV&`^FQt{1BmcKrt)mJB+` z(aWVbRf@#0o~?bga%Oe%Zmag8PO@Gc;AK~7S6X`&NV@3#=U3FSbAQjX(E^H(>%&&8 zMp^~VkKqZr8j(|`&MIwyq%C)A#rDE0@IlkoWdts8Z_DJtjG9GWtNC*n?1F=4ZD!>j8aQamW@oZfo1F33It)mlzKzR#vk0<*Mqgb~nc+-+bBc^u z&a|lEIXbp8((R|CI5(8Rsd3FXkYIE0_Z2RhVv@ActRnTcGARu@l-JFgvt$w zc*DaWtj#*O-6=ND+EQ8?LNwM!=;X@hJn*MkI>Y+a2YX6rQ^>%Nq_d+slPIoI4L~q$ z)gNw?(z!J@+ZPypLIr!sM;-94$T~h+QXHf`>m^Ry(52`l1#hRAa@E94;tix5Mb+T* zG2*Y$TN@0 zIzUCb8EIbm5*UpzTFyiz!bVGk-qd5tAJS^-=2{gHSH*QHZ^sXx&BMRnDkWtDQq6@j z2NuPUKejI1q!{I6#&}{UgmExHrG^QsKgcp>uGvdXU@>oHlZQ=N_*hxw)&<-`n8(u1 z?KVt`X&DAm zEwvc49z7){ekc4<+6apdv4)G6J*`bcic(JNoj5=0m?`!u84EPdXJ|aqXB>54BanbT z)%%ze4z>6k-f8u!Ks8GY_i+U;Pv_YP%OUy*K}!J{juqSWV6fZj&C5DU>{< z((+t#L4=#fgnUhK4TNR1YL9SfnRyPPb~8s-@{G}bvd@XC|4>vXdYkIDrz$j};N|AS zaiC~>`%-D^KHu5`8Plf6i%=KzE|#nU2NuVfN|{pZjS;sQ)A7ow0PjB2?1wt$9>KG# z?|hWPSAoU??~?x_5=%khrfYL(B^Fa&$A2+7%Z(`zQPAgY$^%!nAk}&vXOhnz;h{Ww zq}KBGCr6q2tryE$HHcHK@5|bkE)7X7{g@ZkWgu^N6iTsEOjQ{QyHZ!VX;_WwfgrZ8 zgfaFV;!~-p{@fx)`SG{2y~d4Cu*Dw2_&l3T_PK2Tt8aj^QGN`|OP>uP`P3_`a4ej33FDwW-P1_a zs#**wH32uS#LFwa?CYfwcGC?Jd}Jo##Hu#cscFodZgHpQ%r>N@6hxuc-%b@OnevvE zEVf@6;a$H9DFGhM2AfiQ^Jw+N1>wiLJG@!3&#!E2Lrj%CHuC5WUcW5ZGjP{yX?mBi zs@0&W&4$&k!9$uouPI9*E1Po7uN=*&4U|r>wb#@OQTfqV@+8NkAO7?b>zR(SC3cFq z(M$CO>>gw>)M-8C6ji2z8zlLI1WqMPQR^;cN)66Pr)RvWGxpnfm>x*oF_A55BlPrA zJU{xuy&3%AsqNw(`lrC(a6SbMwgSwW|?&vc^2G}PC8=QJTb#b*uB79g!}4uaYvvi^oZFPj43F;l_Au>aUOn7UvBfUUOuJ z?E!utlGwh2=85x`strGVCX*5!0Ubw#ISyu{kuEGx%jB}8!?s>-P)IM*Aqr-1^WGt@ zer=3;+lySn(SrJ=6OstMTYyR|NJWhsJYT17cFjk)$L7ttlq*9=~#cyVzGvdvu=$nZI?4m0MoPln&Huuy zM907V_?mz8&?0*6{oIhFzWTued`jEfzrHyM5)U!|AUd@hmp{(3g_+;-M z+NhI;`N#9?^c%g5=(rKTvpaTP2%xQ*-Y)T5Ipk<^P?gpMp_CbNCQ4=b)0h&D^2o&r zvHdS>kDH9)P!cfRn{QApI;^E~

DGX8E4b5UJYQ@ouED^N50fEF%6kgrxe`)%pMI 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%0De&ajAGZ6c~b68l9L&O?5rBH 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 S(UpaU(&I-xE| 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 (t$-L=8O%YN&#u22iAGKu}QBNg)I& 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

EE*pC$#uale&`+vWf6)dw7>)}r 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

n!Z*L&L5MT;;>9DMslU z7pR0=jW0Fzsd2++-b@+a_uic{GpzRbXtQ8DE+U1hm?-o}B=t!g3zy{+YUy~-z9#aw zcojx1Qgc{CQkw4;j;vN)dgC+=`C0V#cbNLl&5F&Z2${eqK>|N zp_=Sk-%_(E!8(hY6a(edT?sAvE2cF(RK(;<3^CeSf_M|gY1+X;suF;p!KB4ix_fOb z4ATU5Lj6kV$$;gY>L+zU9nJdHBISlqEc0Kk$t#WCgLeIg6)#Wbg?IMM@Xkef8iOaPPkc%CYOQgGc*L!W;lD8kR?XL-g6=o%Sq ziAjwHNib}4ur$DqFkhQv{Vih>*ybS}lL}(qE<*FQD^(vj$JF=L~er zl3PJ@FO*&;5Hrcnp)sFt8pS-*ASYt%ZXa?Q)ql(0uH`h!|kV>#z{>%L4 z6^wB-KzkTnu*1lM5^Ty^_;z=N0j=rY02>>C1{{z-6cA)5HEe?^sh-ji)+eeK;DQn_jJj2VtejT_c&3nUy;$HHLAR zm9G!Jxm)MEc2{Y((+vn%M$^YK>&Hpj^=Nzh80C#a*@ig!TDt`ebJ})K$DopIYQD^o zH?N;nBu}^LaMx{*NC#@SY9@jV`S!GoQt$z>rZG7{kO_9pk zLVdjn|JRQr)Ediy8|a;*n2a4YW6{Mt1JZn^t4lfb!&7MGsYsxn7lICtGf7a1 zl)u6<)UOJWTE6fEY^e*qi`C{bNrx!oS2Lh>ou@M?lw>$$#$fSPSiBtdo=yd=bUlD4(zP~2#$5WKn+T!#G5Q#Od`WrZt>9n2EcJcw7WEN*=`V=h9V2F)@J{UtXqVHQ&dB^kc*7`r_g!I*Lm-31$PV{jQh~cOG}~ z_kZR;Ye9TqFaPA6GfMm`PJ{}JEd*OwMG_%rR3QPvd~gE(4R6xl} zL!DBEifP|lg}f&rA1-3v=4=Ph3=Z^Y9?DBM&=!+mDa)SHoO7BAo9w-6lk!jkOcFdo zVrSa2GK_%-cO?#HbYOEDHbCa|(An#*;@#a}a91F{j|`JQ&*4ciTRJk`g@Aej@g7y+ z8=4cxZE-_+U;Ey6a2$7q2UtT$c-$AmH0}%o)tte*bjTNGtAyxP1MOEki*mXj66G*+ zhFsdiys&C9w`vE%R)F0h&h}Yk_?L8S!Jj^1*_y+H9HnU1Imm#z%A@pRN@>QiNv{&W z()jh3=UiGaqKviUkQxI#?sCDC3Di#b2=`y9Qo$SNVN*r?JI7pjr5Q1CPqX%4I{)x# zA&-C*z*W2qOIh~RnM@6%&YP%{R+DBu$zXNyT2P^|@PhdY`Y`gF)O}J>bzH zc0B_tw$?UUs`%WtX)eLlYGjdNNJma?~*YDC;_iO@W z%*X_#qG$G%6_74sWqpX@0^kzSe!%HgwV8CX=z5m1^5{BTh`@j7xe{;G!z}!$6-c^Mhj)vm5ukWOahh=3w~Cq1I4TY!vaj9 zB8HfT(4y!484rAWSF8ytuCB3@_rv}rOYRxb+?t0i{K+_s z1%q>ydmL4cJi^9MfFi2T;QFi$ck{4YO{;#d1vRVhYXe|+I{(mBObjY$y^qjQK;BV` zW^h*qejO^R=SRchrs`~O77|%cj{k8wvnqREHQMr8U_sgylo=EQJd3Z#Y?DE#??bz1 zo?@85XuVa07)4IA?m8o0MguJpusj($BX>Bzqa3A(Izlh@;9&U^!S-K=k7VJpN0CRM zrm#`KK!|u{K&TK@K%3Bq6*J~#BPFH7sORUFQfc)ldDgd;7>azP@KQHMnmbjLh36rR zcxSdeKvbHhheD@@-xAnjS(1Pae)HFUBbH zAgo}GLT=wFk--j_O$)tv6kqCTKx1~8|MhWGs0Q*56IXGPZ^%oxl7>gfUI-57oj}0+ zrs3tc8A@xN%jtX#2I7<|Hf|Jn{532)6ft!_n_CL0@c7FYF>ro&SL%x^UvVq&ik}Sb zH(2ra{k;2Sd&VUjY~kVXXTOG)7I6{#X;@zYxVH2n%vwg>e1>!g4)VWb9D3}7KsVDb z+~|y(*_W4_d+<{=m@T20ck;{^A6`--(_`2tF(Q@D=i`(JdLU@TOTS%;-7W%+AH05se!fS9@vP== zY>K*`AdF4MY!U<7xCfaJ5PAo6E9?0Q$Q(~P&~{U{ITf-?$h`9QnD13oLTC17b6}a+ zqe8B)$CKGrXWi+@1hXb+CPR%0W;J4F{+;Y?qY#D7&xj?$)-K;*(WO#oJ~(Fc8nxw= zV;UXmk-zvAhxtpm3Wgql@DOLE(8m3KO**v^vL#UC1I+RH#~}rxmQ>UM)=-$3<7^VQ zY&WE7I!rm3at*dZH?@lJ>Yuo@ZPN-zPwcXy0wt`Y*>3p(Pl3Fl;F~r@H!h( zmPx|%2o~-5C40fCklYIic>$Kk9tr5G37${-Z<793-0%-9HV8gK0JtSU3#ZK%i<&ZU z%H|Or;_{Xps-f>W_WGD?QsSap_(nG3Z0MjQJvPo=l0{VAa4n+q_NA`V4E=_B&vj*v zI~sTEJdNdJinN>s^hBGsQ?71QYcTX_?Y8beuvltoc~frM$PILv48$wwdNwOfOaymT z9T?$l+Al=R4Bq2SJw0zBkIV3t4V!tSSe(Bb#aChS*4`6Ovo+~Pyxnc5HnS>iN#62F(~N=DWi(2HU}F~Q zx>xQB%9sh>?gH>cvFb_boe}vY2G!fNRhC{=p5kUa1bGzD81_;%zRE`2OEiUQpKba% zt_6W(2-alaTOdPf&Hl5=wVjrp2ZM6^b9rt0gUsnpqcQguFI z1KC8GWaEjyd1G&n8S-iUn~RV^6_)^Rp}}!OuarJy%|k<9kmeGdNpb4|S~Pf}x1ZX) z$X#Hg6iBD$c)QfH1GPGD6jR_^mZChDG5e*;JXGa>al^s`>BZUA$=w7TbE0);Opnx^ z@ca8jkHZws7P@#}?QRgV;>;Lu?xkgmukDDilBi0px*A_QeQL+w_j8^Pq5D)W0ql9u-ebiWM5q+YT`~}bk8?W zV#v!m}SSW7F4v59ynRfb!C zenofbA7j=`6eGiM+|na}ImWQdGbVM*+{csG2~FlO+aBHDQ2WQ2<=s$+);hv9$ak0) z6n7GWtKf+1nIPBlzwf?|a`^Pen3ZfwHe)Gq4W!VBe>N-7sCl6RAd}t=5K38HW{-p=G{VB!(TDL% zW1?gGTR$W96JC%XfhEhT0OChz%Enw?yR%{8{NFe75EVry-BDe58DbM9iMn)3kyfEL zBW<%aS-&Dp^NXlD?l^rBQRrPt5A-hW*_lK|RrpP6cOtxmDgtTYfuMpbVFmVqa&y&`E)UkPJ8DpS)apO_1AS?fyKu$ zTVOLI@P?JRY3Cz%lsbg47^!bX7#WQ;Yko`S$TD3dZUoCODUSBE49hnNiVI1Uk<)V{ zzG<%#+B0_L`E730W+lYthe^tBi{8eEbdBYnM-i?IbC~RCG;)a@jf)duV?*Q+rTT82 zglv7EGx>Z+LZzJ!tp&atqfkie>!k&|Z$)XnNEA+@ibLNU?T+_(^!3~)K){B0pNS^fH}Ab zVFDz$6r2%RMIgBnLRQ6jnktUcaCRs@!lUNjVe|b^l@*#^QjElAR8iljH>GT@wtf!jNZM(~~^soK?W`}bpdY||) zE;kV%gLZx7m%5|od;ej*c?sDITIh?rCBPT*9)xKauFIsuu9QyoQ7@CVw@H+!ub|Ks zG7aJ$s6wCe$(S+mTJ15jMN7sj+*3AYu*7bEf>+|DyNpj?_v%#A6c*$uc#fkw8QtW_ z^xzwZW?3O#$VaP$AaK6V6W+Ag4uY`%P$Qn%*0=iRJ4|;oy;to?hn6hs>gzEd%>9da zUk3Idtx5}(tLeD;@6-(j8JA6V{!mSp2$OIq6qwj7dF|wJKcpy-y3HM#!lE9vmw<0@ z@ru88KM`l<(*qcwn{N}CuHZ)Z-y?CzyuWB>>zc));S?~F$jlG2m!EWV-1-#@*=l_Y z7q3jZDhFoWTH&b|vdlYjvD%gY#I*p=>zKjE>|Oos!pG;HM=tJRA=5jK>3`iQc!_TM zG4kpO!5i=+!CNj_Uip^zG#etM}o%KEAzk7Oq=2{_Rcu^*eSoVD|mYVzTS6 zZ>N{O&aLJvlqBYK<{bTg<*26-w6+KV@bFDSz_wZU)xM)|?j1o@ug2hj59QbaIVB}F zJs|P$)#)PuGyVPsPh2(dTDGQm186**t{0mAzJ+ffa4H)>!0Y)Q39*MqzAXkkl=kJR zr@PWJpgT^#DzVSS6bS=;gC1TY0!|^1mf6wHAv4@fJ&+lYrkE@flXx5;K|FPZEB8zfV1S-nFee~5+EIdvI?D?7zf&GVM#D2MGw zbP`DhI?GTVOA3({Dfh&*uua6(gnw)G=Hs&xYGYB2y( z@mDJd7di?y%oRl60bht=YXv!yi!`LF{it2nnV>CW;qlO>u}r0{;s}`>yFN8MSE|r1 z0)}UgJ7*}Ng`V$u@ctHy=jAgQT6!=?#V8oyA_kkdV}n3lscJQ($6k^<`mz+>a1dJt zSHGVsx@AlaH&PgplHiT4vk>VlvvC!#E4s2)#w8bW{72)|w@Q}FAlQ`*tYe{0R3JVu z6oNQj59^)WeQb1PUXJOc9U@R)Zo`^a<))*|#GDZ!9z$L87*=hqFYbcyi*6`5;s^gb zhBazAGGHk4)HV&9;6$K>;rdjLOJD);fM;u+-|t$@0U4W7;y-S$Ae9meMSvFzMfi?F z$q6v0M0gYK_PrF&HEK#JV*q)agU}VC^jkvc3pRE#_-&L7LmJPGfRkL}fKc@v18Xij zS%&~=^^^-T_#mYWNLJbkkru=x0SAp)5^AL2ZQ(#!yF@b?LYNf!@0~!vHX*)*JS8S2 z%B}w`N7@7E+dS_xadRixMYmej+*E4*E=PQ`VK(g{>G z*#ydti@wXI#82UOz_=Y%5XTmAl9YA{FAPZ-SP13DMcIi_H4>7HLrxZk)g<_u>f_F> zM^t=O{n2`&SVn#bP$sC9gMm1-taMpkg?FH8$a+0|7#ynvmrxds4E(eD$}59vO2R*k ziyqaWYZ}xQp?6Ag$Ec((2IVbm2IDII#N~0qEYt@v*K1CiaL~mZG5QE~*+VgS==+g<&gOx6s>5>p4Tbe|Vbt2vPN(K+zvE@th9l%DaE6%EI)O_LHj4s8#~l(_5}#x2T_#Q#!cl#pflT zlLDiPP*+6?rP5O5=yj-H4bC0Dl#o&aP1hP14T>q(BtVCOijPc{TU5Absp%egZSVbD9n+z{8h^IsV zld*h-$dDk0gP3?l08rP@Y8<_tJ9$aR*g2Ss<5Nl9z?E&Bd?&e$C-uaRI=r$}g{Jh^ z!@OFzQ~IVXOlT8vBQ@Z5InonB`h9@F7osPh9}B|W_0G-#qj7_P!nZ18HzBe!0c|lu znE=QSga*EV0O@fr=#;*W82kM8B|e~2 z-b-Mi8`56>K!8_}d0dVtt4EqYafQ$PZ4I<+4@3n^@fY3}J9j@_@x}=5@5ZoE;V~QE zYoXR|LfQK%d=g@qH=eq6bUCOs{1lSo2$hu%YPXvX*>l!T&6t8vy(O_{#hZuoGBY@y zxQ1cII4ksji)6EalR`>|^rG}v;)K05g=6!o=0wLDCsj35?MI`qrE8J6!#!4wJSu+*U4d%(%jQ%3|AzydD$89nK} zBP)?663SFEF^Yr6QhV9{vDrHMXMl&R`5#Mv;*vv?0}?g;I?zlxmVf+k2=)>uA;Ld;9+K z{o#8)pFhBHX54d}`+7Z|kH<4^do2eO3Lri`e&~3_tygYtLP1Q8u3rg%O#o47ZmJBU zcPTeh_eGnhVBd0y>t!KI+9-Ff^^M-K2Q=~>3ie6nz1+wxI}zwtBGQMpp^#7q7PNGU z41{?k*u2;yFrRbRR^9|9B&$3C^KzN3C-6}RFyhpfxpeD+VYxK6o;jj(`F0o*$` zhLD5tsLP$?NTMC;z^e! zm@EmH@Bm~|?3j~x6~DCLJAZyIagG+%$y^8C%Yzi%Y^Z`<78UfA^Z(*Cy{wQsLnf7|u^ z?e)KJrTXuB+~4(WdUtdGyTRIbx30e%e*W(6-*+oBHwEz8h?fb{q-#>l+ z{`ueca{Uie?jK%m`Y^r!!%XdmH`hPBd;a0W-wz7?kDuH>e%bW#+y0O9wI6?8|M>g) z$G?9+0*e)(hXS=(fjI!1vK06m3L;EtFDNLB=TtrB)Hly*9+;yZo71_MBEB|P8?s;i zdhRK<$8f>@{Q6G|53*EB@UZEGsW)C9yvDSrEWW% zXkiC%dS6^#?0+{2{M9TUB|wD=n|vhSTOP|78Iq|mO?{PqEsKi_;)3GpF!pljL6t%d|m0CRf_ zsfsR0zW05{M}Fc2St*;CDn(=D;BI=+*Kkpp9{GBIoojxi2j7|}vigB3tP*IgU zhj#bJYp=lYkM@Ou?EYkjcn#dMtt8(fkJXpvuQPOTxSvy8*o1|!p@YpGs~st*A>q&e z(rO5gwk}oc0ThUOpF>Gppwc4PX@R!X6Sl;{K$`6JK51mbrsxMBf5i(`K?VLr`%9Xg z=AQCPLz%im0C|>-r=V;x4Rselhki#X&I`{CZWb+rGc31QjW}0nnk6j;@_ub1J9?hQ+>eR3knO2WtaJ zp>nzVUKGO4`{41kv2zA$bBNPxFC{;_{&m}hnT-wH_s{Usq`22Jgbv#%xIWd}8G%=(e} zDQLOYg5H(iurce&p02}5k&f;rUaoVV*%(zrv{z_E-ccKrbk^xR*@tU5B|Cn*9p)|mKxY)w78)OzEzs!}l(Ba=)mQhkBkt|gDq7dA2 z^dn1$kxQSf@oe+8lcvRpy~v<7t34hj^$|ul##L^TT$th!iKvUAcg+`BA_4VzL3QG( z`YE0VB10Cs`9S%bHvIY4*cuz1`O;8M#WkTP^I~I+etcc0Kr0BLfTcs1UmY={er00x z!yTXt5otzz4Itcc-mf|_%;1C$m-{tjBJE?pR>Nr5kDkkW7b1n-#tjI z*?(^KB{gudp>+?kK6$VjM2lG=gA<){%AkJL4G4zC63$#Zar->h@464q zOep8&mD{DC&`->qOn!Z4EcTa8@{?&HBRo|1mE5dYM8fLT#&_pfoiDu!c3{o+j`TPk zdOHy@-HG33C}bs>Xw^w`mT#P5$+>r&K5p~8Yk$R>AJyC%t41o!tj3ksitACE8MU$5 zy#0T>c0N%{keqw67<9>SRS-OHBbW-;O3vqC#-6HIr7i~ z*mM*BoL2MA9YPtu?}eKK!&M*jUMF!e<<0%ahp~PxUV(*a zLmai}ZriO~4vL;xO|v%c!=?k-89v7CAL8}C{OB+IL{ZW+tmCg@M=$d8UT5f-bsljS z%`Wu$F9t91mj-!KVxtA8eqRh&XSs$pgBaCzi2?vUr4sFy2iUtp``EDFcx@=kDtDsU zcIXz+&&tzV_H{@Hqp(}0PQ3e@30x#SIGVHIwL%OZChun+*FM4oE)A-CmvnGc<|Vmk z3^!=!e#^kNDbV)iBr$GK2^@EM`QtZyqGdg~^*w5)@=%8*(Z^eFc)rg@M?&;}`trc$ z;W(zrm4;R1{v)T={Y@R@c^H&A>2~3akFU$fi*!}CvaFN=j`86%;R@0|YCw$3gID5o z<)^d01{9_)#mCG2A^TK}*NTt^&46Fvo;aY$Hqv02Mj z<<(&}%O_kMj6>^98Z$cX;|zJa3FZ%+yq_g(eD%|^VXGAXq{A=dDg|V!^733IQ^s#> z$!qkah&xq@TQqK~cM1cw-^wrx7QaOhapJs*54T%$E3agRcKaZ1!_*eFCZ}vYL<2P9 zZ8=?Ew7HRw(1)Q(!!cDOA9+5!r@%FL)*9v?DUXWCC&zO|+a08YP@vA=l{WZ6FB;Fr zc_yV%awKyS^wz-vMr;b&(7ntpYsH}*F*D@@_h~p!${>ZZ2K?xL&j=~ZWf=D6SyAPF zmP$`v>;+I1>J;^@ITmZDWH6im{h$wv=h<_g$k8LT{&Ai{sd3u`MP>fMe+%o5lc||+d7}f} zssmiLr#OG79vBu}X^uE{Y*db(k=De_e8Kt4N|GQ-jwUNg`B(c*6IJNpx3w2MeaSSd zQP?227O9>hmX_Km%sOATBFxXi#yT9|p*JZL zIAx>=mr^))hmBWZcv%k;e|w$w341|YOUaKo5v|w3%>j2VuT6SBS6-j&FnK|m%VQo# zyqwRqN$(~ku+QimXK9>HVBDSk@d~siinK)Ec(zIWzSW3iX)Y3#zG<I*p%@G(BabR01nJcTh5&lM+bog!o;EIp%D<8wgmuJ%Jl zzsW5&nvyQX1+aRuN<}COq9@`$gtaEiB8^pkWmPS!3O`bcBNfIM|MzTHL5CDmG(Mop$`#9lL_za zJ)y}xYC0xT<7GPT?)Z`4{I7GsYAx`ck3!qXc;PeyD@uY%We7;~kg-hH$Q&fWb|QJM8}9T9gb8U_ zI3+w8O2;OLVL~O4ri^!f4oUct`+cQ@&TlR16-XO4@`!CUq|mvDdRPFIFo^OL@-1<^ zdg+B&yPg7ba`^ql?eUNeo2N1^LDoqDmFx`5o&}q}ih}TR1QnA>&3%*!nn@744A5{K zxg#FKJ98wEi^7k4ok;DCwJ7j#&R&2MR2-OUu`5@23?Fq}WZdKZlvxs=oj!=6o9C-t zL7eCEY!%4$tlU&1Y^peSZFqS^s%>Brt`h-K=Ou}3v=R$J>TJ=AFu1e=3F7R+T6DB% zIvz~u>Rc_232G@IO^9#LMgA*i!HeT|6F)USq3EE!l*Hxam~crGd#cN2Rm$u@>q&iJmenhXZIa`EPo7zYW2KJ$wThuoKF2Q4B2UJARtLx*;|9 zqw_%d4M~$tOcKvhh;Dw{v6OxN;JeDueEx10b}1D>Ve%ax(n5) zh2V}Hb1Fg`uvsKVyq4t!iEce`RettGXv-920eKGQ0CoN-{PV+y&{?pdOy9)P{ zuO~-G5CQPKeV00mZ{Lya#YD#d*w7P&=XUqEf5H8Inyp5`+*OqziyoZ$ad`QlU|Sf^ zvfO78ldr`^Xmv;|X%|vDa*z}=n=iMkXHY+_n+l_s3WET}7C&5I&W8 zq(+nY$b*#f3gGsMW$Npp&O#q)UXt9N!YK^+a*G&owCXC>6fm6|4cgv=LS{CkN@Q8@iu5)q^1BH`mr04oBlu!USbKX;|?~UBRBCI)siMjTBjCFFnD5#PEWJf`{Ni5%F+yiU#RWD%l9+%_T)J2>Dj`}|C zof8tx5pLtzE5~!w+5JnY`bILu8$N$q4aO9Ay)x+W`D+!SS0FN-XQrB$Z4I*fjxh$Y zabbc`G06F{K@zE%^y~32b>XhQJZTE=dy*0?P>GKZ&6pWD&=7Huch&pZ_;EMHZZ_5u z0;pmea;vC1MJ!tW^guvG?^gnDT#!LSfo#NI9B+Y=mqg)p-r2at(&PE@iM(yOyW}}I zAz%~_dUjM+s{nQpk;@aFE&P5O7M+-rK8|*v15OQs6lNrC_8I+WWQgx$`$0hl3x($9 z?3GUl>Mu>B#ieOOVPBy;D=;f4qpwJQAKpLr4cQ3wpJTOSp6y%r<)YF0w8;32<9@Q- zm4>{%<^KuiHpx#;Xf&dh%@6&3|NQm)%P0Pj9y-cBo6MCJhYf1VKAJQ+KN!PcH0`ZW zD@9?kBZL**a>}E^bI0Tyu7F)6CgTDwA3_52_n9##00FI>1Z}p##aGPDeFT z)tLF&yW=s55{$qL61N>hq)zI`ZaGPBZ++IaO^l7C5>oHpP8Ii_WO zyQk9im!ZY|opdI^B__ZyCYML+XwZ?oGNMPv#bf-mMh~fD#;cPAc z0V3&23q}F@Y#5fzOYA`1j=-z_ojhVay?uL3L;OEQTyi`nP$yazG91D#8@Zu z`D_-X2r=AoDJ~Z%)1)2zYAkRx?gd!s0RO~Ce8Phm!&g$XTPk6qzh#%R5wu6AWX<|JF0NK+I z%8|qlWTfzz%g(q9M`o5s8*u4)j_=Ooy7JZkfu@)gCLv(I&~{>L+Po_o77NaUyW4$3 z+mm{aY+m*GLiAcz1o<}qy5P!A@qM!R({feinILs<%u>kaFm5>~47;$S4_Gir&i^o8 z_83;_BP^I8g^|6|oRHj@OQKgcnyW@^Kn!VOEr0VZFP>Z4aj5LB-Z=Tg@cVI#Uz8dh zz9Bc;N*fy^M{3ZYo~DtRDuA~v_hCo7~h zcr`gK!SnnKm$&Ck@l~_Mm~luulXo^#?})r!eVkma-5@sMuKb4E-lMvPf=xBOLWs4N z!ewWcz&VVM;MCnC>i$)HV{hifcp|_S=M%?A7}ddkElS89#u5HC(nx^H`eGUDzI&a!DbyrwKA$9Iyv>N$rk#ZtOjN~p4KAkb$0h!H`10@ox z281Mww@jpzx^oE+cWQ&v&bq<;`LMiR$GVT0# z2wM|ec{er;lL%pCAsW26%wrwj6Cr`){*MiU)AQFA1nn$r=(sxl{Cx3P1%_Kl6=#;1 zWfgHD8Z>%neOA8cX!))m2Wej`&euTjZt4dLjRQ!4^*@sG@&BydbCH7v4gCi-5%Ea| zGu0Op2O615o;gDDB9jumd^%B&;fd7WDrL2wx>LnSdo!F>j}WZ7d}@jAY0`!^mz8uz zN~-t3i0@x02;g?}LW{!MW1kIOJTrElqYF^ZI3_+Mu-6W?`@LC-uzG(kJmO?MFS|DC z^P6Y4FT-U@pe3o@v{=W;0aNR`ZNsOVBnu1FoSMH>V9C!A1nddnf64_^WJ<{Sb8R zN=A(vI^FBrxe03z{GrzigDE4e%Em@8lIfJ3{p>BQ-E+!BEJe6oo^Dc`^uiR=Ru6M} zmQ95nKd8681@KC~F>Cs0FU7A>78Zm4&ZJ#wObd#j0+YRJOQfMk;Z`WUCdd3#N0rgn z_yVgSB6f#Psc*R-%h;=A*IaI6pdhVZU#^pZ4ClJN_-E=#vdE+-y;rDU|{y(*9v{%Srof(z}j#QAVDG zfa*RZ$zevZSY?S~rqI#Y#_EIE?D1Dfe`2dz?_qxj(*%Nje6TM~%nI3HfT`AgyY9ue zJt_cHE-SE`+GxK*f3j(3wz4}zfKpMC7_G9O$IpK3x41ic({|@n7Nm~1vdkqI_@u6M z*=4Fo=%ikT8XQa$h0KSG_g`Wpch)tGU$`E&-yyIwmYS|`==Lz~vldl_(lkzo7l6UQ(?-3Qa zSI`y|eJazodMA}#mX~_zeLd06yC3!ZeJYmJqIl=n$42zx3a6-j4eq#&MU0U^Me~aj zyD(|GSB76?D506oy_D^lAv%s*%DA3wCtrUU3#^c*1)`Twx-XG~mONFER#RJhoIbY9 zNpJm{UUufg?Ve$@?OXQFeuPPpR&#>Ouq5N@wGIR3_~_}ynz3f;X9`f>#Ngbe!-Yt) zITr`D{QR9=-i-__x7xyZhIXm`d?fO-tdj3d|h$jreO#5%NnDOqQqk63;o7?wlP z(Cp?7Wa>?^W|>@LlrrGpqksrkL{?(Y$bmor8!_0ceOufIavt?){gj!0b!Ixi&p&DF zD1sa|&d0BzBd3b;a4Z_rWW=)&hlBX7KPOMR*5UU#Ahp)hfkAbX(`KsO=wz1fQ|_dI z)*5(_yA>C^MOK^=hEyM9R4rLXgRbF$OTi4HFu{K5+7Rv5Z_z>7)W6JAKa(?jblPnhXe<=Iyw$S1n+yUq=p zcwy?W{*7K*qcne~W}fiGd|iU481dkp0YQn4J{XfFvI!kk`#RpFY=Z0l@6xMmEA?z` zbVHwp<)@q5E~T1=2?reOY?YAgTh$8VLG%U*%E6egd$JOa|8f^l&b-E5$lqSq+o-FR z?wmOMXdIPLOUcnGv(6Zs$u&~vH1K=cElKf6Crt#RGHkSAU3d)P2~e2z+s2W&hfg>s zDM~EN)~+1S(WbPQ+wF7k`r10}GS3EK4>_UA+<#j_6oOaw`P9+C9<1or=%3Ph{pmUo zbqGQ(9vnjNcyZJ2oTpDL)Id?{2n{iFxOV4DAAXLZYpKrRZxMRy-4Y=Yf$5{Ie_PM( zM86CqO1qqiOmy(>DdJWxhLO{wCT$cfgD)HqQsQ~1n$Yk+YZha})bxaMpKqL~+yc4X z`8v{jo|u@W6&cQ2Tr;aCMj>A?klH2JtUoY1m1;?G)D1)gV#u%rajTvnU6iO z&73&EdP@Hn^)!jibhu($oUj#C<3qi8F%G2%AaDl`N|!xP!6Cks4nTd9;sY>A`QKMC zfR*#ECuK0Eut!yu6%>~Y1dau^8e4N&H1k*@R)|r!bO7@Cf7?kgFf!Q z7iX$6f3xpgE0I?7>-Y%yF8Uj#WP4exdfO1d(TV#gSYGY&RfTE&F1|SOo^$O8W*7;Y z6vw>l(Rob4paH;sg~#ug<_k`V`z#U42{HrLF?8mYJ3Ws3A55ZPJhfYu{J!kh@7E6Z zx9i^Z%zORAc0>b&PHj9yvfRr#ncXQE>KEUg$zA-dsoMVK z-q%*`S00b;pZ)Jbl-mOih~vnq7DV33N7RAQiM!vgFLYRoodMpFU>uQRki*{Ft-Yo` zjXgL$v%jS4Wpb5<6bCNe^+~-f^$5~TJqjJH<%c$1{c|LHr}gCsr(MM=$7zEB!7eKh zdR@Uqi7nYEZRo=6u6ujZKq9baJG1@IBO8??D3oCE=JE@+_{%4*e3zB{jcjVe?RAhV zTXHI*B^f!I9X$Qo>YN4CiPe8Um3#xicpvz$TuAMPqGGL?#;2lAJ1aV0Pv5)ow<7cy zqcKf;I~O>Ry`*3YwSX5W4ofiP!lD3ZYD9LN-n{s8+RYUug)xJY^2y5Al@;_kDwKk zZMjX1g9pPFN67RZL1u%72QQ2t+#%F%q1s$|eXx&J=vIoNOQHUb!fQe;IBh2z%(+J` z8VxIYlvy+`E_#ehKh;t6e7;CdEuLZ&zYHs$&Mcl07r*H!em7qHVZK;FE&0SK`4U$0 zEwf}^T=KJ{mIzlV!gq>@6C&~t5kW zf+V(<&d$SL7N#_j@o5<_E&~FY6l3SIRZ5E=wBk?*f-W<7bym4~Dx&cb&_|<;D~R_b zWhyjEudqBeU{Tsd!~~lHpYWT~*T-pBJW2spGQn9krGQR}Fss-*tLq*G2C_+;Cn|En z7m-DW0u{snXUaV(0z_2gYFF+vz`SKrIGtrApz=^>WfqToWCGYG161hiV}>eEg{zV2 zM|RN2+0NoLdBn$*qix&NKnlW&jjgqy6ifhVw4)?Ne7knFLsZqZ3E*B`6^VvH1t0C1 zs3sbqHf2>~yQ}Yp*W9i=q{|_XSWu4ERd{Zzkyq-13&AQR3X!#~ngrBLcGluOYty;4 zBs!tknbODs-c3{=?uTFNHJ36ewE-ZQLPVA3f48WTa45&kDC#20dOAfvyv}460ooEo zQkY)>Oqi6PYyt@~0_#c0IW)zk%BY<(B&uA)p?s$|pcBYoJyaQZal8j=(J=H#oo7jcgex;TLpx20yX}gcvOLrbBKRs!&E@<}j zsm=txWp&24n%pauBeALZ3p$mkhmE;SG1|+r3h_-ZE;e?kG#+_VcIZ@-MaAZ-6`RCw z5)#dtDs`G09Gees$cPX$2c2v_k&v--x;ZeWIqZJIx#^~_r<#Q;&ZIwT8h@2`X}9k6 zg6%g{^gyPHq^W=Gg}*)9z9f45hugNqbz7 z`gHfX=Xif{fwpR#$C!e!UviA_op$9`a%-wa-<5OW(=D;BN#Q-j$Ly2~ynq&bi|p2U z_fgu1=J>ai&~%E^DNQxVGoyF6=`uEMooLUmW=TrA?uALB9+bWnV|<;YCzK<<&;}yN@H6WFlXrpw`fV8aC-I zOj}BJUhqUFbZf>#2p9~WrIU1MYT~)Z=C_Q!%al?c5VzYQGgwBBQ^*As8i%4a3}Cc& zrP?p>fPOAqw$ob*U;oH3uuqT!I(8!)FyR?Jvp4dggVeTvkghT} z=IOYaeI0(DLpm)pDX>LGNSvxT!0n@F6nmW9CV|6JWtDO)j+?ps^WxR(RO2pOOKnxc z%P)J3sln0aR0EQx0zs$s*wdB%Ky8eeqDvlP^}DHWxRp3(f& zuPKO%3UaDeZ!jNa(!1!ToH)c(%4cFMB^|`E{{Ec^lnifUOIoGXJFtM_tBYNnhH5)wZc>kANjW4DN(?EFNB~)1*Zf8cF~a=VgLD){ z35Jy)DsZwck3(^`ZjE@n!XU}0r~TJr*uxUMz*K(2L7)@w{cgKo0opHOr*$xKUJr@I zTP*$9w~De5W?%I+I^Q(d}R%VyWeBoZAE5XrJbS{c5fA6#88x#1?P{*x~J#MYwSuWv(K_F~c41wjo>`*oeoH;}; z1`xpU^9QRYemn*Ax!9Lw2asLp&643+CbR#_TsjKE%JW*a- z{8a_y(UqFHgi*=t114xEc^rB7V&Tq&^9|cJ*1S<W0$EE-s_pN+No zBpbgE4+R=T0BC;OH6%2W?7KFV_)U(vb+C7ta&esP#3(&@2^-}=b9I4?j9;p+f$?`a zZgugOfQ6#za+hHlHi-jz%0PWOYU$0a76aU08o~0guj7ATZwujpj>#y1ub|)@MI<>F*WsgFaNgvh-pe3sPBuumucD>;pGPIzp7BC~sg0*!k< z|58NyZGbESO;lj+y^hGIvp3%R@wjmhNAp5fJSbQ{uvoO$xJGFY7o0_u>Nu87=K?PI0?M0x!1hq?o?WElskpe&pLMp}lFC^t6xBV#XH7{9*OoD1% zC+c~1`@1#uvQoXLi)fxA+T8ty+#|kU`%Y%bnKaKb-y(hA|3^}WHs2?b+7wlnx_wo3 z?9*Ny8?w>_#pfft$_e@$!%JjIaRpP?Z^qVyi z-?u-%wr}CcQ~BKsyB^v(gCS@^o`Fwh%ch#gN3QvRc5BhKk-v6+cy{eT9_!RI$JA%L zXH^}CZsBxXGu4lbL><1)!RbH69NWCG|L>na9uIp+>$lfWALX`mn<%5I86XVcu?)!j zM`ovZe8sP&|FnCOUeY2ikh5fPFjqVE#6%r>k)Cl6mh{*luF}Ue?6$Y=jy_xeMUGc# zNYA}f#{rF=Pl$XK%c0msFyyzjh+^E!^|v^EqHTqh$CV&x%k!xI99(TY1#1|~jdo3Z z6mT5+)zH-znawcE+P(-t@O+1>?2Vo=!+u7dAzUd1$v`z#MkWeQW ze4HVZzV&EEvkH>`OZC-1?cTFtMEI8g7%^P+{_|>oawf!PZ_agG7hbi&XK|Fd*t0-| z7;uVVi=rf~i^?;(6jro7gnumIB@Tgd`kiAc^DH`fX+z@K7%Se+o8i-{_J_i;dbaxG zUpA!O^S%6F2n_giFR>+ME0p@+CU)g2QV)2^?9aO;*Xd3xokUG5qo9Z>0<(ygr8m?#EMQ!@-B`0OZm+Vx zYf8UXTvy7#;yl;XA+yt6skfI7xTf84dfkz+B8XLddFMTx(A)~kxR>shal<+<;kJ$?H6?ziU$ z-1oe{{QCNyk2hfL-rRuMjlG}m`Frg9Iu>_h-}nFWJof*1efq}!UmpiN4*dE4`o;k= zLh+vhU{L@JY%}+y1rrCaB1~cI;~XK`=~0E|^~l+KEsweWraa-qvw5TxX%&BDVfFQ~R!eM>H)RA-g;vc4DysY>n^%9Uupa%gVu@A z@2W#bH|DyYv&E}1I7`b$H&PDM4rXo4R$os8RE3Hh%@%2?sG7-TJNsil^aD>i1Pmyc zr#?7>bz=6IDLWSj$JhCv+r3fGVuE?;UA?}1f!eR3NJmuy2Dl3wyO%Y4lA~VQaSmor z+E|!t*FQDT{wxxp-9CA|=B3;b7)KPtCc~OHZVVDQ(P|q~*g~qwtq=P#C(DrZ>)9vs&z_w4s!kB7C8~l`id)HT5aqN?8S~ z!(58tWa+rn&92*%lA4jfJ3d-lES4raTnRqv&OYkYvI4wrTO6yt#dFnsK_FX)7j_|C z#~1?2fXAc6HEn2d$F%R|aBlw-3{PVl_FYaW!+{0FrD(vf6gx6|{J zc+4=MN=3;XcGlF`#xxm*=LE` zp@!VqlA>|;Pb|U3ip(~z3*8y2w{6eCz9HE<{YRNT8e}F)ez#Z8a4`Ah45Q2#$IM;l znw;>T2?4Lpq2@(yr|nwl%|m(VqyzUisZ%2f9~9twjR7OgU~=r1FD}Sa27pvP5&OKp?j2ZhYpu#R958qmV^ww^ zA}@s0ga({-zOq0AT9>Wr+GCNunwi4)f}!16PLJ*`z22efZVF1g5ueqVs~MM#w5jtn zcr$0_L1b1eI=QjLo(A;tjZ~E4z0|y9`3V~flr$gPRjc^>o35DAsbhZ(Dx~MQDPFAB z-+r#{)!Xi6Pq*k#P!PDSa{U19I<<8-?SxdT*-BGUewYHT<3{D9SSuuF>SI>_^$~nL zw4pyleNa0mWs~39ZlKLNF#SXwJ`2iLr7jYmz0oT#)0i852j79N^+agN`>@}hrn&SP z97G4MoOs$TcZn9%{4*ocLYIoSe$v>m!9agXjMnt|mHeLjCFb&^lKZ*I!ccaV<3N|E zccLVBA#@z6XFVhBor(N-s-P<7a(=cGd?k_~j8ZZXl?CFBEI=QxCygv=qtm{s!BsW^0ElkrPp{NNUFiRk1Bp}bCy zHi?c7%XJ+w5MZbiue)Yxn}T;%AucrN$mbIX9C`J51%%n#>}A_xOJ0k!l&v2q%v>DN z_GBwfB{5c@dp#Z1eLeP4-=&*Y*snV~Hcxkwp6-4afgty-L7<|K#o*Vm3txi0;GD_c z$vMOCMyG}m`P}rSUp}CW_R=UD(oc5zp8Ij9g8nvd7wuNFA+%0!neN(osp^zGJejy) z-`_G;6y3zwb!c)xrG9meSs1z4V{P{v=@{`fdIVwQ;#iZu-u1=#6jJhV1BDNspWV); zz`JaN)$!p&duDh6^OHqUd&9BJkHom722g8vP4-qpi|jhupDqnUo`R9U%`V(sccclA zi_eX&gLx*`u~Kzxr&8r)7mp%@U2pLnf+QO6K>|UX0%2fH8K-UHJ`ckL^8nuPLF(6) z2A49S72$a?VFJwH^0(0SXDm;xFrkIHXW6WQ(VLdUFoACvDuIF}yPnm1N(zjJwljtQ zC0hxQk%uUdR4I5oQdf5 zJ|Qu4AN44*5*nG~EE@S3RxYMPVD>IIA`EtJ(J0Q$^7{sW1dL`oCe)!E7=V%3SqBb= zvJvNz*fbh%(XGCQ_#(cj?2{D^d!MJ?!pj}M9z)GtDFjiE>)$MQKBSE^LMzwmC#3SW0uN6Pz1VF=Kt{qDKNvt#!kac<1?4ncO5gLdt|c&DQk{nI?&FXYz;1- zXr8@agbC=mslJ=ROTVyLfh39%!>J`LUf_nG;KM`9lmMqay^FUrVzP009^sf@he16S zPZKh?8qCX>;q&UQHyOJhayD^S!=`cg$`B%a%N0G5k_BbCcjFR~C9hzce{t%-w{4in zcwiL`6Z!&^)tpbGs;Lbc$JQZH62JA4oqZjwxppPl=dE$Olp4i<`=sla9lM)Crnz(-h{ol?*3Tu>YzF-wySW7?!?F#i4B`yX}s)m{&t<-Zf}fUw3ON5z>xv-YSQ(8q`-d z38s-3j^((W9$8#&j@&PTZIg&akpE&X-*fDmkeA6kEES*ZnJ;+66~X05v)y?SxX!m>q2SbQA77i4@m%LYi4JBWLriiGU@Bk zfO1-;-&7|TOt*l>=9Y1{arS;+QmE?Uxi zZ0+i$?*Ti7fRl>ZN9=r}SoeJbgzLY-BFv{5cSeWhBDt?JM=4>jZRyB_x9=zzkG}F| z+%WXs$^y6-dng#n-34HM2E#RBLwGu*LPgSYJa#VN*-zM zk#%6Uh(RiqxA!P%dO3v6p<&tin|EVZNTG$LDWHzT+3p8s6M#)N_udqSCQxMPwBYMQ zl75YoA+QZmW-Tp$8uN@sN{0McdC_4AA`G0fUGy6-**E5_3`1M%Upob9|bKR zY|8uz2+)jvCVatIv2ROG3`yRZ46N>$KsWL#PYgZcD$i5-YQns%8D_n3Z2n>u5e>n# z>5=y4xs#pexfCNhe_^S)AVDHX;GhUAr@lAgUF2A}T}`C{l`BE&O`gRg1pH*e8Pq*A z6d)-+pKC)nLImbjQf9JMDVvY}#v98K8Z#)EQ-&MhDB+9wCOk=@7Tb}7mw^-}Pm@)2 z)D^Utak0^cyieUaWm09F3@rmHY7!8-@uWID_+5M>kukXH$YN?CN_I^U9+vB?$X?0< zDe)>9F);&T0Tp`X{I#lC2sJfhZo8DPLa7nMx{SYo#2J;SQ;YWnV^V0|@nUrNAgEVf zCduT%{ApHWaY50mYf7HBOP2XC?wZlTman}&GkJ-WYrkacj8!2M4${-SG=-KI4mmG` zKlacP!OXVX(*CHcog`#t?s=r(kr$u+(Ap4qeWd3?qTcbuma8aXF760gi8&TNVzYZj z5Ua?sHs^ud{@90A`r52ppRzT`YO7u#>;|#frrF+_#@^~;Uuj-y{AlX~>&4^t+*wRA zTM*chV+Y&~{WFV^IU9DNDs47T@Wa0A_$|?Fyp~y-p#Ujt-b=lQMq=L5%-ppMm{iZ> zaxuS21yK2`)=m-@ms8y=a0vsEY?sAS;N=>di1&?eDNs}<){A11aoZY`!CL~i7I5g` z@rDrKgeGYm{zNtQ%`45<)2N5->aejZfVcG5z?C9wW6mxLT8;AGg3-Li(J;9(i)TpZ zm8<0i)V=?8r3%YMQS)RUxa4&nE~@#)Mu8 zNcPx<36udub4&_stz`g=_l-+n3cmw|4vXm(m1&ZjVL7NBw4&+d*p2Xt>J@n|l$_E< z=#S0sNpGO_`vNoop0@nzCY#ywT)v?Q*iFZhg{${3O1c>E(c?#MqB&MQEn&?Qf(h$Q zOc>gdfz;sgbg-dmU5Js}(^-^k=i?u*MG>$vB`vA`at^bUeXuR`6Nb)XH=-A|%HP_#VpO<@!Ncm5_?(P7ft%#~ zgH#~*vo3Ws+Y3O*uL8zWzHD9I2VI{LtHOz+MM*P!)p_{+KgIuYgSi1z;=cXQsUage z=wjZS*n##EB4>?93P!6a#BO!YRO(UQclMwWo5zymrpn#3x3{ZmW?T)<-|B3u@#BGs zxHo~tUH2m;V$Y_YA6s{Z&m$9+-0Rt>*cCyOyD)Msa5c8Z_UnE=e}X+s00?)lLZ;XgOr(X@E*bmuxFJR z%(+w>OB`ZYNE;llRUlX?+{tq?SkNllCFL=yu45vZIgz*uCy|!z!lmA-UAxccCe2{% z(giC4d5`@X8_Xx4YuRocIh?SZ;=D}ChO8rFulXIy+VkBh2kx)v&pKtk>uBr7Z42|q zus`dylun-i8rvJ1SUumw`FRREsILmGU}jrb1~uU>H=X`j(!?|^;O`wDojz-LZuPVC z$13saxW{YqqHludzy2(d)pf4llV3Xj;~GR&VCEl5GgaA5B{5fT?8&wrSr*^wHigQF z-)z-*u`%_wvR^qc(!<;Q+Iz)N;2#2&=Jw%{*4fX+C$ zHmp5F!cP?xy!M*7A6FTMf)jrAI)0vFnjvzcu^|s{CD_=JkgK^4;pNBv*_* z8&OCgjE{q>&6_h5?T!ogIvVeKb?=Xty3newKZP5;F>qBcWmDM(UR2mx0{!n{&Ynp0 z0ony7fJ1RR1tAI~2@qRJe$pinDZP%XwDRz`~z;gal2ivJ)if- z{mzz3>92-yI_}`z;1U0ZS|naQhQ<7%H(aJ}pD~D*>W>I@or}z7z8KuAF%9q7@$ReP zXsy-uiT31gMh_Ysv%h|L_ie4Dkz{QHxLtzSgsKEdXs!lccx|Vhi#b*a9+y+*`R0UN zA}zlvem%gMH^l>}_`ckc|Y|df!rOZd-kNM7h~~NooQ+RI{x_Z^jhZUit1hY<|A)H&o|GD ztMly@mE5h|3Yrq$50`g9>oQ)8j#jTFX6@9p>7iue*6);;akAx1yUF=D#}#sbyB5XI z_DN$EKzM(-5HwAi?YVnUGG#TJIP@-C6W9vM7^#nBaRr7^^tD=i+ow7D6%OyI>VXJ% z>k8Zc5Q!_nWrbafx2DYv+dqy89@8{M11E}qLpXHfdw@@g4yLQoLvQsvVG#)r`IKW+ zm)v&Us9xDt=x)B^v{TQ4wUzqm z^I(&6PmInSOSxfkHix*T&+Y*vxDVwcUoBg7aXWoQ>$RXniJSR z@X_x_z;tffJxl9x4px-dEtHw5*Zzodp63J=Kms(mgd5-tx!!6%qPlp^Hq5_v3*{RQ zWO@9o8Yq>+C5p@+%|WaK?DWb2x40$Z+zCu2|NeUeb+iAdOBZ^yKO@}xgrz#T*5gmE zD)h#eQ!l!FaVMxf74WgqOxK6D52iZk9_MfW=d?V2$zcmtd-gd^?Pr-=i5$^sZtyt6 zd7LLVRFsLcO>U))U!Le$b@}7q|LRO~@iGi&agyEm4;*LjXSOHdq9xW$S)B2pR0pcm zDty0U%}hR9p4bZ@of^5JegxbLt!Ai-gB0p!+)uo>1l8{5H~2#e;RXVv55og< ziDIibArjbygn6LB`DalA&ssu9I|i2TCL~a0H*^)NTL*3S0!m-OGfpWJSl8vI32T^B z>}(w}H*M8J$UIuI=m>vlzB+NQs_JB`=M)_NKW1I-FSG6l{NI>$Y%EJU7qpRe^N)MZ zS3a7k?c}0JhtA_gS@SD|9Clp%;8BVkwAQE7h=T=ONqPV|f9#lLK1R#8t985?yVeMj zV6w(CX}nE(B=lVtFO8WsubX#l5U>gx@#8F=l=ciZV0iz`3~WD>&>Odo0OZJ1JRP8 zoSw^|{a46Ujg8FIU2KfnyGDwo&T9_zVXbmr@l<#c*jPN4DtXQwD9(YXeThlH**syM zQQM_3Y}_2EWy2KP$uxNoq}Ci^P~KfUhq03K^DFFbj&$@Pwwg~%%NU-=Br*Q)jb0xn znq-fegy1X(RiD{d<82S_u&?9#|ALEiz#FO}izQC*9RLxZ{Py_B>(IN-?d@!ilBc`Z zAkN$%U7&rSvE#nutI_x&m{#jMgA+B5q}ZK<&XLKd<31WbuvG~omRK#tuSEug5lo+0D3DP(M_E&`0jN2!lSAwy`gNDi+J zWf^@Ezu4S`u>3Yy30$_3Fm;G@_?N)W*Z#o}K&t318%{GHd4-^KcN7Bn9Y2)r?D2OWe+u9Gua)ilVRMS(~T&O@C3s29@j=g>K*@ zS{g{8l9CY4-`FzRaJ8=ap1`mFy$Xg76%CZ>AZMp$rUQ+#92}I-u^6t!#YFk$m z&QmnH$s~gI_tG+_dEi6sINRPOBsMy5p#VeHOn0A(*!X8q9;4hDpz7BVa{5fg(OAZe z-JCLi?Fwzd&(06tQ2)-_bMd}`Zr)hVn6<5s0Q?7GJ*F8$Vh<{jJ^pbg?(A9^m7pbl zzn2MVDsE0sDfz{U(PD}lmX;gxUCB#RcF(zxK&D-(4*Kl!e&Z0s&sO@Of7EvL1O4o8 zYyT-Or>DL$QJa8CX$Sks><97K6j|zl?ARO!XAT61>CB_t193@Q7o_Z z&JGJYsK*fNlOaC%4AJ%VdHOlEBw&+Z#G^PyioMm1u@;gu2_|vncS?x{c~bmj zZ6Ud98X_vVP#W*1b#qu$oWX*rcQE?VRg$JuGkrXKagDaBT1~N2qmmRreP9AG1A?w2 zy;koLhr-)19j`6T8QgPqWW>Tz3Ne%nfVVcKSwfg9Q(CFi?g=v<>DLx%i2W#QEJ%l| zm|rtOHM=eGb7M_#cn*&k!VvEke@eYwmgJUu1$BTlp#Yw>D4ntMI5aIrdag{^hjd}& zn2b6%o5}<$CNB(hA9qB6YI_WAUm0)}?S97Ay?-5QC6dQwY-`Eya0J`XQcc)&|aBIHjh1-((0RVf_Z6`V#sh zPeq=u@T|s6{gBI18Ry`snjqVs_f$B#3U8?K5OWUGYd^?ENek8IM?6*GqVALbS*^EZ z-YNXU1~%PDVmQ|N`-JH#q}jmMU~|L{7kmfsG1A;`nz>zA9CkO$!*VKTzni^*ryBRxe7a97 zkNQ#(;Lh>#k`cWxR^@-b(g?q7-1=Xxt>enqHb_zE4vMi9s*z{l7`!~5+9t!a`sZWL z+OSo>1tBFRVUVx|h>v`FSyn`XN=(5~!Sk~to~}t zpS!bTzHpsHa(Ntmr2~2|r*<~L^hRmOZ0`amiU!I&BYdP>1DEr~_65Ov?nL7ifteYZ za3%g&Zi&-?&11`AxMtj{0bOFwPtD6;|G7!$j`z}H)xM;cWoHx_Yml(2w&(enls=VqM7{u98~8X*w}Iv@^nYZa`f&#Sjd#Hxws!qGRv~o{1O@Z%lf!L#aR}du1Ct19$0(DB)6B2NZXqi&HhZbxV^^eh zwX#N!q`^jLhtkawPO`h9$}tk&A(=RWGaH=@waf36V9c6`CwNmDbvS(eI4z+c*8*N=MR?Y0=Ny{#Q-5>|<}(G=^4r}rz# z6L2|2@qp#3nQTyZL0f_OPe|xq*R0z2P~$wuuGU5xjNhH{-xYZ868pJzblUcsiisRvIRdsmPPAbdToM=}_EHq5a3B4?n?${Bji5sKIV;)T5H&o zIe8lKTAA$xw_>*g3A=Xj?M(?P(+9M-x%P6R!0Ps|>Qq*wWM=G=(&lzFG~NuXv>K zzTbt0hdz^~(}u@9)oPif#{`s>MUHGT;1Jd+`@lPQ10lY}Ri{HJmTyh6)#H#A&j~$O zZRoLVQM_@?BxXm$6ZBY{-v+h=X)J(QOIv)q~`=QQYqYg+h zCn>lm65Iq6vc2zstI_(#O4Yb<+yX~F4_JGLmNb6tVAsN4ZDWf^dXQxXUXKzk+zq=s z0o9g3quHqanGA$5W9gbkmx}sb`d-rs`2&CnnZ%=!`1s3e2pJCS^O75(N4`<255prW zp+vFOsCe)7sx;ZcrtC^p0wqr>K_ME$HX8Hese+ujowt}7MjVI_4Ne2#p$RNU8azk} zO(5ekY|_IcQX4Jzeh1^PGyw;^d$Cln6b4oZ0dpzbhXcRyNI(Rie_P+k{SwI`WP8HU zyLQvL7lf!(!=e)_#YhO^4n<*#f?^RM#(>L@alztaC!-NwwTJ`eq`Oh5EgtaT zDfng)uq?x8k_l(d#?@G+zPB$2nf2s3AX8f3G zN{3DGy)p!X0F8fpNbOji*rEJWI%*DqcZsypFsbPthn}D)OsGIjrSQ$nNWm*4fpf6$ z*zuE8;x>XpL1aOM(R$b_G;N-N#fpjU(vX|Sa3P{h;ko0oce~rpBJ`QHL~0E{1{KHn z>m~_a6kAUUtb)0Dj|o|-b`o9Jc*ad-Q$k`g$WbzFgQo-}N?yfXI;O5kd*#FqLp7={ zfH1)KQ6RMVC|x=nPQWZz<3HX#rvB>`MV+xV9paN{iX&{f)9PdnreB#j(0fT>WLY}4 zxci#8Ku#@Z#?=gZ4(r8}8&RP2a!XV0+lZF1+|#Iu4BHay^dK>~CAvNV`jWFgi`f{F zdxqufjt-M&SmOKu*z42L!HEvCxCR4Qa&q0-T#UNuB>Eafq2wJ311RFY1sV|1I$81u zyU&)bK5gCl1h5gweFt!yE{Hdw$%O#+OyHo(5L6R`U+gLzK|)>G+}?gnB40oOZtnq| zs{%)nLp9T)j0WgMwsqH?x3na}2-pxr3687HhAs7aie|oDM3vVbY>oj zlE7Eh;9e9MJ-7}h4I6uU;YA9;90D; SH3e5!!dP9!lGuhgqzb?q4+RVoxnVIo> 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 z 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�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 F{|gy?nL+>n literal 0 HcmV?d00001 From c039f66cbe735836e9c4cef0a539fc6672f15954 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 15 Mar 2023 17:46:49 +0100 Subject: [PATCH 182/511] chore: fixing spelling and making value happy Signed-off-by: blam --- .github/vale/Vocab/Backstage/accept.txt | 3 +++ microsite/blog/2023-03-15-backstage-turns-3.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 63fa474115..82c6251d12 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -158,6 +158,7 @@ img incentivised Indal indexable +ingestors inlined inlinehilite integrator's @@ -367,6 +368,7 @@ templaters Templaters TFRecord theia +threenager thumbsup todo todos @@ -403,6 +405,7 @@ validator validators varchar VMware +Vodafone VPCs VSCode Wayfair diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.md index 6e0f99d2e9..d0ee9c9efe 100644 --- a/microsite/blog/2023-03-15-backstage-turns-3.md +++ b/microsite/blog/2023-03-15-backstage-turns-3.md @@ -17,7 +17,7 @@ Happy birthday, Backstage! Three years ago, Spotify released its homegrown devel It's cliché at this point — because we’ve said it a million times — but no one could have predicted what came next. -In three short years, Backstage has grown to a Cloud Native Computing Foundation Incubating project, with more than 900 adopters and 1,500 contributors worldwide. Companies like CVS Health, Siemens, LinkedIn, REI, Vodafone, and Lego are building out their own developer portals from the Backstage framework and bringing their learnings to the project +In three short years, Backstage has grown to a Cloud Native Computing Foundation Incubating project, with more than 900 adopters and 1000+ contributors worldwide. Companies like CVS Health, Siemens, LinkedIn, REI, Vodafone, and Lego are building out their own developer portals from the Backstage framework and bringing their learnings to the project A few more stats we love to see (mainly coming from the [project repo](https://github.com/backstage/backstage)): From d197f9f7827c4cb0df79a83a177211495e337ec7 Mon Sep 17 00:00:00 2001 From: Miguel Alexandre Date: Wed, 15 Mar 2023 17:43:01 +0100 Subject: [PATCH 183/511] Include suggested changes Signed-off-by: Miguel Alexandre --- plugins/tech-insights/api-report.md | 2 ++ plugins/tech-insights/src/api/types.ts | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/tech-insights/api-report.md b/plugins/tech-insights/api-report.md index 83509e1673..47aa8bbbea 100644 --- a/plugins/tech-insights/api-report.md +++ b/plugins/tech-insights/api-report.md @@ -27,6 +27,8 @@ export type Check = { name: string; description: string; factIds: string[]; + successMetadata?: Record; + failureMetadata?: Record; }; // @public diff --git a/plugins/tech-insights/src/api/types.ts b/plugins/tech-insights/src/api/types.ts index aa073dcbc4..b08f63ecc2 100644 --- a/plugins/tech-insights/src/api/types.ts +++ b/plugins/tech-insights/src/api/types.ts @@ -57,13 +57,13 @@ export type Check = { * Metadata to be returned in case a check has been successfully evaluated * Can contain links, description texts or other actionable items */ - successMetadata?: Record; + successMetadata?: Record; /** * Metadata to be returned in case a check evaluation has ended in failure * Can contain links, description texts or other actionable items */ - failureMetadata?: Record; + failureMetadata?: Record; }; /** From 196a4aa7e789318a62f23f42d1cc941c7ae42346 Mon Sep 17 00:00:00 2001 From: Miguel Alexandre Date: Wed, 15 Mar 2023 17:43:14 +0100 Subject: [PATCH 184/511] Generate api-report Signed-off-by: Miguel Alexandre --- .changeset/lazy-monkeys-worry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/lazy-monkeys-worry.md b/.changeset/lazy-monkeys-worry.md index 2c7e2ba4a2..9dc3ea514e 100644 --- a/.changeset/lazy-monkeys-worry.md +++ b/.changeset/lazy-monkeys-worry.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-tech-insights': minor +'@backstage/plugin-tech-insights': patch --- -The Check class now includes the failureMetadata and successMetadata as returned by the runChecks call. +The `Check` type now optionally includes the `failureMetadata` and `successMetadata` as returned by the `runChecks` call. From 9e2714b0d7e86fca9079e2ef48f6b555ec142ece Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 23:18:53 +0530 Subject: [PATCH 185/511] yaml prettier run Signed-off-by: Abhay-soni-developer --- microsite/data/plugins/microsoft-calendar.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index 80844d7096..374ffd60ba 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -1,4 +1,3 @@ ---- title: Microsoft Calendar author: StatusNeo authorUrl: https://statusneo.com/ From 6eca8337720012160c514e73de53f09ca6bb585c Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 15 Mar 2023 23:35:17 +0530 Subject: [PATCH 186/511] yaml prettier run Signed-off-by: Abhay-soni-developer --- microsite/data/plugins/microsoft-calendar.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index 374ffd60ba..c2c2552568 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -7,10 +7,10 @@ description: | It displays all your calendars and events in it. documentation: https://statusneo.com/23392-2 iconUrl: /img/outlook-statusneo.png -npmPackageName: "@backstage/plugin-microsoft-calendar" +npmPackageName: '@backstage/plugin-microsoft-calendar' tags: - Microsoft - calendar - StatusNeo - Management -addedDate: "2023-03-15" +addedDate: '2023-03-15' From 57c1b4752fa9b3302600c1b505e945a15b2e1cb0 Mon Sep 17 00:00:00 2001 From: Juan Pablo Garcia Ripa Date: Wed, 15 Mar 2023 22:49:27 +0100 Subject: [PATCH 187/511] add support to "exist_key" filters Signed-off-by: Juan Pablo Garcia Ripa --- .changeset/fair-roses-stare.md | 14 +++ .../software-templates/writing-templates.md | 14 +++ plugins/scaffolder/api-report.md | 72 +++++++++++++-- .../fields/EntityPicker/EntityPicker.test.tsx | 66 +++++++++++--- .../fields/EntityPicker/EntityPicker.tsx | 87 +++++++++++++++++-- .../components/fields/EntityPicker/schema.ts | 12 ++- 6 files changed, 238 insertions(+), 27 deletions(-) create mode 100644 .changeset/fair-roses-stare.md diff --git a/.changeset/fair-roses-stare.md b/.changeset/fair-roses-stare.md new file mode 100644 index 0000000000..358765e092 --- /dev/null +++ b/.changeset/fair-roses-stare.md @@ -0,0 +1,14 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Allow use of `{ exists: true }` value inside filters to filter entities that has that key. + +this example will filter all entities that has the annotation `someAnnotation` set to any value. + +```yaml +ui:options: + catalogFilter: + kind: Group + metadata.annotations.someAnnotation: { exists: true } +``` diff --git a/docs/features/software-templates/writing-templates.md b/docs/features/software-templates/writing-templates.md index a272f05f3f..15e6a833cc 100644 --- a/docs/features/software-templates/writing-templates.md +++ b/docs/features/software-templates/writing-templates.md @@ -472,6 +472,20 @@ owner: kind: [Group, User] ``` +#### `catalogFilter` + +The `catalogFilter` allow you to filter the list entities using any of the [catalog api filters](https://backstage.io/docs/features/software-catalog/software-catalog-api#filtering): + +For example, if you want to show users in the `default` namespace, and groups with the `github.com/team-slug` annotation, you can do the following: + +```yaml +catalogFilter: + - kind: [User] + metadata.namespace: default + - kind: [Group] + metadata.annotations.github.com/team-slug: { exists: true } +``` + ## `spec.steps` - `Action[]` The `steps` is an array of the things that you want to happen part of this diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 6b8d6d345f..d03b27c810 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -80,8 +80,22 @@ export const EntityPickerFieldExtension: FieldExtensionComponent_2< allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; catalogFilter?: - | Record - | Record[] + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] | undefined; } >; @@ -95,8 +109,22 @@ export const EntityPickerFieldSchema: FieldSchema< allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; catalogFilter?: - | Record - | Record[] + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] | undefined; } >; @@ -212,8 +240,22 @@ export const OwnerPickerFieldExtension: FieldExtensionComponent_2< allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; catalogFilter?: - | Record - | Record[] + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] | undefined; } >; @@ -226,8 +268,22 @@ export const OwnerPickerFieldSchema: FieldSchema< allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; catalogFilter?: - | Record - | Record[] + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + > + | Record< + string, + | string + | string[] + | { + exists?: boolean | undefined; + } + >[] | undefined; } >; diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 3cc45e6412..937ff7d07a 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { EntityFilterQuery } from '@backstage/catalog-client'; +import { CATALOG_FILTER_EXISTS } from '@backstage/catalog-client'; import { Entity } from '@backstage/catalog-model'; import { CatalogApi, catalogApiRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; @@ -22,6 +22,7 @@ import { FieldProps } from '@rjsf/core'; import { fireEvent } from '@testing-library/react'; import React from 'react'; import { EntityPicker } from './EntityPicker'; +import { EntityPickerProps } from './schema'; const makeEntity = (kind: string, namespace: string, name: string): Entity => ({ apiVersion: 'backstage.io/v1beta1', @@ -34,15 +35,7 @@ describe('', () => { const onChange = jest.fn(); const schema = {}; const required = false; - let uiSchema: { - 'ui:options': { - allowedKinds?: string[]; - defaultKind?: string; - allowArbitraryValues?: boolean; - defaultNamespace?: string | false; - catalogFilter?: EntityFilterQuery; - }; - }; + let uiSchema: EntityPickerProps['uiSchema']; const rawErrors: string[] = []; const formData = undefined; @@ -192,6 +185,59 @@ describe('', () => { ], }); }); + it('allow single top level filter', async () => { + uiSchema = { + 'ui:options': { + catalogFilter: { + kind: ['Group'], + 'metadata.name': 'test-entity', + }, + }, + }; + + catalogApi.getEntities.mockResolvedValue({ items: entities }); + + await renderInTestApp( + + + , + ); + + expect(catalogApi.getEntities).toHaveBeenCalledWith({ + filter: { + kind: ['Group'], + 'metadata.name': 'test-entity', + }, + }); + }); + + it('search for entitities containing an specific key', async () => { + const uiSchemaWithBoolean = { + 'ui:options': { + catalogFilter: [ + { + kind: ['User'], + 'metadata.annotation.some/anotation': { exists: true }, + }, + ], + }, + }; + + await renderInTestApp( + + + , + ); + + expect(catalogApi.getEntities).toHaveBeenCalledWith({ + filter: [ + { + kind: ['User'], + 'metadata.annotation.some/anotation': CATALOG_FILTER_EXISTS, + }, + ], + }); + }); }); describe('catalogFilter should take precedence over allowedKinds', () => { diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 48d6453ab9..aeb4a52f77 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { type EntityFilterQuery } from '@backstage/catalog-client'; +import { + type EntityFilterQuery, + CATALOG_FILTER_EXISTS, +} from '@backstage/catalog-client'; import { Entity, parseEntityRef, @@ -31,7 +34,12 @@ import Autocomplete, { } from '@material-ui/lab/Autocomplete'; import React, { useCallback, useEffect } from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { EntityPickerProps } from './schema'; +import { + EntityPickerFilterQueryValue, + EntityPickerProps, + EntityPickerUiOptions, + EntityPickerFilterQuery, +} from './schema'; export { EntityPickerSchema } from './schema'; @@ -51,12 +59,7 @@ export const EntityPicker = (props: EntityPickerProps) => { formData, idSchema, } = props; - const allowedKinds = uiSchema['ui:options']?.allowedKinds; - - const catalogFilter: EntityFilterQuery | undefined = - uiSchema['ui:options']?.catalogFilter || - (allowedKinds && { kind: allowedKinds }); - + const catalogFilter = buildCatalogFilter(uiSchema); const defaultKind = uiSchema['ui:options']?.defaultKind; const defaultNamespace = uiSchema['ui:options']?.defaultNamespace || undefined; @@ -167,3 +170,71 @@ export const EntityPicker = (props: EntityPickerProps) => { ); }; + +/** + * Converts a especial `{exists: true}` value to the `CATALOG_FILTER_EXISTS` symbol. + * + * @param value - The value to convert. + * @returns The converted value. + */ +function convertOpsValues( + value: Exclude>, +): string | symbol { + if (typeof value === 'object' && value.exists) { + return CATALOG_FILTER_EXISTS; + } + return value?.toString(); +} + +/** + * Converts schema filters to entity filter query, replacing `{exists:true}` values + * with the constant `CATALOG_FILTER_EXISTS`. + * + * @param schemaFilters - An object containing schema filters with keys as filter names + * and values as filter values. + * @returns An object with the same keys as the input object, but with `{exists:true}` values + * transformed to `CATALOG_FILTER_EXISTS` symbol. + */ +function convertSchemaFiltersToQuery( + schemaFilters: EntityPickerFilterQuery, +): Exclude> { + const query: EntityFilterQuery = {}; + + for (const [key, value] of Object.entries(schemaFilters)) { + if (Array.isArray(value)) { + query[key] = value; + } else { + query[key] = convertOpsValues(value); + } + } + + return query; +} + +/** + * Builds an `EntityFilterQuery` based on the `uiSchema` passed in. + * If `catalogFilter` is specified in the `uiSchema`, it is converted to a `EntityFilterQuery`. + * If `allowedKinds` is specified in the `uiSchema` will support the legacy `allowedKinds` option. + * + * @param uiSchema The `uiSchema` of an `EntityPicker` component. + * @returns An `EntityFilterQuery` based on the `uiSchema`, or `undefined` if `catalogFilter` is not specified in the `uiSchema`. + */ +function buildCatalogFilter( + uiSchema: EntityPickerProps['uiSchema'], +): EntityFilterQuery | undefined { + const allowedKinds = uiSchema['ui:options']?.allowedKinds; + + const catalogFilter: EntityPickerUiOptions['catalogFilter'] | undefined = + uiSchema['ui:options']?.catalogFilter || + (allowedKinds && { kind: allowedKinds }); + + if (!catalogFilter) { + return undefined; + } + + if (Array.isArray(catalogFilter)) { + return catalogFilter.map(convertSchemaFiltersToQuery); + } + + return convertSchemaFiltersToQuery(catalogFilter); +} diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts b/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts index f83dfbf817..eb1bba364b 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts +++ b/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts @@ -20,7 +20,10 @@ import { makeFieldSchemaFromZod } from '../utils'; * @public */ export const entityQueryFilterExpressionSchema = z.record( - z.string().or(z.array(z.string())), + z + .string() + .or(z.object({ exists: z.boolean().optional() })) + .or(z.array(z.string())), ); /** @@ -74,3 +77,10 @@ export type EntityPickerUiOptions = export type EntityPickerProps = typeof EntityPickerFieldSchema.type; export const EntityPickerSchema = EntityPickerFieldSchema.schema; + +export type EntityPickerFilterQuery = z.TypeOf< + typeof entityQueryFilterExpressionSchema +>; + +export type EntityPickerFilterQueryValue = + EntityPickerFilterQuery[keyof EntityPickerFilterQuery]; From 2a2298f9c65562460b3c1ba86fc7df704c81541d Mon Sep 17 00:00:00 2001 From: Carlos Esteban Lopez Date: Wed, 15 Mar 2023 19:54:36 -0500 Subject: [PATCH 188/511] feat(microsite): Add diagonal lines & small theme improvements to microsite Signed-off-by: Carlos Esteban Lopez --- microsite/docusaurus.config.js | 2 +- .../bannerSection/bannerSection.module.scss | 36 +++++++++++++++++++ .../bannerSection/bannerSection.tsx | 6 ++++ .../bannerSectionGrid.module.scss | 4 +-- microsite/src/pages/community/index.tsx | 8 ++--- microsite/src/pages/demos/index.tsx | 2 ++ microsite/src/pages/home/_home.tsx | 28 +++++++-------- microsite/src/pages/home/home.module.scss | 6 ++-- .../customTheme.scss} | 0 microsite/src/theme/variables.scss | 2 ++ 10 files changed, 70 insertions(+), 24 deletions(-) rename microsite/src/{css/customTheme.css => theme/customTheme.scss} (100%) create mode 100644 microsite/src/theme/variables.scss diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index b7d8453e21..2e5c6f6251 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -55,7 +55,7 @@ module.exports = { path: 'blog', }, theme: { - customCss: 'src/css/customTheme.css', + customCss: 'src/theme/customTheme.scss', }, gtag: { trackingID: 'G-KSEVGGNCJW', diff --git a/microsite/src/components/bannerSection/bannerSection.module.scss b/microsite/src/components/bannerSection/bannerSection.module.scss index 2beabf9738..64f4967d11 100644 --- a/microsite/src/components/bannerSection/bannerSection.module.scss +++ b/microsite/src/components/bannerSection/bannerSection.module.scss @@ -1,5 +1,41 @@ +@use 'src/theme/variables'; + .bannerSection { + --diagonalBorderHeight: 40px; + display: block; + background: var(--ifm-background-color); + + @media (min-width: variables.$desktopUpBreakpoint) { + --diagonalBorderHeight: 80px; + } + + &:global(:is(.diagonalBorder, .diagonalBottomBorder)) { + padding-bottom: var(--diagonalBorderHeight); + + & + section { + margin-top: calc(var(--diagonalBorderHeight) * -1); + padding-top: var(--diagonalBorderHeight); + } + } + + &:global(.diagonalBorder) { + clip-path: polygon( + 0 var(--diagonalBorderHeight), + 100% 0, + 100% calc(100% - var(--diagonalBorderHeight)), + 0 100% + ); + } + + &:global(.diagonalBottomBorder) { + clip-path: polygon( + 0 0, + 100% 0, + 100% calc(100% - var(--diagonalBorderHeight)), + 0 100% + ); + } &:global(.greyBackground) { background: linear-gradient(90.49deg, #121212 15.36%, #282828 70.44%); diff --git a/microsite/src/components/bannerSection/bannerSection.tsx b/microsite/src/components/bannerSection/bannerSection.tsx index 64c8d246c8..5dc99eecf0 100644 --- a/microsite/src/components/bannerSection/bannerSection.tsx +++ b/microsite/src/components/bannerSection/bannerSection.tsx @@ -6,6 +6,8 @@ import bannerStyles from './bannerSection.module.scss'; export type IBannerSectionProps = PropsWithChildren<{ className?: string; greyBackground?: boolean; + diagonalBorder?: boolean; + diagonalBottomBorder?: boolean; greenGradientBackground?: boolean; greenBottomGradientBackground?: boolean; greenCallToActionGradientBackground?: boolean; @@ -15,6 +17,8 @@ export const BannerSection = ({ children, className, greyBackground = false, + diagonalBorder = false, + diagonalBottomBorder = false, greenGradientBackground = false, greenBottomGradientBackground = false, greenCallToActionGradientBackground = false, @@ -22,6 +26,8 @@ export const BannerSection = ({

{ return (
- + { - + @@ -199,7 +199,7 @@ const Community = () => { - + Community initiatives} > @@ -223,7 +223,7 @@ const Community = () => { - + Trainings and Certifications diff --git a/microsite/src/pages/demos/index.tsx b/microsite/src/pages/demos/index.tsx index 2ca77e5c89..1221c38a63 100644 --- a/microsite/src/pages/demos/index.tsx +++ b/microsite/src/pages/demos/index.tsx @@ -167,6 +167,8 @@ const Demos = () => { {demoItems.map((demoItem, index) => ( 0 && index < demoItems.length - 1} greyBackground={index % 2 === 0} className={demosStyles.banner} > diff --git a/microsite/src/pages/home/_home.tsx b/microsite/src/pages/home/_home.tsx index ea22062d28..deb0d4cd6f 100644 --- a/microsite/src/pages/home/_home.tsx +++ b/microsite/src/pages/home/_home.tsx @@ -28,7 +28,7 @@ const HomePage = () => { return (
- + { - + { - +
{
- +

Learn more about the software catalog

@@ -196,7 +196,7 @@ const HomePage = () => {
- +
{
- +

Build your own software templates

@@ -260,7 +260,7 @@ const HomePage = () => {
- +
{
- +

Learn more about TechDocs

@@ -320,7 +320,7 @@ const HomePage = () => {
- +
{
- +

Learn more about Backstage Search

@@ -381,7 +381,7 @@ const HomePage = () => {
- + { - +

Learn more about the K8s plugin

@@ -437,7 +437,7 @@ const HomePage = () => {
- +
{
- +

Build a plugin

diff --git a/microsite/src/pages/home/home.module.scss b/microsite/src/pages/home/home.module.scss index 57f2b9acde..5877f7b5f5 100644 --- a/microsite/src/pages/home/home.module.scss +++ b/microsite/src/pages/home/home.module.scss @@ -1,4 +1,4 @@ -$desktopUpBreakpoint: 997px; +@use '../../theme/variables.scss'; .homePage { font-size: 1.25rem; @@ -70,7 +70,7 @@ $desktopUpBreakpoint: 997px; } .catalogContainer { - @media (min-width: $desktopUpBreakpoint) { + @media (min-width: variables.$desktopUpBreakpoint) { grid-template-columns: repeat(4, 1fr); picture { @@ -85,7 +85,7 @@ $desktopUpBreakpoint: 997px; } .softwareTemplatesContainer { - @media (min-width: $desktopUpBreakpoint) { + @media (min-width: variables.$desktopUpBreakpoint) { grid: repeat(2, auto) / repeat(4, 1fr); picture { diff --git a/microsite/src/css/customTheme.css b/microsite/src/theme/customTheme.scss similarity index 100% rename from microsite/src/css/customTheme.css rename to microsite/src/theme/customTheme.scss diff --git a/microsite/src/theme/variables.scss b/microsite/src/theme/variables.scss new file mode 100644 index 0000000000..3d74e59c9c --- /dev/null +++ b/microsite/src/theme/variables.scss @@ -0,0 +1,2 @@ +$xlUpBreakpoint: 1441px; +$desktopUpBreakpoint: 997px; From 1d704bc5e130b05141f8eb8df89a006fbff6c608 Mon Sep 17 00:00:00 2001 From: Waleed Malik Date: Thu, 16 Mar 2023 12:47:38 +0500 Subject: [PATCH 189/511] Remove traces of k8s.gcr.io Signed-off-by: Waleed Malik --- .../kubernetes-backend/examples/dice-roller/metrics-server.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/kubernetes-backend/examples/dice-roller/metrics-server.yaml b/plugins/kubernetes-backend/examples/dice-roller/metrics-server.yaml index 673064aaf2..06875a5cf1 100644 --- a/plugins/kubernetes-backend/examples/dice-roller/metrics-server.yaml +++ b/plugins/kubernetes-backend/examples/dice-roller/metrics-server.yaml @@ -82,7 +82,7 @@ spec: emptyDir: {} containers: - name: metrics-server - image: k8s.gcr.io/metrics-server-amd64:v0.3.1 + image: registry.k8s.io/metrics-server-amd64:v0.3.1 args: - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP From e47e69eadf03c4c61d56f41f6654a22a08f300a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 08:58:22 +0000 Subject: [PATCH 190/511] fix(deps): replace apollo graphql packages with @apollo/server ^4.0.0 Signed-off-by: Renovate Bot --- .changeset/renovate-c574b04.md | 6 + plugins/catalog-graphql/package.json | 2 +- plugins/graphql-backend/package.json | 4 +- yarn.lock | 522 ++++++++++----------------- 4 files changed, 196 insertions(+), 338 deletions(-) create mode 100644 .changeset/renovate-c574b04.md diff --git a/.changeset/renovate-c574b04.md b/.changeset/renovate-c574b04.md new file mode 100644 index 0000000000..e409c71940 --- /dev/null +++ b/.changeset/renovate-c574b04.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-graphql': patch +'@backstage/plugin-graphql-backend': patch +--- + +Updated dependency `@apollo/server` to `^4.0.0`. diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 274828db86..5116d89067 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -37,7 +37,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/types": "workspace:^", - "apollo-server": "^3.0.0", + "@apollo/server": "^4.0.0", "graphql": "^16.0.0", "graphql-modules": "^2.0.0", "graphql-tag": "^2.11.0", diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 10e3f6eca6..7cd2b54117 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -38,8 +38,8 @@ "@backstage/plugin-catalog-graphql": "workspace:^", "@graphql-tools/schema": "^9.0.0", "@types/express": "^4.17.6", - "apollo-server": "^3.0.0", - "apollo-server-express": "^3.0.0", + "@apollo/server": "^4.0.0", + "@apollo/server": "^4.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", "graphql": "^16.0.0", diff --git a/yarn.lock b/yarn.lock index d6e118f364..60b6bb89a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,6 +33,15 @@ __metadata: languageName: node linkType: hard +"@apollo/cache-control-types@npm:^1.0.2": + version: 1.0.2 + resolution: "@apollo/cache-control-types@npm:1.0.2" + peerDependencies: + graphql: 14.x || 15.x || 16.x + checksum: 1e00c57b45fbd8656c96cdcd254658f332c1955bd8db9274c665e1c6ef8ac881a6b6a3f953b60638ae5f59fdfce6b005adb9a5b945b694903579a9665499e823 + languageName: node + linkType: hard + "@apollo/explorer@npm:^2.0.0": version: 2.0.2 resolution: "@apollo/explorer@npm:2.0.2" @@ -57,9 +66,9 @@ __metadata: languageName: node linkType: hard -"@apollo/protobufjs@npm:1.2.6": - version: 1.2.6 - resolution: "@apollo/protobufjs@npm:1.2.6" +"@apollo/protobufjs@npm:1.2.7": + version: 1.2.7 + resolution: "@apollo/protobufjs@npm:1.2.7" dependencies: "@protobufjs/aspromise": ^1.1.2 "@protobufjs/base64": ^1.1.2 @@ -72,110 +81,181 @@ __metadata: "@protobufjs/pool": ^1.1.0 "@protobufjs/utf8": ^1.1.0 "@types/long": ^4.0.0 - "@types/node": ^10.1.0 long: ^4.0.0 bin: apollo-pbjs: bin/pbjs apollo-pbts: bin/pbts - checksum: 1410e94f87f7ce202491f2c45633ddea0590f5279bd3eaaeb25aa114345d09a5041f15d79b75e5915b23813dc71ec52e71fc1fda858fee21dead890dcb768416 + checksum: e01a33984ae06d6679f6796bb44e55260112ddd090ebc9f87d3f952c45153dd5df5c91ac4bf91ba60fb72ff8c1218059ce4bf8bb2eb08c5049c783de0098eec0 languageName: node linkType: hard -"@apollo/utils.dropunuseddefinitions@npm:^1.1.0": +"@apollo/server-gateway-interface@npm:^1.1.0": version: 1.1.0 - resolution: "@apollo/utils.dropunuseddefinitions@npm:1.1.0" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: b66e07086ea65bcb94d84cfd5e6d90d0406c4e7f602c9a5e793c2001273380a4f61c287f60ee1d81d47d49d3a62ef3f0afb8049243540d3021ff445869124094 - languageName: node - linkType: hard - -"@apollo/utils.keyvaluecache@npm:^1.0.1": - version: 1.0.1 - resolution: "@apollo/utils.keyvaluecache@npm:1.0.1" + resolution: "@apollo/server-gateway-interface@npm:1.1.0" dependencies: - "@apollo/utils.logger": ^1.0.0 + "@apollo/usage-reporting-protobuf": ^4.0.0 + "@apollo/utils.fetcher": ^2.0.0 + "@apollo/utils.keyvaluecache": ^2.1.0 + "@apollo/utils.logger": ^2.0.0 + peerDependencies: + graphql: 14.x || 15.x || 16.x + checksum: 0ad0b3b9dfb53cc664245acac638b3a3db0d56c496c8bf6c56928a92c21e9b3062bec47bd42c2c0f85a4469443467b245c772bb558c2733c1c0dde194722c82b + languageName: node + linkType: hard + +"@apollo/server@npm:^4.0.0": + version: 4.5.0 + resolution: "@apollo/server@npm:4.5.0" + dependencies: + "@apollo/cache-control-types": ^1.0.2 + "@apollo/server-gateway-interface": ^1.1.0 + "@apollo/usage-reporting-protobuf": ^4.1.0 + "@apollo/utils.createhash": ^2.0.0 + "@apollo/utils.fetcher": ^2.0.0 + "@apollo/utils.isnodelike": ^2.0.0 + "@apollo/utils.keyvaluecache": ^2.1.0 + "@apollo/utils.logger": ^2.0.0 + "@apollo/utils.usagereporting": ^2.0.0 + "@apollo/utils.withrequired": ^2.0.0 + "@graphql-tools/schema": ^9.0.0 + "@josephg/resolvable": ^1.0.0 + "@types/express": ^4.17.13 + "@types/express-serve-static-core": ^4.17.30 + "@types/node-fetch": ^2.6.1 + async-retry: ^1.2.1 + body-parser: ^1.20.0 + cors: ^2.8.5 + express: ^4.17.1 + loglevel: ^1.6.8 lru-cache: ^7.10.1 - checksum: 1a5dbd2eae0575905e25d471430d431d145b767ee6f5e8efe3ba64ed44208db131f437e36cf17df6623ae6de97a87c4c8691b4a274510b52ab49f6afe9627a3b + negotiator: ^0.6.3 + node-abort-controller: ^3.1.1 + node-fetch: ^2.6.7 + uuid: ^9.0.0 + whatwg-mimetype: ^3.0.0 + peerDependencies: + graphql: ^16.6.0 + checksum: 193b5f6913c945aafb8fc6b5b75fcfff250e5b84dc2727f6a0472b304da08a6cd90a21ae45591e6408e9413e8bee323bbf4c9586b511a4f426b562da5328e4d0 languageName: node linkType: hard -"@apollo/utils.logger@npm:^1.0.0": - version: 1.0.0 - resolution: "@apollo/utils.logger@npm:1.0.0" - checksum: 9be2b269d6d1cf2235c7b49a5edbb36c87589facf79516521df66d0c782709b7301a1365693b6e15d77f482d231bbb0fea4c2ae42faac7068cc4e014ce338c68 +"@apollo/usage-reporting-protobuf@npm:^4.0.0, @apollo/usage-reporting-protobuf@npm:^4.1.0": + version: 4.1.0 + resolution: "@apollo/usage-reporting-protobuf@npm:4.1.0" + dependencies: + "@apollo/protobufjs": 1.2.7 + checksum: 442532d7077a728a499de6c2c2340d106b26f14695446361f947a14d3092e4109239a86cfb99e4bb795d913523c1f61a05bb799b45fc72615560693bbd62e645 languageName: node linkType: hard -"@apollo/utils.printwithreducedwhitespace@npm:^1.1.0": - version: 1.1.0 - resolution: "@apollo/utils.printwithreducedwhitespace@npm:1.1.0" +"@apollo/utils.createhash@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.createhash@npm:2.0.0" + dependencies: + "@apollo/utils.isnodelike": ^2.0.0 + sha.js: ^2.4.11 + checksum: 467558891f22b05293ca2d9c04fb4815d8b13e9e03cac6f6f5eb752d06f00eb46a3f237c93250d83d53753326c289899b177f3147cd368079b7e74098392b1b7 + languageName: node + linkType: hard + +"@apollo/utils.dropunuseddefinitions@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.dropunuseddefinitions@npm:2.0.0" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 86536751681c64f35a2d37b0c2f69a39d91ea0e4f0c3c993d9f76fa109f85e9d306e6994bd6e38eef1e4e5b83245125aaa125ecc94e185d90b3255f06a538503 + checksum: aaabd487ce25b56488f6bbf6606aecdc2b1f57805ec1b7fa16e21510947d4d5b4b1d557ebaa499dfecb8dfaef4058b696812feed6896bac5d7fb52e9bb1e1b2c languageName: node linkType: hard -"@apollo/utils.removealiases@npm:1.0.0": - version: 1.0.0 - resolution: "@apollo/utils.removealiases@npm:1.0.0" +"@apollo/utils.fetcher@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.fetcher@npm:2.0.0" + checksum: e9f4b696f496751d1b781836f394608115ae1fab673cb30ede223748d04eb983384b5c9e01f8350bb0530d841fd0ccb41be3a3a4bcae0a141b2478862add29cc + languageName: node + linkType: hard + +"@apollo/utils.isnodelike@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.isnodelike@npm:2.0.0" + checksum: 436853000037c955e7112d19b60ca82e6d453e7bc715f3360ab23384fe1153039b06f9329e85e1adb030a1b22f0b9e960b28a5ccd92f7c61a1af57e58401a1aa + languageName: node + linkType: hard + +"@apollo/utils.keyvaluecache@npm:^2.1.0": + version: 2.1.0 + resolution: "@apollo/utils.keyvaluecache@npm:2.1.0" + dependencies: + "@apollo/utils.logger": ^2.0.0 + lru-cache: ^7.14.1 + checksum: 1e1c9cdea98384c01864250bd8e39cffaa822adbd60f9387ecf5c6565f69c2fd23b3ebdc499990b39535d4df0e3991fe73ec2d59a2798631ede04d8834d8c384 + languageName: node + linkType: hard + +"@apollo/utils.logger@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.logger@npm:2.0.0" + checksum: bfe87036382adaf1b5f05acc8e926b6316a8b37dc0c0b20ae0c2010b61085d018620203eda9cb6884e650f3d971a4dfdbc30980deedba99d219ba2abd9bd8ffa + languageName: node + linkType: hard + +"@apollo/utils.printwithreducedwhitespace@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.printwithreducedwhitespace@npm:2.0.0" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: fda30ad4ee1fbf012e4289b9963b8b75a102eadbdfa5e558dc923cfc68df42eff6e232dc20c34b7e7563e5aac7ae3781d17919cd8f5eccb90c4225a274b2af93 + checksum: 0e1d374f2e0afd2d0fd31ff1c6717476b4ddeb642981d8f731a44420137f4991a28c1f9e278abf4229bb3174ae68037736e8cd8e13de5e316bf384dc32246518 languageName: node linkType: hard -"@apollo/utils.sortast@npm:^1.1.0": - version: 1.1.0 - resolution: "@apollo/utils.sortast@npm:1.1.0" +"@apollo/utils.removealiases@npm:2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.removealiases@npm:2.0.0" + peerDependencies: + graphql: 14.x || 15.x || 16.x + checksum: 4f97e5864353386b8326eb62dd923be19c7e1f6b7ddc0935ceac1e34462aa471908d015f223f47a9cdd819e2d844f9dbdd27800bb451f5ffb4f376c4da8d2c41 + languageName: node + linkType: hard + +"@apollo/utils.sortast@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.sortast@npm:2.0.0" dependencies: lodash.sortby: ^4.7.0 peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 5ec695d8c91efd82ad75cb3e27662644c71e22be71793908135b38965be6fe1f229c24fd2f4fed1bc1829b84bec2a1f6470817a83c633d95292db7635a625471 + checksum: 50cfbdb6b8af735e9786af225edd6d4350e7530f5109bc330ae7f32edf38f15eed7711184d133a0801c5673fbc9a988a6521c7f69f3dc27910f2bd9fb6fbbb22 languageName: node linkType: hard -"@apollo/utils.stripsensitiveliterals@npm:^1.2.0": - version: 1.2.0 - resolution: "@apollo/utils.stripsensitiveliterals@npm:1.2.0" +"@apollo/utils.stripsensitiveliterals@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.stripsensitiveliterals@npm:2.0.0" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 5910186a30be23fac59652d350e83a8a7a53adb9146ed545906f6893ad9c8d380752e679348ee210ae01fa39cc0487692b632e960003dcedc2282bd28de2aa01 + checksum: d0a740a6d1e525b72c7d7066fa87a4ee273b3ce7401f3578542278121819bf90c97d32227270e07c923ab205afee2b52afb03261865175ba0040666a8988d479 languageName: node linkType: hard -"@apollo/utils.usagereporting@npm:^1.0.0": - version: 1.0.0 - resolution: "@apollo/utils.usagereporting@npm:1.0.0" +"@apollo/utils.usagereporting@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.usagereporting@npm:2.0.0" dependencies: - "@apollo/utils.dropunuseddefinitions": ^1.1.0 - "@apollo/utils.printwithreducedwhitespace": ^1.1.0 - "@apollo/utils.removealiases": 1.0.0 - "@apollo/utils.sortast": ^1.1.0 - "@apollo/utils.stripsensitiveliterals": ^1.2.0 - apollo-reporting-protobuf: ^3.3.1 + "@apollo/usage-reporting-protobuf": ^4.0.0 + "@apollo/utils.dropunuseddefinitions": ^2.0.0 + "@apollo/utils.printwithreducedwhitespace": ^2.0.0 + "@apollo/utils.removealiases": 2.0.0 + "@apollo/utils.sortast": ^2.0.0 + "@apollo/utils.stripsensitiveliterals": ^2.0.0 peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 9f4d1b8381fc7930619c51ce96580e61e604455e01701de9c822245d3a7583553a0cc4c050450ddf80d8e556682b2ac79ed784c58a8b98b52cf097d344c5d1d8 + checksum: 599e44d236728d6e57953c6fb9372cc35bc5e8e0d572b951907c94683228c134662efef4e97e456e7655d2871215319b912cabc3662c799111b5265de7873880 languageName: node linkType: hard -"@apollographql/apollo-tools@npm:^0.5.3": - version: 0.5.3 - resolution: "@apollographql/apollo-tools@npm:0.5.3" - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - checksum: 652f16f8ae4afb65a2cb62a47e46882f49368f8f2c115f421773c3f8aa47b466ab9a6758fc18138495bd010baea5fda05d3c313edd11c4f4b3e8f8783b54d5a2 - languageName: node - linkType: hard - -"@apollographql/graphql-playground-html@npm:1.6.29": - version: 1.6.29 - resolution: "@apollographql/graphql-playground-html@npm:1.6.29" - dependencies: - xss: ^1.0.8 - checksum: 32984ae225de572f3fe286409553884e4d252a35019abfd5bd6ef40f52173ba810fd0a4d23915e727425cd993fd178115e6a2557315789085e235114228dfe4a +"@apollo/utils.withrequired@npm:^2.0.0": + version: 2.0.0 + resolution: "@apollo/utils.withrequired@npm:2.0.0" + checksum: 144cef2859318879b3478693eb891c31afa75f30e807bdfbef98ec3aa93c74cb0a3f76d245dbdedd4954f52c1b9ec8bebbccc69eb5d8bb8109c88c4352225e24 languageName: node linkType: hard @@ -5222,6 +5302,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql" dependencies: + "@apollo/server": ^4.0.0 "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -5232,7 +5313,6 @@ __metadata: "@graphql-codegen/typescript": ^3.0.0 "@graphql-codegen/typescript-resolvers": ^3.0.0 "@graphql-tools/schema": ^9.0.0 - apollo-server: ^3.0.0 graphql: ^16.0.0 graphql-modules: ^2.0.0 graphql-tag: ^2.11.0 @@ -6438,6 +6518,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-graphql-backend@workspace:plugins/graphql-backend" dependencies: + "@apollo/server": ^4.0.0 "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -6445,8 +6526,6 @@ __metadata: "@graphql-tools/schema": ^9.0.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 - apollo-server: ^3.0.0 - apollo-server-express: ^3.0.0 express: ^4.17.1 express-promise-router: ^4.1.0 graphql: ^16.0.0 @@ -10346,18 +10425,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.2.10": - version: 8.2.10 - resolution: "@graphql-tools/merge@npm:8.2.10" - dependencies: - "@graphql-tools/utils": 8.6.9 - tslib: ~2.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 7059d9f68cfb9b7c04d6024f528e5638fab165e681b3307877a6bad0fc461686595d19375350875bb5f4f7572b21d10272a1e4b08a8af5b6a67950a4a950012b - languageName: node - linkType: hard - "@graphql-tools/merge@npm:8.3.1": version: 8.3.1 resolution: "@graphql-tools/merge@npm:8.3.1" @@ -10406,20 +10473,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/mock@npm:^8.1.2": - version: 8.6.8 - resolution: "@graphql-tools/mock@npm:8.6.8" - dependencies: - "@graphql-tools/schema": 8.3.10 - "@graphql-tools/utils": 8.6.9 - fast-json-stable-stringify: ^2.1.0 - tslib: ~2.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 594abfbb7766806e07910624d80e5c27cdf15e0b2d1a0eff4336b2d6c63bde3587ae6f7c889374217cb0893d8e9e87f696daf1cf1ce2fdae787dae22b8b4d228 - languageName: node - linkType: hard - "@graphql-tools/optimize@npm:^1.3.0": version: 1.3.0 resolution: "@graphql-tools/optimize@npm:1.3.0" @@ -10473,21 +10526,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:8.3.10": - version: 8.3.10 - resolution: "@graphql-tools/schema@npm:8.3.10" - dependencies: - "@graphql-tools/merge": 8.2.10 - "@graphql-tools/utils": 8.6.9 - tslib: ~2.3.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 8b225f4ae87d3f1d8d9772df605a27dfde069a2372f2af0a1459859c4310c5fef8243c1276c1959e316420f1584d739b9f52c55dd230d2ad177cde1019155b81 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:8.5.1, @graphql-tools/schema@npm:^8.0.0, @graphql-tools/schema@npm:^8.3.1": +"@graphql-tools/schema@npm:8.5.1, @graphql-tools/schema@npm:^8.3.1": version: 8.5.1 resolution: "@graphql-tools/schema@npm:8.5.1" dependencies: @@ -10566,17 +10605,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:8.6.9": - version: 8.6.9 - resolution: "@graphql-tools/utils@npm:8.6.9" - dependencies: - tslib: ~2.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 73b9569a9c2409f86a6a9005f19026cfab6d136bf884dfbff436996a47fb0561ae24d3f6bb2abcfd600197aab85d6dfc177b9a0cbaba23905ba0c7591ef12110 - languageName: node - linkType: hard - "@graphql-tools/utils@npm:8.8.0": version: 8.8.0 resolution: "@graphql-tools/utils@npm:8.8.0" @@ -13982,15 +14010,6 @@ __metadata: languageName: node linkType: hard -"@types/accepts@npm:^1.3.5": - version: 1.3.5 - resolution: "@types/accepts@npm:1.3.5" - dependencies: - "@types/node": "*" - checksum: 590b7580570534a640510c071e09074cf63b5958b237a728f94322567350aea4d239f8a9d897a12b15c856b992ee4d7907e9812bb079886af2c00714e7fb3f60 - languageName: node - linkType: hard - "@types/ansi-regex@npm:^5.0.0": version: 5.0.0 resolution: "@types/ansi-regex@npm:5.0.0" @@ -14089,7 +14108,7 @@ __metadata: languageName: node linkType: hard -"@types/body-parser@npm:*, @types/body-parser@npm:1.19.2, @types/body-parser@npm:^1.19.0": +"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.0": version: 1.19.2 resolution: "@types/body-parser@npm:1.19.2" dependencies: @@ -14260,13 +14279,6 @@ __metadata: languageName: node linkType: hard -"@types/cors@npm:2.8.12": - version: 2.8.12 - resolution: "@types/cors@npm:2.8.12" - checksum: 8c45f112c7d1d2d831b4b266f2e6ed33a1887a35dcbfe2a18b28370751fababb7cd045e745ef84a523c33a25932678097bf79afaa367c6cb3fa0daa7a6438257 - languageName: node - linkType: hard - "@types/cors@npm:^2.8.6": version: 2.8.13 resolution: "@types/cors@npm:2.8.13" @@ -14522,7 +14534,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.5": version: 4.17.33 resolution: "@types/express-serve-static-core@npm:4.17.33" dependencies: @@ -14533,17 +14545,6 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:4.17.31": - version: 4.17.31 - resolution: "@types/express-serve-static-core@npm:4.17.31" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df - languageName: node - linkType: hard - "@types/express-session@npm:^1.17.2": version: 1.17.6 resolution: "@types/express-session@npm:1.17.6" @@ -14575,18 +14576,6 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:4.17.14": - version: 4.17.14 - resolution: "@types/express@npm:4.17.14" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.18 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79 - languageName: node - linkType: hard - "@types/fs-extra@npm:^9.0.1, @types/fs-extra@npm:^9.0.3, @types/fs-extra@npm:^9.0.5, @types/fs-extra@npm:^9.0.6": version: 9.0.13 resolution: "@types/fs-extra@npm:9.0.13" @@ -15082,7 +15071,7 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.5.0, @types/node-fetch@npm:^2.5.12, @types/node-fetch@npm:^2.5.7": +"@types/node-fetch@npm:^2.5.0, @types/node-fetch@npm:^2.5.12, @types/node-fetch@npm:^2.5.7, @types/node-fetch@npm:^2.6.1": version: 2.6.2 resolution: "@types/node-fetch@npm:2.6.2" dependencies: @@ -15115,13 +15104,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^10.1.0": - version: 10.17.60 - resolution: "@types/node@npm:10.17.60" - checksum: 2cdb3a77d071ba8513e5e8306fa64bf50e3c3302390feeaeff1fd325dd25c8441369715dfc8e3701011a72fed5958c7dfa94eb9239a81b3c286caa4d97db6eef - languageName: node - linkType: hard - "@types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" @@ -16455,7 +16437,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.5, accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -16755,137 +16737,6 @@ __metadata: languageName: node linkType: hard -"apollo-datasource@npm:^3.3.2": - version: 3.3.2 - resolution: "apollo-datasource@npm:3.3.2" - dependencies: - "@apollo/utils.keyvaluecache": ^1.0.1 - apollo-server-env: ^4.2.1 - checksum: 70244e792655b357213b92e9dd0e8ca553724857847c9bedb53a1dbf7a92fc0d8b05a60d77203d6c30331599b44c5d7cc5f4d94c934465fa05b146b681ed2293 - languageName: node - linkType: hard - -"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.4.0": - version: 3.4.0 - resolution: "apollo-reporting-protobuf@npm:3.4.0" - dependencies: - "@apollo/protobufjs": 1.2.6 - checksum: 5bf50e9cecd3c2334cd12e0ebe59be6c4d7b1b9ee443c7d913011ea1b84513f57561fb6c3ceb66083321acb6d1c56f72e2ab0edf378cf742693409eb8dcdc46b - languageName: node - linkType: hard - -"apollo-server-core@npm:^3.12.0": - version: 3.12.0 - resolution: "apollo-server-core@npm:3.12.0" - dependencies: - "@apollo/utils.keyvaluecache": ^1.0.1 - "@apollo/utils.logger": ^1.0.0 - "@apollo/utils.usagereporting": ^1.0.0 - "@apollographql/apollo-tools": ^0.5.3 - "@apollographql/graphql-playground-html": 1.6.29 - "@graphql-tools/mock": ^8.1.2 - "@graphql-tools/schema": ^8.0.0 - "@josephg/resolvable": ^1.0.0 - apollo-datasource: ^3.3.2 - apollo-reporting-protobuf: ^3.4.0 - apollo-server-env: ^4.2.1 - apollo-server-errors: ^3.3.1 - apollo-server-plugin-base: ^3.7.2 - apollo-server-types: ^3.8.0 - async-retry: ^1.2.1 - fast-json-stable-stringify: ^2.1.0 - graphql-tag: ^2.11.0 - loglevel: ^1.6.8 - lru-cache: ^6.0.0 - node-abort-controller: ^3.0.1 - sha.js: ^2.4.11 - uuid: ^9.0.0 - whatwg-mimetype: ^3.0.0 - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - checksum: b7a37a78901d38a330c9df8fe870da3dcf512f43ab60fdf9ab0ba37be03977db5d4b72eabf51a830d2a9dcfb2974d7bfbc5aa8719e3afac113c8bd7222740b8f - languageName: node - linkType: hard - -"apollo-server-env@npm:^4.2.1": - version: 4.2.1 - resolution: "apollo-server-env@npm:4.2.1" - dependencies: - node-fetch: ^2.6.7 - checksum: 039c7eeed82aff072237f9943629ab24b7c62b97535d756a31178f9e7352187951ee654a377d49d775d2ac221fe024914d9989257ca8a7e65c8e5f438c044f18 - languageName: node - linkType: hard - -"apollo-server-errors@npm:^3.3.1": - version: 3.3.1 - resolution: "apollo-server-errors@npm:3.3.1" - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - checksum: d09b66e7ac3e2cbc60774280d30118ac4d98f945b5cc1013bb81b9970aae49c0717a550e161fe978d69d7039ec053aeba495890f6eebf452532a2c5e94071a80 - languageName: node - linkType: hard - -"apollo-server-express@npm:^3.0.0, apollo-server-express@npm:^3.12.0": - version: 3.12.0 - resolution: "apollo-server-express@npm:3.12.0" - dependencies: - "@types/accepts": ^1.3.5 - "@types/body-parser": 1.19.2 - "@types/cors": 2.8.12 - "@types/express": 4.17.14 - "@types/express-serve-static-core": 4.17.31 - accepts: ^1.3.5 - apollo-server-core: ^3.12.0 - apollo-server-types: ^3.8.0 - body-parser: ^1.19.0 - cors: ^2.8.5 - parseurl: ^1.3.3 - peerDependencies: - express: ^4.17.1 - graphql: ^15.3.0 || ^16.0.0 - checksum: bd4bc213f506e2aeb2be961961de51e431f8774344b349e9b02f475714a623703eb62423ad968a8f8b6859919ae0d1912c40cf15a4df24e6f81b4f4c5653e70b - languageName: node - linkType: hard - -"apollo-server-plugin-base@npm:^3.7.2": - version: 3.7.2 - resolution: "apollo-server-plugin-base@npm:3.7.2" - dependencies: - apollo-server-types: ^3.8.0 - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - checksum: d6ea6dbfad8bb82959286eae89878ccccbd09743c3df2b76bf790f470cbf5441ba06dcb6835a25f0bf32f4df05722cce157ae983ce32db4b69de8a72c9949e2e - languageName: node - linkType: hard - -"apollo-server-types@npm:^3.8.0": - version: 3.8.0 - resolution: "apollo-server-types@npm:3.8.0" - dependencies: - "@apollo/utils.keyvaluecache": ^1.0.1 - "@apollo/utils.logger": ^1.0.0 - apollo-reporting-protobuf: ^3.4.0 - apollo-server-env: ^4.2.1 - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - checksum: 20accd42b65ceb95819a1610c410488fbe548ee309227d7fa22fd17dd1205e557091ba9c9a20efa532192098a4193e34eb58fc91d762b55fdf31229ac9fc7133 - languageName: node - linkType: hard - -"apollo-server@npm:^3.0.0": - version: 3.12.0 - resolution: "apollo-server@npm:3.12.0" - dependencies: - "@types/express": 4.17.14 - apollo-server-core: ^3.12.0 - apollo-server-express: ^3.12.0 - express: ^4.17.1 - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - checksum: 6f3dade76f202f04a890b2385923a0319a859a0ab48121b1636e22d5eae83afe042d7a0a501aff3d8816e67de4f29f8efa598e350814a40f41d079610dee346e - languageName: node - linkType: hard - "aproba@npm:^1.0.3": version: 1.2.0 resolution: "aproba@npm:1.2.0" @@ -17882,7 +17733,7 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1, body-parser@npm:^1.19.0": +"body-parser@npm:1.20.1": version: 1.20.1 resolution: "body-parser@npm:1.20.1" dependencies: @@ -17902,6 +17753,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:^1.20.0": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + languageName: node + linkType: hard + "bonjour-service@npm:^1.0.11": version: 1.0.11 resolution: "bonjour-service@npm:1.0.11" @@ -19213,7 +19084,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1": +"commander@npm:^2.20.0, commander@npm:^2.7.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -19507,10 +19378,10 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4": - version: 1.0.4 - resolution: "content-type@npm:1.0.4" - checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 languageName: node linkType: hard @@ -20014,13 +19885,6 @@ __metadata: languageName: node linkType: hard -"cssfilter@npm:0.0.10": - version: 0.0.10 - resolution: "cssfilter@npm:0.0.10" - checksum: bc2c52bbb3426c3f2e4832edb6f8573e6cfa65b40b540932762d1e018f0f0157725e2991b77344bbc8266c6bbf4daa2803b0707cfb1bd0877505bf83a68e4b04 - languageName: node - linkType: hard - "cssnano-preset-default@npm:^5.1.7": version: 5.1.7 resolution: "cssnano-preset-default@npm:5.1.7" @@ -28636,10 +28500,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.10.1, lru-cache@npm:^7.7.1": - version: 7.10.1 - resolution: "lru-cache@npm:7.10.1" - checksum: e8b190d71ed0fcd7b29c71a3e9b01f851c92d1ef8865ff06b5581ca991db1e5e006920ed4da8b56da1910664ed51abfd76c46fb55e82ac252ff6c970ff910d72 +"lru-cache@npm:^7.10.1, lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 languageName: node linkType: hard @@ -30202,10 +30066,10 @@ __metadata: languageName: node linkType: hard -"node-abort-controller@npm:^3.0.1": - version: 3.0.1 - resolution: "node-abort-controller@npm:3.0.1" - checksum: 2b3d75c65249fea99e8ba22da3a8bc553f034f44dd12f5f4b38b520f718b01c88718c978f0c24c2a460fc01de9a80b567028f547b94440cb47adeacfeb82c2ee +"node-abort-controller@npm:^3.0.1, node-abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 2c340916af9710328b11c0828223fc65ba320e0d082214a211311bf64c2891028e42ef276b9799188c4ada9e6e1c54cf7a0b7c05dd9d59fcdc8cd633304c8047 languageName: node linkType: hard @@ -31412,7 +31276,7 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:^1.3.3, parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -33171,7 +33035,7 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:^2.4.1": +"raw-body@npm:2.5.2, raw-body@npm:^2.4.1": version: 2.5.2 resolution: "raw-body@npm:2.5.2" dependencies: @@ -37400,7 +37264,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.3.1, tslib@npm:~2.3.0": +"tslib@npm:2.3.1": version: 2.3.1 resolution: "tslib@npm:2.3.1" checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 @@ -39179,18 +39043,6 @@ __metadata: languageName: node linkType: hard -"xss@npm:^1.0.8": - version: 1.0.10 - resolution: "xss@npm:1.0.10" - dependencies: - commander: ^2.20.3 - cssfilter: 0.0.10 - bin: - xss: bin/xss - checksum: 0dbc70a716020d854569610d5bc949ba9d3b7f530b7af5508ffe84edaea228c34a4e1227f71cb3a4741373b1c49c3cb691f69dddefda45a594a31f112ae6a738 - languageName: node - linkType: hard - "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" From 9a450cc44809d3f8cebf5e9fe6549104e40602db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 10:17:21 +0000 Subject: [PATCH 191/511] build(deps): bump webpack from 5.75.0 to 5.76.2 in /microsite Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.2. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.2) --- updated-dependencies: - dependency-name: webpack dependency-type: indirect ... Signed-off-by: dependabot[bot] --- microsite/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 04ef288c87..874d696626 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -10889,8 +10889,8 @@ __metadata: linkType: hard "webpack@npm:^5.73.0": - version: 5.75.0 - resolution: "webpack@npm:5.75.0" + version: 5.76.2 + resolution: "webpack@npm:5.76.2" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -10921,7 +10921,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 2bcc5f3c195f375944e8af2f00bf2feea39cb9fda5f763b0d1b00077f1c51783db25c94d3fae96a07dead9fa085e6ae7474417e5ab31719c9776ea5969ceb83a + checksum: 86db98299a175c371031449c26077e87b33acd8f45de7f7945ed4b9b37c8ca11bc5169af9c44743efccd4d55e08042a3aa3a3bc42aff831309a0821ffbcd395e languageName: node linkType: hard From d1cec7952740145b4fdcad9164c01740683a361b Mon Sep 17 00:00:00 2001 From: Djam Date: Thu, 16 Mar 2023 11:57:43 +0100 Subject: [PATCH 192/511] chore: extend .prettierignore of microsite I build the docs locally and then why I ran the `yarn prettier:check` it also checked the `build` folder. Probably don't need that. Signed-off-by: Djam --- microsite/.prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/microsite/.prettierignore b/microsite/.prettierignore index b52c4a85c3..65d3600479 100644 --- a/microsite/.prettierignore +++ b/microsite/.prettierignore @@ -1 +1,2 @@ +build .docusaurus From 7eba760e6f60cfa1d1f18f166f1fdd89316b6512 Mon Sep 17 00:00:00 2001 From: Roohn Date: Mon, 13 Mar 2023 16:10:52 +0100 Subject: [PATCH 193/511] Add aggregate results by entityRef Signed-off-by: Roohn --- .changeset/fast-snakes-buy.md | 7 +++++++ .../src/service/router.test.ts | 16 ++++++++++++++++ .../src/service/router.ts | 18 +++++++++++++++++- plugins/entity-feedback-common/api-report.md | 10 +++++++--- plugins/entity-feedback-common/src/index.ts | 11 ++++++++--- plugins/entity-feedback/api-report.md | 4 ++++ .../src/api/EntityFeedbackApi.ts | 6 ++++++ .../src/api/EntityFeedbackClient.test.ts | 18 ++++++++++++++++++ .../src/api/EntityFeedbackClient.ts | 17 +++++++++++++++++ 9 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 .changeset/fast-snakes-buy.md diff --git a/.changeset/fast-snakes-buy.md b/.changeset/fast-snakes-buy.md new file mode 100644 index 0000000000..711588918d --- /dev/null +++ b/.changeset/fast-snakes-buy.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-entity-feedback': minor +'@backstage/plugin-entity-feedback-backend': patch +'@backstage/plugin-entity-feedback-common': patch +--- + +Added an endpoint to fetch anonymous aggregated results from an entity diff --git a/plugins/entity-feedback-backend/src/service/router.test.ts b/plugins/entity-feedback-backend/src/service/router.test.ts index 74fae8248b..5df0c5cf9d 100644 --- a/plugins/entity-feedback-backend/src/service/router.test.ts +++ b/plugins/entity-feedback-backend/src/service/router.test.ts @@ -258,6 +258,22 @@ describe('createRouter', () => { }); }); + describe('GET /ratings/:entityRef/aggregate', () => { + it('should get aggregated ratings for an entity correctly', async () => { + const response = await request(app) + .get('/ratings/component%3Adefault%2Fservice/aggregate') + .send(); + expect(mockDbHandler.getRatings).toHaveBeenCalledWith( + 'component:default/service', + ); + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + DISLIKE: 1, + LIKE: 2, + }); + }); + }); + describe('POST /responses/:entityRef', () => { it('should record a response correctly', async () => { const body = { response: 'blah', comments: 'feedback', consent: true }; diff --git a/plugins/entity-feedback-backend/src/service/router.ts b/plugins/entity-feedback-backend/src/service/router.ts index e1243cedaf..ea759c1639 100644 --- a/plugins/entity-feedback-backend/src/service/router.ts +++ b/plugins/entity-feedback-backend/src/service/router.ts @@ -25,7 +25,10 @@ import { getBearerTokenFromAuthorizationHeader, IdentityApi, } from '@backstage/plugin-auth-node'; -import { EntityRatingsData } from '@backstage/plugin-entity-feedback-common'; +import { + EntityRatingsData, + Ratings, +} from '@backstage/plugin-entity-feedback-common'; import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; @@ -167,6 +170,19 @@ export async function createRouter( res.json(ratings.filter(r => accessibleEntityRefs.includes(r.userRef))); }); + router.get('/ratings/:entityRef/aggregate', async (req, res) => { + const entityRatings = ( + await dbHandler.getRatings(req.params.entityRef) + ).reduce((ratings: Ratings, { rating }) => { + ratings[rating] = ratings[rating] ?? 0; + ratings[rating]++; + + return ratings; + }, {}); + + res.json(entityRatings); + }); + router.post('/responses/:entityRef', async (req, res) => { const user = await identity.getIdentity({ request: req }); const { response, comments, consent } = req.body; diff --git a/plugins/entity-feedback-common/api-report.md b/plugins/entity-feedback-common/api-report.md index 118e6c78f2..f31bb0d041 100644 --- a/plugins/entity-feedback-common/api-report.md +++ b/plugins/entity-feedback-common/api-report.md @@ -10,9 +10,7 @@ export interface EntityRatingsData { // (undocumented) entityTitle?: string; // (undocumented) - ratings: { - [ratingValue: string]: number; - }; + ratings: Ratings; } // @public (undocumented) @@ -38,4 +36,10 @@ export interface Rating { // (undocumented) userRef: string; } + +// @public (undocumented) +export interface Ratings { + // (undocumented) + [ratingValue: string]: number; +} ``` diff --git a/plugins/entity-feedback-common/src/index.ts b/plugins/entity-feedback-common/src/index.ts index eea289a899..247a5a5d54 100644 --- a/plugins/entity-feedback-common/src/index.ts +++ b/plugins/entity-feedback-common/src/index.ts @@ -40,13 +40,18 @@ export interface FeedbackResponse { userRef: string; } +/** + * @public + */ +export interface Ratings { + [ratingValue: string]: number; +} + /** * @public */ export interface EntityRatingsData { entityRef: string; entityTitle?: string; - ratings: { - [ratingValue: string]: number; - }; + ratings: Ratings; } diff --git a/plugins/entity-feedback/api-report.md b/plugins/entity-feedback/api-report.md index 06b0166b0d..696536aef4 100644 --- a/plugins/entity-feedback/api-report.md +++ b/plugins/entity-feedback/api-report.md @@ -13,6 +13,7 @@ import { EntityRatingsData } from '@backstage/plugin-entity-feedback-common'; import { FeedbackResponse } from '@backstage/plugin-entity-feedback-common'; import { FetchApi } from '@backstage/core-plugin-api'; import { Rating } from '@backstage/plugin-entity-feedback-common'; +import { Ratings } from '@backstage/plugin-entity-feedback-common'; import { ReactNode } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; @@ -22,6 +23,7 @@ export interface EntityFeedbackApi { getAllRatings(): Promise; // (undocumented) getOwnedRatings(ownerRef: string): Promise; + getRatingAggregates(entityRef: string): Promise; // (undocumented) getRatings(entityRef: string): Promise[]>; // (undocumented) @@ -48,6 +50,8 @@ export class EntityFeedbackClient implements EntityFeedbackApi { // (undocumented) getOwnedRatings(ownerRef: string): Promise; // (undocumented) + getRatingAggregates(entityRef: string): Promise; + // (undocumented) getRatings(entityRef: string): Promise[]>; // (undocumented) getResponses( diff --git a/plugins/entity-feedback/src/api/EntityFeedbackApi.ts b/plugins/entity-feedback/src/api/EntityFeedbackApi.ts index d2f1a46f55..7ec6a447f0 100644 --- a/plugins/entity-feedback/src/api/EntityFeedbackApi.ts +++ b/plugins/entity-feedback/src/api/EntityFeedbackApi.ts @@ -19,6 +19,7 @@ import { EntityRatingsData, FeedbackResponse, Rating, + Ratings, } from '@backstage/plugin-entity-feedback-common'; /** @@ -40,6 +41,11 @@ export interface EntityFeedbackApi { getRatings(entityRef: string): Promise[]>; + /** + * Returns anonymized aggregated results for one entityRef + */ + getRatingAggregates(entityRef: string): Promise; + recordResponse( entityRef: string, response: Omit, diff --git a/plugins/entity-feedback/src/api/EntityFeedbackClient.test.ts b/plugins/entity-feedback/src/api/EntityFeedbackClient.test.ts index 694fd66b06..8ef6810115 100644 --- a/plugins/entity-feedback/src/api/EntityFeedbackClient.test.ts +++ b/plugins/entity-feedback/src/api/EntityFeedbackClient.test.ts @@ -121,6 +121,24 @@ describe('EntityFeedbackClient', () => { expect(response).toEqual(ratings); }); + it('getRatingAggregates', async () => { + const ratings = { LIKE: 3, DISLIKE: 5 }; + + server.use( + rest.get( + `${mockBaseUrl}/ratings/${encodeURIComponent( + 'component:default/service', + )}/aggregate`, + (_, res, ctx) => res(ctx.json(ratings)), + ), + ); + + const response = await client.getRatingAggregates( + 'component:default/service', + ); + expect(response).toEqual(ratings); + }); + it('recordResponse', async () => { expect.assertions(1); const response = { diff --git a/plugins/entity-feedback/src/api/EntityFeedbackClient.ts b/plugins/entity-feedback/src/api/EntityFeedbackClient.ts index 34856473c8..f911cdc7f8 100644 --- a/plugins/entity-feedback/src/api/EntityFeedbackClient.ts +++ b/plugins/entity-feedback/src/api/EntityFeedbackClient.ts @@ -20,6 +20,7 @@ import { EntityRatingsData, FeedbackResponse, Rating, + Ratings, } from '@backstage/plugin-entity-feedback-common'; import { EntityFeedbackApi } from './EntityFeedbackApi'; @@ -97,6 +98,22 @@ export class EntityFeedbackClient implements EntityFeedbackApi { return resp.json(); } + async getRatingAggregates(entityRef: string): Promise { + const baseUrl = await this.discoveryApi.getBaseUrl('entity-feedback'); + const resp = await this.fetchApi.fetch( + `${baseUrl}/ratings/${encodeURIComponent(entityRef)}/aggregate`, + { + method: 'GET', + }, + ); + + if (!resp.ok) { + throw await ResponseError.fromResponse(resp); + } + + return resp.json(); + } + async recordResponse( entityRef: string, response: Omit, From 04a366c65ccb9fdce6ef9b641f7c76a9ec59a829 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 16 Mar 2023 13:27:26 +0100 Subject: [PATCH 194/511] chore: added video Signed-off-by: blam --- microsite/blog/2023-03-15-backstage-turns-3.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.md index d0ee9c9efe..fffd4a70b0 100644 --- a/microsite/blog/2023-03-15-backstage-turns-3.md +++ b/microsite/blog/2023-03-15-backstage-turns-3.md @@ -17,7 +17,7 @@ Happy birthday, Backstage! Three years ago, Spotify released its homegrown devel It's cliché at this point — because we’ve said it a million times — but no one could have predicted what came next. -In three short years, Backstage has grown to a Cloud Native Computing Foundation Incubating project, with more than 900 adopters and 1000+ contributors worldwide. Companies like CVS Health, Siemens, LinkedIn, REI, Vodafone, and Lego are building out their own developer portals from the Backstage framework and bringing their learnings to the project +In three short years, Backstage has grown to a Cloud Native Computing Foundation Incubating project, with more than 900 adopters and 1000+ contributors worldwide. Companies like CVS Health, Siemens, LinkedIn, REI, Vodafone, and Lego are building out their own developer portals from the Backstage framework and bringing their learnings to the project. A few more stats we love to see (mainly coming from the [project repo](https://github.com/backstage/backstage)): @@ -33,7 +33,10 @@ But, without a doubt, the best thing about the Backstage project is the people i Don’t take our word for it! Take a look at this birthday video we put together with a few community members. -[VIDEO HERE] +
+ +
## The growing pains are real From ca50c3bbea11251f3853e7077fd81662bd710eb4 Mon Sep 17 00:00:00 2001 From: Justin Edelson Date: Tue, 14 Mar 2023 10:44:44 -0400 Subject: [PATCH 195/511] fix(api-docs): Corrected styling of nested objects in AsyncAPI to avoid inappropriate uppercasing of nested objects Fixes #16848 Signed-off-by: Justin Edelson --- .changeset/curly-boats-trade.md | 5 +++++ .../api-docs/dev/asyncapi-example-api.yaml | 19 +++++++++++++++++++ .../AsyncApiDefinition.tsx | 2 ++ 3 files changed, 26 insertions(+) create mode 100644 .changeset/curly-boats-trade.md diff --git a/.changeset/curly-boats-trade.md b/.changeset/curly-boats-trade.md new file mode 100644 index 0000000000..773d66734c --- /dev/null +++ b/.changeset/curly-boats-trade.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Corrected styling of nested objects in AsyncAPI to avoid inappropriate uppercase text transformation of nested objects. diff --git a/plugins/api-docs/dev/asyncapi-example-api.yaml b/plugins/api-docs/dev/asyncapi-example-api.yaml index 725811d0cc..3895006979 100644 --- a/plugins/api-docs/dev/asyncapi-example-api.yaml +++ b/plugins/api-docs/dev/asyncapi-example-api.yaml @@ -133,6 +133,8 @@ spec: description: Light intensity measured in lumens. sentAt: $ref: "#/components/schemas/sentAt" + sentBy: + $ref: "#/components/schemas/sentBy" turnOnOffPayload: type: object properties: @@ -144,6 +146,8 @@ spec: description: Whether to turn on or off the light. sentAt: $ref: "#/components/schemas/sentAt" + sentBy: + $ref: "#/components/schemas/sentBy" dimLightPayload: type: object properties: @@ -154,10 +158,25 @@ spec: maximum: 100 sentAt: $ref: "#/components/schemas/sentAt" + sentBy: + $ref: "#/components/schemas/sentBy" sentAt: type: string format: date-time description: Date and time when the message was sent. + sentBy: + type: object + description: Description of the message sender. + properties: + name: + type: string + description: Name of the sender. + type: + type: string + description: Type of the sender. + enum: + - user + - machine securitySchemes: apiKey: diff --git a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.tsx b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.tsx index fd8948828c..64452b7191 100644 --- a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.tsx +++ b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.tsx @@ -76,6 +76,8 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ ...theme.typography.button, borderRadius: theme.shape.borderRadius, color: theme.palette.primary.main, + // override whatever may be in the theme's typography to ensure consistency with asyncapi + textTransform: 'inherit', }, '& a': { color: theme.palette.link, From 078069edf5370b89be6f481d37f97a044768d23d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 16 Mar 2023 14:34:44 +0100 Subject: [PATCH 196/511] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/catalog-graphql/package.json | 3 +- .../src/graphql/module.test.ts | 2 +- plugins/graphql-backend/package.json | 3 +- plugins/graphql-backend/src/service/router.ts | 7 +- yarn.lock | 103 +++++++++++++++++- 5 files changed, 107 insertions(+), 11 deletions(-) diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 5116d89067..ba7641febe 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -34,10 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@apollo/client": "^3.0.0", + "@apollo/server": "^4.0.0", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/types": "workspace:^", - "@apollo/server": "^4.0.0", "graphql": "^16.0.0", "graphql-modules": "^2.0.0", "graphql-tag": "^2.11.0", diff --git a/plugins/catalog-graphql/src/graphql/module.test.ts b/plugins/catalog-graphql/src/graphql/module.test.ts index 5490c2030a..d4589a2625 100644 --- a/plugins/catalog-graphql/src/graphql/module.test.ts +++ b/plugins/catalog-graphql/src/graphql/module.test.ts @@ -22,7 +22,7 @@ import { ConfigReader } from '@backstage/config'; import { ReaderEntity } from '../service/client'; import { createLogger } from 'winston'; import { setupRequestMockHandlers } from '@backstage/test-utils'; -import { gql } from 'apollo-server'; +import { gql } from '@apollo/client'; import { Module, createApplication, testkit } from 'graphql-modules'; describe('Catalog Module', () => { diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 7cd2b54117..2cef4a7298 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -33,13 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@apollo/server": "^4.0.0", "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-catalog-graphql": "workspace:^", "@graphql-tools/schema": "^9.0.0", "@types/express": "^4.17.6", - "@apollo/server": "^4.0.0", - "@apollo/server": "^4.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", "graphql": "^16.0.0", diff --git a/plugins/graphql-backend/src/service/router.ts b/plugins/graphql-backend/src/service/router.ts index aa83b51beb..fbddee435f 100644 --- a/plugins/graphql-backend/src/service/router.ts +++ b/plugins/graphql-backend/src/service/router.ts @@ -19,7 +19,8 @@ import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; import { createApplication } from 'graphql-modules'; -import { ApolloServer } from 'apollo-server-express'; +import { ApolloServer } from '@apollo/server'; +import { expressMiddleware } from '@apollo/server/express4'; import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; import { Config } from '@backstage/config'; import helmet from 'helmet'; @@ -61,8 +62,6 @@ export async function createRouter( response.json({ status: 'ok' }); }); - const apolloMiddleware = server.getMiddleware({ path: '/' }); - if (process.env.NODE_ENV === 'development') router.use( helmet.contentSecurityPolicy({ @@ -72,7 +71,7 @@ export async function createRouter( }), ); - router.use(apolloMiddleware); + router.use(expressMiddleware(server)); router.use(errorHandler()); return router; diff --git a/yarn.lock b/yarn.lock index 60b6bb89a9..6de4c25d2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,6 +42,42 @@ __metadata: languageName: node linkType: hard +"@apollo/client@npm:^3.0.0": + version: 3.7.10 + resolution: "@apollo/client@npm:3.7.10" + dependencies: + "@graphql-typed-document-node/core": ^3.1.1 + "@wry/context": ^0.7.0 + "@wry/equality": ^0.5.0 + "@wry/trie": ^0.3.0 + graphql-tag: ^2.12.6 + hoist-non-react-statics: ^3.3.2 + optimism: ^0.16.1 + prop-types: ^15.7.2 + response-iterator: ^0.2.6 + symbol-observable: ^4.0.0 + ts-invariant: ^0.10.3 + tslib: ^2.3.0 + zen-observable-ts: ^1.2.5 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + checksum: d74a68f8042e76e3a81990c79a89aefc07c8899d354f3b469591356508001005106bba0fa953652c3ec19756d44bdec6730ac98f62fa836bd76acbcb7eff42ce + languageName: node + linkType: hard + "@apollo/explorer@npm:^2.0.0": version: 2.0.2 resolution: "@apollo/explorer@npm:2.0.2" @@ -5302,6 +5338,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql" dependencies: + "@apollo/client": ^3.0.0 "@apollo/server": ^4.0.0 "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" @@ -16348,6 +16385,33 @@ __metadata: languageName: node linkType: hard +"@wry/context@npm:^0.7.0": + version: 0.7.0 + resolution: "@wry/context@npm:0.7.0" + dependencies: + tslib: ^2.3.0 + checksum: f4ff78023a0b949122037aae766232b7d2284dc415204d22d9ea6d7969ff8f5f29b18128bc9a40e68dc054c8a12b1bf5868a357fdb50c398c447290c3a5b0496 + languageName: node + linkType: hard + +"@wry/equality@npm:^0.5.0": + version: 0.5.3 + resolution: "@wry/equality@npm:0.5.3" + dependencies: + tslib: ^2.3.0 + checksum: 7ea8ded51462911217183b93cc3ffbb4d18dc02a62d4a79e0d9983463739bf54106aaeb25649bf33168120bd044b61d135018bfcf4fefad8099c13eac9238aa6 + languageName: node + linkType: hard + +"@wry/trie@npm:^0.3.0": + version: 0.3.2 + resolution: "@wry/trie@npm:0.3.2" + dependencies: + tslib: ^2.3.0 + checksum: 151d06b519e1ff1c3acf6ee6846161b1d7d50bbecd4c48e5cd1b05f9e37c30602aff02e88f20105f6e6c54ae4123f9c4eb7715044d7fd927d4ba4ec3e755cd36 + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.5, @xmldom/xmldom@npm:^0.7.6": version: 0.7.9 resolution: "@xmldom/xmldom@npm:0.7.9" @@ -24254,7 +24318,7 @@ __metadata: languageName: node linkType: hard -"graphql-tag@npm:^2.11.0": +"graphql-tag@npm:^2.11.0, graphql-tag@npm:^2.12.6": version: 2.12.6 resolution: "graphql-tag@npm:2.12.6" dependencies: @@ -30844,6 +30908,16 @@ __metadata: languageName: node linkType: hard +"optimism@npm:^0.16.1": + version: 0.16.2 + resolution: "optimism@npm:0.16.2" + dependencies: + "@wry/context": ^0.7.0 + "@wry/trie": ^0.3.0 + checksum: a98ed9a0b8ee2b031010222099b60860d52860bf8182889f2695a7cf2185f21aca59020f78e2b47c0ae7697843caa576798d792967314ff59f6aa7c5d9de7f3a + languageName: node + linkType: hard + "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -34407,6 +34481,13 @@ __metadata: languageName: node linkType: hard +"response-iterator@npm:^0.2.6": + version: 0.2.6 + resolution: "response-iterator@npm:0.2.6" + checksum: b0db3c0665a0d698d65512951de9623c086b9c84ce015a76076d4bd0bf733779601d0b41f0931d16ae38132fba29e1ce291c1f8e6550fc32daaa2dc3ab4f338d + languageName: node + linkType: hard + "responselike@npm:^2.0.0": version: 2.0.0 resolution: "responselike@npm:2.0.0" @@ -36593,6 +36674,13 @@ __metadata: languageName: node linkType: hard +"symbol-observable@npm:^4.0.0": + version: 4.0.0 + resolution: "symbol-observable@npm:4.0.0" + checksum: 212c7edce6186634d671336a88c0e0bbd626c2ab51ed57498dc90698cce541839a261b969c2a1e8dd43762133d47672e8b62e0b1ce9cf4157934ba45fd172ba8 + languageName: node + linkType: hard + "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -37190,6 +37278,15 @@ __metadata: languageName: node linkType: hard +"ts-invariant@npm:^0.10.3": + version: 0.10.3 + resolution: "ts-invariant@npm:0.10.3" + dependencies: + tslib: ^2.1.0 + checksum: bb07d56fe4aae69d8860e0301dfdee2d375281159054bc24bf1e49e513fb0835bf7f70a11351344d213a79199c5e695f37ebbf5a447188a377ce0cd81d91ddb5 + languageName: node + linkType: hard + "ts-log@npm:^2.2.3": version: 2.2.3 resolution: "ts-log@npm:2.2.3" @@ -37278,7 +37375,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:~2.5.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:~2.5.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -39354,7 +39451,7 @@ __metadata: languageName: node linkType: hard -"zen-observable-ts@npm:^1.1.0": +"zen-observable-ts@npm:^1.1.0, zen-observable-ts@npm:^1.2.5": version: 1.2.5 resolution: "zen-observable-ts@npm:1.2.5" dependencies: From a64df816e56be7752669934e4491127617f0fa98 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:42:20 +0000 Subject: [PATCH 197/511] fix(deps): update dependency @opentelemetry/api to v1.4.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ad03a668e0..7fc869e38d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12668,9 +12668,9 @@ __metadata: linkType: hard "@opentelemetry/api@npm:^1.0.1, @opentelemetry/api@npm:^1.3.0": - version: 1.4.0 - resolution: "@opentelemetry/api@npm:1.4.0" - checksum: 8dc522194e20d2e8aa6cac155dbce19d3fc9cfac59e953ece1064158c6348ccd9560ee99d2f2381e82c2f8c9a129b57fa7b640027383315504de1fa712b6d7f1 + version: 1.4.1 + resolution: "@opentelemetry/api@npm:1.4.1" + checksum: e783c40d1a518abf9c4c5d65223237c1392cd9a6c53ac6e2c3ef0c05ff7266e3dfc4fd9874316dae0dcb7a97950878deb513bcbadfaad653d48f0215f2a0911b languageName: node linkType: hard From 591135bd47114b5052ffa41ba3231721c07f5cdb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 14:42:46 +0000 Subject: [PATCH 198/511] fix(deps): update dependency @oriflame/backstage-plugin-score-card to v0.6.3 Signed-off-by: Renovate Bot --- yarn.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index ad03a668e0..2b86a49f8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3605,7 +3605,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.1.3, @backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3821,7 +3821,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@^1.0.4, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.6, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -3867,7 +3867,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@^0.12.0, @backstage/core-components@^0.12.3, @backstage/core-components@^0.12.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.12.3, @backstage/core-components@^0.12.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -3938,7 +3938,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.1.0, @backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -5173,7 +5173,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.8, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5301,7 +5301,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.2.1, @backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.3.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.3.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -8753,7 +8753,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/types@^1.0.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": +"@backstage/types@^1.0.2, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@backstage/types@workspace:packages/types" dependencies: @@ -8764,7 +8764,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.2, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: @@ -12675,18 +12675,18 @@ __metadata: linkType: hard "@oriflame/backstage-plugin-score-card@npm:^0.6.0": - version: 0.6.2 - resolution: "@oriflame/backstage-plugin-score-card@npm:0.6.2" + version: 0.6.3 + resolution: "@oriflame/backstage-plugin-score-card@npm:0.6.3" dependencies: - "@backstage/catalog-model": ^1.1.3 - "@backstage/config": ^1.0.4 - "@backstage/core-components": ^0.12.0 - "@backstage/core-plugin-api": ^1.1.0 - "@backstage/plugin-catalog-common": ^1.0.8 - "@backstage/plugin-catalog-react": ^1.2.1 + "@backstage/catalog-model": ^1.1.5 + "@backstage/config": ^1.0.6 + "@backstage/core-components": ^0.12.3 + "@backstage/core-plugin-api": ^1.3.0 + "@backstage/plugin-catalog-common": ^1.0.10 + "@backstage/plugin-catalog-react": ^1.2.4 "@backstage/theme": ^0.2.16 - "@backstage/types": ^1.0.1 - "@backstage/version-bridge": ^1.0.2 + "@backstage/types": ^1.0.2 + "@backstage/version-bridge": ^1.0.3 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.11.2 "@material-ui/lab": ^4.0.0-alpha.57 @@ -12694,7 +12694,7 @@ __metadata: peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 6c8ca85981fde5af8e3951f0f5fc9c3873c890d286fd29067215246e9b8e9022ceea308c9caa8b0ccfe5380fe5640aaede48c9963a57c3c98f5c3b5feade9aae + checksum: cdf57bb0ea42b1ef3699b65e558c0d9f2483555fefd03bc3ff4e4d75524c904d723e4808987e8718eac63ab60da6257af82e7d45c70cd42fc00bb1a4c392578b languageName: node linkType: hard From e23abb37ec10e16591c0c54aa6d31cd10535965e Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Thu, 16 Mar 2023 16:09:01 +0100 Subject: [PATCH 199/511] Rename output parameter `mergeRequestURL` of `publish:gitlab:merge-request` action to `mergeRequestUrl` Signed-off-by: Andreas Berger --- .changeset/bright-pumpkins-bake.md | 5 +++++ .../scaffolder/actions/builtin/publish/gitlabMergeRequest.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/bright-pumpkins-bake.md diff --git a/.changeset/bright-pumpkins-bake.md b/.changeset/bright-pumpkins-bake.md new file mode 100644 index 0000000000..4c16e307ec --- /dev/null +++ b/.changeset/bright-pumpkins-bake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Rename output parameter `mergeRequestURL` of `publish:gitlab:merge-request` action to `mergeRequestUrl`. diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts index bb27410402..06e056cda3 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts @@ -127,7 +127,7 @@ export const createPublishGitlabMergeRequestAction = (options: { title: 'Gitlab Project path', type: 'string', }, - mergeRequestURL: { + mergeRequestUrl: { title: 'MergeRequest(MR) URL', type: 'string', description: 'Link to the merge request in GitLab', From 8da5764628225c2c0070e1211f8818060d5d3df1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 16 Mar 2023 16:15:56 +0100 Subject: [PATCH 200/511] Update GOVERNANCE.md Co-authored-by: Dawn Foster Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index bff9631b93..691383af45 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -65,7 +65,7 @@ An Organization Member must meet the responsibilities and has the requirements o - Accepted PRs - Helpful PR reviews - Resolving GitHub issues - - Or some equivalent combination or contributions to the project + - Or some equivalent contributions to the project. - Must have been contributing for at least 3 months - Or is the member of a team that owns a project area, in which case the above requirements do not apply and the member is instead vetted by the project area maintainers. From d8f774c30dfac5c24ad317740fedb0173e9470e6 Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Thu, 16 Mar 2023 11:16:28 -0400 Subject: [PATCH 201/511] Add changeset. Signed-off-by: Aramis Sennyey --- .changeset/khaki-cars-drum.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/khaki-cars-drum.md diff --git a/.changeset/khaki-cars-drum.md b/.changeset/khaki-cars-drum.md new file mode 100644 index 0000000000..325b0f8ba5 --- /dev/null +++ b/.changeset/khaki-cars-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin. From 9d47191719f015932fdf06dd5cd74150be475566 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:21:01 +0000 Subject: [PATCH 202/511] fix(deps): update dependency dockerode to v3.3.5 Signed-off-by: Renovate Bot --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 34baffe120..06d1d33a58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14494,12 +14494,12 @@ __metadata: linkType: hard "@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8": - version: 3.3.14 - resolution: "@types/dockerode@npm:3.3.14" + version: 3.3.15 + resolution: "@types/dockerode@npm:3.3.15" dependencies: "@types/docker-modem": "*" "@types/node": "*" - checksum: 6a8472622861fb0c97908963a8236d6e439c9feefc845b866326272ad0e5c33f537206fb4633424c5e3c8ec63559cb14bc737e2f88f0fcdf11496a9162d5b139 + checksum: b8fa13f86c761175a5813eb41fbd1e46d0646f008e5c84738b51c1aa82ce4f3758502efe8c3c583463e7cb7dc77e2faadfff91f4e6274e844e68a0ebf9deeae5 languageName: node linkType: hard @@ -20871,13 +20871,13 @@ __metadata: linkType: hard "dockerode@npm:^3.3.1": - version: 3.3.4 - resolution: "dockerode@npm:3.3.4" + version: 3.3.5 + resolution: "dockerode@npm:3.3.5" dependencies: "@balena/dockerignore": ^1.0.2 docker-modem: ^3.0.0 tar-fs: ~2.0.1 - checksum: 6cb4b9d1c42feb3acfa77daf103b070cc412351dc7dc0a1553cc774ccd1be1a1412a87f8aa13c3155c63ec5c61a7cadc833b4248c4d8342814bbf708f795b952 + checksum: 7f6650422b07fa7ea9d5801f04b1a432634446b5fe37b995b8302b953b64e93abf1bb4596c2fb574ba47aafee685ef2ab959cc86c9654add5a26d09541bbbcc6 languageName: node linkType: hard From c65a80bb3c8c4801ddde99abcbcdc0f3a0afd892 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:21:28 +0000 Subject: [PATCH 203/511] fix(deps): update dependency graphql-modules to v2.1.1 Signed-off-by: Renovate Bot --- yarn.lock | 149 +++++++++++++++++++++++++++--------------------------- 1 file changed, 74 insertions(+), 75 deletions(-) diff --git a/yarn.lock b/yarn.lock index 34baffe120..841237a265 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10202,20 +10202,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/batch-execute@npm:8.5.1": - version: 8.5.1 - resolution: "@graphql-tools/batch-execute@npm:8.5.1" - dependencies: - "@graphql-tools/utils": 8.9.0 - dataloader: 2.1.0 - 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: 56c3b9bbab7e3402710186df4de5ae716dc31caa16f3dc51434b5167f0a513881afc1cd835f3df8ff0536f80462394dbb12e5246cda999dcee043e9bf37bcbe2 - languageName: node - linkType: hard - "@graphql-tools/batch-execute@npm:8.5.14": version: 8.5.14 resolution: "@graphql-tools/batch-execute@npm:8.5.14" @@ -10230,6 +10216,20 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/batch-execute@npm:^8.5.18": + version: 8.5.18 + resolution: "@graphql-tools/batch-execute@npm:8.5.18" + dependencies: + "@graphql-tools/utils": 9.2.1 + dataloader: 2.2.2 + tslib: ^2.4.0 + value-or-promise: 1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4a5b5dec502a91bd657a4ddad74965d050d3994c89f036225fac58657b5a275bb374224b20484e3ba773525e75a5552c4a5af7b6d52859ce3a3b32aec2412b6e + languageName: node + linkType: hard + "@graphql-tools/code-file-loader@npm:^7.3.17": version: 7.3.21 resolution: "@graphql-tools/code-file-loader@npm:7.3.21" @@ -10245,22 +10245,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/delegate@npm:8.8.1": - version: 8.8.1 - resolution: "@graphql-tools/delegate@npm:8.8.1" - dependencies: - "@graphql-tools/batch-execute": 8.5.1 - "@graphql-tools/schema": 8.5.1 - "@graphql-tools/utils": 8.9.0 - dataloader: 2.1.0 - 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: 5246c63fbb42a22f881a1857bc36fdc6092a4f8c4b0f82d4113eca75aeb676305c42319f65c564816b8c4f4eef2a7b93ee709ff548ff78e5fb3e6c0845ac6d7e - languageName: node - linkType: hard - "@graphql-tools/delegate@npm:9.0.21": version: 9.0.21 resolution: "@graphql-tools/delegate@npm:9.0.21" @@ -10278,6 +10262,23 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/delegate@npm:9.0.28": + version: 9.0.28 + resolution: "@graphql-tools/delegate@npm:9.0.28" + dependencies: + "@graphql-tools/batch-execute": ^8.5.18 + "@graphql-tools/executor": ^0.0.15 + "@graphql-tools/schema": ^9.0.16 + "@graphql-tools/utils": ^9.2.1 + dataloader: ^2.2.2 + tslib: ^2.5.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: e24c757ea15a2b654268194bbf76188fca6692486d1b019b0ad7d48c264f92b7b681a43c8a8355ace48a29f9dd566c20e8707b6cef281331a813f23ee1c94375 + languageName: node + linkType: hard + "@graphql-tools/executor-graphql-ws@npm:0.0.5": version: 0.0.5 resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.5" @@ -10343,6 +10344,21 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/executor@npm:^0.0.15": + version: 0.0.15 + resolution: "@graphql-tools/executor@npm:0.0.15" + dependencies: + "@graphql-tools/utils": 9.2.1 + "@graphql-typed-document-node/core": 3.1.2 + "@repeaterjs/repeater": 3.0.4 + tslib: ^2.4.0 + value-or-promise: 1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 7a963d6fcd00bd9c2a42f35a33bc9178576a1eeac755ce69981aa1e2c61238953b7ab9c11ffcfc86e49fdcf4fc057698c6f7169d6be580298e286076276b1295 + languageName: node + linkType: hard + "@graphql-tools/git-loader@npm:^7.2.13": version: 7.2.13 resolution: "@graphql-tools/git-loader@npm:7.2.13" @@ -10462,18 +10478,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.1": - version: 8.3.1 - resolution: "@graphql-tools/merge@npm:8.3.1" - dependencies: - "@graphql-tools/utils": 8.9.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 16af6be2249f4f500a4c2f5d3db2e0efd56ad69b5e10499649c6fc979c257af12e131112304a16699654b54daab37a80737e0538478bc45a0053b9bc859a7ac1 - languageName: node - linkType: hard - "@graphql-tools/merge@npm:8.3.14": version: 8.3.14 resolution: "@graphql-tools/merge@npm:8.3.14" @@ -10563,20 +10567,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:8.5.1, @graphql-tools/schema@npm:^8.3.1": - version: 8.5.1 - resolution: "@graphql-tools/schema@npm:8.5.1" - dependencies: - "@graphql-tools/merge": 8.3.1 - "@graphql-tools/utils": 8.9.0 - 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: 91363cd4371e347af40ef66f7d903b5d4f5998bfaec9214768e6a795136ef6372f9f225e05e18daacd929e23695811f15e791c6cbe082bf5b5d03b16b1f874f8 - languageName: node - linkType: hard - "@graphql-tools/schema@npm:9.0.12": version: 9.0.12 resolution: "@graphql-tools/schema@npm:9.0.12" @@ -10605,7 +10595,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:^9.0.0": +"@graphql-tools/schema@npm:9.0.17, @graphql-tools/schema@npm:^9.0.0, @graphql-tools/schema@npm:^9.0.16": version: 9.0.17 resolution: "@graphql-tools/schema@npm:9.0.17" dependencies: @@ -10697,7 +10687,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:9.2.1, @graphql-tools/utils@npm:^9.0.0, @graphql-tools/utils@npm:^9.1.1": +"@graphql-tools/utils@npm:9.2.1, @graphql-tools/utils@npm:^9.0.0, @graphql-tools/utils@npm:^9.1.1, @graphql-tools/utils@npm:^9.2.1": version: 9.2.1 resolution: "@graphql-tools/utils@npm:9.2.1" dependencies: @@ -10724,22 +10714,22 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:^8.3.1": - version: 8.5.1 - resolution: "@graphql-tools/wrap@npm:8.5.1" +"@graphql-tools/wrap@npm:^9.0.0": + version: 9.3.8 + resolution: "@graphql-tools/wrap@npm:9.3.8" dependencies: - "@graphql-tools/delegate": 8.8.1 - "@graphql-tools/schema": 8.5.1 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/delegate": 9.0.28 + "@graphql-tools/schema": 9.0.17 + "@graphql-tools/utils": 9.2.1 tslib: ^2.4.0 - value-or-promise: 1.0.11 + value-or-promise: 1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: bc9350015adde545208709584cf1a3c5b4bc3bbfd82062b93b4da253481e366d9f9caad49d7f2f0aaa7fe070167d15b99da7ee76e431c0c6bee815923aafdb29 + checksum: 1f280b939f1c8c33be8fbd92c0584e9125e30c59ce6f75f20657235d24e5a2c01eb3214eda9ae74d431d9da072cdfa6cedeafdc5b352dd33de439ba42402efcb languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:3.1.1, @graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": +"@graphql-typed-document-node/core@npm:3.1.1": version: 3.1.1 resolution: "@graphql-typed-document-node/core@npm:3.1.1" peerDependencies: @@ -10748,6 +10738,15 @@ __metadata: languageName: node linkType: hard +"@graphql-typed-document-node/core@npm:3.1.2, @graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": + version: 3.1.2 + resolution: "@graphql-typed-document-node/core@npm:3.1.2" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: a61afa025acdabd7833e4f654a5802fc1a526171f81e0c435c8e651050a5a0682499a2c7a51304ceb61fde36cd69fc7975ce5e1b16b9ba7ea474c649f33eea8b + languageName: node + linkType: hard + "@grpc/grpc-js@npm:~1.8.0": version: 1.8.9 resolution: "@grpc/grpc-js@npm:1.8.9" @@ -20362,7 +20361,7 @@ __metadata: languageName: node linkType: hard -"dataloader@npm:^2.0.0": +"dataloader@npm:2.2.2, dataloader@npm:^2.0.0, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" checksum: 4dabd247089c29f194e94d5434d504f99156c5c214a03463c20f3f17f40398d7e179edee69a27c16e315519ac8739042a810090087ae26449a0e685156a02c65 @@ -24257,16 +24256,16 @@ __metadata: linkType: hard "graphql-modules@npm:^2.0.0": - version: 2.1.0 - resolution: "graphql-modules@npm:2.1.0" + version: 2.1.1 + resolution: "graphql-modules@npm:2.1.1" dependencies: - "@graphql-tools/schema": ^8.3.1 - "@graphql-tools/wrap": ^8.3.1 + "@graphql-tools/schema": ^9.0.0 + "@graphql-tools/wrap": ^9.0.0 "@graphql-typed-document-node/core": ^3.1.0 ramda: ^0.28.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: a57b63007815a8958ec49ecc14a640d559f8fd164968c123ffc3efdbcf35778d1c99f3570660a1dac4a523c986eeaf0c8834dfe0ed721de5111cedbce0ed6790 + checksum: 1e916eb85a4bc0ff25040adf35a95caa25001b23e43d5608eb304186041e145893e995f82815e9b4e71322a60bd7f7968583ceb22a5e566ed15b3876c6224448 languageName: node linkType: hard @@ -37359,7 +37358,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:~2.5.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:~2.5.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -38227,7 +38226,7 @@ __metadata: languageName: node linkType: hard -"value-or-promise@npm:1.0.12, value-or-promise@npm:^1.0.11": +"value-or-promise@npm:1.0.12, value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": version: 1.0.12 resolution: "value-or-promise@npm:1.0.12" checksum: f53a66c75b7447c90bbaf946a757ca09c094629cb80ba742f59c980ec3a69be0a385a0e75505dedb4e757862f1a994ca4beaf083a831f24d3ffb3d4bb18cd1e1 From f6c92d54e7e7ade4d2a7a932846eae0212c447c9 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Thu, 16 Feb 2023 10:00:09 +0100 Subject: [PATCH 204/511] wait with fetching techdocs metadata until the shadow root exists Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/context.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/techdocs-react/src/context.tsx b/plugins/techdocs-react/src/context.tsx index 4f427e0031..04a46bffb3 100644 --- a/plugins/techdocs-react/src/context.tsx +++ b/plugins/techdocs-react/src/context.tsx @@ -117,10 +117,6 @@ export const TechDocsReaderPageProvider = memo( const techdocsApi = useApi(techdocsApiRef); const config = useApi(configApiRef); - const metadata = useAsync(async () => { - return techdocsApi.getTechDocsMetadata(entityRef); - }, [entityRef]); - const entityMetadata = useAsync(async () => { return techdocsApi.getEntityMetadata(entityRef); }, [entityRef]); @@ -133,6 +129,14 @@ export const TechDocsReaderPageProvider = memo( defaultTechDocsReaderPageValue.shadowRoot, ); + const metadata = useAsync( + () => + shadowRoot + ? techdocsApi.getTechDocsMetadata(entityRef) + : new Promise(() => {}), + [entityRef, shadowRoot], + ); + const value = { metadata, entityRef: toLowercaseEntityRefMaybe(entityRef, config), From 7e0c7b09a47cefe0839b61c11af8e899fa1335a9 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Thu, 16 Feb 2023 10:04:43 +0100 Subject: [PATCH 205/511] add changeset Signed-off-by: Morgan Bentell --- .changeset/rare-seals-decide.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rare-seals-decide.md diff --git a/.changeset/rare-seals-decide.md b/.changeset/rare-seals-decide.md new file mode 100644 index 0000000000..e3cbadee69 --- /dev/null +++ b/.changeset/rare-seals-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-react': patch +--- + +Fix a bug that caused the header to not render when generating a document for the first time From 68c7082188ab4a505f2d93128036ee5431719204 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 22 Feb 2023 11:00:21 +0100 Subject: [PATCH 206/511] assume metadata is available and only refetch it if we don't have it when the shadowroot is mounted Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/context.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/techdocs-react/src/context.tsx b/plugins/techdocs-react/src/context.tsx index 04a46bffb3..f373acca73 100644 --- a/plugins/techdocs-react/src/context.tsx +++ b/plugins/techdocs-react/src/context.tsx @@ -21,8 +21,10 @@ import React, { useState, memo, ReactNode, + useEffect, } from 'react'; import useAsync, { AsyncState } from 'react-use/lib/useAsync'; +import { useAsyncRetry } from 'react-use'; import { CompoundEntityRef, @@ -121,6 +123,10 @@ export const TechDocsReaderPageProvider = memo( return techdocsApi.getEntityMetadata(entityRef); }, [entityRef]); + const metadata = useAsyncRetry(() => { + return techdocsApi.getTechDocsMetadata(entityRef); + }, [entityRef]); + const [title, setTitle] = useState(defaultTechDocsReaderPageValue.title); const [subtitle, setSubtitle] = useState( defaultTechDocsReaderPageValue.subtitle, @@ -129,13 +135,11 @@ export const TechDocsReaderPageProvider = memo( defaultTechDocsReaderPageValue.shadowRoot, ); - const metadata = useAsync( - () => - shadowRoot - ? techdocsApi.getTechDocsMetadata(entityRef) - : new Promise(() => {}), - [entityRef, shadowRoot], - ); + useEffect(() => { + if (shadowRoot && !metadata.loading && !metadata.value) { + metadata.retry(); + } + }, [metadata, shadowRoot]); const value = { metadata, From 1fef8423cef28bcab6179196d8e6744af39ee802 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Tue, 7 Feb 2023 12:44:08 -0500 Subject: [PATCH 207/511] Adding permission framework integration to kubernetes proxy endpoint Signed-off-by: Ruben Vallejo --- packages/backend/src/plugins/kubernetes.ts | 1 + .../src/service/KubernetesBuilder.test.ts | 91 +++++++++++++++---- .../src/service/KubernetesBuilder.ts | 7 +- .../src/service/KubernetesProxy.ts | 49 +++++++++- .../kubernetes-backend/src/service/router.ts | 2 + .../src/service/standaloneApplication.ts | 8 +- plugins/kubernetes-common/package.json | 1 + plugins/kubernetes-common/src/index.ts | 5 + plugins/kubernetes-common/src/permissions.ts | 39 ++++++++ yarn.lock | 28 ++++++ 10 files changed, 211 insertions(+), 20 deletions(-) create mode 100644 plugins/kubernetes-common/src/permissions.ts diff --git a/packages/backend/src/plugins/kubernetes.ts b/packages/backend/src/plugins/kubernetes.ts index 3bc7a5dcbe..3bc6648862 100644 --- a/packages/backend/src/plugins/kubernetes.ts +++ b/packages/backend/src/plugins/kubernetes.ts @@ -27,6 +27,7 @@ export default async function createPlugin( logger: env.logger, config: env.config, catalogApi, + permissions: env.permissions, }).build(); return router; } diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts index cc2dea26c0..695649b9f3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts @@ -31,16 +31,24 @@ import { import { KubernetesBuilder } from './KubernetesBuilder'; import { KubernetesFanOutHandler } from './KubernetesFanOutHandler'; import { CatalogApi } from '@backstage/catalog-client'; -import { HEADER_KUBERNETES_CLUSTER } from './KubernetesProxy'; +import { + HEADER_KUBERNETES_CLUSTER, + HEADER_KUBERNETES_AUTH, +} from './KubernetesProxy'; import { setupServer } from 'msw/node'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { rest } from 'msw'; +import { + AuthorizeResult, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; describe('KubernetesBuilder', () => { let app: express.Express; let kubernetesFanOutHandler: jest.Mocked; let config: Config; let catalogApi: CatalogApi; + let permissions: jest.Mocked; beforeAll(async () => { const logger = getVoidLogger(); @@ -74,10 +82,16 @@ describe('KubernetesBuilder', () => { getKubernetesObjectsByEntity: jest.fn(), } as any; + permissions = { + authorize: jest.fn(), + authorizeConditional: jest.fn(), + }; + const { router } = await KubernetesBuilder.createBuilder({ config, logger, catalogApi, + permissions, }) .setObjectsProvider(kubernetesFanOutHandler) .setClusterSupplier(clusterSupplier) @@ -250,6 +264,7 @@ describe('KubernetesBuilder', () => { logger, config, catalogApi, + permissions, }) .setClusterSupplier(clusterSupplier) .setServiceLocator(serviceLocator) @@ -278,20 +293,26 @@ describe('KubernetesBuilder', () => { beforeEach(() => { worker.use( - rest.post('https://localhost:1234/api/v1/namespaces', (req, res, ctx) => - req - .arrayBuffer() - .then(body => - res( - ctx.set('content-type', `${req.headers.get('content-type')}`), - ctx.body(body), - ), - ), + rest.post( + 'https://localhost:1234/api/v1/namespaces', + (req, res, ctx) => { + if (!req.headers.get('Authorization')) { + return res(ctx.status(401)); + } + return req + .arrayBuffer() + .then(body => + res( + ctx.set('content-type', `${req.headers.get('content-type')}`), + ctx.body(body), + ), + ); + }, ), ); }); - it('returns the given request body', async () => { + it('returns the given request body with permission set to allow', async () => { const requestBody = { kind: 'Namespace', apiVersion: 'v1', @@ -300,9 +321,14 @@ describe('KubernetesBuilder', () => { }, }; + permissions.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); + const proxyEndpointRequest = request(app) .post('/proxy/api/v1/namespaces') .set(HEADER_KUBERNETES_CLUSTER, 'some-cluster') + .set(HEADER_KUBERNETES_AUTH, 'randomtoken') .send(requestBody); worker.use(rest.all(proxyEndpointRequest.url, req => req.passthrough())); @@ -312,17 +338,22 @@ describe('KubernetesBuilder', () => { expect(response.body).toStrictEqual(requestBody); }); - it('supports yaml content type', async () => { + it('supports yaml content type with permission set to allow', async () => { const requestBody = `--- -kind: Namespace -apiVersion: v1 -metadata: - name: new-ns -`; + kind: Namespace + apiVersion: v1 + metadata: + name: new-ns + `; + + permissions.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); const proxyEndpointRequest = request(app) .post('/proxy/api/v1/namespaces') .set(HEADER_KUBERNETES_CLUSTER, 'some-cluster') + .set(HEADER_KUBERNETES_AUTH, 'randomtoken') .set('content-type', 'application/yaml') .send(requestBody); @@ -331,5 +362,31 @@ metadata: const response = await proxyEndpointRequest; expect(response.text).toEqual(requestBody); }); + + it('returns a 403 response if Permission Policy is in place that blocks endpoint', async () => { + const requestBody = { + kind: 'Namespace', + apiVersion: 'v1', + metadata: { + name: 'new-ns', + }, + }; + + permissions.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.DENY }]), + ); + + const proxyEndpointRequest = request(app) + .post('/proxy/api/v1/namespaces') + .set(HEADER_KUBERNETES_CLUSTER, 'some-cluster') + .set(HEADER_KUBERNETES_AUTH, 'randomtoken') + .send(requestBody); + + worker.use(rest.all(proxyEndpointRequest.url, req => req.passthrough())); + + const response = await proxyEndpointRequest; + + expect(response.status).toEqual(403); + }); }); }); diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 74ec9eada2..ea098ab596 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -15,6 +15,7 @@ */ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import express from 'express'; import Router from 'express-promise-router'; import { Duration } from 'luxon'; @@ -49,6 +50,7 @@ export interface KubernetesEnvironment { logger: Logger; config: Config; catalogApi: CatalogApi; + permissions: PermissionEvaluator; } /** @@ -89,6 +91,7 @@ export class KubernetesBuilder { public async build(): KubernetesBuilderReturn { const logger = this.env.logger; const config = this.env.config; + const permissions = this.env.permissions; logger.info('Initializing Kubernetes backend'); @@ -126,6 +129,7 @@ export class KubernetesBuilder { clusterSupplier, this.env.catalogApi, proxy, + permissions, ); return { @@ -262,10 +266,11 @@ export class KubernetesBuilder { clusterSupplier: KubernetesClustersSupplier, catalogApi: CatalogApi, proxy: KubernetesProxy, + permissionApi: PermissionEvaluator, ): express.Router { const logger = this.env.logger; const router = Router(); - router.use('/proxy', proxy.createRequestHandler()); + router.use('/proxy', proxy.createRequestHandler(permissionApi)); router.use(express.json()); // @deprecated diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index 178105ef79..8e9f27d994 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -18,9 +18,19 @@ import { ErrorResponseBody, ForwardedError, InputError, + NotAllowedError, NotFoundError, serializeError, } from '@backstage/errors'; +import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; +import { + kubernetesProxyReadPermission, + kubernetesProxyCreatePermission, +} from '@backstage/plugin-kubernetes-common'; +import { + PermissionEvaluator, + AuthorizeResult, +} from '@backstage/plugin-permission-common'; import { bufferFromFileOrString } from '@kubernetes/client-node'; import type { Request, RequestHandler } from 'express'; import { createProxyMiddleware } from 'http-proxy-middleware'; @@ -36,6 +46,13 @@ export const APPLICATION_JSON: string = 'application/json'; */ export const HEADER_KUBERNETES_CLUSTER: string = 'X-Kubernetes-Cluster'; +/** + * The header that is used to specify the Authentication Authorities token. + * e.x if using the google auth provider as your authentication authority then this field would be the google provided bearer token. + * @alpha + */ +export const HEADER_KUBERNETES_AUTH: string = 'X-Kubernetes-Authorization'; + /** * A proxy that routes requests to the Kubernetes API. * @@ -49,8 +66,33 @@ export class KubernetesProxy { private readonly clusterSupplier: KubernetesClustersSupplier, ) {} - public createRequestHandler(): RequestHandler { + public createRequestHandler( + permissionApi: PermissionEvaluator, + ): RequestHandler { return async (req, res, next) => { + const token = getBearerTokenFromAuthorizationHeader( + req.header('authorization'), + ); + + const authorizeResponse = ( + await permissionApi.authorize( + [ + { permission: kubernetesProxyReadPermission }, + { permission: kubernetesProxyCreatePermission }, + ], + { + token, + }, + ) + )[0]; + + if (authorizeResponse.result === AuthorizeResult.DENY) { + res + .status(403) + .json({ error: new NotAllowedError('Unauthorized').message }); + return; + } + const middleware = await this.getMiddleware(req); middleware(req, res, next); }; @@ -104,6 +146,11 @@ export class KubernetesProxy { res.status(500).json(body); }, + onProxyReq: (proxyReq, req) => { + // the kubernetes proxy endpoint expects a header field labeled `X-Kubernetes-Authorization` that will be used to authenticate with the Kubernetes Api. The token provided as a value should be an Authentication Providers bearer token. + const token = req.header('X-Kubernetes-Authorization') ?? ''; + proxyReq.setHeader('Authorization', token); + }, }); this.middlewareForClusterName.set(originalCluster.name, middleware); diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 341956553e..f7e58f535c 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -21,6 +21,7 @@ import express from 'express'; import { KubernetesBuilder } from './KubernetesBuilder'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { CatalogApi } from '@backstage/catalog-client'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; /** * @@ -32,6 +33,7 @@ export interface RouterOptions { catalogApi: CatalogApi; clusterSupplier?: KubernetesClustersSupplier; discovery: PluginEndpointDiscovery; + permissions: PermissionEvaluator; } /** diff --git a/plugins/kubernetes-backend/src/service/standaloneApplication.ts b/plugins/kubernetes-backend/src/service/standaloneApplication.ts index 8234f89d48..e3afb5a385 100644 --- a/plugins/kubernetes-backend/src/service/standaloneApplication.ts +++ b/plugins/kubernetes-backend/src/service/standaloneApplication.ts @@ -28,6 +28,7 @@ import { Logger } from 'winston'; import { createRouter } from './router'; import { ConfigReader } from '@backstage/config'; import { CatalogClient } from '@backstage/catalog-client'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; export interface ApplicationOptions { enableCors: boolean; @@ -47,6 +48,8 @@ export async function createStandaloneApplication( discoveryApi: SingleHostDiscovery.fromConfig(config), }); + const permissions = {} as PermissionEvaluator; + app.use(helmet()); if (enableCors) { app.use(cors()); @@ -54,7 +57,10 @@ export async function createStandaloneApplication( app.use(compression()); app.use(express.json()); app.use(requestLoggingHandler()); - app.use('/', await createRouter({ logger, config, discovery, catalogApi })); + app.use( + '/', + await createRouter({ logger, config, discovery, catalogApi, permissions }), + ); app.use(notFoundHandler()); app.use(errorHandler()); diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 2d83db84d4..50c7571e72 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -39,6 +39,7 @@ }, "dependencies": { "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", "@kubernetes/client-node": "0.18.1" }, "devDependencies": { diff --git a/plugins/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts index ade73e4f79..6aab437cd1 100644 --- a/plugins/kubernetes-common/src/index.ts +++ b/plugins/kubernetes-common/src/index.ts @@ -22,3 +22,8 @@ export * from './types'; export * from './catalog-entity-constants'; +export { + kubernetesProxyReadPermission, + kubernetesProxyCreatePermission, + kubernetesClusterPermissions, +} from './permissions'; diff --git a/plugins/kubernetes-common/src/permissions.ts b/plugins/kubernetes-common/src/permissions.ts new file mode 100644 index 0000000000..ef9d8580df --- /dev/null +++ b/plugins/kubernetes-common/src/permissions.ts @@ -0,0 +1,39 @@ +/* + * Copyright 2023 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 { createPermission } from '@backstage/plugin-permission-common'; + +/** This permission is used to authorize actions that involve using the kubernetes Proxy Endpoint /proxy + * @alpha + */ +export const kubernetesProxyReadPermission = createPermission({ + name: 'kubernetes.proxy.read', + attributes: { action: 'read' }, +}); + +export const kubernetesProxyCreatePermission = createPermission({ + name: 'kubernetes.proxy.create', + attributes: { action: 'create' }, +}); + +/** + * List of all cluster permissions. + * @alpha + */ +export const kubernetesClusterPermissions = [ + kubernetesProxyReadPermission, + kubernetesProxyCreatePermission, +]; diff --git a/yarn.lock b/yarn.lock index 50f067a32e..7c8b674c0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6843,6 +6843,7 @@ __metadata: dependencies: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" "@kubernetes/client-node": 0.18.1 languageName: unknown linkType: soft @@ -7462,6 +7463,32 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-proxy-restrict@^0.0.0, @backstage/plugin-proxy-restrict@workspace:plugins/proxy-restrict": + version: 0.0.0-use.local + resolution: "@backstage/plugin-proxy-restrict@workspace:plugins/proxy-restrict" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/dev-utils": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": ^4.0.0-alpha.57 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/node": "*" + cross-fetch: ^3.1.5 + msw: ^0.49.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + languageName: unknown + linkType: soft + "@backstage/plugin-rollbar-backend@workspace:^, @backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend" @@ -22469,6 +22496,7 @@ __metadata: "@backstage/plugin-pagerduty": "workspace:^" "@backstage/plugin-permission-react": "workspace:^" "@backstage/plugin-playlist": "workspace:^" + "@backstage/plugin-proxy-restrict": ^0.0.0 "@backstage/plugin-rollbar": "workspace:^" "@backstage/plugin-scaffolder": "workspace:^" "@backstage/plugin-scaffolder-react": "workspace:^" From 804f6d16b0cdc7814822a117e2b1d354396fa6c7 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Tue, 7 Feb 2023 15:38:33 -0500 Subject: [PATCH 208/511] adding changeset,api-report,addressing ci check Signed-off-by: Ruben Vallejo --- .changeset/eleven-bats-tease.md | 5 ++++ .changeset/wise-garlics-camp.md | 5 ++++ plugins/kubernetes-backend/api-report.md | 8 +++++- .../src/service/KubernetesProxy.test.ts | 26 +++++++++++++++--- plugins/kubernetes-common/api-report.md | 10 +++++++ plugins/kubernetes-common/src/permissions.ts | 5 +++- yarn.lock | 27 ------------------- 7 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 .changeset/eleven-bats-tease.md create mode 100644 .changeset/wise-garlics-camp.md diff --git a/.changeset/eleven-bats-tease.md b/.changeset/eleven-bats-tease.md new file mode 100644 index 0000000000..38c591ea3c --- /dev/null +++ b/.changeset/eleven-bats-tease.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +PermissionApi of type PermissionEvaluator must now be passed as a parameter when calling proxy.createRequestHandler() for the KubernetesProxyEndpoint. Kubernetes `/proxy` endpoint now requires two tokens in its header per request.The field `X-Kubernetes-Authentication` needs the value of a authentication authorities' bearer token.The field `Authorization` should contain a backstage identity token. diff --git a/.changeset/wise-garlics-camp.md b/.changeset/wise-garlics-camp.md new file mode 100644 index 0000000000..e7639ad71c --- /dev/null +++ b/.changeset/wise-garlics-camp.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-common': patch +--- + +Introduced proxy permission types to be used with the kubernetes proxy endpoint's permission framework integration. diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index a6a4bcfc58..431ddce244 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -17,6 +17,7 @@ import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; import type { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { Logger } from 'winston'; import type { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import type { RequestHandler } from 'express'; import { TokenCredential } from '@azure/identity'; @@ -200,6 +201,7 @@ export class KubernetesBuilder { clusterSupplier: KubernetesClustersSupplier, catalogApi: CatalogApi, proxy: KubernetesProxy, + permissionApi: PermissionEvaluator, ): express.Router; // (undocumented) protected buildServiceLocator( @@ -271,6 +273,8 @@ export interface KubernetesEnvironment { config: Config; // (undocumented) logger: Logger; + // (undocumented) + permissions: PermissionEvaluator; } // @public @@ -340,7 +344,7 @@ export type KubernetesObjectTypes = export class KubernetesProxy { constructor(logger: Logger, clusterSupplier: KubernetesClustersSupplier); // (undocumented) - createRequestHandler(): RequestHandler; + createRequestHandler(permissionApi: PermissionEvaluator): RequestHandler; } // @public @@ -418,6 +422,8 @@ export interface RouterOptions { discovery: PluginEndpointDiscovery; // (undocumented) logger: Logger; + // (undocumented) + permissions: PermissionEvaluator; } // @public (undocumented) diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts index 4254bb33da..a033e7d52d 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts @@ -30,6 +30,10 @@ import { HEADER_KUBERNETES_CLUSTER, KubernetesProxy, } from './KubernetesProxy'; +import { + AuthorizeResult, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; describe('KubernetesProxy', () => { let proxy: KubernetesProxy; @@ -64,6 +68,11 @@ describe('KubernetesProxy', () => { getClusters: jest.fn(), }; + const permissions: jest.Mocked = { + authorize: jest.fn(), + authorizeConditional: jest.fn(), + }; + beforeEach(() => { jest.resetAllMocks(); proxy = new KubernetesProxy(getVoidLogger(), clusterSupplier); @@ -71,13 +80,16 @@ describe('KubernetesProxy', () => { it('should return a ERROR_NOT_FOUND if no clusters are found', async () => { clusterSupplier.getClusters.mockResolvedValue([]); + permissions.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); const req = buildMockRequest('test', 'api'); const { res, next } = getMockRes(); - await expect(proxy.createRequestHandler()(req, res, next)).rejects.toThrow( - NotFoundError, - ); + await expect( + proxy.createRequestHandler(permissions)(req, res, next), + ).rejects.toThrow(NotFoundError); }); it('should pass the exact response from Kubernetes', async () => { @@ -100,7 +112,13 @@ describe('KubernetesProxy', () => { authProvider: 'serviceAccount', }, ] as ClusterDetails[]); - const app = express().use('/mountpath', proxy.createRequestHandler()); + const app = express().use( + '/mountpath', + proxy.createRequestHandler(permissions), + ); + permissions.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); const requestPromise = request(app) .get('/mountpath/api') .set(HEADER_KUBERNETES_CLUSTER, 'cluster1'); diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index fb41895f1a..a06780a61a 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BasicPermission } from '@backstage/plugin-permission-common'; import { Entity } from '@backstage/catalog-model'; import type { JsonObject } from '@backstage/types'; import { PodStatus } from '@kubernetes/client-node'; @@ -206,6 +207,9 @@ export interface JobsFetchResponse { type: 'jobs'; } +// @alpha +export const kubernetesClusterPermissions: BasicPermission[]; + // @public (undocumented) export type KubernetesErrorTypes = | 'BAD_REQUEST' @@ -217,6 +221,12 @@ export type KubernetesErrorTypes = // @public (undocumented) export type KubernetesFetchError = StatusError | RawFetchError; +// @alpha +export const kubernetesProxyCreatePermission: BasicPermission; + +// @alpha +export const kubernetesProxyReadPermission: BasicPermission; + // @public (undocumented) export interface KubernetesRequestAuth { // (undocumented) diff --git a/plugins/kubernetes-common/src/permissions.ts b/plugins/kubernetes-common/src/permissions.ts index ef9d8580df..854a188506 100644 --- a/plugins/kubernetes-common/src/permissions.ts +++ b/plugins/kubernetes-common/src/permissions.ts @@ -16,7 +16,7 @@ import { createPermission } from '@backstage/plugin-permission-common'; -/** This permission is used to authorize actions that involve using the kubernetes Proxy Endpoint /proxy +/** This permission is used to authorize `read` actions that involve using the kubernetes Proxy Endpoint /proxy * @alpha */ export const kubernetesProxyReadPermission = createPermission({ @@ -24,6 +24,9 @@ export const kubernetesProxyReadPermission = createPermission({ attributes: { action: 'read' }, }); +/** This permission is used to authorize `create` actions that involve using the kubernetes Proxy Endpoint /proxy + * @alpha + */ export const kubernetesProxyCreatePermission = createPermission({ name: 'kubernetes.proxy.create', attributes: { action: 'create' }, diff --git a/yarn.lock b/yarn.lock index 7c8b674c0f..075384ae64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7463,32 +7463,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-proxy-restrict@^0.0.0, @backstage/plugin-proxy-restrict@workspace:plugins/proxy-restrict": - version: 0.0.0-use.local - resolution: "@backstage/plugin-proxy-restrict@workspace:plugins/proxy-restrict" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 - "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^12.1.3 - "@testing-library/user-event": ^14.0.0 - "@types/node": "*" - cross-fetch: ^3.1.5 - msw: ^0.49.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - languageName: unknown - linkType: soft - "@backstage/plugin-rollbar-backend@workspace:^, @backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend" @@ -22496,7 +22470,6 @@ __metadata: "@backstage/plugin-pagerduty": "workspace:^" "@backstage/plugin-permission-react": "workspace:^" "@backstage/plugin-playlist": "workspace:^" - "@backstage/plugin-proxy-restrict": ^0.0.0 "@backstage/plugin-rollbar": "workspace:^" "@backstage/plugin-scaffolder": "workspace:^" "@backstage/plugin-scaffolder-react": "workspace:^" From a711ad54da54e45e9633e6caa0464a5f4027c686 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Thu, 9 Feb 2023 12:12:07 -0500 Subject: [PATCH 209/511] Revert kubernetes create and read permissions to singular proxy permission, reword changeset, add permission parameter to install doc Signed-off-by: Ruben Vallejo --- .changeset/eleven-bats-tease.md | 2 +- docs/features/kubernetes/installation.md | 1 + .../src/service/KubernetesProxy.ts | 10 ++------- plugins/kubernetes-common/src/index.ts | 3 +-- plugins/kubernetes-common/src/permissions.ts | 21 +++++-------------- 5 files changed, 10 insertions(+), 27 deletions(-) diff --git a/.changeset/eleven-bats-tease.md b/.changeset/eleven-bats-tease.md index 38c591ea3c..400a0fb722 100644 --- a/.changeset/eleven-bats-tease.md +++ b/.changeset/eleven-bats-tease.md @@ -2,4 +2,4 @@ '@backstage/plugin-kubernetes-backend': minor --- -PermissionApi of type PermissionEvaluator must now be passed as a parameter when calling proxy.createRequestHandler() for the KubernetesProxyEndpoint. Kubernetes `/proxy` endpoint now requires two tokens in its header per request.The field `X-Kubernetes-Authentication` needs the value of a authentication authorities' bearer token.The field `Authorization` should contain a backstage identity token. +`KubernetesBuilder.create` now requires a `permissions` field of type `PermissionEvaluator`. The kubernetes `/proxy` endpoint now requires two tokens: the `X-Kubernetes-Authorization` header should contain a bearer token for the target cluster, and the `Authorization` header should contain a backstage identity token. diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md index ae7826a804..17028ef90f 100644 --- a/docs/features/kubernetes/installation.md +++ b/docs/features/kubernetes/installation.md @@ -75,6 +75,7 @@ export default async function createPlugin( logger: env.logger, config: env.config, catalogApi, + permissions: env.permissions, }).build(); return router; } diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index 8e9f27d994..59d209d93a 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -23,10 +23,7 @@ import { serializeError, } from '@backstage/errors'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; -import { - kubernetesProxyReadPermission, - kubernetesProxyCreatePermission, -} from '@backstage/plugin-kubernetes-common'; +import { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common'; import { PermissionEvaluator, AuthorizeResult, @@ -76,10 +73,7 @@ export class KubernetesProxy { const authorizeResponse = ( await permissionApi.authorize( - [ - { permission: kubernetesProxyReadPermission }, - { permission: kubernetesProxyCreatePermission }, - ], + [{ permission: kubernetesProxyPermission }], { token, }, diff --git a/plugins/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts index 6aab437cd1..88b600f17b 100644 --- a/plugins/kubernetes-common/src/index.ts +++ b/plugins/kubernetes-common/src/index.ts @@ -23,7 +23,6 @@ export * from './types'; export * from './catalog-entity-constants'; export { - kubernetesProxyReadPermission, - kubernetesProxyCreatePermission, + kubernetesProxyPermission, kubernetesClusterPermissions, } from './permissions'; diff --git a/plugins/kubernetes-common/src/permissions.ts b/plugins/kubernetes-common/src/permissions.ts index 854a188506..58eb47fbf3 100644 --- a/plugins/kubernetes-common/src/permissions.ts +++ b/plugins/kubernetes-common/src/permissions.ts @@ -16,27 +16,16 @@ import { createPermission } from '@backstage/plugin-permission-common'; -/** This permission is used to authorize `read` actions that involve using the kubernetes Proxy Endpoint /proxy +/** This permission is used to check access to the proxy endpoint * @alpha */ -export const kubernetesProxyReadPermission = createPermission({ - name: 'kubernetes.proxy.read', - attributes: { action: 'read' }, -}); - -/** This permission is used to authorize `create` actions that involve using the kubernetes Proxy Endpoint /proxy - * @alpha - */ -export const kubernetesProxyCreatePermission = createPermission({ - name: 'kubernetes.proxy.create', - attributes: { action: 'create' }, +export const kubernetesProxyPermission = createPermission({ + name: 'kubernetes.proxy', + attributes: {}, }); /** * List of all cluster permissions. * @alpha */ -export const kubernetesClusterPermissions = [ - kubernetesProxyReadPermission, - kubernetesProxyCreatePermission, -]; +export const kubernetesClusterPermissions = [kubernetesProxyPermission]; From e2ff409a3b6780849b1ccafd4b7d6f4c24fc70e3 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Thu, 9 Feb 2023 15:22:18 -0500 Subject: [PATCH 210/511] Add permission integration router which allows us to list permissions available to the plugin Signed-off-by: Ruben Vallejo --- plugins/kubernetes-backend/package.json | 2 ++ .../src/service/KubernetesBuilder.test.ts | 30 +++++++++++++++---- .../src/service/KubernetesBuilder.ts | 13 +++++++- plugins/kubernetes-common/api-report.md | 10 +++---- plugins/kubernetes-common/src/index.ts | 3 +- plugins/kubernetes-common/src/permissions.ts | 10 +++++-- yarn.lock | 2 ++ 7 files changed, 55 insertions(+), 15 deletions(-) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 850f3c67f4..e052fb4f58 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -42,6 +42,8 @@ "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-permission-node": "workspace:^", "@google-cloud/container": "^4.0.0", "@jest-mock/express": "^2.0.1", "@kubernetes/client-node": "0.18.1", diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts index 695649b9f3..8eb7a066df 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts @@ -286,7 +286,6 @@ describe('KubernetesBuilder', () => { expect(response.status).toEqual(200); }); }); - describe('post /proxy', () => { const worker = setupServer(); setupRequestMockHandlers(worker); @@ -340,11 +339,11 @@ describe('KubernetesBuilder', () => { it('supports yaml content type with permission set to allow', async () => { const requestBody = `--- - kind: Namespace - apiVersion: v1 - metadata: - name: new-ns - `; +kind: Namespace +apiVersion: v1 +metadata: + name: new-ns +`; permissions.authorize.mockReturnValue( Promise.resolve([{ result: AuthorizeResult.ALLOW }]), @@ -389,4 +388,23 @@ describe('KubernetesBuilder', () => { expect(response.status).toEqual(403); }); }); + describe('get /.well-known/backstage/permissions/metadata', () => { + it('lists permissions supported by the kubernetes plugin', async () => { + const response = await request(app).get( + '/.well-known/backstage/permissions/metadata', + ); + + expect(response.status).toEqual(200); + expect(response.body).toMatchObject({ + permissions: [ + { + type: 'basic', + name: 'kubernetes.proxy', + attributes: {}, + }, + ], + rules: [], + }); + }); + }); }); diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index ea098ab596..c84f87b36f 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -15,7 +15,12 @@ */ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; +import { + kubernetesPermissions, + RESOURCE_TYPE_KUBERNETES_RESOURCE, +} from '@backstage/plugin-kubernetes-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; import express from 'express'; import Router from 'express-promise-router'; import { Duration } from 'luxon'; @@ -272,7 +277,13 @@ export class KubernetesBuilder { const router = Router(); router.use('/proxy', proxy.createRequestHandler(permissionApi)); router.use(express.json()); - + router.use( + createPermissionIntegrationRouter({ + resourceType: RESOURCE_TYPE_KUBERNETES_RESOURCE, + permissions: kubernetesPermissions, + rules: [], + }), + ); // @deprecated router.post('/services/:serviceId', async (req, res) => { const serviceId = req.params.serviceId; diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index a06780a61a..5fdd40d152 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -207,9 +207,6 @@ export interface JobsFetchResponse { type: 'jobs'; } -// @alpha -export const kubernetesClusterPermissions: BasicPermission[]; - // @public (undocumented) export type KubernetesErrorTypes = | 'BAD_REQUEST' @@ -222,10 +219,10 @@ export type KubernetesErrorTypes = export type KubernetesFetchError = StatusError | RawFetchError; // @alpha -export const kubernetesProxyCreatePermission: BasicPermission; +export const kubernetesPermissions: BasicPermission[]; // @alpha -export const kubernetesProxyReadPermission: BasicPermission; +export const kubernetesProxyPermission: BasicPermission; // @public (undocumented) export interface KubernetesRequestAuth { @@ -291,6 +288,9 @@ export interface ReplicaSetsFetchResponse { type: 'replicasets'; } +// @alpha +export const RESOURCE_TYPE_KUBERNETES_RESOURCE = 'kubernetes-resource'; + // @public (undocumented) export interface ServiceFetchResponse { // (undocumented) diff --git a/plugins/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts index 88b600f17b..e9fb2b35d3 100644 --- a/plugins/kubernetes-common/src/index.ts +++ b/plugins/kubernetes-common/src/index.ts @@ -23,6 +23,7 @@ export * from './types'; export * from './catalog-entity-constants'; export { + RESOURCE_TYPE_KUBERNETES_RESOURCE, kubernetesProxyPermission, - kubernetesClusterPermissions, + kubernetesPermissions, } from './permissions'; diff --git a/plugins/kubernetes-common/src/permissions.ts b/plugins/kubernetes-common/src/permissions.ts index 58eb47fbf3..3123796aa3 100644 --- a/plugins/kubernetes-common/src/permissions.ts +++ b/plugins/kubernetes-common/src/permissions.ts @@ -16,6 +16,12 @@ import { createPermission } from '@backstage/plugin-permission-common'; +/** + * Permission resource type which corresponds to cluster entities. + * @alpha + */ +export const RESOURCE_TYPE_KUBERNETES_RESOURCE = 'kubernetes-resource'; + /** This permission is used to check access to the proxy endpoint * @alpha */ @@ -25,7 +31,7 @@ export const kubernetesProxyPermission = createPermission({ }); /** - * List of all cluster permissions. + * List of all Kubernetes permissions. * @alpha */ -export const kubernetesClusterPermissions = [kubernetesProxyPermission]; +export const kubernetesPermissions = [kubernetesProxyPermission]; diff --git a/yarn.lock b/yarn.lock index 075384ae64..71b43756fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6807,6 +6807,8 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" "@google-cloud/container": ^4.0.0 "@jest-mock/express": ^2.0.1 "@kubernetes/client-node": 0.18.1 From c04498db278bf3751964207c69d24a37706dea27 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Mon, 13 Feb 2023 16:02:52 -0500 Subject: [PATCH 211/511] Refactor header names, add options object to requestHandler and add new changes to api-reports and changeset along with docs Signed-off-by: Ruben Vallejo --- .changeset/eleven-bats-tease.md | 2 +- docs/features/kubernetes/proxy.md | 15 ++++++++--- plugins/kubernetes-backend/api-report.md | 12 ++++++++- .../src/service/KubernetesBuilder.ts | 9 ++----- .../src/service/KubernetesProxy.test.ts | 10 +++---- .../src/service/KubernetesProxy.ts | 27 ++++++++++++------- .../kubernetes-backend/src/service/index.ts | 7 ++++- plugins/kubernetes-common/api-report.md | 7 ++--- plugins/kubernetes-common/src/index.ts | 1 - plugins/kubernetes-common/src/permissions.ts | 10 ++----- 10 files changed, 59 insertions(+), 41 deletions(-) diff --git a/.changeset/eleven-bats-tease.md b/.changeset/eleven-bats-tease.md index 400a0fb722..732055ca52 100644 --- a/.changeset/eleven-bats-tease.md +++ b/.changeset/eleven-bats-tease.md @@ -2,4 +2,4 @@ '@backstage/plugin-kubernetes-backend': minor --- -`KubernetesBuilder.create` now requires a `permissions` field of type `PermissionEvaluator`. The kubernetes `/proxy` endpoint now requires two tokens: the `X-Kubernetes-Authorization` header should contain a bearer token for the target cluster, and the `Authorization` header should contain a backstage identity token. +**BREAKING**: `KubernetesBuilder.create` now requires a `permissions` field of type `PermissionEvaluator`. The kubernetes `/proxy` endpoint now requires two tokens: the `Backstage-Kubernetes-Authorization` header should contain a bearer token for the target cluster, and the `Authorization` header should contain a backstage identity token. The kubernetes `/proxy` endpoint now requires a `Backstage-Kubernetes-Cluster` header replacing the previously required `X-Kubernetes-Cluster` header. diff --git a/docs/features/kubernetes/proxy.md b/docs/features/kubernetes/proxy.md index 5848d62e3e..08d80d3e30 100644 --- a/docs/features/kubernetes/proxy.md +++ b/docs/features/kubernetes/proxy.md @@ -23,6 +23,7 @@ import { googleAuthApiRef, useApi, } from '@backstage/core-plugin-api'; +import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; const CLUSTER_NAME = ''; // use a known cluster name @@ -32,6 +33,11 @@ const token = await googleAuthApi.getAccessToken( 'https://www.googleapis.com/auth/cloud-platform', ); +// get a bearer token from backstage `/auth` +const userToken = getBearerTokenFromAuthorizationHeader( + req.header('authorization'), +); + const discoveryApi = useApi(discoveryApiRef); const kubernetesBaseUrl = await discoveryApi.getBaseUrl('kubernetes'); const kubernetesProxyEndpoint = `${kubernetesBaseUrl}/proxy`; @@ -40,8 +46,9 @@ const kubernetesProxyEndpoint = `${kubernetesBaseUrl}/proxy`; await fetch(`${kubernetesProxyEndpoint}/api/v1/namespaces`, { method: 'GET', headers: { - 'X-Kubernetes-Cluster': CLUSTER_NAME, - Authorization: `Bearer ${token}`, + 'Backstage-Kubernetes-Cluster': CLUSTER_NAME, + 'Backstage-Kubernetes-Authorization': `Bearer ${token}`, + Authorization: `Bearer ${userToken}`, }, }); ``` @@ -49,7 +56,7 @@ await fetch(`${kubernetesProxyEndpoint}/api/v1/namespaces`, { ## How it works The proxy will interpret the -[`X-Kubernetes-Cluster` +[`Backstage-Kubernetes-Cluster` header](https://backstage.io/docs/reference/plugin-kubernetes-backend.header_kubernetes_cluster) as the name of the cluster to target. This name will be compared to each cluster returned by all the configured [cluster @@ -60,6 +67,8 @@ the value in the header will be targeted. Then the request will be forwarded verbatim (but with the endpoint's base URL prefix stripped) to the cluster. +The proxy will also interpret the `Backstage-Kubernetes-Authorization` header as the `Authorization` header to use when forwarding a request to a target cluster. + ## Authentication Until some security and permission decisions are made (see [this diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 431ddce244..449131a26e 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -142,6 +142,9 @@ export class GoogleServiceAccountAuthTranslator ): Promise; } +// @public +export const HEADER_KUBERNETES_AUTH: string; + // @public export const HEADER_KUBERNETES_CLUSTER: string; @@ -344,9 +347,16 @@ export type KubernetesObjectTypes = export class KubernetesProxy { constructor(logger: Logger, clusterSupplier: KubernetesClustersSupplier); // (undocumented) - createRequestHandler(permissionApi: PermissionEvaluator): RequestHandler; + createRequestHandler( + options: KubernetesProxyCreateRequestHandlerOptions, + ): RequestHandler; } +// @public +export type KubernetesProxyCreateRequestHandlerOptions = { + permissionApi: PermissionEvaluator; +}; + // @public export interface KubernetesServiceLocator { // (undocumented) diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index c84f87b36f..367e5edef3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -15,10 +15,7 @@ */ import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; -import { - kubernetesPermissions, - RESOURCE_TYPE_KUBERNETES_RESOURCE, -} from '@backstage/plugin-kubernetes-common'; +import { kubernetesPermissions } from '@backstage/plugin-kubernetes-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; import express from 'express'; @@ -275,13 +272,11 @@ export class KubernetesBuilder { ): express.Router { const logger = this.env.logger; const router = Router(); - router.use('/proxy', proxy.createRequestHandler(permissionApi)); + router.use('/proxy', proxy.createRequestHandler({ permissionApi })); router.use(express.json()); router.use( createPermissionIntegrationRouter({ - resourceType: RESOURCE_TYPE_KUBERNETES_RESOURCE, permissions: kubernetesPermissions, - rules: [], }), ); // @deprecated diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts index a033e7d52d..d2404af839 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts @@ -68,7 +68,7 @@ describe('KubernetesProxy', () => { getClusters: jest.fn(), }; - const permissions: jest.Mocked = { + const permissionApi: jest.Mocked = { authorize: jest.fn(), authorizeConditional: jest.fn(), }; @@ -80,7 +80,7 @@ describe('KubernetesProxy', () => { it('should return a ERROR_NOT_FOUND if no clusters are found', async () => { clusterSupplier.getClusters.mockResolvedValue([]); - permissions.authorize.mockReturnValue( + permissionApi.authorize.mockReturnValue( Promise.resolve([{ result: AuthorizeResult.ALLOW }]), ); @@ -88,7 +88,7 @@ describe('KubernetesProxy', () => { const { res, next } = getMockRes(); await expect( - proxy.createRequestHandler(permissions)(req, res, next), + proxy.createRequestHandler({ permissionApi })(req, res, next), ).rejects.toThrow(NotFoundError); }); @@ -114,9 +114,9 @@ describe('KubernetesProxy', () => { ] as ClusterDetails[]); const app = express().use( '/mountpath', - proxy.createRequestHandler(permissions), + proxy.createRequestHandler({ permissionApi }), ); - permissions.authorize.mockReturnValue( + permissionApi.authorize.mockReturnValue( Promise.resolve([{ result: AuthorizeResult.ALLOW }]), ); const requestPromise = request(app) diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index 59d209d93a..49a381b75a 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -41,14 +41,24 @@ export const APPLICATION_JSON: string = 'application/json'; * * @public */ -export const HEADER_KUBERNETES_CLUSTER: string = 'X-Kubernetes-Cluster'; +export const HEADER_KUBERNETES_CLUSTER: string = 'Backstage-Kubernetes-Cluster'; /** * The header that is used to specify the Authentication Authorities token. * e.x if using the google auth provider as your authentication authority then this field would be the google provided bearer token. - * @alpha + * @public */ -export const HEADER_KUBERNETES_AUTH: string = 'X-Kubernetes-Authorization'; +export const HEADER_KUBERNETES_AUTH: string = + 'Backstage-Kubernetes-Authorization'; + +/** + * The options object expected to be passed as a parameter to KubernetesProxy.createRequestHandler(). + * + * @public + */ +export type KubernetesProxyCreateRequestHandlerOptions = { + permissionApi: PermissionEvaluator; +}; /** * A proxy that routes requests to the Kubernetes API. @@ -64,8 +74,9 @@ export class KubernetesProxy { ) {} public createRequestHandler( - permissionApi: PermissionEvaluator, + options: KubernetesProxyCreateRequestHandlerOptions, ): RequestHandler { + const { permissionApi } = options; return async (req, res, next) => { const token = getBearerTokenFromAuthorizationHeader( req.header('authorization'), @@ -81,9 +92,7 @@ export class KubernetesProxy { )[0]; if (authorizeResponse.result === AuthorizeResult.DENY) { - res - .status(403) - .json({ error: new NotAllowedError('Unauthorized').message }); + res.status(403).json({ error: new NotAllowedError('Unauthorized') }); return; } @@ -141,8 +150,8 @@ export class KubernetesProxy { res.status(500).json(body); }, onProxyReq: (proxyReq, req) => { - // the kubernetes proxy endpoint expects a header field labeled `X-Kubernetes-Authorization` that will be used to authenticate with the Kubernetes Api. The token provided as a value should be an Authentication Providers bearer token. - const token = req.header('X-Kubernetes-Authorization') ?? ''; + // the kubernetes proxy endpoint expects a header field labeled `Backstage-Kubernetes-Authorization` that will be used to authenticate with the Kubernetes Api. The token provided as a value should be an bearer token for the target cluster. + const token = req.header(HEADER_KUBERNETES_AUTH) ?? ''; proxyReq.setHeader('Authorization', token); }, }); diff --git a/plugins/kubernetes-backend/src/service/index.ts b/plugins/kubernetes-backend/src/service/index.ts index 620f788ac2..2f3e907879 100644 --- a/plugins/kubernetes-backend/src/service/index.ts +++ b/plugins/kubernetes-backend/src/service/index.ts @@ -16,5 +16,10 @@ export * from './KubernetesBuilder'; export { DEFAULT_OBJECTS } from './KubernetesFanOutHandler'; -export { HEADER_KUBERNETES_CLUSTER, KubernetesProxy } from './KubernetesProxy'; +export { + HEADER_KUBERNETES_CLUSTER, + KubernetesProxy, + HEADER_KUBERNETES_AUTH, +} from './KubernetesProxy'; +export type { KubernetesProxyCreateRequestHandlerOptions } from './KubernetesProxy'; export * from './router'; diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index 5fdd40d152..6c88074e50 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -218,10 +218,10 @@ export type KubernetesErrorTypes = // @public (undocumented) export type KubernetesFetchError = StatusError | RawFetchError; -// @alpha +// @public export const kubernetesPermissions: BasicPermission[]; -// @alpha +// @public export const kubernetesProxyPermission: BasicPermission; // @public (undocumented) @@ -288,9 +288,6 @@ export interface ReplicaSetsFetchResponse { type: 'replicasets'; } -// @alpha -export const RESOURCE_TYPE_KUBERNETES_RESOURCE = 'kubernetes-resource'; - // @public (undocumented) export interface ServiceFetchResponse { // (undocumented) diff --git a/plugins/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts index e9fb2b35d3..d5cf8dcf61 100644 --- a/plugins/kubernetes-common/src/index.ts +++ b/plugins/kubernetes-common/src/index.ts @@ -23,7 +23,6 @@ export * from './types'; export * from './catalog-entity-constants'; export { - RESOURCE_TYPE_KUBERNETES_RESOURCE, kubernetesProxyPermission, kubernetesPermissions, } from './permissions'; diff --git a/plugins/kubernetes-common/src/permissions.ts b/plugins/kubernetes-common/src/permissions.ts index 3123796aa3..d3ccbe8171 100644 --- a/plugins/kubernetes-common/src/permissions.ts +++ b/plugins/kubernetes-common/src/permissions.ts @@ -16,14 +16,8 @@ import { createPermission } from '@backstage/plugin-permission-common'; -/** - * Permission resource type which corresponds to cluster entities. - * @alpha - */ -export const RESOURCE_TYPE_KUBERNETES_RESOURCE = 'kubernetes-resource'; - /** This permission is used to check access to the proxy endpoint - * @alpha + * @public */ export const kubernetesProxyPermission = createPermission({ name: 'kubernetes.proxy', @@ -32,6 +26,6 @@ export const kubernetesProxyPermission = createPermission({ /** * List of all Kubernetes permissions. - * @alpha + * @public */ export const kubernetesPermissions = [kubernetesProxyPermission]; From 7c4cf78bd8eac5a5542c816cc54454198b79664a Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Mon, 13 Feb 2023 17:32:11 -0500 Subject: [PATCH 212/511] Add disable proxy endpoint section to docs Signed-off-by: Ruben Vallejo --- docs/features/kubernetes/proxy.md | 78 +++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 14 deletions(-) diff --git a/docs/features/kubernetes/proxy.md b/docs/features/kubernetes/proxy.md index 08d80d3e30..b53dfeb29d 100644 --- a/docs/features/kubernetes/proxy.md +++ b/docs/features/kubernetes/proxy.md @@ -22,8 +22,8 @@ import { discoveryApiRef, googleAuthApiRef, useApi, + identityApiRef, } from '@backstage/core-plugin-api'; -import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; const CLUSTER_NAME = ''; // use a known cluster name @@ -33,10 +33,9 @@ const token = await googleAuthApi.getAccessToken( 'https://www.googleapis.com/auth/cloud-platform', ); -// get a bearer token from backstage `/auth` -const userToken = getBearerTokenFromAuthorizationHeader( - req.header('authorization'), -); +// get a backstage ID token +const identityApi = useApi(identityApiRef); +const { token: userToken } = await identityApi.getCredentials(); const discoveryApi = useApi(discoveryApiRef); const kubernetesBaseUrl = await discoveryApi.getBaseUrl('kubernetes'); @@ -56,18 +55,19 @@ await fetch(`${kubernetesProxyEndpoint}/api/v1/namespaces`, { ## How it works The proxy will interpret the -[`Backstage-Kubernetes-Cluster` -header](https://backstage.io/docs/reference/plugin-kubernetes-backend.header_kubernetes_cluster) -as the name of the cluster to target. This name will be compared to each cluster +[`Backstage-Kubernetes-Cluster`](https://backstage.io/docs/reference/plugin-kubernetes-backend.header_kubernetes_cluster) +header as the name of the cluster to target. This name will be compared to each cluster returned by all the configured [cluster locators](https://backstage.io/docs/features/kubernetes/configuration#clusterlocatormethods) -- the first cluster whose [`name` field](https://backstage.io/docs/features/kubernetes/configuration#clustersname) matches the value in the header will be targeted. -Then the request will be forwarded verbatim (but with the endpoint's base URL -prefix stripped) to the cluster. +Then the request will be forwarded to the cluster. -The proxy will also interpret the `Backstage-Kubernetes-Authorization` header as the `Authorization` header to use when forwarding a request to a target cluster. +Overall, the only changes to each request are: + +- the endpoint's base URL prefix is stripped. +- the `Backstage-Kubernetes-Authorization` header becomes the `Authorization` header that is used when forwarding the request. ## Authentication @@ -82,9 +82,59 @@ providers](https://backstage.io/docs/features/kubernetes/authentication#client-s The proxy has no provisions for mTLS, so it cannot be used to connect to clusters using the [x509 Client Certs](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) -authentication strategy. [Bearer -tokens](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#putting-a-bearer-token-in-a-request) -will be forwarded as-is. +authentication strategy.\ +The current `/proxy` Implementation expects a +[Bearer +token](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#putting-a-bearer-token-in-a-request) +to be provided as a `Backstage-Kubernetes-Authorization` header for a target cluster. This token will be used as the `Authorization` header when forwarding a request to a target cluster. + +## How to disable the proxy endpoint via PermissionPolicy + +The kubernetes plugin can disable the use of the `proxy` endpoint by leveraging the permission framework. This integration allows admins to use well defined PermissionPolicies to restrict the use of the endpoint all together. The `proxy` endpoint can return 403 errors even if it has a valid ID token attached that a cluster would authorize thus allowing integrators the confidence that Backstage is not accessing kubernetes clusters on behalf of undesired parties. + +This feature assumes your backstage instance has enabled the [permissions framework](https://backstage.io/docs/permissions/getting-started) + +A sample policy like: + +[packages/backend/src/plugins/permissions.ts](https://github.com/backstage/backstage/blob/master/packages/backend/src/plugins/permission.ts) + +```typescript +import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; +import { + AuthorizeResult, + PolicyDecision, +} from '@backstage/plugin-permission-common'; +import { + PermissionPolicy, + PolicyQuery, +} from '@backstage/plugin-permission-node'; + +class KubernetesDenyAllProxyEndpointPolicy implements PermissionPolicy { + async handle( + request: PolicyQuery, + user?: BackstageIdentityResponse, + ): Promise { + if (request.permission.name === 'kubernetes.proxy') { + return { + result: AuthorizeResult.DENY, + }; + } + return { result: AuthorizeResult.ALLOW }; + } +} +``` + +would leverage the permission framework to return the following response: + +```json +{ + "error": { + "name": "NotAllowedError" + } +} +``` + +even if a valid ID token was attached that a cluster would authorize. ## Other known limitations From 3cadc86c03915f2d26694acc5291664fbc3f1f33 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:55:32 +0000 Subject: [PATCH 213/511] fix(deps): update dependency style-loader to v3.3.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 50f067a32e..6ed91c40a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36364,11 +36364,11 @@ __metadata: linkType: hard "style-loader@npm:^3.3.1": - version: 3.3.1 - resolution: "style-loader@npm:3.3.1" + version: 3.3.2 + resolution: "style-loader@npm:3.3.2" peerDependencies: webpack: ^5.0.0 - checksum: 470feef680f59e2fce4d6601b5c55b88c01ad8d1dd693c528ffd591ff5fd7c01a4eff3bdbe62f26f847d6bd2430c9ab594be23307cfe7a3446ab236683f0d066 + checksum: 5ee5ce2dc885369eccb55d429376e83d02570d473ac5edeb69fd65ee894847f1e51429cf078351f617bd04516ece8a1dd967f9f40464bd8fa76d903c6b2a6f08 languageName: node linkType: hard From 9de5ec0f260ea62ef1f66f94a775a69cd5bc17a1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:55:58 +0000 Subject: [PATCH 214/511] fix(deps): update dependency webpack to v5.76.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 50f067a32e..adc5385db7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38613,8 +38613,8 @@ __metadata: linkType: hard "webpack@npm:^5, webpack@npm:^5.70.0": - version: 5.76.1 - resolution: "webpack@npm:5.76.1" + version: 5.76.2 + resolution: "webpack@npm:5.76.2" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -38645,7 +38645,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: b01fe0bc2dbca0e10d290ddb0bf81e807a031de48028176e2b21afd696b4d3f25ab9accdad888ef4a1f7c7f4d41f13d5bf2395b7653fdf3e5e3dafa54e56dab2 + checksum: 86db98299a175c371031449c26077e87b33acd8f45de7f7945ed4b9b37c8ca11bc5169af9c44743efccd4d55e08042a3aa3a3bc42aff831309a0821ffbcd395e languageName: node linkType: hard From 3fd48dc9ddd32618b4483b66bc957ef6f119ff38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:40:05 +0000 Subject: [PATCH 215/511] chore(deps): update dependency @types/sanitize-html to v2.9.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c0e7407ca4..eddf922161 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15551,11 +15551,11 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.8.1 - resolution: "@types/sanitize-html@npm:2.8.1" + version: 2.9.0 + resolution: "@types/sanitize-html@npm:2.9.0" dependencies: htmlparser2: ^8.0.0 - checksum: 9c07d3a9d925e291472f74b097fb179b32659ea01834f728887811e5fc75cf2b17d844e32e97c0e583eba993af86a3f8250c82c8fa3152abf9ff2a8582972906 + checksum: b60f42b740bbfb1b1434ce8b43925a38ecc608b60aa654fd009d2e22e33f324b61d370768c55bd2fd98e03de08518ffa8911d61606c483526fb931bb8b59d1b0 languageName: node linkType: hard From 9b71959b51fdcc0665045529f485ee4795871dca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:40:35 +0000 Subject: [PATCH 216/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.292.0 Signed-off-by: Renovate Bot --- yarn.lock | 1504 ++++++++++++++++++++++++++--------------------------- 1 file changed, 729 insertions(+), 775 deletions(-) diff --git a/yarn.lock b/yarn.lock index c0e7407ca4..743b223443 100644 --- a/yarn.lock +++ b/yarn.lock @@ -489,595 +489,582 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.272.0, @aws-sdk/abort-controller@npm:^3.208.0": - version: 3.272.0 - resolution: "@aws-sdk/abort-controller@npm:3.272.0" +"@aws-sdk/abort-controller@npm:3.292.0, @aws-sdk/abort-controller@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/abort-controller@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 298974b97641732c74272dd645b55c15aaefd891b5a868c279ae2abe3c3e0753e7e6f218e8c3712196ca2d4f19796623cb48f9e9816b5bbbc4eb38247d07d0fe + checksum: dc290c1191de6026a5a0b5a4c5b57b7e2b9373d5d47934e32ea458c48dc513fa1a06c5a796ee65ca42fcc9d12e168b7fbbde82979b58ce8e224bba19797de5d4 languageName: node linkType: hard -"@aws-sdk/chunked-blob-reader-native@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.208.0" +"@aws-sdk/chunked-blob-reader-native@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.292.0" dependencies: - "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/util-base64": 3.292.0 tslib: ^2.3.1 - checksum: 6df294c66d6acaa3de2c5f3444a62577d0effa451a65b6a1606df538cfc865d257f01c74e711b36741a2c59f43385bd393c07c8562fe5101d6069b8c2646da53 + checksum: ffafa1f23a848fbdf95740557c99462556f5996be0ef05a1d7dd652661fce686d6789d6cd7781d8c2e41903702e5ff75359c5255c97ce9982c4a6dd1e9a30902 languageName: node linkType: hard -"@aws-sdk/chunked-blob-reader@npm:3.188.0": - version: 3.188.0 - resolution: "@aws-sdk/chunked-blob-reader@npm:3.188.0" +"@aws-sdk/chunked-blob-reader@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/chunked-blob-reader@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: d6becebc6d77a63dd84601806c5f04bc9d0e418368fb2d593d786738119091e4d2e40721751be66260063fe7bb1c7ee2a5e075fa731eb8307722b90f6ce809dc + checksum: d35547620814071dd5f89448b8d54b17c97e743ca441423fcba20ad794ab830d023a0c921d43e3b02f7b114444e6ea795afd24f6c51d411be68b808b3c422812 languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.282.0" +"@aws-sdk/client-cognito-identity@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.292.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.282.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/credential-provider-node": 3.282.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.282.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-signing": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 9f7790e26dd3d7b0316105dd40092736526f1f6a11b814fcc95736ade3fe40058fb93f1dc2558f1b54b7871908247852e314cb1a892109e6294958eeff1d4439 + checksum: 7524dac2fe377609b142792fe10ab25235632c2f25cf82c99d431cd4d884b44ac7f04c8a67705b95e0f1e76182c0e96fecdb6e7c433365e60504f8b931312d16 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/client-s3@npm:3.282.0" + version: 3.292.0 + resolution: "@aws-sdk/client-s3@npm:3.292.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.282.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/credential-provider-node": 3.282.0 - "@aws-sdk/eventstream-serde-browser": 3.272.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.272.0 - "@aws-sdk/eventstream-serde-node": 3.272.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-blob-browser": 3.272.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/hash-stream-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/md5-js": 3.272.0 - "@aws-sdk/middleware-bucket-endpoint": 3.282.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-expect-continue": 3.282.0 - "@aws-sdk/middleware-flexible-checksums": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-location-constraint": 3.272.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-sdk-s3": 3.282.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.282.0 - "@aws-sdk/middleware-ssec": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/signature-v4-multi-region": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-stream-browser": 3.282.0 - "@aws-sdk/util-stream-node": 3.282.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 - "@aws-sdk/util-waiter": 3.272.0 - "@aws-sdk/xml-builder": 3.201.0 + "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/eventstream-serde-browser": 3.292.0 + "@aws-sdk/eventstream-serde-config-resolver": 3.292.0 + "@aws-sdk/eventstream-serde-node": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-blob-browser": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/hash-stream-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/md5-js": 3.292.0 + "@aws-sdk/middleware-bucket-endpoint": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-expect-continue": 3.292.0 + "@aws-sdk/middleware-flexible-checksums": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-location-constraint": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-sdk-s3": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-signing": 3.292.0 + "@aws-sdk/middleware-ssec": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/signature-v4-multi-region": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-stream-browser": 3.292.0 + "@aws-sdk/util-stream-node": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 + "@aws-sdk/util-waiter": 3.292.0 + "@aws-sdk/xml-builder": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 4f0a1d9ddad89eb71da6f39c210c451461d570d11bc394c6b3d7af139e3ea077bed88fee56fae8318182e7a26464d31119620f191f0d552b51125b9f6ddffe0b + checksum: 8de830f1698856dc61c2497f754b9ea76bbff6517deb7091af554670e7ad026f1775cb7943328bab0d7e90a5a8ccb80e5f1bdc60b177da8f15eeddee410b38c2 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/client-sqs@npm:3.282.0" + version: 3.292.0 + resolution: "@aws-sdk/client-sqs@npm:3.292.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.282.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/credential-provider-node": 3.282.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/md5-js": 3.272.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-sdk-sqs": 3.272.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.282.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/md5-js": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-sdk-sqs": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-signing": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: d3a2a2abb27313666aa8c9842c91a098b2570878a9853d59bf07d480669723d77b74ad2ca8e5297dc593d8e76578c78c2634f81e4eed84b84b020b06af04c423 + checksum: ef734101eede788fa2e2a7d0c5032c440d9a8604d854444c8efe73de52bd765c7d8d7f5f0126fed85f4418678a861c3fb8bf6e482da4790d7d56187f2c1e4e62 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.282.0" +"@aws-sdk/client-sso-oidc@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.292.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 4b7d40614d5379e30ce800acd60d6c04751f2a1e347474925d74fc4b9bdf9529132fd2e40933ae2fba5ef65569d55387ea80ca5312d810a868826276296b18a4 + checksum: 66eb1db43d5c81ebe8a7905517209bdd7a04e45a87aa6b2c31ca25825d9f11d82e42835f2425fd39cc0dc815603363824cf3da9526475af400ccba86ea68d621 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/client-sso@npm:3.282.0" +"@aws-sdk/client-sso@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/client-sso@npm:3.292.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: e227d6c3dfcb4c0ec8c2a42ba281bca82dc6134ec69e6af6901892567d729be7f4b361cd0b70e18d85117e29f52aa75affc8e91fef1eb8c024f577897480085f + checksum: 6d8523cc18cfd3ba3be6ee3f80cfb1466f6814a57deeaf933f5096d19c505a25c3a94daf348d92d91acb76cd6ccbaa6db14663842a50fe2040e8f4b410125256 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.282.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/client-sts@npm:3.282.0" +"@aws-sdk/client-sts@npm:3.292.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/client-sts@npm:3.292.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/credential-provider-node": 3.282.0 - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/hash-node": 3.272.0 - "@aws-sdk/invalid-dependency": 3.272.0 - "@aws-sdk/middleware-content-length": 3.282.0 - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/middleware-host-header": 3.282.0 - "@aws-sdk/middleware-logger": 3.272.0 - "@aws-sdk/middleware-recursion-detection": 3.282.0 - "@aws-sdk/middleware-retry": 3.282.0 - "@aws-sdk/middleware-sdk-sts": 3.282.0 - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/middleware-signing": 3.282.0 - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/middleware-user-agent": 3.282.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.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.279.0 - "@aws-sdk/util-defaults-mode-node": 3.282.0 - "@aws-sdk/util-endpoints": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 - "@aws-sdk/util-user-agent-browser": 3.282.0 - "@aws-sdk/util-user-agent-node": 3.282.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/hash-node": 3.292.0 + "@aws-sdk/invalid-dependency": 3.292.0 + "@aws-sdk/middleware-content-length": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/middleware-host-header": 3.292.0 + "@aws-sdk/middleware-logger": 3.292.0 + "@aws-sdk/middleware-recursion-detection": 3.292.0 + "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-sdk-sts": 3.292.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/middleware-signing": 3.292.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-body-length-browser": 3.292.0 + "@aws-sdk/util-body-length-node": 3.292.0 + "@aws-sdk/util-defaults-mode-browser": 3.292.0 + "@aws-sdk/util-defaults-mode-node": 3.292.0 + "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 + "@aws-sdk/util-user-agent-browser": 3.292.0 + "@aws-sdk/util-user-agent-node": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 5af24417f7ef2dbebe6b0c0aa545eeb809e92136bce2b1e7dd07de1159f2308c2d673c3b136440e4137ce7524cbdabe50e80d7ca6f8635a3d9dcd2983532a9e7 + checksum: 00fc2f435430d43816c527dc681c462dc3cc25c427f128570db3e33f7a03963a848f000b9678526277f5b636236ac3456984e6c19e4e0ed75609ba9b15b50e0c languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/config-resolver@npm:3.282.0" +"@aws-sdk/config-resolver@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/config-resolver@npm:3.292.0" dependencies: - "@aws-sdk/signature-v4": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 + "@aws-sdk/signature-v4": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-config-provider": 3.292.0 + "@aws-sdk/util-middleware": 3.292.0 tslib: ^2.3.1 - checksum: 47628c4c66d93f2fb109039a55f206f1d9360fd3440ba2354489b5ddf05aab5322791a7e688cb02012342b3ecc7c5a61030838e6b94be76461f7f86d10a3c120 + checksum: 990aa47171b9ab7ee5eaf0d5367b7ad5487dc4ecafb776eb120aa98d0c5081e5ef685263fb3a316267d86be4a737ee26e306f1be68b29bcf86179a5b4fefbd9c languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.282.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.292.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.282.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/client-cognito-identity": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: c78e08a43e5611d6fbf15871720b38d76168ffbf75e24394ad10550b636d454c97bc6caaf70b0a3b960406b85874c7e45406167e6d38ae18acadfcaac16b2d73 + checksum: 19f690b03876dfbfe7f1c2f0bb28445980d1178794683ec0487e0c178300ba754f98b420a6c8ad37a5af5abafc1d4da76e33e3528b03347c96879e56b3ec0de0 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.272.0" +"@aws-sdk/credential-provider-env@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 74195ecb608e3e6dedfc40e052bd7d0ef3a9e531ecf404f40d05869e23328bd156e458e9770d30458137438de92efd3dcb9fc3ff5f1319c49b55e057323f3ea6 + checksum: 86f28ecc0834848bbf60b32a939d090d66f1996d8db4f3128d56c308cb624c4b1dd1b720c1a111e2f6d863b710f533f4b1e6e863dad402cd02d9cfb732f7767c languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.272.0" +"@aws-sdk/credential-provider-imds@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.292.0" dependencies: - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 tslib: ^2.3.1 - checksum: c6adfcaa8dada3f99bbbd241aee3e568474c93df97e9b3f5e4feb9b000a91e5b3f0491556f712ebbd4d67de9c77c1072e6d444ac63ad9c6be31cf26acb2bc72c + checksum: 421c72fe36e6f7c9dc7ff53d226fe5a8986ba99033ac79bdc4699c5c5bfed7d45096a3f5f3088d39dd68ff4895bfc914a14eb8909728111e0c411302102a3c48 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.282.0" +"@aws-sdk/credential-provider-ini@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.292.0" dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.282.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/credential-provider-env": 3.292.0 + "@aws-sdk/credential-provider-imds": 3.292.0 + "@aws-sdk/credential-provider-process": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-web-identity": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: e5281422c8e060dbfca271ccb2f80f23fac11d513d2f97954a7070ca3fdfa0293aed55d8bb0e65cc50dbb60c624755436892a9dd41a659dd3ab8f91d1d9ba74e + checksum: cc46fac892e508ffc3a8ef9f2a04657fd4f9e9e79c09ec3feeab7300d8d1a4d9742a8ad086eea403a5ecad468ed89dbe72b6f804796c11a1634562292e03517f languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.282.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.282.0" +"@aws-sdk/credential-provider-node@npm:3.292.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.292.0" dependencies: - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-ini": 3.282.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.282.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/credential-provider-env": 3.292.0 + "@aws-sdk/credential-provider-imds": 3.292.0 + "@aws-sdk/credential-provider-ini": 3.292.0 + "@aws-sdk/credential-provider-process": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-web-identity": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: dc76e67a635bb8807e2e80f4095beaa9d19a07cb5ed7e86080dd9ccff9fc23d6a84af88b74994233742032766efaebc2fd621cd3f8462d8ff041fdf5604a0ee4 + checksum: c298775fde4f85a0db5465b6782caf6242eacc93737d457f17ce76742553c51d1c16907a326a0e860e35893f575a6c6f7f922a9cd91a32425ffa01d56d97e686 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.272.0" +"@aws-sdk/credential-provider-process@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: fda290aea2417137f333c8ad0a94d7789054b464bdf5f9a7eef06341f88d4bd0c96ca02b84b58e0af2a9c490cee4febf6ee84254dfbff192bfccccbb0c8c1876 + checksum: 2cad4d73e2f07ad5cd613f053e5fb7c146c33020dd13a8cc664d6705a9f33f257a4d3e2fbbfe7c34fc8582593eaa1b0ded67dcf2022842d421a465de760420b0 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.282.0" +"@aws-sdk/credential-provider-sso@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.292.0" dependencies: - "@aws-sdk/client-sso": 3.282.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/token-providers": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/client-sso": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/token-providers": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 7888c5fbb0be701a8b6ad0a853959f5de0549e0c54dd475767395cfd9337e429056c948ee332da3b447751899635886955a8cc30e0ffbb1b86b6d887712ac0e4 + checksum: 925511e0393d1a011dc123b34b0d9b8e6a18f8ead6695d5b7d0ad3b681024f39878feb258f48003adbea2e6eceb2b4191127e9aebfe73d3ee40d894c48433248 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.272.0" +"@aws-sdk/credential-provider-web-identity@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: aad84e2bfd90495ed4eb76b83940729bd2fb652398f7e477cfd8053f9c986132b4ff8682854a91e3f23c7daaab66e1c31320188561104fea710cd87be1221e9d + checksum: 02e0e30df966c6b623d68517ae360bc4efa7a04fcfba17baf48e4398e899e225c507d5280d682e222ba9f48a484e912de3946b9dde8512baefc5493d28f7b486 languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/credential-providers@npm:3.282.0" + version: 3.292.0 + resolution: "@aws-sdk/credential-providers@npm:3.292.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.282.0 - "@aws-sdk/client-sso": 3.282.0 - "@aws-sdk/client-sts": 3.282.0 - "@aws-sdk/credential-provider-cognito-identity": 3.282.0 - "@aws-sdk/credential-provider-env": 3.272.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/credential-provider-ini": 3.282.0 - "@aws-sdk/credential-provider-node": 3.282.0 - "@aws-sdk/credential-provider-process": 3.272.0 - "@aws-sdk/credential-provider-sso": 3.282.0 - "@aws-sdk/credential-provider-web-identity": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/client-cognito-identity": 3.292.0 + "@aws-sdk/client-sso": 3.292.0 + "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/credential-provider-cognito-identity": 3.292.0 + "@aws-sdk/credential-provider-env": 3.292.0 + "@aws-sdk/credential-provider-imds": 3.292.0 + "@aws-sdk/credential-provider-ini": 3.292.0 + "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-process": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-web-identity": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: ec707176eba558fc5bfc45b2917d624a83995c75bfc38a121d3a3fe6c0be541c25815d4892fc33fd0f1de5f892232014724b0d5c62c19a2d6d3f839258b25840 + checksum: 1f504ff89a0112382db0c2d190efbf872ffd69a7ca136ee108df352ec49d76951d84146faa188195e90cd922e967bb68fb72fe5b443d93caab0f4254bc109aaa languageName: node linkType: hard -"@aws-sdk/eventstream-codec@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/eventstream-codec@npm:3.272.0" +"@aws-sdk/eventstream-codec@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/eventstream-codec@npm:3.292.0" dependencies: "@aws-crypto/crc32": 3.0.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-hex-encoding": 3.201.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-hex-encoding": 3.292.0 tslib: ^2.3.1 - checksum: bea8599a72657d698de169643950031624e0b61179240c8d8eb3c17f01bfc4579c507a861be6c703f318fcdff4217a4cb4279223cad93fb21e69f4b5d10d6102 + checksum: 6a246d7944074d4a5332ccc7b848f9e3f4b928161c0c31f9ef6306a989c012d92bae606910179f6f44be26cb530308ca0f1d4cd3656a9247a6c9f6ed2446a952 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/eventstream-serde-browser@npm:3.272.0" +"@aws-sdk/eventstream-serde-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/eventstream-serde-browser@npm:3.292.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/eventstream-serde-universal": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: a4fa42e1a8658eca191f567046741192e6e04f5c58744655ec0112a1d46b57d5ce04432e2fec0e6fe16d486c30abdc58b734ed67879c10e0fcc4820530eaff35 + checksum: 53ae27259d1c117b0acb84e07f6258b76970cfc221f5c531b17c4c04ef262bd799e6157831c480a6a0861847b5500d389af83cee7021abbbc4f5c983c69a3948 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-config-resolver@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.272.0" +"@aws-sdk/eventstream-serde-config-resolver@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: feee058288bbf5a97d78dfee5084c2dc224d771499848dcaedbfd671c8889f52329f96ce87c291d29e66b46c8e25923bd55f64d8ed744089fc40723296eb003c + checksum: 6f7d25386ddf86dd90fc7a5b83fe0bab3789a2ddad8017c8bb07a74cd2d7fb0fa9ea2216e66237a492cc25a8525df2b09485fbfa9f3ec9029981a830a89f0c81 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/eventstream-serde-node@npm:3.272.0" +"@aws-sdk/eventstream-serde-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/eventstream-serde-node@npm:3.292.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/eventstream-serde-universal": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 02fa0c5f992df253713bbe19515bf898e332e3bc51da28da28bdf2cde584df90689bb9b54afa57354798c8b01e4b592d63fb575d7652fd5df2c00bf1e45e689a + checksum: 981f007ab42bd2cfc781e26ee3d2b9f1ac81656a519bc9fbceefd68c31b5a1d6c55594b7001de68a354cdcf29e92820fe063ac6877c84035b320ccfeaafdc038 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-universal@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/eventstream-serde-universal@npm:3.272.0" +"@aws-sdk/eventstream-serde-universal@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/eventstream-serde-universal@npm:3.292.0" dependencies: - "@aws-sdk/eventstream-codec": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/eventstream-codec": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 3d8031e84af1a0cdf5f22f98aee868cd62b6fa87e432231bbe32a400874dc44b030cffdf9dce3194281bf04a1669b23bf8ce16759123ba10980676fe9388e63b + checksum: 9c2c8ea67a81ef95753af8c16e14134df7f642b61fc83ec58a147d417718c64a750a2c5410efec09e37af847e290660395e1e261fe5e931e06d06c52110983cb languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.208.0" +"@aws-sdk/fetch-http-handler@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.208.0 - "@aws-sdk/querystring-builder": 3.208.0 - "@aws-sdk/types": 3.208.0 - "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/querystring-builder": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 tslib: ^2.3.1 - checksum: a0016ec854d247e28ba7a86e72d6915854b33d489e88e5d26c8e3843704a3978129b4b52619c9810acd19c47dbf9b4359be17ad939e0be676b4af9cb21952abf + checksum: d779d52bd0d3d2ad5ab5232f5e08c1f9489f83c50a5d8df899c1ad25ae14f97fdf8c28c4465e0fb6f2b7554db89f78afa65fddb24cbbe7983bbd7efdd455934e languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.282.0" +"@aws-sdk/hash-blob-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/hash-blob-browser@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/chunked-blob-reader": 3.292.0 + "@aws-sdk/chunked-blob-reader-native": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 20823143bfed12dd25dc77abb8f869b4f013506f5a028477add87213ec184649dd799f4c6db5d25699a050763ef4a24c6363c06ff096e3a9b7413e2e865a10f6 + checksum: d560e6de563019d55fe4ef8b385dec52da9b7a76ffa3d5ab4e5d87986c675a7cc2e468088408316ee13aa78f43d1d5393cf19000bb037c385341dddb35c7765c languageName: node linkType: hard -"@aws-sdk/hash-blob-browser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/hash-blob-browser@npm:3.272.0" +"@aws-sdk/hash-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/hash-node@npm:3.292.0" dependencies: - "@aws-sdk/chunked-blob-reader": 3.188.0 - "@aws-sdk/chunked-blob-reader-native": 3.208.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-buffer-from": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: ab0564672606760b934973ef33a8a8d567d52d3fa4be2a7a8919daa1b9ac1c3afaaee975ae7ad20940f51e1057e3321c39f5dcd2246ca85aad03e1f7aed68669 + checksum: 4b7e77be7331951fd4a894a629f52d5ffc0ed19565f9e5a64934fd1b3741a0a30aed90cded058e6d4981cf51e3e8bc9849cd7b0bff8f80d7e5269665abd25713 languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/hash-node@npm:3.272.0" +"@aws-sdk/hash-stream-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/hash-stream-node@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-buffer-from": 3.208.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 1b3d5b288133af9294df36cec2377589f45c82f61cb824b14ac38955541357826cf5a8f95d7906cbf284ed9ffbd928a37b2f94581f7281715879aa4c0e7c7b24 + checksum: af7cbdddc17801cd50bca24aa80d3ee837b1eda505290725c853847682451497249b018411e723acfee0004723b10a54517c314a8d69cfd6e67fa901fe530184 languageName: node linkType: hard -"@aws-sdk/hash-stream-node@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/hash-stream-node@npm:3.272.0" +"@aws-sdk/invalid-dependency@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 4cb90a9ae442e0722d651d7e7558a8b0abcbc1b45670e194d51d0a9b2ea6cad6e3a02433d506a8d96ac94a26cd8e5746514c09f05f0da2acb2dc06c60218d3c5 + checksum: 90b78b9b2a0458b3c473f5d9921dd697aa6923a934a1bd40f4a3bc600366923302d8202827509436ba5f9baddac88ef851344a22bbe7de972a746226823abe82 languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 4ef63ed9a9275e20bdcec551ee92a9d60a6a688c120f968fd51af235d357d39ec522752592075dad752be9a8439d93b4d1848e12fa9a88cda595920d78b008d2 - languageName: node - linkType: hard - -"@aws-sdk/is-array-buffer@npm:3.201.0": - version: 3.201.0 - resolution: "@aws-sdk/is-array-buffer@npm:3.201.0" +"@aws-sdk/is-array-buffer@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/is-array-buffer@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 295450b417a9ab0b734050afff6c53aaed8a33dccd3ede60bf67fdec21f675d14ab8edc24f4e1d12aa4e99f9ccaf794aaaaff270c296c1ee38f73ea7ba7f59ce + checksum: 31d425754071a50f90a8011a76776d2bee76ddc75d41378b539ccf7982245999a3711d444d0247021a5174064069d6e543c39bc95bd14fd37da4b26a62440cac languageName: node linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/lib-storage@npm:3.282.0" + version: 3.292.0 + resolution: "@aws-sdk/lib-storage@npm:3.292.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.282.0 - "@aws-sdk/smithy-client": 3.279.0 + "@aws-sdk/middleware-endpoint": 3.292.0 + "@aws-sdk/smithy-client": 3.292.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -1085,522 +1072,494 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 14f1f21a653d239721ca488b6d7951511576a2e2652d240f3561ac0255cd4af321bc41531c15c3c6fae4095da062f5e841c6c9b58afd80be9bf105b63a256f72 + checksum: e3edcca24e740598b2ec9e6ece20b36efa323287d25360e4ad8e001ba985bdc775f322065d943fcd9177374826b4d22c6df7b219a2d24fa2f4f64b64e2f6d67c languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/md5-js@npm:3.272.0" +"@aws-sdk/md5-js@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/md5-js@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: d59010c1b48ba1992298ed23b605e7395a4aa964430d41012492faac24c7fa50856b565a523b0262b2c8b667904fdc57748d98475ba8c2e24b4550e17211e5ab + checksum: 130f1f3cf4f4bb1365f2beafbd760d9c651af2cf4eecf8829cf9c68fb0909f9722c01e0e1fcd016b36c060662090257955e3c16a7fe7139cfa824179142635eb languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.282.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-arn-parser": 3.208.0 - "@aws-sdk/util-config-provider": 3.208.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-arn-parser": 3.292.0 + "@aws-sdk/util-config-provider": 3.292.0 tslib: ^2.3.1 - checksum: 1b2f2dfcbf808b8f6e24173f05bdec21c8c6d5ea4eda6b01b3d3812e51e69fd39fe4880922f0f8f6ecbf35bf8410622458882b754d24a67eae59871c1273a2d4 + checksum: b57e3674a826d503fa28e7eac0813b54f6c2ad246f7b14746394aa7bf79808c61dd058e8ebb8657edef05d4d6d2ff8accc96a44e8d06afc86ba8005c1147419d languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.282.0" +"@aws-sdk/middleware-content-length@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: ebe0f4f55c30cd8ea3711a412e8f0c216c863b7b313ebd12de35b2c8e857cc38b5638c8acdfeca62307911b1092a516d5eaac60493dbeb76806012cda96f46d5 + checksum: 83f8a92ebcd680bc05d859fd40b68278f32f89d6af2617dbc08857afd0e42853bbea00b97bb9b834dcf431742ccbb0b1ce441977c702f4fa81ea48f36923081c languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.282.0" +"@aws-sdk/middleware-endpoint@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.292.0" dependencies: - "@aws-sdk/middleware-serde": 3.272.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/signature-v4": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/url-parser": 3.272.0 - "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.272.0 + "@aws-sdk/middleware-serde": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/signature-v4": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/url-parser": 3.292.0 + "@aws-sdk/util-config-provider": 3.292.0 + "@aws-sdk/util-middleware": 3.292.0 tslib: ^2.3.1 - checksum: 84a9f3d6d5f904e9728c20444f3e2fc369b8a57e9dbc01cf3c3f5a6b6062b2ba470774bddd60a095845bba62ce153590c69a10211f61609d4eebf173338299e7 + checksum: f2ac4d63acceb34f377176f3aa98f18f572c064adbf6a0652c7d5a7b1fd85e249723bab2aae0c19d702aaee0d5f56300c256c93f1b8775aee4ab727cd461ab62 languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.282.0" +"@aws-sdk/middleware-expect-continue@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 9b940175d545140608f17d7d5aefd798ea36640acfca95923320eab087bdd2edd25986a68f950a1ecfdf3c922bf91c0cae5b1bc4ce32d51c2f3e1915acc3939a + checksum: 950f154018f2e9e165538edc732f133e89df17e95df0300ddd725e79c3b031834c58bf9891aa89ce988a800e847e23e6a4f8010941b0e338850c606ab8f68191 languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.282.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.292.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/is-array-buffer": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 7575ebdf82e62b0a03813acc18dab4c070c019b0e723ffb7be41d36955d29d87603689351ecb612a44ff9b70fd83fe6977c5a36f1d7c9cb80b104e28f19ddf23 + checksum: 33b29ada23851e227a1af6e70f22b548f2e137fdd1c9cd5d356b01343f95afb319023f491bf51330f6e2640b243cb6fbb5ac71b319a033fe6ec1ad61293d4889 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.282.0" +"@aws-sdk/middleware-host-header@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 19b5c9284ec5df8732301d5853007613d62ec43657d8793be14bd1dc4b64700748b37d09dbae835750be440faae0105be6d14caaa55f1309842873a701007b72 + checksum: 3f760a3641c07432f3247a07b86ae82d9e4f29ba3b266685e8adac64dc1a5ef510eff467329a514a5ed7a673173869acb88ef7b467ea8b91573841a4028afafa languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.272.0" +"@aws-sdk/middleware-location-constraint@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 42cb878c4a2b4e1c0884277a9cacc4611111e1d6de649c4fb41f770e60ddceef27de433667c4e4d29882f6c9ad746859e53e0724fbfc5aff23720496a4007a0b + checksum: 1322eb31b0e49093a19c8e62ec324cde79a74a71cf0de9f59856c2dc87b40a1e26f91ea06cd9e2d817bad2dac36a5098aaeacca3cbe3692489413bb7d153c8c1 languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-logger@npm:3.272.0" +"@aws-sdk/middleware-logger@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-logger@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 128163d39522017ffb0099334f283ba82806b0c5b82965b47fff8b3b8648ae2b542b1733c69934bbca65fded9d26b8b93fa587547eeb8db2a3f5249841848f96 + checksum: ad60ad1efefb4c47dc1a3a488cfc959ec1f0a5cf4bb5a4da00fff006e796a8b57a02eca64304048624c4a4757e86834ddc9d2ad25e3539391a694d970b565fb9 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.282.0" +"@aws-sdk/middleware-recursion-detection@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 3e2b43e4e3f8ebb4f02a5bf33b15d95b559e5a35a872a94ca254497fdc896508baa8c316f3bec660d6fad2154041d81a5295be8ed245943dcdb3abc2dd75ef27 + checksum: abbe68e6ef40b4a7541f2398dceeaa4604566f70215ba2884ed1a652cf49991b286270f9983255003d26ca3e62ef8c353c250feccdd796cc45abec2fc3b70bc3 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-retry@npm:3.282.0" +"@aws-sdk/middleware-retry@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-retry@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/service-error-classification": 3.272.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-retry": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/service-error-classification": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-middleware": 3.292.0 + "@aws-sdk/util-retry": 3.292.0 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: fca7a6c8bac2f52df9987a66f7be5891e85fda0f6eff678ed78bc545ee45e159026d30cc8a136293e731ca69f9e5edc4f9f4895fea73bf28634426d9db0021f6 + checksum: ab96717b699a52122eec940d699f79d5136f022b927a425927a00e42cb02e4353978e623246b3107a9e12f63c8c44aae16a0102ffe6c25f79a906b1698a87bb7 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.282.0" +"@aws-sdk/middleware-sdk-s3@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-arn-parser": 3.208.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-arn-parser": 3.292.0 tslib: ^2.3.1 - checksum: c373dcb455450897075adb943e454da84eae66e6b223a30a80599e2d8a33b61cf1a5e46ec8f7595adfd9059132ce444316f9e376eff6ca121f05b1bb67e99b2b + checksum: 22a118e51c8c0fda76d85794c5b017bc8c8a5a156b72614f05151d9e2b2e2b730fdb35b72a08b227474218fdf5c6b2c9019304baba2dc4761498dd95a3de9ea5 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.272.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-hex-encoding": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 2338c5865fb797f5e9f0963cf0045e991a9aa816c4fefb86943e129be68ff3b94a662741692999c2a212e4491db299241453d9b432c3eee63781850f22772a29 + checksum: c05ec7552e9f72062208566f1fd9383e7b40caff07a543091ea82b74bb099945c28776957d030e7f7d317cfd3a6fff255d5932c14149971f335008bd1915d994 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.282.0" +"@aws-sdk/middleware-sdk-sts@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.292.0" dependencies: - "@aws-sdk/middleware-signing": 3.282.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/signature-v4": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/middleware-signing": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/signature-v4": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: bcd2ee00d30191262da5caf5fda4d6c12a9a4aa1ae76693b5e49dc562c89294b4bd133e7036b3811d69806d3d6277848731a3ff8eb919644c33d58909f6ce42e + checksum: bcd719d306befe814111cc4e4a89e08c81c5a28dce18e8b856838f8bd19d336ecfaa3a5a733066fc375ab630421a2156a804df0b1255fb470ea07c2eb5360ace languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-serde@npm:3.272.0" +"@aws-sdk/middleware-serde@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-serde@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: d33c07ff8c7fb9682115220ae035de5414124fd81319d7490ed3f2c235b3c0b536634a5939b311dbd735050deca4702503ee26d9e17b97ba8a1ff9e46093573e + checksum: f8d4e246c4fbd86c8071fb69a55721c8641709d0696fc9e4bbaac4de546f402f641f331a16bb5c3b7b28b57ffc84be3cd1e203c7d378438b9cde31104dc7e453 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-signing@npm:3.282.0" +"@aws-sdk/middleware-signing@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-signing@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/signature-v4": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-middleware": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/signature-v4": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-middleware": 3.292.0 tslib: ^2.3.1 - checksum: bf3040f3939430d2d32ccc893103f34a7ffd3d979021a124d6f03e6dbbe3b1537fe8736143ddee20f13170a46e545ed5774dd08bdc0be2d8d9b610dd90949246 + checksum: deb453f7e5d99270780fa3ee5285b5956fd90b9a5b4b37e221d97620df9bb2e30bd84e47f8168cb24849577ec30cf6991d9e57a9ae1b21ffb75d9fd3a4f196e8 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.272.0" +"@aws-sdk/middleware-ssec@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 81836fd3235f455d79d7cdc0bc193b321024dab2f6443f16e013c5eb4b3e06c3ca283152cb560f7f2bd2e2accf81f773f95278e8c9094806c1ddb54b5af0db8f + checksum: 4f8cdec2dc55d395575e7265ec1f20d82427298eb887936f8dea3d9d704ba761619a518ae9d130b3e861d7d1f558122b38c5b218ee433dcc9fea17ce2057af8f languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/middleware-stack@npm:3.272.0" +"@aws-sdk/middleware-stack@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-stack@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 7006c4168c2e5c7b15edd4e87001a6e4edbd2f549908ac0e68bb61f12c232048ac1d351b0714e7a79115aeaf251838877b2ef9ac829a6b1ab04913015a3c87a3 + checksum: 8be745177d96cc2f72b02f0b3c9374f0ee08b5c261715a9e86feeaf4bb6bdeacfa9b7dbd7e054145ca3dde9001d38096a311eca2ca02e8432b8266482e6645f2 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.282.0" +"@aws-sdk/middleware-user-agent@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.292.0" dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 6ad66ec8517deccb6dbbc1c3241d2afc2fa73d9a3bbaf56f3c1e8adbfd0791391f43058f79f2e2ace40090be481b5bbe8db8a42c0f444fc7cc56666c5ca07c72 + checksum: 66487209f5bba32a35ecde7c4c2e550dbf4da662ce3147160dbc3f095b6b5e87cb8c5f8650b580779606f18de2b9aabafb5bab54072eb2f124b0d076cd758a13 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/node-config-provider@npm:3.272.0" +"@aws-sdk/node-config-provider@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/node-config-provider@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 57f1f107ae4e213ffedf648d46fe0e026af83b13eeb8c13bd8f812cbbb226a0b2c2793afec0e29165ee64cc948182499ad44fe62f63ac58b06d0dd2cab7f1461 + checksum: 3af6a0f0566acdd834aa5f3125bb0837a4fee54930f15621970ea66d1643b75d222ef17a0e8f12a2d191b355f3b10430dfa0bc773a3c59b8a23ad463316d503e languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.282.0, @aws-sdk/node-http-handler@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/node-http-handler@npm:3.282.0" +"@aws-sdk/node-http-handler@npm:3.292.0, @aws-sdk/node-http-handler@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/node-http-handler@npm:3.292.0" dependencies: - "@aws-sdk/abort-controller": 3.272.0 - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/querystring-builder": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/abort-controller": 3.292.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/querystring-builder": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 22bbb8cae68c3405f3695de2a4be4d08ade5ffaad5367badcc40dc06ef08ec634fb95953deed58641775265d852f7afb095675d353cd7c82b7cb21881f5cc549 + checksum: b842943bb517b4c9cfb5aa13636463ea3415f0ad87960f0c7e3d6a8165ee722f40aa73d8d1806c5b462a0b26e2003a83f4e00e62e4c266cdbc909b4fa726a603 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/property-provider@npm:3.272.0" +"@aws-sdk/property-provider@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/property-provider@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 7f01794e93276e13339034dac816b2b5da2370fbc1ff304d451e2d0344957e94ba53f5c54de44eca4cb53e2847c7be820db25d6164ca9e489a4a39787fb6c8b3 + checksum: 1c15501edb5eda72a99bcebf8f5c2a7c9d9c60b3708d1b42faefc2a931c08a6c8010733ae88587266eebb70949ab2cb13e5c7f8335af6290c5f33ef288921828 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/protocol-http@npm:3.208.0" +"@aws-sdk/protocol-http@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/protocol-http@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.208.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 6cf57f264a4ef393fbe5fac71f22eaba47bc421646063dac004919ec7185979ed91a3e03c71373749150249f6be4ae41294a4c068d7c22a5990dcd2f5cf8347c + checksum: 4983aa6ae1bdf5dccab71331ae001009c84b5c1d99d05b0f5e5f1c65f56c1295411fd73be4ec88adc1d5f494dce67516c92932e86290879c4a3ca8f0c6f66256 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/protocol-http@npm:3.282.0" +"@aws-sdk/querystring-builder@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/querystring-builder@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-uri-escape": 3.292.0 tslib: ^2.3.1 - checksum: 5f9d927a69cc1d51767df86d5bfa76f280866e3ef7bcfb8b7b8dab7fc11638ca92d20e3a8a2708a251748c15c0582ad032dfd89aada8ce6068c58605b193e555 + checksum: 134810b9c8a248a13faad270592e75ff5afc6ce0df2598a5f319774b29a5a0cc7a05334e62eb04eda9ce0dc921a4407223e96ed6b6345c0c487814d31d1fdcac languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/querystring-builder@npm:3.208.0" +"@aws-sdk/querystring-parser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/querystring-parser@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.208.0 - "@aws-sdk/util-uri-escape": 3.201.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 69ff07e2a05ae0979da4e5b12ffb223f0eb037fab079f1f4c245101fdb2d9244454a543dcc829120b882a99a63ecfc950f209ba5a1aaacf94432a35a214c2521 + checksum: 921b15ecc46751b9b0b59b2093f2159ac3fcaecf31a22c34ecb77c8157667cc89528ad0ca3f2298839cff65642f2ec1829510652d334c87f86d9205394256093 languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/querystring-builder@npm:3.272.0" +"@aws-sdk/service-error-classification@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/service-error-classification@npm:3.292.0" + checksum: 38b154832b32c9e84a68f77ea7d0da1fc23331cb6f83a774ca9c9ecd577ede506f6245b0e0844f7556d14879219f16dbd8f141d948cc8d19f375008f1800d22b + languageName: node + linkType: hard + +"@aws-sdk/shared-ini-file-loader@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-uri-escape": 3.201.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 8164bb5547c556a2b3933b0a93d55d9f205ebe096f2dbcea6d3be4aa23bb0b4e7996ba24363b9ac3f80b4026903b267b759efdf9f72379f1eea9250c182238b9 + checksum: da14f79fcdabde68d2c103d61e477f7f90f43d6f41e3cfba7ae1a30b2d06c64121f70e0046f1797a5b8a785ccb8ca1969188a4f8e330a1fb9dac93794e5336f0 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/querystring-parser@npm:3.272.0" +"@aws-sdk/signature-v4-multi-region@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: fe5a29a265f48ad02b3161e888a66e4ac08fe07d52a67e811ac1da1734bfa9ac87ead637b595efcbc163f64f2280c8b56c867a8399f4c816b3683b6308837f93 - languageName: node - linkType: hard - -"@aws-sdk/service-error-classification@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/service-error-classification@npm:3.272.0" - checksum: 9507f74c909a968aa9bf835a05a9cfc93a0892e7c685de37da485e74a61b4fff271621d7c841aa0c9aedbcc57b19f171e6bc74925a82007be6c6750b3c7d0198 - languageName: node - linkType: hard - -"@aws-sdk/shared-ini-file-loader@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.272.0" - dependencies: - "@aws-sdk/types": 3.272.0 - tslib: ^2.3.1 - checksum: 1245658ad6efbeda0181aca64b00259749abc76d6200ac8fb481fe627eb88932a5cf2e9c366583ccba9fa540706a08b611552fff5233d66835c0e525c51f97c4 - languageName: node - linkType: hard - -"@aws-sdk/signature-v4-multi-region@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.282.0" - dependencies: - "@aws-sdk/protocol-http": 3.282.0 - "@aws-sdk/signature-v4": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-arn-parser": 3.208.0 + "@aws-sdk/protocol-http": 3.292.0 + "@aws-sdk/signature-v4": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-arn-parser": 3.292.0 tslib: ^2.3.1 peerDependencies: "@aws-sdk/signature-v4-crt": ^3.118.0 peerDependenciesMeta: "@aws-sdk/signature-v4-crt": optional: true - checksum: 3f25ba04145d9e274f5bea5ac34de77021c2a06d68085e29cd9bae3b0803aef53a0ab8b184034c67019b7b730730374a9e5a216859ee8f01c11032417ca84f7c + checksum: 27e5a1ddaaffc0fafcb19e75976206c53912c3605924c254abda8d566f43d62f1f7d42d3180d94f1288c32a0dd065aa983ae065e4c5860394073c88b23fc33ca languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/signature-v4@npm:3.282.0" +"@aws-sdk/signature-v4@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/signature-v4@npm:3.292.0" dependencies: - "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.272.0 - "@aws-sdk/util-uri-escape": 3.201.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/is-array-buffer": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-hex-encoding": 3.292.0 + "@aws-sdk/util-middleware": 3.292.0 + "@aws-sdk/util-uri-escape": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: ef5a5f32c7671979c173cded5ca4749f3d4d156c67b7de11eac881a0141b2f43cc6ac5f29facd3e6af2a3883775de64d0c2789b2f7ccb1c6d14f0da5e22a58f0 + checksum: b45d1a69f2b5ffa266dd0e7abf08740bb08ac10435e558cc3786a5a5b174ceae8868b9892ccaf7039b84c6c0346ac4cf531ddeba1f5dfa97e5c69ad79f4779fd languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.279.0": - version: 3.279.0 - resolution: "@aws-sdk/smithy-client@npm:3.279.0" +"@aws-sdk/smithy-client@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/smithy-client@npm:3.292.0" dependencies: - "@aws-sdk/middleware-stack": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/middleware-stack": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 43d933b714ba7249d7f9f007e6e107d88d34e76db2cf934c43f38b6039699da450227f25bf559a3a6f12f9f62c4dec6dd5c4dda2205e6889e7d530521b879d61 + checksum: ffee8a9d3b569fa44bf48440df3abce7fd73204004262728af83a8a74764331205b42927f62ac13e68c6d3c23085ffa93ea62a948af2c8936e19b52d225109d1 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/token-providers@npm:3.282.0" +"@aws-sdk/token-providers@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/token-providers@npm:3.292.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.282.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/shared-ini-file-loader": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/client-sso-oidc": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/shared-ini-file-loader": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 064425ec0373269ccc7c4eeb583dd31e79b02af5e4c4ade25258cec59986dd3f8d4d80770d4802b26882dba9a61f66ca9d49d9ade70002417f73bdd46c64bace + checksum: f902dc11def7425e28e3b063ce1feebd399568a4ba90b40622ff5c735860125306f6e9eb1a69179299f4a696fa5755712aad06028a713d832f52abbedb341db7 languageName: node linkType: hard -"@aws-sdk/types@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/types@npm:3.208.0" - checksum: 3d4eb51720bd20b6811dece5e096ba3b59da842d1c8b2a8e2785e9931d916f41197651da689aa415083e1259e03507b7703ecbbac001b4cdbe68dde2ed94b5cf - languageName: node - linkType: hard - -"@aws-sdk/types@npm:3.272.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": - version: 3.272.0 - resolution: "@aws-sdk/types@npm:3.272.0" +"@aws-sdk/types@npm:3.292.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": + version: 3.292.0 + resolution: "@aws-sdk/types@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: c4e4f09dd2672eab4fc15b08006c730c1d07d4b54ae35e03167d99f6110751e36b5332165e03c71c28724037f623f8da87a45a018eb631a1ce86d406f9d08da6 + checksum: 0c3c62092f3b400da57cd817d73c7e54bf193f649a508fed550bd927e0307b4f2b873036f8df9977e9f7bf2bcfc4a1233c6f662dcaeea4e049586bea93003cb7 languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/url-parser@npm:3.272.0" +"@aws-sdk/url-parser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/url-parser@npm:3.292.0" dependencies: - "@aws-sdk/querystring-parser": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/querystring-parser": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 4a66e733b336b0e28eceef89271f255dcd7079cfa8ba1c854e6c147ced211242e00016e3f22752e5ea3e49b35457568c5ae8df574f729d6e60cd1f5054f5a57d + checksum: 16ce1861c6afe5fe3085f8a9a85fe0b83f870af30b8f75e69a6eccac7f66978461d4753e1ebdc6b3ce34d84bb2df10c4775843a9817d86af521ac350c19f6a30 languageName: node linkType: hard -"@aws-sdk/util-arn-parser@npm:3.208.0, @aws-sdk/util-arn-parser@npm:^3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/util-arn-parser@npm:3.208.0" +"@aws-sdk/util-arn-parser@npm:3.292.0, @aws-sdk/util-arn-parser@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/util-arn-parser@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 1e1793adc0c53801b9fd7ccb7e94169dcd984047533c28897aea2af4c4fa02cbc2cd1b5d9b6f34eaf6b9aaa0aba27f927c8e2a58a6b4bb06888cfa68d66b6b2d + checksum: 50bd76e561b035ae1af22a396a665cf9db82c46177e23a8d023a197560365a1e33763782401f454c3de58f0ae9dfc2b88599389f20084da8c046993b7171e2a9 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" +"@aws-sdk/util-base64@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-base64@npm:3.292.0" dependencies: - "@aws-sdk/util-buffer-from": 3.208.0 + "@aws-sdk/util-buffer-from": 3.292.0 tslib: ^2.3.1 - checksum: 2ccab3453a3a3636f3f1397441574b3adb984e1ba3865030393108327ed7304cf80c9b31d69691e6aba85cfe6a611a881bbb724e544324240763bb4e96630ed9 + checksum: 4ee530ff15b667963e00fd59202b210a3427f91ab7d88b700bd378b6fa9c9738f4cc106aae9bcf7bf2e9447c84946c73e6ae06d0f42d7bea094954b8c45f3c84 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" +"@aws-sdk/util-body-length-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-body-length-browser@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 1b08bd1e63ec843ee336f51d894c49bf3c4c2f96e50d1711a12f7d0c5b6f7a15b490e366fec55b63e77036002994bac12927b29de2eb9ac91e4f152b1af78e58 + checksum: 769f8782b0de412a070f13c45885af83b4ee9c1a43051ae26bef236ffb7295ea1aed47fe5494fb820ea603198bf009c7c3b6029d37a4a946b17d248d415811f3 languageName: node linkType: hard -"@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" +"@aws-sdk/util-body-length-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-body-length-node@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 986b42b358656dec4e75c231213331c4f01785f9ab17c8b87b6e268b6880818a96117f1785cef9786e6c0f7e2c1332c80e8388a43bfd83e8c7224ad059a72733 + checksum: c0066444c0734b1207e344b95ff71b9859f1ef3f70749fc813d9d1a1da06a46bdfa364809aebbad69fdb5371f038f06b11e9ec54d534870714869dae88facf4a languageName: node linkType: hard -"@aws-sdk/util-buffer-from@npm:3.208.0": - version: 3.208.0 - resolution: "@aws-sdk/util-buffer-from@npm:3.208.0" +"@aws-sdk/util-buffer-from@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-buffer-from@npm:3.292.0" dependencies: - "@aws-sdk/is-array-buffer": 3.201.0 + "@aws-sdk/is-array-buffer": 3.292.0 tslib: ^2.3.1 - checksum: 00bfa4d4494d3a1eb128e19104994d1aca8b3802e9aa218cecafb1ed3ff2ecf5c946485e06aa97ae312458842b0f31a6484dc945232f7cb0e357ba341cb2e53e + checksum: 08e59c3e88bf76ae0149f63101a7a65bed7998f62db4851dfb4cb39b060937c46d6d9a281c4504ce6b816dba33ef64c459e8ffe351388dae3298a661632cf8ea 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" +"@aws-sdk/util-config-provider@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-config-provider@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: 97b0414b120b4eb53001f3ab2135ee94937e47bd7bd0d0de7c6a7e00a282eaa78cd84be2bfd3e389340f0c0b2f7ba60da9a403f084721970ee55b779ecf7a451 + checksum: d554881b8690ae2a5b594f276528ede52d02719e2d6bcf13fa9f2eba91d7c711e1fc0822db32f0069b4435c8488cb2d3b009385ca932fcb5f9bebc41a6c40c7e languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.279.0": - version: 3.279.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.279.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.292.0" dependencies: - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 727700ae9c741a24cb8d30991344d778ca5e9ec3ad30364a63f22af8889f03a5fedecad87c76b7022118ab2c6a3dfc48abd530502b7e1f0926bf467081189645 + checksum: 0f372e3425d81cabafe2dde0e51b4373b05da91f2015108779f50206eb7b758f95aaf6f8fcee64090d3940fbd9d4e8c09c83e040ab1618551069dd3e433a122e languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.282.0" +"@aws-sdk/util-defaults-mode-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.292.0" dependencies: - "@aws-sdk/config-resolver": 3.282.0 - "@aws-sdk/credential-provider-imds": 3.272.0 - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/property-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/config-resolver": 3.292.0 + "@aws-sdk/credential-provider-imds": 3.292.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/property-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 56086b64a65f9999923bbba56c87ecdb886cc729d32683107ae3dd8c9077b6aceecdf2acfc934220522883282f03dd6e37690d242a2d63fee3ec7f3db39cecb7 + checksum: c808df5777e0c0ae2e6941ef63bc3b54bba4ff70c58a6b0f2438f668c3b6e15be0576cdb9f63a093e781ab42232b151eb4ea5375025aa841d34315680b11c0df languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-endpoints@npm:3.272.0" +"@aws-sdk/util-endpoints@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-endpoints@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: d701e0245930df2000974f9d7c8398fde65924fe5aaa72f2c314fa40a8842e1868a6e285aa78479f741e40b8be54060a4607c9b5b3ac0386839a45df8df238f2 + checksum: 146244ebf0ea2784af1601f469e1a7f60a238e0f2f97cf5c4af6a01f44e51f9a17e7f15f01ee4cc3fcaa8b25edd83e44a1adb41869ad244b036f76316c9c5e72 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" +"@aws-sdk/util-hex-encoding@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-hex-encoding@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: a27f3365dfb1e6ece79ea34fd6e2c4540eb0084536d7300ff0ff42a7334ddf07f21958c6cfd0bbeb71361ee408e16deae2c82b7c7378b048b8e81a52c75f190a + checksum: 5940aa80509395957c08dc59da57727af09bec93f609a7083da4f2469353bc67a52823f9c13d5f9affd4eac59a38e3d24c1d79893fb46db4b9d7c3008e2a9f76 languageName: node linkType: hard @@ -1613,93 +1572,88 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-middleware@npm:3.272.0" +"@aws-sdk/util-middleware@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-middleware@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: e9a0b55317c474d3eecd65765443eff68f5130ac6f982a41450e0cb949169ff2cf13273282337f2067dfdb5cc7d25137b3bd2fa5f5228cfe541003cf387a6101 + checksum: b49ee36c77d0996f3a7636bdec6685033eebf6385b546d867bd2503747334a67e7d9adc59842f492c269ab8838c38812d0d7d5b7ececc19988c268f33a3bd072 languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-retry@npm:3.272.0" +"@aws-sdk/util-retry@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-retry@npm:3.292.0" dependencies: - "@aws-sdk/service-error-classification": 3.272.0 + "@aws-sdk/service-error-classification": 3.292.0 tslib: ^2.3.1 - checksum: 7449d9b5daef1244a1601c9892bdd57abeb71ee87357e9dac71d53a77b80648b8cd0db1e99749a76e241ab01fce71a753360d0c8e130f6ae6e71a94b462242f0 + checksum: 6f5d0df53eab52ac9ec8d661ae7c38c7e9b4d57ddaca79524726d6ee98b4e739bd6d0b810c0d3d8aa77ac60ca775d4f803cb5b15d6a262204c18f26ec2924b3c languageName: node linkType: hard -"@aws-sdk/util-stream-browser@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/util-stream-browser@npm:3.282.0" +"@aws-sdk/util-stream-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-stream-browser@npm:3.292.0" dependencies: - "@aws-sdk/fetch-http-handler": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-base64": 3.208.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-utf8": 3.254.0 + "@aws-sdk/fetch-http-handler": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-base64": 3.292.0 + "@aws-sdk/util-hex-encoding": 3.292.0 + "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 30dda128249c30052cc7d92fbc08c423d03938c202bd95ffcbeb0b72804da19defe742ca702062fd96803381bb508cedc27b4b4bf4d418175f905849352fdf71 + checksum: 8525867445ccd5bfc7da0c8728c13ee902184d675a9a85f46d57bec3d26cceced7576b137db4b0ce164133d64c42867092f8961e4ce52ef1ac47b915b019e0ba languageName: node linkType: hard -"@aws-sdk/util-stream-node@npm:3.282.0, @aws-sdk/util-stream-node@npm:^3.208.0": - version: 3.282.0 - resolution: "@aws-sdk/util-stream-node@npm:3.282.0" +"@aws-sdk/util-stream-node@npm:3.292.0, @aws-sdk/util-stream-node@npm:^3.208.0": + version: 3.292.0 + resolution: "@aws-sdk/util-stream-node@npm:3.292.0" dependencies: - "@aws-sdk/node-http-handler": 3.282.0 - "@aws-sdk/types": 3.272.0 - "@aws-sdk/util-buffer-from": 3.208.0 + "@aws-sdk/node-http-handler": 3.292.0 + "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-buffer-from": 3.292.0 tslib: ^2.3.1 - checksum: 0b19609d0c2608c120e317b6127a49016c90f746e38c300893ee16e276951c294fd4fef8dbee42978e655f34c2c56676e8def637fdb5a3f9284c475c73a67f62 + checksum: d185622ec8a804235ec3f9c25ad275d0c38077427fa1b36cc9702b777d7da71b54b12235cbcdfd014e2d1f6cbb315370ac32480a9ed8dc1efcd6ee27ed577def languageName: node linkType: hard -"@aws-sdk/util-uri-escape@npm:3.201.0": - version: 3.201.0 - resolution: "@aws-sdk/util-uri-escape@npm:3.201.0" +"@aws-sdk/util-uri-escape@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-uri-escape@npm:3.292.0" dependencies: - "@aws-sdk/fetch-http-handler": 3.208.0 - "@aws-sdk/types": 3.208.0 - "@aws-sdk/util-base64": 3.208.0 - "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-utf8-browser": 3.188.0 tslib: ^2.3.1 - checksum: 8bd751459eaab75a9b61801f3484cfa5c4e0133381ace6ec901cb9b92b1fee99beb4ef9c0f87ade59425a882ed3a280255d9b2fd8da6a6286e49efb9af8f0d55 + checksum: 34cbe5ba5cc2678cfa9d88adb1adab2810f1a7879a105c4a2827a95af8903505190a8fc4d73cfeb3548ae024caf50420e7377120e59bb62018b0c783a9e4fb71 languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.282.0" +"@aws-sdk/util-user-agent-browser@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.292.0" dependencies: - "@aws-sdk/types": 3.272.0 + "@aws-sdk/types": 3.292.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: cf751b285e57c4d7a00584ac4eab4c27c5fc6d73dc9d6ed8082d297885b262a27bc0a51b882e57779eb807149c27b4d083e07596b99ae145c9acb46f64edf587 + checksum: ececf366f8d40101ea0a72d2791ba0ac6cf4c820263567eb074f4dc7aafc03c8e2152bc05ccf9b0a7c10a50578366d8ec2c42987f9b565f0fb14b33d7dd792a9 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.282.0": - version: 3.282.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.282.0" +"@aws-sdk/util-user-agent-node@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.292.0" dependencies: - "@aws-sdk/node-config-provider": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/node-config-provider": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: b13d7e114610c15d0d4d6137e6b6e2ce2d9b696aec1f3ba60515228b9c59068260fb976a0af2d9166705e00c99408c603abf4ebc65384bcd76abfa9003a4afa4 + checksum: 7aa660de99967d33527dec9fc11fa5b311ca0121450627b5f96e6be0bc6db1501694f5fbc036773fecd9b107228f615a239628213b9ab9cde3dc28f49ed92b8a languageName: node linkType: hard -"@aws-sdk/util-utf8-browser@npm:3.188.0, @aws-sdk/util-utf8-browser@npm:^3.0.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: @@ -1708,33 +1662,33 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-utf8@npm:3.254.0": - version: 3.254.0 - resolution: "@aws-sdk/util-utf8@npm:3.254.0" +"@aws-sdk/util-utf8@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-utf8@npm:3.292.0" dependencies: - "@aws-sdk/util-buffer-from": 3.208.0 + "@aws-sdk/util-buffer-from": 3.292.0 tslib: ^2.3.1 - checksum: e5dfe7565f2de32245a544d1d715d803025bc5522538c0206fa61377f747804d95fc2e5e25976144bb63a6857e360b4286d101e730ab5d39866c60383a47e7d5 + checksum: 7b0177e9e49bf52f95049ea7bc50e3b3552a1785d5511941ce29239fb35c54fcface18d0f1e859c98275e174efb3ad8d00d151224ebfdd39170dc1ace32236a8 languageName: node linkType: hard -"@aws-sdk/util-waiter@npm:3.272.0": - version: 3.272.0 - resolution: "@aws-sdk/util-waiter@npm:3.272.0" +"@aws-sdk/util-waiter@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/util-waiter@npm:3.292.0" dependencies: - "@aws-sdk/abort-controller": 3.272.0 - "@aws-sdk/types": 3.272.0 + "@aws-sdk/abort-controller": 3.292.0 + "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: e931a9359dc582db9e5dcd62539572aecff5320ce424e5462c2f8d4a2d83acde07f87fe9ffc83850aaf70eaf17b06b6ffd4554350bab0f0f3a4427d1b7e776c6 + checksum: eb863d7ceb88830fafc8c76b698912174526a0de42ee3f1b12d5a619a0df9bb00fd7e8d5dfdcc78a6b1deb546d56dc7ca198a9af11e4ad3997c67c622ccde852 languageName: node linkType: hard -"@aws-sdk/xml-builder@npm:3.201.0": - version: 3.201.0 - resolution: "@aws-sdk/xml-builder@npm:3.201.0" +"@aws-sdk/xml-builder@npm:3.292.0": + version: 3.292.0 + resolution: "@aws-sdk/xml-builder@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: fd250c2edcf062e79af576fa39d555f624c155540f7bb27da05a400540f3c2ceb89f33841157eda5f4558a0b6c58d2686a105d26f79eeab5790e6b6bfbe18d4a + checksum: b3f9a07b7f33eab08b1a1a3c5df5c9c294903171e721ffbbd524580846991ee3a8de0e7b205ef3b2b17696984eb50e0abb576119c125a762a1d86f43f55e383e languageName: node linkType: hard From a792fc7b14dad1bd4c57555ee11b5ae5a0b7e6b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 20:41:53 +0000 Subject: [PATCH 217/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.293.0 Signed-off-by: Renovate Bot --- yarn.lock | 199 +++++++++++++++++++++++++++--------------------------- 1 file changed, 100 insertions(+), 99 deletions(-) diff --git a/yarn.lock b/yarn.lock index b779e006ce..fe223b47ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -518,15 +518,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.292.0" +"@aws-sdk/client-cognito-identity@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.293.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/client-sts": 3.293.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-node": 3.293.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -535,11 +535,11 @@ __metadata: "@aws-sdk/middleware-host-header": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-signing": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -551,26 +551,26 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-user-agent-browser": 3.292.0 "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 7524dac2fe377609b142792fe10ab25235632c2f25cf82c99d431cd4d884b44ac7f04c8a67705b95e0f1e76182c0e96fecdb6e7c433365e60504f8b931312d16 + checksum: 1902b344dec5807817583bf76df60d13eb62b663b73a3587aad513046f775222644859c5e146ddfc443486436d9912881aa8e00715f8ff26d5e497cf75aea22b languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/client-s3@npm:3.292.0" + version: 3.293.0 + resolution: "@aws-sdk/client-s3@npm:3.293.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/client-sts": 3.293.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-node": 3.293.0 "@aws-sdk/eventstream-serde-browser": 3.292.0 "@aws-sdk/eventstream-serde-config-resolver": 3.292.0 "@aws-sdk/eventstream-serde-node": 3.292.0 @@ -589,13 +589,13 @@ __metadata: "@aws-sdk/middleware-location-constraint": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-sdk-s3": 3.292.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-signing": 3.292.0 "@aws-sdk/middleware-ssec": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -608,7 +608,7 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-stream-browser": 3.292.0 "@aws-sdk/util-stream-node": 3.292.0 @@ -619,19 +619,19 @@ __metadata: "@aws-sdk/xml-builder": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 8de830f1698856dc61c2497f754b9ea76bbff6517deb7091af554670e7ad026f1775cb7943328bab0d7e90a5a8ccb80e5f1bdc60b177da8f15eeddee410b38c2 + checksum: c049bbd40964ebfc189f8a72aed2e5dafcfbc949b4c06a2e811eb0fb58ab34ac681aa039fe7f3473310a9efe226feed889268ff0f44c9eb71805aea3018b5bc7 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/client-sqs@npm:3.292.0" + version: 3.293.0 + resolution: "@aws-sdk/client-sqs@npm:3.293.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.292.0 + "@aws-sdk/client-sts": 3.293.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-node": 3.293.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -641,12 +641,12 @@ __metadata: "@aws-sdk/middleware-host-header": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-sdk-sqs": 3.292.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-signing": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -658,20 +658,20 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-user-agent-browser": 3.292.0 "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: ef734101eede788fa2e2a7d0c5032c440d9a8604d854444c8efe73de52bd765c7d8d7f5f0126fed85f4418678a861c3fb8bf6e482da4790d7d56187f2c1e4e62 + checksum: d07b9729ac138e71c789851d146a7632fdf1a50cb8d23a85af14b957bc23d18dbd42d291e04ee1df52844f75168e71818a3d2d962dc47a530350d760fefd8300 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.292.0" +"@aws-sdk/client-sso-oidc@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.293.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -684,10 +684,10 @@ __metadata: "@aws-sdk/middleware-host-header": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -699,19 +699,19 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-user-agent-browser": 3.292.0 "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 66eb1db43d5c81ebe8a7905517209bdd7a04e45a87aa6b2c31ca25825d9f11d82e42835f2425fd39cc0dc815603363824cf3da9526475af400ccba86ea68d621 + checksum: 4137f631355f75f7eea083b3e172dcbd67b1e7701cfe02fb21c922a39aa0d4f80171458473833d72150341f2320fc21fef74bb5cffdd15b4723f719c8caa4bce languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/client-sso@npm:3.292.0" +"@aws-sdk/client-sso@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/client-sso@npm:3.293.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -724,10 +724,10 @@ __metadata: "@aws-sdk/middleware-host-header": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -739,24 +739,24 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-user-agent-browser": 3.292.0 "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 6d8523cc18cfd3ba3be6ee3f80cfb1466f6814a57deeaf933f5096d19c505a25c3a94daf348d92d91acb76cd6ccbaa6db14663842a50fe2040e8f4b410125256 + checksum: a502dddebf8905b765f1bf126435d7948ac32e857f0127ac68e3fb1328cacaa660eed026d264853c7a6da39126cbcfedd5b022a1073525ea8ee66c409157b9a4 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.292.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/client-sts@npm:3.292.0" +"@aws-sdk/client-sts@npm:3.293.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.293.0 + resolution: "@aws-sdk/client-sts@npm:3.293.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-node": 3.293.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -765,12 +765,12 @@ __metadata: "@aws-sdk/middleware-host-header": 3.292.0 "@aws-sdk/middleware-logger": 3.292.0 "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.292.0 + "@aws-sdk/middleware-retry": 3.293.0 "@aws-sdk/middleware-sdk-sts": 3.292.0 "@aws-sdk/middleware-serde": 3.292.0 "@aws-sdk/middleware-signing": 3.292.0 "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.292.0 + "@aws-sdk/middleware-user-agent": 3.293.0 "@aws-sdk/node-config-provider": 3.292.0 "@aws-sdk/node-http-handler": 3.292.0 "@aws-sdk/protocol-http": 3.292.0 @@ -782,14 +782,14 @@ __metadata: "@aws-sdk/util-body-length-node": 3.292.0 "@aws-sdk/util-defaults-mode-browser": 3.292.0 "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 "@aws-sdk/util-retry": 3.292.0 "@aws-sdk/util-user-agent-browser": 3.292.0 "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: 00fc2f435430d43816c527dc681c462dc3cc25c427f128570db3e33f7a03963a848f000b9678526277f5b636236ac3456984e6c19e4e0ed75609ba9b15b50e0c + checksum: c99efc08e494098436fef2ba1321fa8362008d9190fcafff0694490f09f7bed76cc16c24b0d938c0d143255149efa6bffd8a568ecca5eab5fb103eba57f61966 languageName: node linkType: hard @@ -806,15 +806,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.292.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.293.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.292.0 + "@aws-sdk/client-cognito-identity": 3.293.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 19f690b03876dfbfe7f1c2f0bb28445980d1178794683ec0487e0c178300ba754f98b420a6c8ad37a5af5abafc1d4da76e33e3528b03347c96879e56b3ec0de0 + checksum: e23bcc010cf8002e4264b3074af6734f9fb81a8d556d453f19196765174ff313173749e2c17a76f9e7c4a485b82cb5f91a7d55e7742f5262fde5c7b93e279b9d languageName: node linkType: hard @@ -842,38 +842,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.292.0" +"@aws-sdk/credential-provider-ini@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.293.0" dependencies: "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.293.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: cc46fac892e508ffc3a8ef9f2a04657fd4f9e9e79c09ec3feeab7300d8d1a4d9742a8ad086eea403a5ecad468ed89dbe72b6f804796c11a1634562292e03517f + checksum: 7fafb9ada9e0eec303b46bb02f392c0ff63861214df9345f6e4678d158d573cc2d5f941e25e8bad1491fc67f6913053e72cf6327ac4432fe4f7e70b68cdaeef3 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.292.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.292.0" +"@aws-sdk/credential-provider-node@npm:3.293.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.293.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.293.0" dependencies: "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.292.0 + "@aws-sdk/credential-provider-ini": 3.293.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.293.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: c298775fde4f85a0db5465b6782caf6242eacc93737d457f17ce76742553c51d1c16907a326a0e860e35893f575a6c6f7f922a9cd91a32425ffa01d56d97e686 + checksum: c0ff0ef0f4983ed6b56d73e910fb2a1f9ad43faf9cd9067fb6f276dd384e23ef7035016ff339273c9a2dfba1e4d0a27887f22acc86fb0d65018c85c5e1f6b1ab languageName: node linkType: hard @@ -889,17 +889,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.292.0" +"@aws-sdk/credential-provider-sso@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.293.0" dependencies: - "@aws-sdk/client-sso": 3.292.0 + "@aws-sdk/client-sso": 3.293.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/token-providers": 3.292.0 + "@aws-sdk/token-providers": 3.293.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 925511e0393d1a011dc123b34b0d9b8e6a18f8ead6695d5b7d0ad3b681024f39878feb258f48003adbea2e6eceb2b4191127e9aebfe73d3ee40d894c48433248 + checksum: 75fa91c622d526ebfee18d83e1eeeeac12f2069abae5d7921a1df21b85dd241da2d67b9976522f2efdfc319d53334e89b3715df4c4a857bf3978d38a3326dd00 languageName: node linkType: hard @@ -915,25 +915,25 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-providers@npm:3.292.0" + version: 3.293.0 + resolution: "@aws-sdk/credential-providers@npm:3.293.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.292.0 - "@aws-sdk/client-sso": 3.292.0 - "@aws-sdk/client-sts": 3.292.0 - "@aws-sdk/credential-provider-cognito-identity": 3.292.0 + "@aws-sdk/client-cognito-identity": 3.293.0 + "@aws-sdk/client-sso": 3.293.0 + "@aws-sdk/client-sts": 3.293.0 + "@aws-sdk/credential-provider-cognito-identity": 3.293.0 "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.292.0 - "@aws-sdk/credential-provider-node": 3.292.0 + "@aws-sdk/credential-provider-ini": 3.293.0 + "@aws-sdk/credential-provider-node": 3.293.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.292.0 + "@aws-sdk/credential-provider-sso": 3.293.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 1f504ff89a0112382db0c2d190efbf872ffd69a7ca136ee108df352ec49d76951d84146faa188195e90cd922e967bb68fb72fe5b443d93caab0f4254bc109aaa + checksum: cca87d8518e353612c610e8c81944452d4461733d317f68fa29b819eac4741fe7438bc90261c67bd4284721158ce710c1ca7130e5e09eb3ad4f6174f2c14d34b languageName: node linkType: hard @@ -1060,8 +1060,8 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/lib-storage@npm:3.292.0" + version: 3.293.0 + resolution: "@aws-sdk/lib-storage@npm:3.293.0" dependencies: "@aws-sdk/middleware-endpoint": 3.292.0 "@aws-sdk/smithy-client": 3.292.0 @@ -1072,7 +1072,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: e3edcca24e740598b2ec9e6ece20b36efa323287d25360e4ad8e001ba985bdc775f322065d943fcd9177374826b4d22c6df7b219a2d24fa2f4f64b64e2f6d67c + checksum: 99742e84bc4c4c18e0d9863cfd5d84dfcad2c57d83b1766973f5440840b0185264a069e172b504e212f5d8c9d0e38cd11ed2d5a06ecfcb93edb11ea44cc2cf92 languageName: node linkType: hard @@ -1195,9 +1195,9 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-retry@npm:3.292.0" +"@aws-sdk/middleware-retry@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/middleware-retry@npm:3.293.0" dependencies: "@aws-sdk/protocol-http": 3.292.0 "@aws-sdk/service-error-classification": 3.292.0 @@ -1206,7 +1206,7 @@ __metadata: "@aws-sdk/util-retry": 3.292.0 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: ab96717b699a52122eec940d699f79d5136f022b927a425927a00e42cb02e4353978e623246b3107a9e12f63c8c44aae16a0102ffe6c25f79a906b1698a87bb7 + checksum: 249094515c4353142846b8dbdf9365f6cccdad69cad8f8028fd03ffeb533fade46be1a781feb60089a9321eda720959ef2f1f25329defa1affc40a889a8ed5d3 languageName: node linkType: hard @@ -1291,14 +1291,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.292.0" +"@aws-sdk/middleware-user-agent@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.293.0" dependencies: "@aws-sdk/protocol-http": 3.292.0 "@aws-sdk/types": 3.292.0 + "@aws-sdk/util-endpoints": 3.293.0 tslib: ^2.3.1 - checksum: 66487209f5bba32a35ecde7c4c2e550dbf4da662ce3147160dbc3f095b6b5e87cb8c5f8650b580779606f18de2b9aabafb5bab54072eb2f124b0d076cd758a13 + checksum: 315c11feb58e99625380a4f1274bcdd54a275dc323bab789a809911d66e86cde15d2a9fc536e31cef6621325aed80fb0cb7cb524dd707bcb5fb8b1a1284e87e3 languageName: node linkType: hard @@ -1429,16 +1430,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/token-providers@npm:3.292.0" +"@aws-sdk/token-providers@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/token-providers@npm:3.293.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.292.0 + "@aws-sdk/client-sso-oidc": 3.293.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: f902dc11def7425e28e3b063ce1feebd399568a4ba90b40622ff5c735860125306f6e9eb1a69179299f4a696fa5755712aad06028a713d832f52abbedb341db7 + checksum: 3a12f7f190e34e7341bff58d273706176538662bc1435637f866444233035ac142aabdb9fb7529d75b4d224fd3c739878ebd6a19f5fefb0ee054f63627cc3d2f languageName: node linkType: hard @@ -1544,13 +1545,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-endpoints@npm:3.292.0" +"@aws-sdk/util-endpoints@npm:3.293.0": + version: 3.293.0 + resolution: "@aws-sdk/util-endpoints@npm:3.293.0" dependencies: "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 146244ebf0ea2784af1601f469e1a7f60a238e0f2f97cf5c4af6a01f44e51f9a17e7f15f01ee4cc3fcaa8b25edd83e44a1adb41869ad244b036f76316c9c5e72 + checksum: 801602e9b4317cb1250e626167525dfe354a790bf243a63de3325f255c5d53a759bd6bd5aa1c35837be2a1960025d02070038747dac7a6909579c33c0bd1cb1f languageName: node linkType: hard From f2ccb790a3e7118e9681159a6eeb53d33ef90df1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 20:42:19 +0000 Subject: [PATCH 218/511] fix(deps): update dependency @tanstack/react-query to v4.26.1 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index b779e006ce..be7cfedbb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13765,18 +13765,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.24.10": - version: 4.24.10 - resolution: "@tanstack/query-core@npm:4.24.10" - checksum: 8268b9dca4a2ed39f8575976d8a3e2f839bb6f4fb821dc00ba8e2aeffffe2f73e23344bcc24b9cb6dae9dbfe3ba2b14c76a1e0a38b4064c83beb9aa607fd94bc +"@tanstack/query-core@npm:4.26.1": + version: 4.26.1 + resolution: "@tanstack/query-core@npm:4.26.1" + checksum: c7bc751d7d08ce27dd7262aa75a263808b128902b8f3a5dd1ff9b1dfda6511af965388bcdb7d8130bdf10756c1d583f527ead274b1d3e4f4db29c83260b416b0 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.24.10 - resolution: "@tanstack/react-query@npm:4.24.10" + version: 4.26.1 + resolution: "@tanstack/react-query@npm:4.26.1" dependencies: - "@tanstack/query-core": 4.24.10 + "@tanstack/query-core": 4.26.1 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -13787,7 +13787,7 @@ __metadata: optional: true react-native: optional: true - checksum: 576a2c73e98cf6a3c9584283989383d5ac63b01efe546cc7580ec7b1edf0c0cb8958a3071778cb0af908f5269d45c7516fa388e5f856e37f5b2d3c6110974cbe + checksum: 3b43a5acc84841364c08ed7c7d0f495008214f1f39b7fb073a95a53528ce40b4841dbc407070b4c0082d73990277bbcf9bc88df40217e70c226be4931efaa081 languageName: node linkType: hard From ab31d8a7fdbd7bf173410d414cc33fc8771764fa Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Thu, 16 Mar 2023 17:17:41 -0400 Subject: [PATCH 219/511] Support full text searches across multiple search keys, not just the sort order key. Signed-off-by: Aramis Sennyey --- .../service/DefaultEntitiesCatalog.test.ts | 58 +++++++++++++++++++ .../src/service/DefaultEntitiesCatalog.ts | 16 +++-- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts index 275bd1c42c..b178a591de 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts @@ -1119,6 +1119,64 @@ describe('DefaultEntitiesCatalog', () => { }, ); + it.each(databases.eachSupportedId())( + 'should filter the text results when sortOrder is not provided, %p', + async databaseId => { + await createDatabase(databaseId); + + const names = ['lion', 'cat', 'atcatss', 'dog', 'dogcat', 'aa', 's']; + const entities: Entity[] = names.map(name => + // Need a stable search since default filtering is by uid, and those get generated on the fly + // during the test case. + entityFrom(name, { uid: name }), + ); + + const notFoundEntities: Entity[] = [ + { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'something' }, + spec: {}, + }, + { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'something else' }, + spec: {}, + }, + ]; + + await Promise.all( + entities.concat(notFoundEntities).map(e => addEntityToSearch(e)), + ); + + const catalog = new DefaultEntitiesCatalog({ + database: knex, + logger: getVoidLogger(), + stitcher, + }); + + const filter = { + key: 'spec.should_include_this', + }; + + const request: QueryEntitiesInitialRequest = { + filter, + limit: 100, + fullTextFilter: { term: 'cAt ', fields: ['metadata.name'] }, + }; + const response = await catalog.queryEntities(request); + expect(response.items).toEqual([ + entityFrom('atcatss', { uid: 'atcatss' }), + entityFrom('cat', { uid: 'cat' }), + entityFrom('dogcat', { uid: 'dogcat' }), + ]); + expect(response.pageInfo.nextCursor).toBeUndefined(); + expect(response.pageInfo.prevCursor).toBeUndefined(); + expect(response.totalItems).toBe(3); + }, + ); + it.each(databases.eachSupportedId())( 'should include totalItems and empty entities in the response in case limit is zero, %p', async databaseId => { diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index 4e6109423e..b1c42ab353 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -51,6 +51,7 @@ import { } from '../database/tables'; import { Stitcher } from '../stitching/Stitcher'; +import { parseFullTextFilterFields } from './request/parseFullTextFilterFields'; import { isQueryEntitiesCursorRequest, @@ -382,11 +383,18 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog { } const normalizedFullTextFilterTerm = cursor.fullTextFilter?.term?.trim(); + const textFilterFields = cursor.fullTextFilter?.fields ?? [sortField.field]; if (normalizedFullTextFilterTerm) { - dbQuery.andWhereRaw( - 'value like ?', - `%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`, - ); + const matchQuery = db('search') + .select('search.entity_id') + .whereIn('key', textFilterFields) + .andWhere(function keyFilter() { + this.andWhereRaw( + 'value like ?', + `%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`, + ); + }); + dbQuery.andWhere('search.entity_id', 'in', matchQuery); } const countQuery = dbQuery.clone(); From 2942b04f0c945758a5ba6ad704e43f10d3fa8a9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 21:21:26 +0000 Subject: [PATCH 220/511] fix(deps): update dependency core-js to v3.29.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index be7cfedbb9..ff280b0585 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19480,9 +19480,9 @@ __metadata: linkType: hard "core-js@npm:^3.6.5": - version: 3.28.0 - resolution: "core-js@npm:3.28.0" - checksum: 3155fd0ec16d0089106b145e9595280a4ea4bde0d7ff26aa14364cd4f1c203baf6620c3025acd284f363d08b9f21104101692766ca9a36ffeee7307bdf3e1881 + version: 3.29.1 + resolution: "core-js@npm:3.29.1" + checksum: b38446dbfcfd3887b3d4922990da487e2c95044cb4c5717aaf95e786a4c6b218f05c056c7ed6c699169b9794a49fec890e402659d54661fc56965a0eb717e7bd languageName: node linkType: hard From 899ebfd8e02159401508cfcf66a0484473a6c355 Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Thu, 16 Mar 2023 17:32:08 -0400 Subject: [PATCH 221/511] Add changeset. Signed-off-by: Aramis Sennyey --- .changeset/orange-rabbits-jam.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/orange-rabbits-jam.md diff --git a/.changeset/orange-rabbits-jam.md b/.changeset/orange-rabbits-jam.md new file mode 100644 index 0000000000..fb60813c7d --- /dev/null +++ b/.changeset/orange-rabbits-jam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add full text search support to the `by-query` endpoint. From 8b319ad1957c60a60cb750374d744f4a82d8163f Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Thu, 16 Mar 2023 17:33:33 -0400 Subject: [PATCH 222/511] Remove unused import. Signed-off-by: Aramis Sennyey --- plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index b1c42ab353..bc6c93ec90 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -51,7 +51,6 @@ import { } from '../database/tables'; import { Stitcher } from '../stitching/Stitcher'; -import { parseFullTextFilterFields } from './request/parseFullTextFilterFields'; import { isQueryEntitiesCursorRequest, From 0b5febcd753f5bc62924ef60de20032ce7d90923 Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Thu, 16 Mar 2023 17:36:39 -0400 Subject: [PATCH 223/511] Make callbackUrl optional. Signed-off-by: Aramis Sennyey --- plugins/auth-backend/config.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index cdd3fe1bf0..8d76ca8bf5 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -68,7 +68,7 @@ export interface Config { * @visibility secret */ clientSecret: string; - callbackUrl: string; + callbackUrl?: string; }; }; github?: { From a0aed0b80fb15ab81b11cfef62c87c5c61312937 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 22:11:55 +0000 Subject: [PATCH 224/511] fix(deps): update dependency cron to v2.3.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e340256fda..0959e52bd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19626,11 +19626,11 @@ __metadata: linkType: hard "cron@npm:^2.0.0": - version: 2.2.0 - resolution: "cron@npm:2.2.0" + version: 2.3.0 + resolution: "cron@npm:2.3.0" dependencies: luxon: ^3.2.1 - checksum: 53905d0f55e052742cf4fed34598a4ebfc311f4f9143c90384225bb4376fa639cd12f485cbf5d3dca00db377bf5117f27a1cae405f15e4745d1f69808e4fb9ac + checksum: 70b220f3fc4b6bcd594f7f2c690bbf7a3a03b0e081eb0119f8e3ca21635f2da07d89e038d561d4c0742c8b0dd04977f25e307d0608455ef9f527a556b2da92fc languageName: node linkType: hard From f0ffebb67afc1b5cf7bfbe32c90f58503245f300 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 22:12:20 +0000 Subject: [PATCH 225/511] fix(deps): update dependency elastic-builder to v2.18.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e340256fda..9038d82b8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21139,8 +21139,8 @@ __metadata: linkType: hard "elastic-builder@npm:^2.16.0": - version: 2.17.3 - resolution: "elastic-builder@npm:2.17.3" + version: 2.18.1 + resolution: "elastic-builder@npm:2.18.1" dependencies: lodash.has: ^4.5.2 lodash.hasin: ^4.5.2 @@ -21150,7 +21150,7 @@ __metadata: lodash.isobject: ^3.0.2 lodash.isstring: ^4.0.1 lodash.omit: ^4.5.0 - checksum: b1e47ad4d36e9974a1075e9e4f455e2d120eebc16d9e5c7e7219e89fcb64bcacd3015afddeae479a79f6b4cd92c4528f3e8535c9c9ca8d644286b9bb49635cdc + checksum: 54093daadc1fc3666ac8eef0a268267761e92a3fbb524e51936cf944ceeaeb231a269fc8ae9fb902ca41c976c76c0c037da692a34577d705da301ed727bd8e07 languageName: node linkType: hard From 18e6ef9e8876d4b80ae21535cb7fc60d4de14ca6 Mon Sep 17 00:00:00 2001 From: Tracey Date: Thu, 16 Mar 2023 15:41:52 -0700 Subject: [PATCH 226/511] adjusting tests to use msw and other changes requested in pr Signed-off-by: Tracey --- .changeset/new-pigs-jam.md | 4 +- .../README.md | 20 +- .../package.json | 7 +- .../confluence/confluenceToMarkdown.test.ts | 121 ++- .../confluence/confluenceToMarkdown.ts | 21 +- .../src/actions/confluence/helpers.ts | 22 +- .../src/index.ts | 2 +- yarn.lock | 717 ++++++++++-------- 8 files changed, 466 insertions(+), 448 deletions(-) diff --git a/.changeset/new-pigs-jam.md b/.changeset/new-pigs-jam.md index 4c7f74d17f..c56880e891 100644 --- a/.changeset/new-pigs-jam.md +++ b/.changeset/new-pigs-jam.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn': minor +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': minor --- -Created new action for converting confluence docs to Markdown, to be pushed to GitHub repos onboarded onto Techdocs +Created new action for converting confluence docs to Markdown, to be pushed to GitHub repos configured for Techdocs diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md b/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md index 61cc1efe13..56ca4afffc 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md @@ -1,4 +1,4 @@ -# @backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn +# @backstage/plugin-scaffolder-backend-module-confluence-to-markdown Welcome to the `transform:confluence-to-markdown` action for the `scaffolder-backend`. @@ -10,7 +10,7 @@ You need to configure the action in your backend: ```bash # From your Backstage root directory -yarn add --cwd packages/backend @backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn +yarn add --cwd packages/backend @backstage/plugin-scaffolder-backend-module-confluence-to-markdown ``` Configure the action: @@ -21,7 +21,7 @@ Configure the action: import { createBuiltinActions } from '@backstage/plugin-scaffolder-backend'; import { ScmIntegrations } from '@backstage/integration'; -import { createConfluenceToMarkdownAction } from '@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn'; +import { createConfluenceToMarkdownAction } from '@backstage/plugin-scaffolder-backend-module-confluence-to-markdown'; export default async function createPlugin( env: PluginEnvironment, @@ -58,16 +58,15 @@ export default async function createPlugin( You will also need an access token for authorization with `Read` permissions. You can create a Personal Access Token (PAT) in confluence and add the PAT to your `app-config.yaml` -``` +```yaml confluence: baseUrl: ${CONFLUENCE_BASE_URL} token: ${CONFLUENCE_TOKEN} - ``` After that you can use the action in your template: -``` +```yaml apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: @@ -85,7 +84,7 @@ spec: properties: confluenceUrls: type: array - description: Urls for confluence doc to be converted to markdown. In format /display// or /pages/viewpage.action?spacekey=&title= + description: Urls for confluence doc to be converted to markdown. In format /display// items: type: string default: confluence url @@ -95,8 +94,8 @@ spec: maxItems: 5 repoUrl: type: string - title: GitHub url mkdocs.yaml link - description: The GitHub repo url to your mkdocs.yaml file. Example + title: GitHub URL mkdocs.yaml link + description: The GitHub repo URL to your mkdocs.yaml file. Example steps: - id: create-docs name: Get markdown file created and update markdown.yaml file @@ -118,9 +117,8 @@ spec: input: prUrl: ${{ steps['publish'].output.remoteUrl }} forceAdmin: true - ``` Replace `` with your GitHub url without `https://`. -You can find a list of all registred actions including their parameters at the /create/actions route in your Backstage application. +You can find a list of all registered actions including their parameters at the /create/actions route in your Backstage application. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json index 6ae6ea8688..10aef2bca3 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", - "description": "The confluence-to-markdowwn module for @backstage/plugin-scaffolder-backend", + "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -31,16 +31,19 @@ "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", - "fs": "^0.0.1-security", "fs-extra": "^11.1.0", "git-url-parse": "^13.1.0", + "jest": "^29.5.0", "node-fetch": "2.6.7", "node-html-markdown": "^1.3.0", + "ts-jest": "^29.0.5", "yaml": "^2.2.1" }, "devDependencies": { "@backstage/cli": "workspace:^", + "@backstage/test-utils": "workspace:^", "mock-fs": "^5.2.0", + "msw": "^1.1.0", "os": "^0.1.2" }, "files": [ diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts index 6a3a497d99..ae98c38c03 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts @@ -19,14 +19,14 @@ import { getVoidLogger } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; +import { setupRequestMockHandlers } from '@backstage/test-utils'; import mockFs from 'mock-fs'; import os from 'os'; -import fetch from 'node-fetch'; import type { ActionContext } from '@backstage/plugin-scaffolder-node'; -import { readFile, writeFile } from 'fs-extra'; -import { Readable } from 'stream'; +import { readFile, writeFile, createWriteStream } from 'fs-extra'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; -jest.mock('node-fetch'); jest.mock('fs-extra', () => ({ mkdirSync: jest.fn(), readFile: jest.fn().mockResolvedValue('File contents'), @@ -38,12 +38,15 @@ jest.mock('fs-extra', () => ({ createWriteStream: jest.fn().mockReturnValue(new PassThrough()), writeStream: jest.fn(), })); -const { Response } = jest.requireActual('node-fetch'); describe('transform:confluence-to-markdown', () => { + const baseUrl = `https://nodomain.confluence.com`; + const worker = setupServer(); + setupRequestMockHandlers(worker); + const config = new ConfigReader({ confluence: { - baseUrl: 'https://nodomain.confluence.com/', + baseUrl: baseUrl, token: 'fake_token', }, }); @@ -131,25 +134,19 @@ describe('transform:confluence-to-markdown', () => { ], }; - (fetch as jest.MockedFunction) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBody), { - status: 200, - statusText: 'OK', - }), - ) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBodyTwo), { - status: 200, - statusText: 'OK', - }), - ) - .mockResolvedValueOnce( - new Response(Readable.from('Hello world'), { - status: 200, - statusText: 'OK', - }), - ); + worker.use( + rest.get(`${baseUrl}/rest/api/content`, (_, res, ctx) => + res(ctx.status(200, 'OK'), ctx.json(responseBody)), + ), + rest.get( + `${baseUrl}/rest/api/content/4444444/child/attachment`, + (_, res, ctx) => res(ctx.status(200, 'OK'), ctx.json(responseBodyTwo)), + ), + rest.get( + `${baseUrl}/download/attachments/4444444/testing.pdf`, + (_, res, ctx) => res(ctx.status(200, 'OK'), ctx.body('hello')), + ), + ); const mockCreateWriteStream = jest.fn().mockReturnValue({ on: jest.fn(), @@ -169,8 +166,7 @@ describe('transform:confluence-to-markdown', () => { `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, ); expect(logger.info).toHaveBeenCalledTimes(5); - - expect(fetch).toHaveBeenCalledTimes(3); + expect(createWriteStream).toHaveBeenCalledTimes(1); expect(readFile).toHaveBeenCalledTimes(1); expect(writeFile).toHaveBeenCalledTimes(1); }); @@ -199,19 +195,15 @@ describe('transform:confluence-to-markdown', () => { results: [], }; - (fetch as jest.MockedFunction) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBody), { - status: 200, - statusText: 'OK', - }), - ) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBodyTwo), { - status: 200, - statusText: 'OK', - }), - ); + worker.use( + rest.get(`${baseUrl}/rest/api/content`, (_, res, ctx) => + res(ctx.status(200, 'OK'), ctx.json(responseBody)), + ), + rest.get( + `${baseUrl}/rest/api/content/4444444/child/attachment`, + (_, res, ctx) => res(ctx.status(200, 'OK'), ctx.json(responseBodyTwo)), + ), + ); jest.mock('fs-extra', () => ({ readFile: jest.fn().mockResolvedValue('File contents'), @@ -225,7 +217,7 @@ describe('transform:confluence-to-markdown', () => { ); expect(logger.info).toHaveBeenCalledTimes(5); - expect(fetch).toHaveBeenCalledTimes(2); + expect(createWriteStream).not.toHaveBeenCalled(); expect(readFile).toHaveBeenCalledTimes(1); expect(writeFile).toHaveBeenCalledTimes(1); }); @@ -237,13 +229,13 @@ describe('transform:confluence-to-markdown', () => { config, }; const responseBody = {}; - (fetch as jest.MockedFunction).mockResolvedValueOnce( - new Response(JSON.stringify(responseBody), { - status: 401, - statusText: 'npot', - ok: false, - }), + + worker.use( + rest.get(`${baseUrl}/rest/api/content`, (_, res, ctx) => + res(ctx.status(401, 'nope'), ctx.json(responseBody)), + ), ); + const action = createConfluenceToMarkdownAction(options); await expect(async () => { await action.handler(mockContext); @@ -259,12 +251,13 @@ describe('transform:confluence-to-markdown', () => { const responseBody = { results: [], }; - (fetch as jest.MockedFunction).mockResolvedValueOnce( - new Response(JSON.stringify(responseBody), { - status: 200, - statusText: 'ok', - }), + + worker.use( + rest.get(`${baseUrl}/rest/api/content`, (_, res, ctx) => + res(ctx.status(200, 'OK'), ctx.json(responseBody)), + ), ); + const action = createConfluenceToMarkdownAction(options); await expect(async () => { await action.handler(mockContext); @@ -295,19 +288,17 @@ describe('transform:confluence-to-markdown', () => { }; const responseBodyTwo = {}; - (fetch as jest.MockedFunction) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBody), { - status: 200, - statusText: 'OK', - }), - ) - .mockResolvedValueOnce( - new Response(JSON.stringify(responseBodyTwo), { - status: 404, - statusText: 'notok', - }), - ); + worker.use( + rest.get(`${baseUrl}/rest/api/content`, (_, res, ctx) => + res(ctx.status(200, 'OK'), ctx.json(responseBody)), + ), + rest.get( + `${baseUrl}/rest/api/content/4444444/child/attachment`, + (_, res, ctx) => + res(ctx.status(404, 'nope'), ctx.json(responseBodyTwo)), + ), + ); + const action = createConfluenceToMarkdownAction(options); await expect(async () => { await action.handler(mockContext); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts index 62bebb752f..2a7d28048a 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts @@ -22,11 +22,9 @@ import { InputError, ConflictError } from '@backstage/errors'; import { NodeHtmlMarkdown } from 'node-html-markdown'; import fs from 'fs-extra'; import parseGitUrl from 'git-url-parse'; +import YAML from 'yaml'; import { - parseFromYaml, readFileAsString, - transformToYaml, - updateFile, fetchConfluence, getAndWriteAttachments, createConfluenceVariables, @@ -92,12 +90,9 @@ export const createConfluenceToMarkdownAction = (options: { }, }); - for (let p = 0; p < confluenceUrls.length; p++) { - const confluenceUrl = confluenceUrls[p]; - + for (const url of confluenceUrls) { const { spacekey, title, titleWithSpaces } = - await createConfluenceVariables(confluenceUrl); - + await createConfluenceVariables(url); // This calls confluence to get the page html and page id const getConfluenceDoc = await fetchConfluence( `/rest/api/content?title=${title}&spaceKey=${spacekey}&expand=body.export_view`, @@ -105,7 +100,7 @@ export const createConfluenceToMarkdownAction = (options: { ); if (getConfluenceDoc.results.length === 0) { throw new InputError( - `Could not find document ${confluenceUrl}. Please check your input.`, + `Could not find document ${url}. Please check your input.`, ); } // This gets attachements for the confluence page if they exist @@ -132,7 +127,7 @@ export const createConfluenceToMarkdownAction = (options: { // This reads mkdocs.yml file const mkdocsFileContent = await readFileAsString(repoFileDir); - const mkdocsFile = parseFromYaml(mkdocsFileContent); + const mkdocsFile = await YAML.parse(mkdocsFileContent); ctx.logger.info( `Adding new file - ${titleWithSpaces} to the current mkdocs.yml file`, ); @@ -151,14 +146,14 @@ export const createConfluenceToMarkdownAction = (options: { ); } } - const newTemplateFileContent = transformToYaml(mkdocsFile); - await updateFile(newTemplateFileContent, repoFileDir); + + await fs.writeFile(repoFileDir, YAML.stringify(mkdocsFile)); // This grabs the confluence html and converts it to markdown and adds attachments const html = getConfluenceDoc.results[0].body.export_view.value; const markdownToPublish = NodeHtmlMarkdown.translate(html); let newString: string = markdownToPublish; - productArray.map((product: string[]) => { + productArray.forEach((product: string[]) => { const regex = product[1].includes('pdf') ? new RegExp(`(\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi') : new RegExp(`(\\!\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi'); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts index d0125b5a0d..d59a4cc3f5 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts @@ -17,7 +17,6 @@ import { Config } from '@backstage/config'; import { ResponseError, ConflictError, InputError } from '@backstage/errors'; import fs from 'fs-extra'; -import YAML from 'yaml'; import fetch, { Response } from 'node-fetch'; interface Links { @@ -49,18 +48,6 @@ export const readFileAsString = async (fileDir: string) => { return content.toString(); }; -export const parseFromYaml = (content: string) => { - return YAML.parse(content); -}; - -export const transformToYaml = (content: any) => { - return YAML.stringify(content); -}; - -export const updateFile = async (content: string, file: string) => { - await fs.writeFile(file, content); -}; - export const fetchConfluence = async (relativeUrl: string, config: Config) => { const baseUrl = config.getString('confluence.baseUrl'); const token = config.getString('confluence.token'); @@ -100,7 +87,6 @@ export const getAndWriteAttachments = async ( Authorization: `Bearer ${token}`, }, }); - // console.log(`${workspace}/${mkdocsDir}docs/img/${downloadTitle}`) if (!res.ok) { throw ResponseError.fromResponse(res); } else if (res.body !== null) { @@ -126,11 +112,11 @@ export const getAndWriteAttachments = async ( }; export const createConfluenceVariables = async (url: string) => { - let spacekey: string | null = null; - let title: string | null = null; - let titleWithSpaces: string | null = ''; + let spacekey: string | undefined = undefined; + let title: string | undefined = undefined; + let titleWithSpaces: string | undefined = ''; const params = new URL(url); - if (url.includes('display')) { + if (params.pathname.split('/')[1] === 'display') { spacekey = params.pathname.split('/')[2]; title = params.pathname.split('/')[3]; titleWithSpaces = title?.replace(/\+/g, ' '); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts index e38cee3557..bda2c7f9a1 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts @@ -15,7 +15,7 @@ */ /** - * The confluence-to-markdowwn module for @backstage/plugin-scaffolder-backend. + * The confluence-to-markdown module for @backstage/plugin-scaffolder-backend. * * @packageDocumentation */ diff --git a/yarn.lock b/yarn.lock index 3585d449fc..4514e3757b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7651,9 +7651,9 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn": +"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn": version: 0.0.0-use.local - resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdowwn@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn" + resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn" dependencies: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" @@ -7662,14 +7662,17 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" + "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" - fs: ^0.0.1-security fs-extra: ^11.1.0 git-url-parse: ^13.1.0 + jest: ^29.5.0 mock-fs: ^5.2.0 + msw: ^1.1.0 node-fetch: 2.6.7 node-html-markdown: ^1.3.0 os: ^0.1.2 + ts-jest: ^29.0.5 yaml: ^2.2.1 languageName: unknown linkType: soft @@ -11173,50 +11176,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/console@npm:29.4.3" +"@jest/console@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/console@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 - checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 + checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 languageName: node linkType: hard -"@jest/core@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/core@npm:29.4.3" +"@jest/core@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/core@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/reporters": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/reporters": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.4.3 - jest-config: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-message-util: ^29.4.3 + jest-changed-files: ^29.5.0 + jest-config: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-resolve-dependencies: ^29.4.3 - jest-runner: ^29.4.3 - jest-runtime: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 - jest-watcher: ^29.4.3 + jest-resolve: ^29.5.0 + jest-resolve-dependencies: ^29.5.0 + jest-runner: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + jest-watcher: ^29.5.0 micromatch: ^4.0.4 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -11224,7 +11227,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 + checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 languageName: node linkType: hard @@ -11237,15 +11240,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/environment@npm:29.4.3" +"@jest/environment@npm:^29.4.3, @jest/environment@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/environment@npm:29.5.0" dependencies: - "@jest/fake-timers": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^29.4.3 - checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb + jest-mock: ^29.5.0 + checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a languageName: node linkType: hard @@ -11258,60 +11261,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/expect-utils@npm:29.4.3" +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" dependencies: jest-get-type: ^29.4.3 - checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 languageName: node linkType: hard -"@jest/expect@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/expect@npm:29.4.3" +"@jest/expect@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect@npm:29.5.0" dependencies: - expect: ^29.4.3 - jest-snapshot: ^29.4.3 - checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 + expect: ^29.5.0 + jest-snapshot: ^29.5.0 + checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/fake-timers@npm:29.4.3" +"@jest/fake-timers@npm:^29.4.3, @jest/fake-timers@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/fake-timers@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.4.3 - jest-mock: ^29.4.3 - jest-util: ^29.4.3 - checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee languageName: node linkType: hard -"@jest/globals@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/globals@npm:29.4.3" +"@jest/globals@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/globals@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/expect": ^29.4.3 - "@jest/types": ^29.4.3 - jest-mock: ^29.4.3 - checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/types": ^29.5.0 + jest-mock: ^29.5.0 + checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 languageName: node linkType: hard -"@jest/reporters@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/reporters@npm:29.4.3" +"@jest/reporters@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/reporters@npm:29.5.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -11324,9 +11327,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 - jest-worker: ^29.4.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -11336,7 +11339,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a + checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb languageName: node linkType: hard @@ -11369,50 +11372,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/test-result@npm:29.4.3" +"@jest/test-result@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-result@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/types": ^29.5.0 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb + checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/test-sequencer@npm:29.4.3" +"@jest/test-sequencer@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-sequencer@npm:29.5.0" dependencies: - "@jest/test-result": ^29.4.3 + "@jest/test-result": ^29.5.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 slash: ^3.0.0 - checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e + checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e languageName: node linkType: hard -"@jest/transform@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/transform@npm:29.4.3" +"@jest/transform@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/transform@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 jest-regex-util: ^29.4.3 - jest-util: ^29.4.3 + jest-util: ^29.5.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 + checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d languageName: node linkType: hard @@ -11443,9 +11446,9 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/types@npm:29.4.3" +"@jest/types@npm:^29.4.3, @jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" dependencies: "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 @@ -11453,7 +11456,7 @@ __metadata: "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 languageName: node linkType: hard @@ -17711,20 +17714,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-jest@npm:29.4.3" +"babel-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-jest@npm:29.5.0" dependencies: - "@jest/transform": ^29.4.3 + "@jest/transform": ^29.5.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.4.3 + babel-preset-jest: ^29.5.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 + checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede languageName: node linkType: hard @@ -17750,15 +17753,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-plugin-jest-hoist@npm:29.4.3" +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 languageName: node linkType: hard @@ -17897,15 +17900,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-preset-jest@npm:29.4.3" +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" dependencies: - babel-plugin-jest-hoist: ^29.4.3 + babel-plugin-jest-hoist: ^29.5.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad languageName: node linkType: hard @@ -18360,6 +18363,15 @@ __metadata: languageName: node linkType: hard +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -23081,16 +23093,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.4.3": - version: 29.4.3 - resolution: "expect@npm:29.4.3" +"expect@npm:^29.0.0, expect@npm:^29.5.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" dependencies: - "@jest/expect-utils": ^29.4.3 + "@jest/expect-utils": ^29.5.0 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 - checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 languageName: node linkType: hard @@ -23305,7 +23317,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -24009,13 +24021,6 @@ __metadata: languageName: node linkType: hard -"fs@npm:^0.0.1-security": - version: 0.0.1-security - resolution: "fs@npm:0.0.1-security" - checksum: 53c6230e1faae9fa32c1df82c16a84b51b1243d20f3da2b64bd110bb472b73b9185169b703e008356e3cdc92d155088b617d9d39a63b5227a30b3621baad7f5d - languageName: node - linkType: hard - "fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" @@ -26697,57 +26702,58 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-changed-files@npm:29.4.3" +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 languageName: node linkType: hard -"jest-circus@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-circus@npm:29.4.3" +"jest-circus@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-circus@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/expect": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-runtime: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 + jest-each: ^29.5.0 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 p-limit: ^3.1.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 + checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 languageName: node linkType: hard -"jest-cli@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-cli@npm:29.4.3" +"jest-cli@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-cli@npm:29.5.0" dependencies: - "@jest/core": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/core": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-config: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -26757,34 +26763,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 + checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba languageName: node linkType: hard -"jest-config@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-config@npm:29.4.3" +"jest-config@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-config@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.4.3 - "@jest/types": ^29.4.3 - babel-jest: ^29.4.3 + "@jest/test-sequencer": ^29.5.0 + "@jest/types": ^29.5.0 + babel-jest: ^29.5.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.4.3 - jest-environment-node: ^29.4.3 + jest-circus: ^29.5.0 + jest-environment-node: ^29.5.0 jest-get-type: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-runner: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-resolve: ^29.5.0 + jest-runner: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26795,7 +26801,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 + checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c languageName: node linkType: hard @@ -26820,15 +26826,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-diff@npm:29.4.3" +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" dependencies: chalk: ^4.0.0 diff-sequences: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 languageName: node linkType: hard @@ -26841,16 +26847,16 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-each@npm:29.4.3" +"jest-each@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-each@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 - jest-util: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d + jest-util: ^29.5.0 + pretty-format: ^29.5.0 + checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 languageName: node linkType: hard @@ -26875,17 +26881,17 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-environment-node@npm:29.4.3" +"jest-environment-node@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-environment-node@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/fake-timers": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^29.4.3 - jest-util: ^29.4.3 - checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 languageName: node linkType: hard @@ -26903,11 +26909,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-haste-map@npm:29.4.3" +"jest-haste-map@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-haste-map@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -26915,24 +26921,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.4.3 - jest-util: ^29.4.3 - jest-worker: ^29.4.3 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 + checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 languageName: node linkType: hard -"jest-leak-detector@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-leak-detector@npm:29.4.3" +"jest-leak-detector@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-leak-detector@npm:29.5.0" dependencies: jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 + pretty-format: ^29.5.0 + checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 languageName: node linkType: hard @@ -26948,15 +26954,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-matcher-utils@npm:29.4.3" +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" dependencies: chalk: ^4.0.0 - jest-diff: ^29.4.3 + jest-diff: ^29.5.0 jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 languageName: node linkType: hard @@ -26977,31 +26983,31 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-message-util@npm:29.4.3" +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf languageName: node linkType: hard -"jest-mock@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-mock@npm:29.4.3" +"jest-mock@npm:^29.4.3, jest-mock@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-mock@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-util: ^29.4.3 - checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 + jest-util: ^29.5.0 + checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c languageName: node linkType: hard @@ -27024,95 +27030,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-resolve-dependencies@npm:29.4.3" +"jest-resolve-dependencies@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve-dependencies@npm:29.5.0" dependencies: jest-regex-util: ^29.4.3 - jest-snapshot: ^29.4.3 - checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 + jest-snapshot: ^29.5.0 + checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf languageName: node linkType: hard -"jest-resolve@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-resolve@npm:29.4.3" +"jest-resolve@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve@npm:29.5.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc + checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f languageName: node linkType: hard -"jest-runner@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-runner@npm:29.4.3" +"jest-runner@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runner@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/environment": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/environment": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.4.3 - jest-environment-node: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-leak-detector: ^29.4.3 - jest-message-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-runtime: ^29.4.3 - jest-util: ^29.4.3 - jest-watcher: ^29.4.3 - jest-worker: ^29.4.3 + jest-environment-node: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-leak-detector: ^29.5.0 + jest-message-util: ^29.5.0 + jest-resolve: ^29.5.0 + jest-runtime: ^29.5.0 + jest-util: ^29.5.0 + jest-watcher: ^29.5.0 + jest-worker: ^29.5.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 + checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-runtime@npm:29.4.3" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runtime@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/fake-timers": ^29.4.3 - "@jest/globals": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/globals": ^29.5.0 "@jest/source-map": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 - jest-message-util: ^29.4.3 - jest-mock: ^29.4.3 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 + checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d languageName: node linkType: hard -"jest-snapshot@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-snapshot@npm:29.4.3" +"jest-snapshot@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-snapshot@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -27120,25 +27126,24 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/expect-utils": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.4.3 + expect: ^29.5.0 graceful-fs: ^4.2.9 - jest-diff: ^29.4.3 + jest-diff: ^29.5.0 jest-get-type: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 natural-compare: ^1.4.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 semver: ^7.3.5 - checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 + checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b languageName: node linkType: hard @@ -27156,47 +27161,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-util@npm:29.4.3" +"jest-util@npm:^29.0.0, jest-util@npm:^29.4.3, jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 languageName: node linkType: hard -"jest-validate@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-validate@npm:29.4.3" +"jest-validate@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-validate@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.4.3 - checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 + pretty-format: ^29.5.0 + checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 languageName: node linkType: hard -"jest-watcher@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-watcher@npm:29.4.3" +"jest-watcher@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-watcher@npm:29.5.0" dependencies: - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.4.3 + jest-util: ^29.5.0 string-length: ^4.0.1 - checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc + checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 languageName: node linkType: hard @@ -27231,26 +27236,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-worker@npm:29.4.3" +"jest-worker@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" dependencies: "@types/node": "*" - jest-util: ^29.4.3 + jest-util: ^29.5.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 languageName: node linkType: hard -"jest@npm:^29.0.2": - version: 29.4.3 - resolution: "jest@npm:29.4.3" +"jest@npm:^29.0.2, jest@npm:^29.5.0": + version: 29.5.0 + resolution: "jest@npm:29.5.0" dependencies: - "@jest/core": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/core": ^29.5.0 + "@jest/types": ^29.5.0 import-local: ^3.0.2 - jest-cli: ^29.4.3 + jest-cli: ^29.5.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -27258,7 +27263,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f + checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 languageName: node linkType: hard @@ -27756,7 +27761,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1": +"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -28726,7 +28731,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:^4.1.2": +"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 @@ -29010,7 +29015,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:^1.1.1": +"make-error@npm:1.x, make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -30258,9 +30263,9 @@ __metadata: languageName: node linkType: hard -"msw@npm:^1.0.0, msw@npm:^1.0.1": - version: 1.0.1 - resolution: "msw@npm:1.0.1" +"msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.1.0": + version: 1.1.0 + resolution: "msw@npm:1.1.0" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -30288,7 +30293,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: e5d6cbe67067ca46f42aaa33011f53a4e5a873abcf81c52a6996536b3c41a88f522821d3a4cf589658252581506afddb58fd8c3dfd79a5cbf06e26e14f9570b6 + checksum: e555547defbc3f07532bdadcbf9f4e3a32b92156d3869e85c9038ecaac220cfc93901727da097b7f9d3ecf9cbbc5a9178c0ecdd3999a9201db4c85c99b92c361 languageName: node linkType: hard @@ -32959,14 +32964,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": - version: 29.4.3 - resolution: "pretty-format@npm:29.4.3" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" dependencies: "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 languageName: node linkType: hard @@ -33326,6 +33331,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.0.1 + resolution: "pure-rand@npm:6.0.1" + checksum: 4bb565399993b815658a72e359f574ce4f04827a42a905105d61163ae86f456d91595a0e4241e7bce04328fae0638ae70ac0428d93ecb55971c465bd084f8648 + languageName: node + linkType: hard + "pvtsutils@npm:^1.3.2": version: 1.3.2 resolution: "pvtsutils@npm:1.3.2" @@ -35422,16 +35434,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - -"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0": +"semver@npm:7.x, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -35442,6 +35445,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -37619,6 +37631,39 @@ __metadata: languageName: node linkType: hard +"ts-jest@npm:^29.0.5": + version: 29.0.5 + resolution: "ts-jest@npm:29.0.5" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: 7.x + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: f60f129c2287f4c963d9ee2677132496c5c5a5d39c27ad234199a1140c26318a7d5bda34890ab0e30636ec42a8de28f84487c09e9dcec639c9c67812b3a38373 + languageName: node + linkType: hard + "ts-log@npm:^2.2.3": version: 2.2.3 resolution: "ts-log@npm:2.2.3" @@ -39571,7 +39616,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.0": +"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.0.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c From 519c95171dc561737a1d827cbdffaedba202f0d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 00:25:34 +0000 Subject: [PATCH 227/511] fix(deps): update dependency eslint-config-prettier to v8.7.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 80d2be3125..9d53979c85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21886,13 +21886,13 @@ __metadata: linkType: hard "eslint-config-prettier@npm:^8.3.0": - version: 8.6.0 - resolution: "eslint-config-prettier@npm:8.6.0" + version: 8.7.0 + resolution: "eslint-config-prettier@npm:8.7.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: ff0d0dfc839a556355422293428637e8d35693de58dabf8638bf0b6529131a109d0b2ade77521aa6e54573bb842d7d9d322e465dd73dd61c7590fa3834c3fa81 + checksum: b05bc7f2296ce3e0925c14147849706544870e0382d38af2352d709a6cf8521bdaff2bd8e5021f1780e570775a8ffa1d2bac28b8065d90d43a3f1f98fd26ce52 languageName: node linkType: hard From 9c276fd3fc9cbac8fd69564d45e85b21c64633b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 00:25:59 +0000 Subject: [PATCH 228/511] fix(deps): update dependency graphql-ws to v5.12.0 Signed-off-by: Renovate Bot --- yarn.lock | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 80d2be3125..c24819938f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24280,7 +24280,7 @@ __metadata: languageName: node linkType: hard -"graphql-ws@npm:5.11.2, graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": +"graphql-ws@npm:5.11.2": version: 5.11.2 resolution: "graphql-ws@npm:5.11.2" peerDependencies: @@ -24289,6 +24289,15 @@ __metadata: languageName: node linkType: hard +"graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": + version: 5.12.0 + resolution: "graphql-ws@npm:5.12.0" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 5c683e2d5bdadfcfec0639eda69b8a66ef275e68e64f662bd75da6779a87b34395cbce8e37cb66830a9febca1871f7dc2575e6814f6f6e899904fe72e245f216 + languageName: node + linkType: hard + "graphql@npm:^15.0.0 || ^16.0.0, graphql@npm:^16.0.0": version: 16.6.0 resolution: "graphql@npm:16.6.0" From 2cd6b19883b950e06fcb29c06508ad8bbb2e400e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 01:29:04 +0000 Subject: [PATCH 229/511] fix(deps): update dependency isomorphic-git to v1.22.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9d53979c85..bd3f6ec265 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26130,8 +26130,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.8.0": - version: 1.21.0 - resolution: "isomorphic-git@npm:1.21.0" + version: 1.22.0 + resolution: "isomorphic-git@npm:1.22.0" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -26146,7 +26146,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: afbdf98000c586fdcb96f84c054d6ada392b0d2422a7b7baad89e5f5881a79426f8555bdadeebe25202be18bb8eaee3881f8c04b6a289d04b916790bdd5dd5df + checksum: 59f1bf6a6f3e3fad2d43ffa992c20fea41c41e041e11422caea2da252e6cb712e6c18bb2878ed5c7e6b37336d4dc967fb54f7335d28a365c062b7c23e4ba07a9 languageName: node linkType: hard From db7515369ad0db9a98338fbb02dc86af7c2c22f9 Mon Sep 17 00:00:00 2001 From: Abhay Soni Date: Fri, 17 Mar 2023 10:36:28 +0530 Subject: [PATCH 230/511] Update microsite/data/plugins/statusneo-github-plugin.yaml Co-authored-by: Johan Haals Signed-off-by: Abhay Soni --- microsite/data/plugins/statusneo-github-plugin.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/microsite/data/plugins/statusneo-github-plugin.yaml b/microsite/data/plugins/statusneo-github-plugin.yaml index 94b182cdb0..3b5a901164 100644 --- a/microsite/data/plugins/statusneo-github-plugin.yaml +++ b/microsite/data/plugins/statusneo-github-plugin.yaml @@ -2,9 +2,7 @@ title: Statusneo Github Plugin author: Statusneo authorUrl: https://statusneo.com/ category: GitHub -description: | - This plugin integrates with github and brings the logged in user data. - It contains actions table and pull request table. +description: Provides status cards GitHub pull requests and GitHub actions. documentation: https://statusneo.com/23468-2/ iconUrl: /img/github-statusneo.png npmPackageName: '@statusneo/backstage-plugin-github' From ecc95244f9d04cab824f8df236fce311295ecbfc Mon Sep 17 00:00:00 2001 From: Abhay Soni Date: Fri, 17 Mar 2023 10:36:38 +0530 Subject: [PATCH 231/511] Update microsite/data/plugins/statusneo-github-plugin.yaml Co-authored-by: Johan Haals Signed-off-by: Abhay Soni --- microsite/data/plugins/statusneo-github-plugin.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/statusneo-github-plugin.yaml b/microsite/data/plugins/statusneo-github-plugin.yaml index 3b5a901164..eea4b84e06 100644 --- a/microsite/data/plugins/statusneo-github-plugin.yaml +++ b/microsite/data/plugins/statusneo-github-plugin.yaml @@ -3,7 +3,7 @@ author: Statusneo authorUrl: https://statusneo.com/ category: GitHub description: Provides status cards GitHub pull requests and GitHub actions. -documentation: https://statusneo.com/23468-2/ +documentation: https://github.com/StatusNeo/backstage-plugin-github iconUrl: /img/github-statusneo.png npmPackageName: '@statusneo/backstage-plugin-github' tags: From b77785534f198b4a5e60be54ae259be3a4df5449 Mon Sep 17 00:00:00 2001 From: Abhay Soni Date: Fri, 17 Mar 2023 10:37:45 +0530 Subject: [PATCH 232/511] Update microsite/data/plugins/microsoft-calendar.yaml Co-authored-by: Johan Haals Signed-off-by: Abhay Soni --- microsite/data/plugins/microsoft-calendar.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index c2c2552568..e441957cd4 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -5,7 +5,7 @@ category: Productivity description: | The plugin integrates with your Microsoft Calendar. It displays all your calendars and events in it. -documentation: https://statusneo.com/23392-2 +documentation: https://github.com/backstage/backstage/tree/master/plugins/microsoft-calendar iconUrl: /img/outlook-statusneo.png npmPackageName: '@backstage/plugin-microsoft-calendar' tags: From 9189e72cd5dbec16f2b22a1c7499bad123cd51c6 Mon Sep 17 00:00:00 2001 From: Abhay Soni Date: Fri, 17 Mar 2023 10:37:51 +0530 Subject: [PATCH 233/511] Update microsite/data/plugins/microsoft-calendar.yaml Co-authored-by: Johan Haals Signed-off-by: Abhay Soni --- microsite/data/plugins/microsoft-calendar.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/microsite/data/plugins/microsoft-calendar.yaml b/microsite/data/plugins/microsoft-calendar.yaml index e441957cd4..183c991761 100644 --- a/microsite/data/plugins/microsoft-calendar.yaml +++ b/microsite/data/plugins/microsoft-calendar.yaml @@ -11,6 +11,5 @@ npmPackageName: '@backstage/plugin-microsoft-calendar' tags: - Microsoft - calendar - - StatusNeo - Management addedDate: '2023-03-15' From f84fc7fd040c1efed462df8572d82a853c664f87 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 06:36:12 +0000 Subject: [PATCH 234/511] fix(deps): update dependency @rjsf/validator-ajv8 to v5.3.0 Signed-off-by: Renovate Bot --- .changeset/renovate-a9116b7.md | 6 ++++++ plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/package.json | 2 +- yarn.lock | 12 ++++++------ 4 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 .changeset/renovate-a9116b7.md diff --git a/.changeset/renovate-a9116b7.md b/.changeset/renovate-a9116b7.md new file mode 100644 index 0000000000..168230442e --- /dev/null +++ b/.changeset/renovate-a9116b7.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/validator-ajv8` to `5.3.0`. diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 012baa6aa5..f744bb6423 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -64,7 +64,7 @@ "@rjsf/material-ui": "^3.2.1", "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.1.0", "@rjsf/utils": "5.1.0", - "@rjsf/validator-ajv8": "5.1.0", + "@rjsf/validator-ajv8": "5.3.0", "@types/json-schema": "^7.0.9", "classnames": "^2.2.6", "humanize-duration": "^3.25.1", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index dc75dd1d01..dac8713fed 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -70,7 +70,7 @@ "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", "@rjsf/utils": "5.1.0", - "@rjsf/validator-ajv8": "5.1.0", + "@rjsf/validator-ajv8": "5.3.0", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", "git-url-parse": "^13.0.0", diff --git a/yarn.lock b/yarn.lock index bd3f6ec265..10127b55da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7673,7 +7673,7 @@ __metadata: "@rjsf/material-ui": ^3.2.1 "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.1.0" "@rjsf/utils": 5.1.0 - "@rjsf/validator-ajv8": 5.1.0 + "@rjsf/validator-ajv8": 5.3.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7735,7 +7735,7 @@ __metadata: "@rjsf/core": ^3.2.1 "@rjsf/material-ui": ^3.2.1 "@rjsf/utils": 5.1.0 - "@rjsf/validator-ajv8": 5.1.0 + "@rjsf/validator-ajv8": 5.3.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -12994,9 +12994,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.1.0": - version: 5.1.0 - resolution: "@rjsf/validator-ajv8@npm:5.1.0" +"@rjsf/validator-ajv8@npm:5.3.0": + version: 5.3.0 + resolution: "@rjsf/validator-ajv8@npm:5.3.0" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 @@ -13004,7 +13004,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0 - checksum: 3430a0aea8235deedd306b535ea3a62a9bcdd4dcf0bf1d022fe036041dceb5ca7c147b17ae50a0d25bb7c953729e987d96c68f5220f8fde4b56a89cf3f106a49 + checksum: 210c2d0066bfa40e523d453eb26dc4fad1f1d34a1efc632061c1c00e90b69697ee88a4ce5e130890dac79253ccf7e31e39c005f504acb3ee7e33962547b1db41 languageName: node linkType: hard From 5f473e606c2e327f05db5c064885de6291840416 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 09:49:31 +0000 Subject: [PATCH 235/511] chore(deps): update dependency esbuild to v0.17.12 Signed-off-by: Renovate Bot --- yarn.lock | 182 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7caa7abb9a..05c1a2d52c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9408,9 +9408,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/android-arm64@npm:0.17.11" +"@esbuild/android-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm64@npm:0.17.12" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -9429,9 +9429,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/android-arm@npm:0.17.11" +"@esbuild/android-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm@npm:0.17.12" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -9443,9 +9443,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/android-x64@npm:0.17.11" +"@esbuild/android-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-x64@npm:0.17.12" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -9457,9 +9457,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/darwin-arm64@npm:0.17.11" +"@esbuild/darwin-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-arm64@npm:0.17.12" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -9471,9 +9471,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/darwin-x64@npm:0.17.11" +"@esbuild/darwin-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-x64@npm:0.17.12" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -9485,9 +9485,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/freebsd-arm64@npm:0.17.11" +"@esbuild/freebsd-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-arm64@npm:0.17.12" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -9499,9 +9499,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/freebsd-x64@npm:0.17.11" +"@esbuild/freebsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-x64@npm:0.17.12" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -9513,9 +9513,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-arm64@npm:0.17.11" +"@esbuild/linux-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm64@npm:0.17.12" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -9527,9 +9527,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-arm@npm:0.17.11" +"@esbuild/linux-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm@npm:0.17.12" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -9541,9 +9541,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-ia32@npm:0.17.11" +"@esbuild/linux-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ia32@npm:0.17.12" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -9562,9 +9562,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-loong64@npm:0.17.11" +"@esbuild/linux-loong64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-loong64@npm:0.17.12" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -9576,9 +9576,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-mips64el@npm:0.17.11" +"@esbuild/linux-mips64el@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-mips64el@npm:0.17.12" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -9590,9 +9590,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-ppc64@npm:0.17.11" +"@esbuild/linux-ppc64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ppc64@npm:0.17.12" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -9604,9 +9604,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-riscv64@npm:0.17.11" +"@esbuild/linux-riscv64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-riscv64@npm:0.17.12" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -9618,9 +9618,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-s390x@npm:0.17.11" +"@esbuild/linux-s390x@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-s390x@npm:0.17.12" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -9632,9 +9632,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/linux-x64@npm:0.17.11" +"@esbuild/linux-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-x64@npm:0.17.12" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -9646,9 +9646,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/netbsd-x64@npm:0.17.11" +"@esbuild/netbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/netbsd-x64@npm:0.17.12" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -9660,9 +9660,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/openbsd-x64@npm:0.17.11" +"@esbuild/openbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/openbsd-x64@npm:0.17.12" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -9674,9 +9674,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/sunos-x64@npm:0.17.11" +"@esbuild/sunos-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/sunos-x64@npm:0.17.12" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -9688,9 +9688,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/win32-arm64@npm:0.17.11" +"@esbuild/win32-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-arm64@npm:0.17.12" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -9702,9 +9702,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/win32-ia32@npm:0.17.11" +"@esbuild/win32-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-ia32@npm:0.17.12" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -9716,9 +9716,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.11": - version: 0.17.11 - resolution: "@esbuild/win32-x64@npm:0.17.11" +"@esbuild/win32-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-x64@npm:0.17.12" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -21652,31 +21652,31 @@ __metadata: linkType: hard "esbuild@npm:^0.17.0": - version: 0.17.11 - resolution: "esbuild@npm:0.17.11" + version: 0.17.12 + resolution: "esbuild@npm:0.17.12" dependencies: - "@esbuild/android-arm": 0.17.11 - "@esbuild/android-arm64": 0.17.11 - "@esbuild/android-x64": 0.17.11 - "@esbuild/darwin-arm64": 0.17.11 - "@esbuild/darwin-x64": 0.17.11 - "@esbuild/freebsd-arm64": 0.17.11 - "@esbuild/freebsd-x64": 0.17.11 - "@esbuild/linux-arm": 0.17.11 - "@esbuild/linux-arm64": 0.17.11 - "@esbuild/linux-ia32": 0.17.11 - "@esbuild/linux-loong64": 0.17.11 - "@esbuild/linux-mips64el": 0.17.11 - "@esbuild/linux-ppc64": 0.17.11 - "@esbuild/linux-riscv64": 0.17.11 - "@esbuild/linux-s390x": 0.17.11 - "@esbuild/linux-x64": 0.17.11 - "@esbuild/netbsd-x64": 0.17.11 - "@esbuild/openbsd-x64": 0.17.11 - "@esbuild/sunos-x64": 0.17.11 - "@esbuild/win32-arm64": 0.17.11 - "@esbuild/win32-ia32": 0.17.11 - "@esbuild/win32-x64": 0.17.11 + "@esbuild/android-arm": 0.17.12 + "@esbuild/android-arm64": 0.17.12 + "@esbuild/android-x64": 0.17.12 + "@esbuild/darwin-arm64": 0.17.12 + "@esbuild/darwin-x64": 0.17.12 + "@esbuild/freebsd-arm64": 0.17.12 + "@esbuild/freebsd-x64": 0.17.12 + "@esbuild/linux-arm": 0.17.12 + "@esbuild/linux-arm64": 0.17.12 + "@esbuild/linux-ia32": 0.17.12 + "@esbuild/linux-loong64": 0.17.12 + "@esbuild/linux-mips64el": 0.17.12 + "@esbuild/linux-ppc64": 0.17.12 + "@esbuild/linux-riscv64": 0.17.12 + "@esbuild/linux-s390x": 0.17.12 + "@esbuild/linux-x64": 0.17.12 + "@esbuild/netbsd-x64": 0.17.12 + "@esbuild/openbsd-x64": 0.17.12 + "@esbuild/sunos-x64": 0.17.12 + "@esbuild/win32-arm64": 0.17.12 + "@esbuild/win32-ia32": 0.17.12 + "@esbuild/win32-x64": 0.17.12 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -21724,7 +21724,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: febf218155513bb9c9c970508c03ec58e0aacfdc23394f425836a09f1da0dae0afa12949274adfd382782eef097f86b2d6b3032293062291f2f471de204f77ec + checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b languageName: node linkType: hard From fe8d9d60ecf6246deee5d57a50d01ac29ff3d1e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 10:34:02 +0000 Subject: [PATCH 236/511] fix(deps): update dependency @swc/core to v1.3.41 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 86 ++++++++++++++++++++++----------------------- storybook/yarn.lock | 86 ++++++++++++++++++++++----------------------- yarn.lock | 86 ++++++++++++++++++++++----------------------- 3 files changed, 129 insertions(+), 129 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 874d696626..20a704960f 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2623,90 +2623,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-darwin-arm64@npm:1.3.39" +"@swc/core-darwin-arm64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-arm64@npm:1.3.41" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-darwin-x64@npm:1.3.39" +"@swc/core-darwin-x64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-x64@npm:1.3.41" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" +"@swc/core-linux-arm-gnueabihf@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" +"@swc/core-linux-arm64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" +"@swc/core-linux-arm64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" +"@swc/core-linux-x64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-musl@npm:1.3.39" +"@swc/core-linux-x64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-musl@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" +"@swc/core-win32-arm64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" +"@swc/core-win32-ia32-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" +"@swc/core-win32-x64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.36": - version: 1.3.39 - resolution: "@swc/core@npm:1.3.39" + version: 1.3.41 + resolution: "@swc/core@npm:1.3.41" dependencies: - "@swc/core-darwin-arm64": 1.3.39 - "@swc/core-darwin-x64": 1.3.39 - "@swc/core-linux-arm-gnueabihf": 1.3.39 - "@swc/core-linux-arm64-gnu": 1.3.39 - "@swc/core-linux-arm64-musl": 1.3.39 - "@swc/core-linux-x64-gnu": 1.3.39 - "@swc/core-linux-x64-musl": 1.3.39 - "@swc/core-win32-arm64-msvc": 1.3.39 - "@swc/core-win32-ia32-msvc": 1.3.39 - "@swc/core-win32-x64-msvc": 1.3.39 + "@swc/core-darwin-arm64": 1.3.41 + "@swc/core-darwin-x64": 1.3.41 + "@swc/core-linux-arm-gnueabihf": 1.3.41 + "@swc/core-linux-arm64-gnu": 1.3.41 + "@swc/core-linux-arm64-musl": 1.3.41 + "@swc/core-linux-x64-gnu": 1.3.41 + "@swc/core-linux-x64-musl": 1.3.41 + "@swc/core-win32-arm64-msvc": 1.3.41 + "@swc/core-win32-ia32-msvc": 1.3.41 + "@swc/core-win32-x64-msvc": 1.3.41 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -2728,7 +2728,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d + checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 languageName: node linkType: hard diff --git a/storybook/yarn.lock b/storybook/yarn.lock index eb70dadd2f..359707312e 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.39": - version: 1.3.39 - resolution: "@swc/core-darwin-arm64@npm:1.3.39" +"@swc/core-darwin-arm64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-arm64@npm:1.3.41" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-darwin-x64@npm:1.3.39" +"@swc/core-darwin-x64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-x64@npm:1.3.41" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" +"@swc/core-linux-arm-gnueabihf@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" +"@swc/core-linux-arm64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" +"@swc/core-linux-arm64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" +"@swc/core-linux-x64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-musl@npm:1.3.39" +"@swc/core-linux-x64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-musl@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" +"@swc/core-win32-arm64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" +"@swc/core-win32-ia32-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" +"@swc/core-win32-x64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.39 - resolution: "@swc/core@npm:1.3.39" + version: 1.3.41 + resolution: "@swc/core@npm:1.3.41" dependencies: - "@swc/core-darwin-arm64": 1.3.39 - "@swc/core-darwin-x64": 1.3.39 - "@swc/core-linux-arm-gnueabihf": 1.3.39 - "@swc/core-linux-arm64-gnu": 1.3.39 - "@swc/core-linux-arm64-musl": 1.3.39 - "@swc/core-linux-x64-gnu": 1.3.39 - "@swc/core-linux-x64-musl": 1.3.39 - "@swc/core-win32-arm64-msvc": 1.3.39 - "@swc/core-win32-ia32-msvc": 1.3.39 - "@swc/core-win32-x64-msvc": 1.3.39 + "@swc/core-darwin-arm64": 1.3.41 + "@swc/core-darwin-x64": 1.3.41 + "@swc/core-linux-arm-gnueabihf": 1.3.41 + "@swc/core-linux-arm64-gnu": 1.3.41 + "@swc/core-linux-arm64-musl": 1.3.41 + "@swc/core-linux-x64-gnu": 1.3.41 + "@swc/core-linux-x64-musl": 1.3.41 + "@swc/core-win32-arm64-msvc": 1.3.41 + "@swc/core-win32-ia32-msvc": 1.3.41 + "@swc/core-win32-x64-msvc": 1.3.41 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -3071,7 +3071,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d + checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 05c1a2d52c..5b063c6a8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13627,90 +13627,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-darwin-arm64@npm:1.3.39" +"@swc/core-darwin-arm64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-arm64@npm:1.3.41" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-darwin-x64@npm:1.3.39" +"@swc/core-darwin-x64@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-darwin-x64@npm:1.3.41" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.39" +"@swc/core-linux-arm-gnueabihf@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.39" +"@swc/core-linux-arm64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.39" +"@swc/core-linux-arm64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.39" +"@swc/core-linux-x64-gnu@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-linux-x64-musl@npm:1.3.39" +"@swc/core-linux-x64-musl@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-linux-x64-musl@npm:1.3.41" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.39" +"@swc/core-win32-arm64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.39" +"@swc/core-win32-ia32-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.39": - version: 1.3.39 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.39" +"@swc/core-win32-x64-msvc@npm:1.3.41": + version: 1.3.41 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.39 - resolution: "@swc/core@npm:1.3.39" + version: 1.3.41 + resolution: "@swc/core@npm:1.3.41" dependencies: - "@swc/core-darwin-arm64": 1.3.39 - "@swc/core-darwin-x64": 1.3.39 - "@swc/core-linux-arm-gnueabihf": 1.3.39 - "@swc/core-linux-arm64-gnu": 1.3.39 - "@swc/core-linux-arm64-musl": 1.3.39 - "@swc/core-linux-x64-gnu": 1.3.39 - "@swc/core-linux-x64-musl": 1.3.39 - "@swc/core-win32-arm64-msvc": 1.3.39 - "@swc/core-win32-ia32-msvc": 1.3.39 - "@swc/core-win32-x64-msvc": 1.3.39 + "@swc/core-darwin-arm64": 1.3.41 + "@swc/core-darwin-x64": 1.3.41 + "@swc/core-linux-arm-gnueabihf": 1.3.41 + "@swc/core-linux-arm64-gnu": 1.3.41 + "@swc/core-linux-arm64-musl": 1.3.41 + "@swc/core-linux-x64-gnu": 1.3.41 + "@swc/core-linux-x64-musl": 1.3.41 + "@swc/core-win32-arm64-msvc": 1.3.41 + "@swc/core-win32-ia32-msvc": 1.3.41 + "@swc/core-win32-x64-msvc": 1.3.41 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -13732,7 +13732,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: 2c5376627587302d9146a13670ab88d49d236361f226058625a287e275952a282e46c6f8620ec756917406c2ab801093c28668d95837646e39742d65e193965d + checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 languageName: node linkType: hard From 30ffdae70f9256fb696c4768fada9c684adfcfd5 Mon Sep 17 00:00:00 2001 From: Arthur Gavlyukovskiy Date: Fri, 17 Mar 2023 11:35:32 +0100 Subject: [PATCH 237/511] Added `fetch:plain:file` action to fetch a single file Fixes #15388 Signed-off-by: Arthur Gavlyukovskiy --- .changeset/fuzzy-wombats-search.md | 5 + plugins/scaffolder-backend/api-report.md | 9 ++ .../actions/builtin/createBuiltinActions.ts | 10 +- .../actions/builtin/fetch/helpers.test.ts | 104 ++++++++++++++++-- .../actions/builtin/fetch/helpers.ts | 96 +++++++++++----- .../scaffolder/actions/builtin/fetch/index.ts | 1 + .../actions/builtin/fetch/plainFile.test.ts | 85 ++++++++++++++ .../actions/builtin/fetch/plainFile.ts | 75 +++++++++++++ 8 files changed, 348 insertions(+), 37 deletions(-) create mode 100644 .changeset/fuzzy-wombats-search.md create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts create mode 100644 plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts diff --git a/.changeset/fuzzy-wombats-search.md b/.changeset/fuzzy-wombats-search.md new file mode 100644 index 0000000000..ca1754acc9 --- /dev/null +++ b/.changeset/fuzzy-wombats-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Added `fetch:plain:file` action to fetch a single file diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index f0eb714ab3..a569ff8232 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -105,6 +105,15 @@ export function createFetchPlainAction(options: { targetPath?: string | undefined; }>; +// @public +export function createFetchPlainFileAction(options: { + reader: UrlReader; + integrations: ScmIntegrations; +}): TemplateAction_2<{ + url: string; + targetPath: string; +}>; + // @public export function createFetchTemplateAction(options: { reader: UrlReader; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index d4c8de3604..747b5cdaed 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -31,7 +31,11 @@ import { import { TemplateFilter, TemplateGlobal } from '../../../lib'; import { createDebugLogAction, createWaitAction } from './debug'; -import { createFetchPlainAction, createFetchTemplateAction } from './fetch'; +import { + createFetchPlainAction, + createFetchPlainFileAction, + createFetchTemplateAction, +} from './fetch'; import { createFilesystemDeleteAction, createFilesystemRenameAction, @@ -112,6 +116,10 @@ export const createBuiltinActions = ( reader, integrations, }), + createFetchPlainFileAction({ + reader, + integrations, + }), createFetchTemplateAction({ integrations, reader, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts index 86d5f17803..2740d16efb 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts @@ -21,7 +21,7 @@ import { resolve as resolvePath } from 'path'; import { UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { fetchContents } from './helpers'; +import { fetchContents, fetchFile } from './helpers'; import os from 'os'; describe('fetchContent helper', () => { @@ -37,9 +37,10 @@ describe('fetchContent helper', () => { }), ); + const readUrl = jest.fn(); const readTree = jest.fn(); const reader: UrlReader = { - readUrl: jest.fn(), + readUrl, readTree, search: jest.fn(), }; @@ -50,7 +51,7 @@ describe('fetchContent helper', () => { outputPath: os.tmpdir(), }; - it('should reject absolute file locations', async () => { + it('fetch contents should reject absolute file locations', async () => { await expect( fetchContents({ ...options, @@ -62,7 +63,7 @@ describe('fetchContent helper', () => { ); }); - it('should reject relative file locations that exit the baseUrl', async () => { + it('fetch contents should reject relative file locations that exit the baseUrl', async () => { await expect( fetchContents({ ...options, @@ -74,7 +75,7 @@ describe('fetchContent helper', () => { ); }); - it('should copy file to outputpath', async () => { + it('fetch contents should copy file to outputpath', async () => { await fetchContents({ ...options, baseUrl: 'file:///some/path', @@ -84,7 +85,7 @@ describe('fetchContent helper', () => { expect(fs.copy).toHaveBeenCalledWith(resolvePath('/some/foo'), 'somepath'); }); - it('should reject if no integration matches location', async () => { + it('fetch contents should reject if no integration matches location', async () => { await expect( fetchContents({ ...options, @@ -95,7 +96,7 @@ describe('fetchContent helper', () => { ); }); - it('should reject if fetch url is relative and no base url is specified', async () => { + it('fetch contents should reject if fetch url is relative and no base url is specified', async () => { await expect( fetchContents({ ...options, @@ -106,7 +107,7 @@ describe('fetchContent helper', () => { ); }); - it('should fetch url contents', async () => { + it('fetch contents should fetch url contents', async () => { const dirFunction = jest.fn(); readTree.mockResolvedValue({ dir: dirFunction, @@ -116,7 +117,92 @@ describe('fetchContent helper', () => { outputPath: 'foo', fetchUrl: 'https://github.com/backstage/foo', }); - expect(fs.ensureDir).toHaveBeenCalled(); + expect(fs.ensureDir).toHaveBeenCalledWith('foo'); expect(dirFunction).toHaveBeenCalledWith({ targetDir: 'foo' }); }); + + it('fetch file should reject absolute file locations', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '/etc/passwd', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); + + it('fetch file should reject relative file locations that exit the baseUrl', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '../test', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); + + it('fetch file should copy file to outputpath', async () => { + await fetchFile({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: 'foo', + outputPath: 'somepath', + }); + expect(fs.copyFile).toHaveBeenCalledWith( + resolvePath('/some/foo'), + 'somepath', + ); + }); + + it('fetch file should reject if no integration matches location', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'http://example.com/some/folder', + }), + ).rejects.toThrow( + 'No integration found for location http://example.com/some/folder', + ); + }); + + it('fetch file should reject if fetch url is relative and no base url is specified', async () => { + await expect( + fetchFile({ + ...options, + fetchUrl: 'foo', + }), + ).rejects.toThrow( + 'Failed to fetch, template location could not be determined and the fetch URL is relative, foo', + ); + }); + + it('fetch file should fetch content from url', async () => { + readUrl.mockResolvedValue({ + buffer: () => Buffer.from('test', 'utf8'), + }); + await fetchFile({ + ...options, + outputPath: 'foo', + fetchUrl: 'https://github.com/backstage/foo', + }); + expect(fs.ensureDir).toHaveBeenCalledWith('.'); + expect(fs.outputFile).toHaveBeenCalledWith('foo', 'test'); + }); + + it('fetch file should fetch content from url into directory', async () => { + readUrl.mockResolvedValue({ + buffer: () => Buffer.from('test', 'utf8'), + }); + await fetchFile({ + ...options, + outputPath: 'mydir/foo', + fetchUrl: 'https://github.com/backstage/foo', + }); + expect(fs.ensureDir).toHaveBeenCalledWith('mydir'); + expect(fs.outputFile).toHaveBeenCalledWith('mydir/foo', 'test'); + }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts index 4b82595cfd..ac44f0a8a5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts @@ -35,6 +35,55 @@ export async function fetchContents(options: { }) { const { reader, integrations, baseUrl, fetchUrl = '.', outputPath } = options; + const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl); + + // We handle both file locations and url ones + if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) { + const basePath = baseUrl.slice('file://'.length); + const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl); + await fs.copy(srcDir, outputPath); + } else { + const readUrl = getReadUrl(fetchUrl, baseUrl, integrations); + + const res = await reader.readTree(readUrl); + await fs.ensureDir(outputPath); + await res.dir({ targetDir: outputPath }); + } +} + +/** + * A helper function that reads the content of a single file from the given URL. + * Can be used in your own actions, and also used behind fetch:plain:file + * + * @public + */ +export async function fetchFile(options: { + reader: UrlReader; + integrations: ScmIntegrations; + baseUrl?: string; + fetchUrl?: string; + outputPath: string; +}) { + const { reader, integrations, baseUrl, fetchUrl = '.', outputPath } = options; + + const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl); + + // We handle both file locations and url ones + if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) { + const basePath = baseUrl.slice('file://'.length); + const src = resolveSafeChildPath(path.dirname(basePath), fetchUrl); + await fs.copyFile(src, outputPath); + } else { + const readUrl = getReadUrl(fetchUrl, baseUrl, integrations); + + const res = await reader.readUrl(readUrl); + await fs.ensureDir(path.dirname(outputPath)); + const buffer = await res.buffer(); + await fs.outputFile(outputPath, buffer.toString()); + } +} + +function isFetchUrlAbsolute(fetchUrl: string) { let fetchUrlIsAbsolute = false; try { // eslint-disable-next-line no-new @@ -43,35 +92,28 @@ export async function fetchContents(options: { } catch { /* ignored */ } + return fetchUrlIsAbsolute; +} - // We handle both file locations and url ones - if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) { - const basePath = baseUrl.slice('file://'.length); - const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl); - await fs.copy(srcDir, outputPath); - } else { - let readUrl; - - if (fetchUrlIsAbsolute) { - readUrl = fetchUrl; - } else if (baseUrl) { - const integration = integrations.byUrl(baseUrl); - if (!integration) { - throw new InputError(`No integration found for location ${baseUrl}`); - } - - readUrl = integration.resolveUrl({ - url: fetchUrl, - base: baseUrl, - }); - } else { - throw new InputError( - `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`, - ); +function getReadUrl( + fetchUrl: string, + baseUrl: string | undefined, + integrations: ScmIntegrations, +) { + if (isFetchUrlAbsolute(fetchUrl)) { + return fetchUrl; + } else if (baseUrl) { + const integration = integrations.byUrl(baseUrl); + if (!integration) { + throw new InputError(`No integration found for location ${baseUrl}`); } - const res = await reader.readTree(readUrl); - await fs.ensureDir(outputPath); - await res.dir({ targetDir: outputPath }); + return integration.resolveUrl({ + url: fetchUrl, + base: baseUrl, + }); } + throw new InputError( + `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`, + ); } diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts index c9a16c274e..14a40f53c3 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts @@ -15,5 +15,6 @@ */ export { createFetchPlainAction } from './plain'; +export { createFetchPlainFileAction } from './plainFile'; export { createFetchTemplateAction } from './template'; export { fetchContents } from './helpers'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts new file mode 100644 index 0000000000..5d9e99fc7d --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts @@ -0,0 +1,85 @@ +/* + * Copyright 2021 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. + */ + +jest.mock('./helpers'); + +import os from 'os'; +import { resolve as resolvePath } from 'path'; +import { getVoidLogger, UrlReader } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { createFetchPlainFileAction } from './plainFile'; +import { PassThrough } from 'stream'; +import { fetchFile } from './helpers'; + +describe('fetch:plain:file', () => { + const integrations = ScmIntegrations.fromConfig( + new ConfigReader({ + integrations: { + github: [{ host: 'github.com', token: 'token' }], + }, + }), + ); + const reader: UrlReader = { + readUrl: jest.fn(), + readTree: jest.fn(), + search: jest.fn(), + }; + + beforeEach(() => { + jest.resetAllMocks(); + }); + + const action = createFetchPlainFileAction({ integrations, reader }); + const mockContext = { + workspacePath: os.tmpdir(), + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + it('should disallow a target path outside working directory', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + url: 'https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/Backstage%20Community%20Sessions.png', + targetPath: '/foobar', + }, + }), + ).rejects.toThrow( + /Relative path is not allowed to refer to a directory outside its parent/, + ); + }); + + it('should fetch plain', async () => { + await action.handler({ + ...mockContext, + input: { + url: 'https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/Backstage%20Community%20Sessions.png', + targetPath: 'lol', + }, + }); + expect(fetchFile).toHaveBeenCalledWith( + expect.objectContaining({ + outputPath: resolvePath(mockContext.workspacePath, 'lol'), + fetchUrl: + 'https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/Backstage%20Community%20Sessions.png', + }), + ); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts new file mode 100644 index 0000000000..7b33ad93b4 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts @@ -0,0 +1,75 @@ +/* + * Copyright 2021 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 { UrlReader, resolveSafeChildPath } from '@backstage/backend-common'; +import { ScmIntegrations } from '@backstage/integration'; +import { fetchFile } from './helpers'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; + +/** + * Downloads content and places it in the workspace, or optionally + * in a subdirectory specified by the 'targetPath' input option. + * @public + */ +export function createFetchPlainFileAction(options: { + reader: UrlReader; + integrations: ScmIntegrations; +}) { + const { reader, integrations } = options; + + return createTemplateAction<{ url: string; targetPath: string }>({ + id: 'fetch:plain:file', + description: 'Downloads single file and places it in the workspace.', + schema: { + input: { + type: 'object', + required: ['url', 'targetPath'], + properties: { + url: { + title: 'Fetch URL', + description: + 'Relative path or absolute URL pointing to the single file to fetch.', + type: 'string', + }, + targetPath: { + title: 'Target Path', + description: + 'Target path within the working directory to download the file as.', + type: 'string', + }, + }, + }, + }, + supportsDryRun: true, + async handler(ctx) { + ctx.logger.info('Fetching plain content from remote URL'); + + // Finally move the template result into the task workspace + const outputPath = resolveSafeChildPath( + ctx.workspacePath, + ctx.input.targetPath, + ); + + await fetchFile({ + reader, + integrations, + baseUrl: ctx.templateInfo?.baseUrl, + fetchUrl: ctx.input.url, + outputPath, + }); + }, + }); +} From fc1665944be6b5c3930ad70813b29b6bae85dc63 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Thu, 16 Mar 2023 18:46:39 +0100 Subject: [PATCH 238/511] could it be? Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/context.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/techdocs-react/src/context.tsx b/plugins/techdocs-react/src/context.tsx index f373acca73..3874a648c8 100644 --- a/plugins/techdocs-react/src/context.tsx +++ b/plugins/techdocs-react/src/context.tsx @@ -123,7 +123,7 @@ export const TechDocsReaderPageProvider = memo( return techdocsApi.getEntityMetadata(entityRef); }, [entityRef]); - const metadata = useAsyncRetry(() => { + const metadata = useAsyncRetry(async () => { return techdocsApi.getTechDocsMetadata(entityRef); }, [entityRef]); @@ -136,12 +136,18 @@ export const TechDocsReaderPageProvider = memo( ); useEffect(() => { - if (shadowRoot && !metadata.loading && !metadata.value) { + if (shadowRoot && !metadata.value && !metadata.loading) { metadata.retry(); } - }, [metadata, shadowRoot]); + }, [ + metadata.value, + metadata.loading, + shadowRoot, + metadata.retry, + metadata, + ]); - const value = { + const value: TechDocsReaderPageValue = { metadata, entityRef: toLowercaseEntityRefMaybe(entityRef, config), entityMetadata, From 6eaa03d9deab0a3a5c6fee1ee260e614e199b5b9 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Thu, 16 Mar 2023 18:57:43 +0100 Subject: [PATCH 239/511] workaround useAsync typescript error Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/context.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/techdocs-react/src/context.tsx b/plugins/techdocs-react/src/context.tsx index 3874a648c8..608dbc59b3 100644 --- a/plugins/techdocs-react/src/context.tsx +++ b/plugins/techdocs-react/src/context.tsx @@ -24,7 +24,7 @@ import React, { useEffect, } from 'react'; import useAsync, { AsyncState } from 'react-use/lib/useAsync'; -import { useAsyncRetry } from 'react-use'; +import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { CompoundEntityRef, From 51c2d89a2f8d6bfdf97663df1ab014bf2a19adfc Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 13:55:20 +0100 Subject: [PATCH 240/511] chore: remove the nextRouteRefs in favour of the original ones instead Signed-off-by: blam --- plugins/scaffolder/src/alpha.ts | 3 - .../src/next/OngoingTask/OngoingTask.test.tsx | 4 +- .../src/next/OngoingTask/OngoingTask.tsx | 4 +- plugins/scaffolder/src/next/Router/Router.tsx | 22 +++---- .../src/next/TemplateListPage/ContextMenu.tsx | 14 ++--- .../TemplateListPage/TemplateGroups.test.tsx | 14 ++--- .../next/TemplateListPage/TemplateGroups.tsx | 5 +- .../TemplateListPage.test.tsx | 8 +-- .../TemplateWizardPage.test.tsx | 4 +- .../TemplateWizardPage/TemplateWizardPage.tsx | 15 ++--- plugins/scaffolder/src/next/index.ts | 1 - plugins/scaffolder/src/next/routes.ts | 57 ------------------- plugins/scaffolder/src/plugin.tsx | 9 ++- 13 files changed, 51 insertions(+), 109 deletions(-) delete mode 100644 plugins/scaffolder/src/next/routes.ts diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index a460b0d7cc..72eb073fba 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -16,9 +16,6 @@ export { NextScaffolderPage } from './plugin'; export { - nextRouteRef, - nextScaffolderTaskRouteRef, - nextSelectedTemplateRouteRef, type TemplateGroupFilter, type NextRouterProps, type FormProps, diff --git a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx index 9e9212b9e8..c31322a9eb 100644 --- a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.test.tsx @@ -19,7 +19,7 @@ import React from 'react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react'; import { act, fireEvent, waitFor } from '@testing-library/react'; -import { nextRouteRef } from '../routes'; +import { rootRouteRef } from '../../routes'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -59,7 +59,7 @@ describe('OngoingTask', () => { , - { mountedRoutes: { '/': nextRouteRef } }, + { mountedRoutes: { '/': rootRouteRef } }, ); const { getByText, getByTestId } = rendered; diff --git a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx index 9c64e2179b..f8026cf073 100644 --- a/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx +++ b/plugins/scaffolder/src/next/OngoingTask/OngoingTask.tsx @@ -21,7 +21,7 @@ import { ScaffolderTaskOutput, useTaskEventStream, } from '@backstage/plugin-scaffolder-react'; -import { nextSelectedTemplateRouteRef } from '../routes'; +import { selectedTemplateRouteRef } from '../../routes'; import { useRouteRef } from '@backstage/core-plugin-api'; import qs from 'qs'; import { ContextMenu } from './ContextMenu'; @@ -45,7 +45,7 @@ export const OngoingTask = (props: { }) => { // todo(blam): check that task Id actually exists, and that it's valid. otherwise redirect to something more useful. const { taskId } = useParams(); - const templateRouteRef = useRouteRef(nextSelectedTemplateRouteRef); + const templateRouteRef = useRouteRef(selectedTemplateRouteRef); const navigate = useNavigate(); const taskStream = useTaskEventStream(taskId!); const classes = useStyles(); diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 5e199cae9b..5066e96d6c 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -33,12 +33,12 @@ import { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { - nextActionsRouteRef, - nextEditRouteRef, - nextScaffolderListTaskRouteRef, - nextScaffolderTaskRouteRef, - nextSelectedTemplateRouteRef, -} from '../routes'; + actionsRouteRef, + editRouteRef, + scaffolderListTaskRouteRef, + scaffolderTaskRouteRef, + selectedTemplateRouteRef, +} from '../../routes'; import { ErrorPage } from '@backstage/core-components'; import { OngoingTask } from '../OngoingTask'; import { ActionsPage } from '../../components/ActionsPage'; @@ -115,7 +115,7 @@ export const Router = (props: PropsWithChildren) => { } /> ) => { } /> ) => { } /> ) => { } /> - } /> + } /> } /> ({ button: { @@ -50,9 +50,9 @@ export type ScaffolderPageContextMenuProps = { export function ContextMenu(props: ScaffolderPageContextMenuProps) { const classes = useStyles(); const [anchorEl, setAnchorEl] = useState(); - const editLink = useRouteRef(nextEditRouteRef); - const actionsLink = useRouteRef(nextActionsRouteRef); - const tasksLink = useRouteRef(nextScaffolderListTaskRouteRef); + const editLink = useRouteRef(editRouteRef); + const actionsLink = useRouteRef(actionsRouteRef); + const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const navigate = useNavigate(); diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx index 6fe2d6beb9..2b66f294fa 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx @@ -28,7 +28,7 @@ import { TemplateGroups } from './TemplateGroups'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { errorApiRef } from '@backstage/core-plugin-api'; import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; -import { nextRouteRef } from '../routes'; +import { rootRouteRef } from '../../routes'; describe('TemplateGroups', () => { beforeEach(() => jest.clearAllMocks()); @@ -42,7 +42,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); @@ -64,7 +64,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); @@ -85,7 +85,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); @@ -106,7 +106,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); @@ -146,7 +146,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); @@ -195,7 +195,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index 590ef802bd..6f32bf38e5 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -31,8 +31,7 @@ import { useRouteRef, } from '@backstage/core-plugin-api'; import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; -import { viewTechDocRouteRef } from '../../routes'; -import { nextSelectedTemplateRouteRef } from '../routes'; +import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; /** @@ -56,7 +55,7 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { const errorApi = useApi(errorApiRef); const app = useApp(); const viewTechDocsLink = useRouteRef(viewTechDocRouteRef); - const templateRoute = useRouteRef(nextSelectedTemplateRouteRef); + const templateRoute = useRouteRef(selectedTemplateRouteRef); const navigate = useNavigate(); const onSelected = useCallback( (template: TemplateEntityV1beta3) => { diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx index 41e7897819..d5a76d2a47 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx @@ -25,7 +25,7 @@ import { TestApiProvider, } from '@backstage/test-utils'; import React from 'react'; -import { nextRouteRef } from '../routes'; +import { rootRouteRef } from '../../routes'; import { TemplateListPage } from './TemplateListPage'; describe('TemplateListPage', () => { @@ -63,7 +63,7 @@ describe('TemplateListPage', () => { > , - { mountedRoutes: { '/': nextRouteRef } }, + { mountedRoutes: { '/': rootRouteRef } }, ); expect(getByPlaceholderText('Search')).toBeInTheDocument(); @@ -85,7 +85,7 @@ describe('TemplateListPage', () => { > , - { mountedRoutes: { '/': nextRouteRef } }, + { mountedRoutes: { '/': rootRouteRef } }, ); expect(getByRole('menuitem', { name: /All/ })).toBeInTheDocument(); @@ -108,7 +108,7 @@ describe('TemplateListPage', () => { > , - { mountedRoutes: { '/': nextRouteRef } }, + { mountedRoutes: { '/': rootRouteRef } }, ); expect(getByText('Categories')).toBeInTheDocument(); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx index da4112979c..26a9dd946c 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.test.tsx @@ -29,7 +29,6 @@ import { } from '@backstage/plugin-scaffolder-react'; import { TemplateWizardPage } from './TemplateWizardPage'; import { rootRouteRef } from '../../routes'; -import { nextRouteRef } from '../routes'; jest.mock('react-router-dom', () => { return { @@ -84,8 +83,7 @@ describe('TemplateWizardPage', () => { , { mountedRoutes: { - '/create': nextRouteRef, - '/create-legacy': rootRouteRef, + '/create': rootRouteRef, }, }, ); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index 4825715fcb..99f4a3b52d 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -34,11 +34,12 @@ import { } from '@backstage/plugin-scaffolder-react/alpha'; import { JsonValue } from '@backstage/types'; import { Header, Page } from '@backstage/core-components'; + import { - nextRouteRef, - nextScaffolderTaskRouteRef, - nextSelectedTemplateRouteRef, -} from '../routes'; + rootRouteRef, + scaffolderTaskRouteRef, + selectedTemplateRouteRef, +} from '../../routes'; export type TemplateWizardPageProps = { customFieldExtensions: NextFieldExtensionOptions[]; @@ -47,13 +48,13 @@ export type TemplateWizardPageProps = { }; export const TemplateWizardPage = (props: TemplateWizardPageProps) => { - const rootRef = useRouteRef(nextRouteRef); - const taskRoute = useRouteRef(nextScaffolderTaskRouteRef); + const rootRef = useRouteRef(rootRouteRef); + const taskRoute = useRouteRef(scaffolderTaskRouteRef); const { secrets } = useTemplateSecrets(); const scaffolderApi = useApi(scaffolderApiRef); const navigate = useNavigate(); const { templateName, namespace } = useRouteRefParams( - nextSelectedTemplateRouteRef, + selectedTemplateRouteRef, ); const templateRef = stringifyEntityRef({ diff --git a/plugins/scaffolder/src/next/index.ts b/plugins/scaffolder/src/next/index.ts index 1ca9096459..6cef3eaa03 100644 --- a/plugins/scaffolder/src/next/index.ts +++ b/plugins/scaffolder/src/next/index.ts @@ -17,4 +17,3 @@ export * from './Router'; export * from './TemplateListPage'; export * from './TemplateWizardPage'; export * from './types'; -export * from './routes'; diff --git a/plugins/scaffolder/src/next/routes.ts b/plugins/scaffolder/src/next/routes.ts deleted file mode 100644 index 12fad4210a..0000000000 --- a/plugins/scaffolder/src/next/routes.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 { createRouteRef, createSubRouteRef } from '@backstage/core-plugin-api'; - -/** @alpha */ -export const nextRouteRef = createRouteRef({ - id: 'scaffolder/next', -}); - -/** @alpha */ -export const nextSelectedTemplateRouteRef = createSubRouteRef({ - id: 'scaffolder/next/selected-template', - parent: nextRouteRef, - path: '/templates/:namespace/:templateName', -}); - -/** @alpha */ -export const nextScaffolderTaskRouteRef = createSubRouteRef({ - id: 'scaffolder/next/task', - parent: nextRouteRef, - path: '/tasks/:taskId', -}); - -/** @alpha */ -export const nextScaffolderListTaskRouteRef = createSubRouteRef({ - id: 'scaffolder/next/list-tasks', - parent: nextRouteRef, - path: '/tasks', -}); - -/** @alpha */ -export const nextActionsRouteRef = createSubRouteRef({ - id: 'scaffolder/next/actions', - parent: nextRouteRef, - path: '/actions', -}); - -/** @alpha */ -export const nextEditRouteRef = createSubRouteRef({ - id: 'scaffolder/next/edit', - parent: nextRouteRef, - path: '/edit', -}); diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index f6801c6371..dfe87a3780 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -60,8 +60,10 @@ import { viewTechDocRouteRef, selectedTemplateRouteRef, scaffolderTaskRouteRef, + scaffolderListTaskRouteRef, + actionsRouteRef, + editRouteRef, } from './routes'; -import { nextRouteRef } from './next'; /** * The main plugin export for the scaffolder. @@ -91,6 +93,9 @@ export const scaffolderPlugin = createPlugin({ root: rootRouteRef, selectedTemplate: selectedTemplateRouteRef, ongoingTask: scaffolderTaskRouteRef, + actions: actionsRouteRef, + listTasks: scaffolderListTaskRouteRef, + edit: editRouteRef, }, externalRoutes: { registerComponent: registerComponentRouteRef, @@ -199,6 +204,6 @@ export const NextScaffolderPage = scaffolderPlugin.provide( createRoutableExtension({ name: 'NextScaffolderPage', component: () => import('./next/Router').then(m => m.Router), - mountPoint: nextRouteRef, + mountPoint: rootRouteRef, }), ); From f426dad11f143ab17c979381301f66f7e93e4c87 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 13:56:17 +0100 Subject: [PATCH 241/511] chore: remove the exports Signed-off-by: blam --- plugins/scaffolder/alpha-api-report.md | 16 ---------------- plugins/scaffolder/api-report.md | 11 +++++++---- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index bf37acafc3..1fc77322bd 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -8,12 +8,9 @@ import { Entity } from '@backstage/catalog-model'; import { FormProps as FormProps_2 } from '@backstage/plugin-scaffolder-react/alpha'; import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; -import { PathParams } from '@backstage/core-plugin-api'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; -import { RouteRef } from '@backstage/core-plugin-api'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; -import { SubRouteRef } from '@backstage/core-plugin-api'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; // @alpha @deprecated @@ -22,9 +19,6 @@ export type FormProps = Pick< 'transformErrors' | 'noHtml5Validate' >; -// @alpha (undocumented) -export const nextRouteRef: RouteRef; - // @alpha export type NextRouterProps = { components?: { @@ -50,16 +44,6 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; -// @alpha (undocumented) -export const nextScaffolderTaskRouteRef: SubRouteRef< - PathParams<'/tasks/:taskId'> ->; - -// @alpha (undocumented) -export const nextSelectedTemplateRouteRef: SubRouteRef< - PathParams<'/templates/:namespace/:templateName'> ->; - // @alpha (undocumented) export type TemplateGroupFilter = { title?: React_2.ReactNode; diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 45d0b2675c..0ca5a8d1c3 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -110,8 +110,8 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; } >; @@ -120,8 +120,8 @@ export const EntityTagsPickerFieldSchema: FieldSchema< string[], { showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; } >; @@ -259,8 +259,8 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< | { azure?: string[] | undefined; github?: string[] | undefined; - gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + gitlab?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -285,8 +285,8 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { azure?: string[] | undefined; github?: string[] | undefined; - gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + gitlab?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -425,6 +425,9 @@ export const scaffolderPlugin: BackstagePlugin< PathParams<'/templates/:namespace/:templateName'> >; ongoingTask: SubRouteRef>; + actions: SubRouteRef; + listTasks: SubRouteRef; + edit: SubRouteRef; }, { registerComponent: ExternalRouteRef; From 7b2be1827f5723e26586763684e632e942f77884 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 13:58:28 +0100 Subject: [PATCH 242/511] chore: fix order Signed-off-by: blam --- plugins/scaffolder/api-report.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 0ca5a8d1c3..9b39d14db4 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -110,8 +110,8 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { showCounts?: boolean | undefined; - helperText?: string | undefined; kinds?: string[] | undefined; + helperText?: string | undefined; } >; @@ -120,8 +120,8 @@ export const EntityTagsPickerFieldSchema: FieldSchema< string[], { showCounts?: boolean | undefined; - helperText?: string | undefined; kinds?: string[] | undefined; + helperText?: string | undefined; } >; @@ -259,8 +259,8 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< | { azure?: string[] | undefined; github?: string[] | undefined; - bitbucket?: string[] | undefined; gitlab?: string[] | undefined; + bitbucket?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -285,8 +285,8 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { azure?: string[] | undefined; github?: string[] | undefined; - bitbucket?: string[] | undefined; gitlab?: string[] | undefined; + bitbucket?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; From cdab34fd9a233fe515a80e287ce4a1fdd2b9750e Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 13:59:57 +0100 Subject: [PATCH 243/511] chore: changeset Signed-off-by: blam --- .changeset/neat-donkeys-work.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/neat-donkeys-work.md diff --git a/.changeset/neat-donkeys-work.md b/.changeset/neat-donkeys-work.md new file mode 100644 index 0000000000..dfa3236d43 --- /dev/null +++ b/.changeset/neat-donkeys-work.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +scaffolder/next: removing the `routeRefs` and exporting the originals on `scaffolderPlugin.routes.x` instead From ce2b0a63ed9c5e88f9840e53c94d9323bf19e9c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 13:05:45 +0000 Subject: [PATCH 244/511] fix(deps): update dependency passport-oauth2 to v1.7.0 Signed-off-by: Renovate Bot --- yarn.lock | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 0c85e989c8..3a0c6349b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31383,7 +31383,7 @@ __metadata: languageName: node linkType: hard -"passport-oauth2@npm:1.6.1, passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.0, passport-oauth2@npm:^1.6.1": +"passport-oauth2@npm:1.6.1": version: 1.6.1 resolution: "passport-oauth2@npm:1.6.1" dependencies: @@ -31396,6 +31396,19 @@ __metadata: languageName: node linkType: hard +"passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.0, passport-oauth2@npm:^1.6.1": + version: 1.7.0 + resolution: "passport-oauth2@npm:1.7.0" + dependencies: + base64url: 3.x.x + oauth: 0.9.x + passport-strategy: 1.x.x + uid2: 0.0.x + utils-merge: 1.x.x + checksum: 9e93f1f47ad5c22ef119932e03f383b503f692012352f27d2a416cc45ca5448c5a97f726da51753fff9a2ec2b6255ac27f1e68c4b44538530d2a8de682f17d42 + languageName: node + linkType: hard + "passport-oauth@npm:1.0.0, passport-oauth@npm:^1.0.0": version: 1.0.0 resolution: "passport-oauth@npm:1.0.0" From 79c5434082ee95c3e9764467eff1a241eb722f9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 13:45:53 +0000 Subject: [PATCH 245/511] fix(deps): update dependency pg to v8.10.0 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3a0c6349b3..a729538f7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31718,12 +31718,12 @@ __metadata: languageName: node linkType: hard -"pg-pool@npm:^3.5.2": - version: 3.5.2 - resolution: "pg-pool@npm:3.5.2" +"pg-pool@npm:^3.6.0": + version: 3.6.0 + resolution: "pg-pool@npm:3.6.0" peerDependencies: pg: ">=8.0" - checksum: a5d029200257671f0c17ca54b9ab6213e2060e64e5cc792b78edd50ab471a26cd364890d05d546d9296949e079e943821cf2ceb4d488f4e6a6789fb781a628bf + checksum: f3fe050fbfe27406369340c4c26efcbe21a388ace085a876453de0ea496a315c38b2dc739ac97d4767a359e911da2ec4810467f72601eeec8ad540e58b27987c languageName: node linkType: hard @@ -31748,13 +31748,13 @@ __metadata: linkType: hard "pg@npm:^8.3.0, pg@npm:^8.4.0": - version: 8.9.0 - resolution: "pg@npm:8.9.0" + version: 8.10.0 + resolution: "pg@npm:8.10.0" dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: ^2.5.0 - pg-pool: ^3.5.2 + pg-pool: ^3.6.0 pg-protocol: ^1.6.0 pg-types: ^2.1.0 pgpass: 1.x @@ -31763,7 +31763,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: dfd158955318f9ffb9428eaada29f3ee98b9eb07e87ed4b56589a19984d109f23bb8f88db78b7d7f870553e5b75ca0d58d0ed55755a8c6aed5df44e038c1d529 + checksum: c6be78f2e823f2ae3c618c8e54a6622592dd71b556fb665d7eaedcbcc2fa5d210a8bcf519401e72526a65b9d797f19b772f48f29b9d9f31e98dd526fd27d61e0 languageName: node linkType: hard From 642e39be2944115b8d48b48e2834b4989ece27e0 Mon Sep 17 00:00:00 2001 From: Brian Phillips <28457+brianphillips@users.noreply.github.com> Date: Fri, 17 Mar 2023 08:54:24 -0500 Subject: [PATCH 246/511] Apply code review feedback Allow more flexible comparisons where kind is not defined or the entity being compared against has some non-string value for `kind` or `spec.type`. Signed-off-by: Brian Phillips <28457+brianphillips@users.noreply.github.com> --- .changeset/soft-roses-cover.md | 2 +- .../EntitySwitch/conditions.test.ts | 8 ++++++ .../src/components/EntitySwitch/conditions.ts | 27 ++++++++----------- .../src/components/EntitySwitch/index.ts | 2 ++ 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.changeset/soft-roses-cover.md b/.changeset/soft-roses-cover.md index 50a328729a..94cbe6d0bd 100644 --- a/.changeset/soft-roses-cover.md +++ b/.changeset/soft-roses-cover.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog': minor --- -Added isEntityWith condition helper +Added `isEntityWith` condition helper for `EntitySwitch` case statements. diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts index 76e9e7a7a8..66408aec18 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.test.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.test.ts @@ -142,6 +142,14 @@ describe('isEntityWith', () => { const checkEntity = isEntityWith({ kind: 'another-type', type: 'service' }); expect(checkEntity(missingSpecType)).not.toBeTruthy(); }); + it('allows a check against no criteria', () => { + const checkEntity = isEntityWith({}); + expect(checkEntity(apiKind)).toBeTruthy(); + }); + it('allows a check against empty criteria', () => { + const checkEntity = isEntityWith({ kind: [], type: [] }); + expect(checkEntity(apiKind)).toBeTruthy(); + }); }); describe('isKind', () => { diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 5442a955ae..02d7cf9bcf 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -17,20 +17,22 @@ import { Entity } from '@backstage/catalog-model'; export interface EntityPredicates { - kind: string | string[]; + kind?: string | string[]; type?: string | string[]; } -function strCmp(a: string | undefined, b: string | undefined): boolean { +function strCmp(a: unknown, b: string | undefined): boolean { return Boolean( - a && a?.toLocaleLowerCase('en-US') === b?.toLocaleLowerCase('en-US'), + a && + typeof a === 'string' && + a?.toLocaleLowerCase('en-US') === b?.toLocaleLowerCase('en-US'), ); } -function strCmpAll(value: string | undefined, cmpValues: string | string[]) { +function strCmpAll(value: unknown, cmpValues: string | string[]) { return typeof cmpValues === 'string' ? strCmp(value, cmpValues) - : cmpValues.some(cmpVal => strCmp(value, cmpVal)); + : cmpValues.length === 0 || cmpValues.some(cmpVal => strCmp(value, cmpVal)); } /** @@ -58,28 +60,21 @@ export function isResourceType(types: string | string[]) { } /** - * * For use in EntitySwitch.Case. Matches if the entity is the specified kind and type (if present). * @public */ export function isEntityWith(predicate: EntityPredicates) { return (entity: Entity) => { - if (!strCmpAll(entity.kind, predicate.kind)) { + if (predicate.kind && !strCmpAll(entity.kind, predicate.kind)) { return false; } - if ( - !predicate.type || - (Array.isArray(predicate.type) && predicate.type.length === 0) - ) { - // there's no type check, return true - return true; - } else if (typeof entity.spec?.type !== 'string') { - // we'll reject any entity's with some non-string (including undefined/null) spec.type value + if (predicate.type && !strCmpAll(entity.spec?.type, predicate.type)) { return false; } - return strCmpAll(entity.spec.type, predicate.type); + // there's no type check, return true + return true; }; } diff --git a/plugins/catalog/src/components/EntitySwitch/index.ts b/plugins/catalog/src/components/EntitySwitch/index.ts index 0cb85ae6eb..8848f98866 100644 --- a/plugins/catalog/src/components/EntitySwitch/index.ts +++ b/plugins/catalog/src/components/EntitySwitch/index.ts @@ -16,9 +16,11 @@ export { EntitySwitch } from './EntitySwitch'; export type { EntitySwitchProps, EntitySwitchCaseProps } from './EntitySwitch'; +export type { EntityPredicates } from './conditions'; export { isKind, isNamespace, isComponentType, isResourceType, + isEntityWith, } from './conditions'; From f2f1a7b76c4ee5d7971372be2fc14b3b9af2ad6c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 14:25:39 +0000 Subject: [PATCH 247/511] fix(deps): update dependency prom-client to v14.2.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 38c279e6d1..3cf7b49696 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32596,11 +32596,11 @@ __metadata: linkType: hard "prom-client@npm:^14.0.1": - version: 14.1.1 - resolution: "prom-client@npm:14.1.1" + version: 14.2.0 + resolution: "prom-client@npm:14.2.0" dependencies: tdigest: ^0.1.1 - checksum: 7ff3e85636b1f0ca590b38ad7c7c5f9998b985c06a1c572ffffc69f052d5b4baf84c9124923e3824c63f78b5e8400081c6472173d04382ca296ebdf36d774a88 + checksum: d4c04e57616c72643dd02862d0d4bde09cf8869a19d0aef5e7b785e6e27d02439b66cdc165e3492f62d579fa91579183820870cc757a09b99399d2d02f46b9f1 languageName: node linkType: hard From a90f4d235e31a9e71e0c7c4279db4d35d1f242de Mon Sep 17 00:00:00 2001 From: Brian Phillips <28457+brianphillips@users.noreply.github.com> Date: Fri, 17 Mar 2023 09:34:42 -0500 Subject: [PATCH 248/511] Update api report for new exports Signed-off-by: Brian Phillips <28457+brianphillips@users.noreply.github.com> --- plugins/catalog/api-report.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index c678ce1d3d..52b2c958a7 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -355,6 +355,16 @@ export const EntityListContainer: (props: { // @public export function EntityOrphanWarning(): JSX.Element; +// Warning: (ae-missing-release-tag) "EntityPredicates" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EntityPredicates { + // (undocumented) + kind?: string | string[]; + // (undocumented) + type?: string | string[]; +} + // @public export function EntityProcessingErrorsPanel(): JSX.Element | null; @@ -433,6 +443,11 @@ export function isComponentType( types: string | string[], ): (entity: Entity) => boolean; +// @public +export function isEntityWith( + predicate: EntityPredicates, +): (entity: Entity) => boolean; + // @public export function isKind(kinds: string | string[]): (entity: Entity) => boolean; From 92cf86a4b5deac2d82a6f0a9ef31d93935344fdc Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Thu, 9 Mar 2023 17:28:31 +0100 Subject: [PATCH 249/511] Filter out templates Signed-off-by: Bogdan Nechyporenko --- .changeset/ten-mayflies-beam.md | 5 ++ .../software-templates/configuration.md | 15 ++++ plugins/scaffolder/alpha-api-report.md | 5 ++ plugins/scaffolder/src/components/Router.tsx | 9 +- .../ScaffolderPage/ScaffolderPage.tsx | 6 ++ .../TemplateList/TemplateList.test.tsx | 83 +++++++++++++++++++ .../components/TemplateList/TemplateList.tsx | 8 +- plugins/scaffolder/src/next/Router/Router.tsx | 7 +- .../TemplateListPage/TemplateGroups.test.tsx | 48 +++++++++++ .../next/TemplateListPage/TemplateGroups.tsx | 6 +- .../TemplateListPage/TemplateListPage.tsx | 14 +++- 11 files changed, 198 insertions(+), 8 deletions(-) create mode 100644 .changeset/ten-mayflies-beam.md create mode 100644 plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx diff --git a/.changeset/ten-mayflies-beam.md b/.changeset/ten-mayflies-beam.md new file mode 100644 index 0000000000..4fbb8416a8 --- /dev/null +++ b/.changeset/ten-mayflies-beam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Making it possible to hide software templates via templateFilter diff --git a/docs/features/software-templates/configuration.md b/docs/features/software-templates/configuration.md index ff5191bed2..24b8c530b8 100644 --- a/docs/features/software-templates/configuration.md +++ b/docs/features/software-templates/configuration.md @@ -93,3 +93,18 @@ You can also further customize groups by passing in a `titleComponent` instead of a `title` which will be a component to use as the header instead of just the default `ContentHeader` with the `title` set as it's value. ![Grouped Templates](../../assets/software-templates/grouped-templates.png) + +There is also an option to hide some templates. +You can have several use cases for that: + +- it's still in an experimental phase, so you can combine it with feature flagging for example +- you don't want to make them accessible from template list, but only open it on some action with pre-filled data. +- show different set of templates depends on target environment + +```typescript jsx + + entity?.metadata?.tags?.includes('experimental') ?? false + } +/> +``` diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index 1fc77322bd..f842ff35e1 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -31,6 +31,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; + templateFilter?: TemplatetemplateFilterFilter; FormProps?: FormProps_2; contextMenu?: { editor?: boolean; @@ -50,5 +51,9 @@ export type TemplateGroupFilter = { filter: (entity: Entity) => boolean; }; +// Warnings were encountered during analysis: +// +// src/next/Router/Router.d.ts:22:5 - (ae-forgotten-export) The symbol "TemplatetemplateFilterFilter" needs to be exported by the entry point alpha.d.ts + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/src/components/Router.tsx b/plugins/scaffolder/src/components/Router.tsx index ccc2bd283b..b84fb664bc 100644 --- a/plugins/scaffolder/src/components/Router.tsx +++ b/plugins/scaffolder/src/components/Router.tsx @@ -58,6 +58,7 @@ export type RouterProps = { title?: React.ReactNode; filter: (entity: Entity) => boolean; }>; + templateFilter?: (entity: Entity) => boolean; defaultPreviewTemplate?: string; headerOptions?: { pageTitleOverride?: string; @@ -81,7 +82,12 @@ export type RouterProps = { * @public */ export const Router = (props: RouterProps) => { - const { groups, components = {}, defaultPreviewTemplate } = props; + const { + groups, + templateFilter, + components = {}, + defaultPreviewTemplate, + } = props; const { ReviewStepComponent, TemplateCardComponent, TaskPageComponent } = components; @@ -126,6 +132,7 @@ export const Router = (props: RouterProps) => { element={ boolean; }>; + templateFilter?: (entity: Entity) => boolean; contextMenu?: { editor?: boolean; actions?: boolean; @@ -64,6 +65,7 @@ export type ScaffolderPageProps = { export const ScaffolderPageContents = ({ TemplateCardComponent, groups, + templateFilter, contextMenu, headerOptions, }: ScaffolderPageProps) => { @@ -123,11 +125,13 @@ export const ScaffolderPageContents = ({ key={index} TemplateCardComponent={TemplateCardComponent} group={group} + templateFilter={templateFilter} /> ))} @@ -140,6 +144,7 @@ export const ScaffolderPageContents = ({ export const ScaffolderPage = ({ TemplateCardComponent, groups, + templateFilter, contextMenu, headerOptions, }: ScaffolderPageProps) => ( @@ -147,6 +152,7 @@ export const ScaffolderPage = ({ diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx new file mode 100644 index 0000000000..2ea417ad68 --- /dev/null +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx @@ -0,0 +1,83 @@ +/* + * 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 { screen } from '@testing-library/react'; +import React from 'react'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { TemplateList } from './TemplateList'; +import { rootRouteRef } from '../../routes'; +import { + ScmIntegrationsApi, + scmIntegrationsApiRef, +} from '@backstage/integration-react'; +import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; + +jest.mock('@backstage/plugin-catalog-react', () => ({ + useEntityList: jest.fn().mockReturnValue({ + loading: false, + entities: [ + { + apiVersion: 'scaffolder.backstage.io/v1beta3', + kind: 'Template', + metadata: { + name: 't1', + }, + spec: {}, + }, + { + apiVersion: 'scaffolder.backstage.io/v1beta3', + kind: 'Template', + metadata: { + name: 't2', + }, + spec: {}, + }, + ], + }), + getEntityRelations: jest.fn().mockImplementation(() => []), + getEntitySourceLocation: jest.fn().mockImplementation(() => ({})), +})); + +describe('TemplateList', () => { + const mockIntegrationsApi: Partial = { + byHost: () => ({ type: 'github' }), + }; + + it('should filter out templates based on provided filter condition', async () => { + const TemplateCardComponent = ({ + template, + }: { + template: TemplateEntityV1beta3; + }) => ( +
{template.metadata.name}
+ ); + + await renderInTestApp( + +
+ e.metadata.name === 't1'} + TemplateCardComponent={TemplateCardComponent} + /> +
+
, + { mountedRoutes: { '/': rootRouteRef } }, + ); + + expect(() => screen.getByTestId('t1')).toThrow(); + expect(screen.getByTestId('t2')).toBeDefined(); + }); +}); diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx index 90d1c8cceb..190c0cd0ac 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx @@ -40,6 +40,7 @@ export type TemplateListProps = { title?: React.ReactNode; filter: (entity: Entity) => boolean; }; + templateFilter?: (entity: Entity) => boolean; }; /** @@ -48,12 +49,13 @@ export type TemplateListProps = { export const TemplateList = ({ TemplateCardComponent, group, + templateFilter, }: TemplateListProps) => { const { loading, error, entities } = useEntityList(); const Card = TemplateCardComponent || TemplateCard; - const maybeFilteredEntities = group - ? entities.filter(e => group.filter(e)) - : entities; + const maybeFilteredEntities = ( + group ? entities.filter(e => group.filter(e)) : entities + ).filter(e => (templateFilter ? !templateFilter(e) : true)); const titleComponent: React.ReactNode = (() => { if (group && group.title) { diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 5066e96d6c..8784cb7d0d 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -29,7 +29,10 @@ import { } from '@backstage/plugin-scaffolder-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups'; +import { + TemplateGroupFilter, + TemplatetemplateFilterFilter, +} from '../TemplateListPage/TemplateGroups'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { @@ -61,6 +64,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; + templateFilter?: TemplatetemplateFilterFilter; // todo(blam): rename this to formProps FormProps?: FormProps; contextMenu?: { @@ -111,6 +115,7 @@ export const Router = (props: PropsWithChildren) => { TemplateCardComponent={TemplateCardComponent} contextMenu={props.contextMenu} groups={props.groups} + templateFilter={props.templateFilter} /> } /> diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx index 2b66f294fa..291804abbd 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx @@ -207,4 +207,52 @@ describe('TemplateGroups', () => { {}, ); }); + + it('should filter out templates based on filter condition', async () => { + const mockEntities = [ + { + apiVersion: 'scaffolder.backstage.io/v1beta3', + kind: 'Template', + metadata: { + name: 't1', + }, + spec: {}, + }, + { + apiVersion: 'scaffolder.backstage.io/v1beta3', + kind: 'Template', + metadata: { + name: 't2', + }, + spec: {}, + }, + ]; + + (useEntityList as jest.Mock).mockReturnValue({ + entities: mockEntities, + loading: false, + error: null, + }); + + await renderInTestApp( + + true }]} + templateFilter={e => e.metadata.name === 't1'} + /> + , + { + mountedRoutes: { + '/next': nextRouteRef, + }, + }, + ); + + expect(TemplateGroup).toHaveBeenCalledWith( + expect.objectContaining({ + templates: [expect.objectContaining({ template: mockEntities[1] })], + }), + {}, + ); + }); }); diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index 6f32bf38e5..a3e3467d06 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -34,6 +34,8 @@ import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; +export type TemplatetemplateFilterFilter = (entity: Entity) => boolean; + /** * @alpha */ @@ -44,6 +46,7 @@ export type TemplateGroupFilter = { export interface TemplateGroupsProps { groups: TemplateGroupFilter[]; + templateFilter?: TemplatetemplateFilterFilter; TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; }>; @@ -51,7 +54,7 @@ export interface TemplateGroupsProps { export const TemplateGroups = (props: TemplateGroupsProps) => { const { loading, error, entities } = useEntityList(); - const { groups, TemplateCardComponent } = props; + const { groups, templateFilter, TemplateCardComponent } = props; const errorApi = useApi(errorApiRef); const app = useApp(); const viewTechDocsLink = useRouteRef(viewTechDocRouteRef); @@ -90,6 +93,7 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { <> {groups.map(({ title, filter }, index) => { const templates = entities + .filter(e => (templateFilter ? !templateFilter(e) : true)) .filter((e): e is TemplateEntityV1beta3 => filter(e)) .map(template => { const { kind, namespace, name } = parseEntityRef( diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index bddc15a61b..fd90098b96 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -35,7 +35,11 @@ import { import { CategoryPicker } from './CategoryPicker'; import { RegisterExistingButton } from './RegisterExistingButton'; import { useRouteRef } from '@backstage/core-plugin-api'; -import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; +import { + TemplateGroupFilter, + TemplateGroups, + TemplatetemplateFilterFilter, +} from './TemplateGroups'; import { registerComponentRouteRef } from '../../routes'; import { ContextMenu } from './ContextMenu'; @@ -44,6 +48,7 @@ export type TemplateListPageProps = { template: TemplateEntityV1beta3; }>; groups?: TemplateGroupFilter[]; + templateFilter?: TemplatetemplateFilterFilter; contextMenu?: { editor?: boolean; actions?: boolean; @@ -68,7 +73,11 @@ const createGroupsWithOther = ( export const TemplateListPage = (props: TemplateListPageProps) => { const registerComponentLink = useRouteRef(registerComponentRouteRef); - const { TemplateCardComponent, groups: givenGroups = [] } = props; + const { + TemplateCardComponent, + groups: givenGroups = [], + templateFilter, + } = props; const groups = givenGroups.length ? createGroupsWithOther(givenGroups) @@ -111,6 +120,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { From 161ac2d03a17ebd2b1858fcfde87c0b09fa59f16 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Thu, 9 Mar 2023 17:29:58 +0100 Subject: [PATCH 250/511] Filter out templates Signed-off-by: Bogdan Nechyporenko --- .changeset/ten-mayflies-beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/ten-mayflies-beam.md b/.changeset/ten-mayflies-beam.md index 4fbb8416a8..72effa620f 100644 --- a/.changeset/ten-mayflies-beam.md +++ b/.changeset/ten-mayflies-beam.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': minor --- -Making it possible to hide software templates via templateFilter +Making it possible to hide software templates via a template filter. From ff85fca3e9e70023a4fce86d162d20005a8a0073 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Thu, 9 Mar 2023 17:36:39 +0100 Subject: [PATCH 251/511] Filter out templates Signed-off-by: Bogdan Nechyporenko --- plugins/scaffolder/alpha-api-report.md | 5 ----- plugins/scaffolder/api-report.md | 1 + plugins/scaffolder/src/alpha.ts | 1 + plugins/scaffolder/src/next/Router/Router.tsx | 7 ++----- .../src/next/TemplateListPage/TemplateGroups.tsx | 7 +++++-- .../src/next/TemplateListPage/TemplateListPage.tsx | 4 ++-- plugins/scaffolder/src/next/TemplateListPage/index.ts | 2 +- 7 files changed, 12 insertions(+), 15 deletions(-) diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index f842ff35e1..1fc77322bd 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -31,7 +31,6 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; - templateFilter?: TemplatetemplateFilterFilter; FormProps?: FormProps_2; contextMenu?: { editor?: boolean; @@ -51,9 +50,5 @@ export type TemplateGroupFilter = { filter: (entity: Entity) => boolean; }; -// Warnings were encountered during analysis: -// -// src/next/Router/Router.d.ts:22:5 - (ae-forgotten-export) The symbol "TemplatetemplateFilterFilter" needs to be exported by the entry point alpha.d.ts - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 9b39d14db4..3865a2517d 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -332,6 +332,7 @@ export type RouterProps = { title?: React_2.ReactNode; filter: (entity: Entity) => boolean; }>; + templateFilter?: (entity: Entity) => boolean; defaultPreviewTemplate?: string; headerOptions?: { pageTitleOverride?: string; diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index 72eb073fba..e1c2260acb 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -17,6 +17,7 @@ export { NextScaffolderPage } from './plugin'; export { type TemplateGroupFilter, + type TemplateFilter, type NextRouterProps, type FormProps, } from './next'; diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 8784cb7d0d..167801c255 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -29,10 +29,7 @@ import { } from '@backstage/plugin-scaffolder-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { - TemplateGroupFilter, - TemplatetemplateFilterFilter, -} from '../TemplateListPage/TemplateGroups'; +import { TemplateGroupFilter, TemplateFilter } from '../TemplateListPage'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { @@ -64,7 +61,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; - templateFilter?: TemplatetemplateFilterFilter; + templateFilter?: TemplateFilter; // todo(blam): rename this to formProps FormProps?: FormProps; contextMenu?: { diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index a3e3467d06..decfeee470 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -34,7 +34,10 @@ import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; -export type TemplatetemplateFilterFilter = (entity: Entity) => boolean; +/** + * @alpha + */ +export type TemplateFilter = (entity: Entity) => boolean; /** * @alpha @@ -46,7 +49,7 @@ export type TemplateGroupFilter = { export interface TemplateGroupsProps { groups: TemplateGroupFilter[]; - templateFilter?: TemplatetemplateFilterFilter; + templateFilter?: TemplateFilter; TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; }>; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index fd90098b96..3f81188e06 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -38,7 +38,7 @@ import { useRouteRef } from '@backstage/core-plugin-api'; import { TemplateGroupFilter, TemplateGroups, - TemplatetemplateFilterFilter, + TemplateFilter, } from './TemplateGroups'; import { registerComponentRouteRef } from '../../routes'; import { ContextMenu } from './ContextMenu'; @@ -48,7 +48,7 @@ export type TemplateListPageProps = { template: TemplateEntityV1beta3; }>; groups?: TemplateGroupFilter[]; - templateFilter?: TemplatetemplateFilterFilter; + templateFilter?: TemplateFilter; contextMenu?: { editor?: boolean; actions?: boolean; diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index 0436cfeeeb..a974052730 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ export { TemplateListPage } from './TemplateListPage'; -export type { TemplateGroupFilter } from './TemplateGroups'; +export type { TemplateGroupFilter, TemplateFilter } from './TemplateGroups'; From 4418bd7dec9a2fbc647bb9187bfd598cdf00ff04 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Thu, 9 Mar 2023 20:40:27 +0100 Subject: [PATCH 252/511] Filter out templates Signed-off-by: Bogdan Nechyporenko --- .changeset/ten-mayflies-beam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/ten-mayflies-beam.md b/.changeset/ten-mayflies-beam.md index 72effa620f..038f9eec87 100644 --- a/.changeset/ten-mayflies-beam.md +++ b/.changeset/ten-mayflies-beam.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder': minor +'@backstage/plugin-scaffolder': patch --- Making it possible to hide software templates via a template filter. From 20672a29215670d94715dc7a5d383ff685ab682d Mon Sep 17 00:00:00 2001 From: Aramis Sennyey Date: Fri, 17 Mar 2023 11:59:12 -0400 Subject: [PATCH 253/511] Add test case for multiple fields and pagination. Signed-off-by: Aramis Sennyey --- .../service/DefaultEntitiesCatalog.test.ts | 148 +++++++++++++++++- .../src/service/DefaultEntitiesCatalog.ts | 32 ++-- 2 files changed, 163 insertions(+), 17 deletions(-) diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts index b178a591de..25cdc8d826 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts @@ -1125,10 +1125,10 @@ describe('DefaultEntitiesCatalog', () => { await createDatabase(databaseId); const names = ['lion', 'cat', 'atcatss', 'dog', 'dogcat', 'aa', 's']; - const entities: Entity[] = names.map(name => + const entities: Entity[] = names.map((name, index) => // Need a stable search since default filtering is by uid, and those get generated on the fly // during the test case. - entityFrom(name, { uid: name }), + entityFrom(`${index}`, { uid: `id${index}`, title: name }), ); const notFoundEntities: Entity[] = [ @@ -1163,17 +1163,146 @@ describe('DefaultEntitiesCatalog', () => { const request: QueryEntitiesInitialRequest = { filter, limit: 100, - fullTextFilter: { term: 'cAt ', fields: ['metadata.name'] }, + fullTextFilter: { term: 'cAt ', fields: ['metadata.title'] }, }; const response = await catalog.queryEntities(request); expect(response.items).toEqual([ - entityFrom('atcatss', { uid: 'atcatss' }), - entityFrom('cat', { uid: 'cat' }), - entityFrom('dogcat', { uid: 'dogcat' }), + entityFrom('1', { uid: 'id1', title: 'cat' }), + entityFrom('2', { uid: 'id2', title: 'atcatss' }), + entityFrom('4', { uid: 'id4', title: 'dogcat' }), ]); expect(response.pageInfo.nextCursor).toBeUndefined(); expect(response.pageInfo.prevCursor).toBeUndefined(); expect(response.totalItems).toBe(3); + + const paginatedResponse = await catalog.queryEntities({ + ...request, + limit: 2, + }); + expect(paginatedResponse.items).toEqual([ + entityFrom('1', { uid: 'id1', title: 'cat' }), + entityFrom('2', { uid: 'id2', title: 'atcatss' }), + ]); + expect(paginatedResponse.pageInfo.nextCursor).not.toBeUndefined(); + expect(paginatedResponse.pageInfo.prevCursor).toBeUndefined(); + expect(paginatedResponse.totalItems).toBe(3); + + const paginatedResponseNext = await catalog.queryEntities({ + cursor: paginatedResponse.pageInfo.nextCursor!, + }); + expect(paginatedResponseNext.items).toEqual([ + entityFrom('4', { uid: 'id4', title: 'dogcat' }), + ]); + expect(paginatedResponseNext.pageInfo.nextCursor).toBeUndefined(); + expect(paginatedResponseNext.pageInfo.prevCursor).not.toBeUndefined(); + expect(paginatedResponseNext.totalItems).toBe(3); + + const paginatedResponsePrev = await catalog.queryEntities({ + cursor: paginatedResponseNext.pageInfo.prevCursor!, + }); + expect(paginatedResponsePrev).toMatchObject(paginatedResponse); + }, + ); + + it.each(databases.eachSupportedId())( + 'should filter the text results by multiple search fields if provided, %p', + async databaseId => { + await createDatabase(databaseId); + + const defs = [ + { + title: 'lion', + name: 'KingOfTheJungle', + }, + { title: 'cat', name: 'NotKingOfTheJungle' }, + { title: 'atcatss', name: 'NotACatKing' }, + { title: 'king', name: '123' }, + { title: 'dogcat', name: 'dogcat' }, + { title: 'aa', name: 'test123' }, + { title: 's', name: 'idk' }, + ]; + const entities: Entity[] = defs.map(({ title, name }, index) => + // Need a stable search since default filtering is by uid, and those get generated on the fly + // during the test case. + entityFrom(name, { uid: `id${index}`, title }), + ); + + const notFoundEntities: Entity[] = [ + { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'something' }, + spec: {}, + }, + { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'something else' }, + spec: {}, + }, + ]; + + await Promise.all( + entities.concat(notFoundEntities).map(e => addEntityToSearch(e)), + ); + + const catalog = new DefaultEntitiesCatalog({ + database: knex, + logger: getVoidLogger(), + stitcher, + }); + + const filter = { + key: 'spec.should_include_this', + }; + + const request: QueryEntitiesInitialRequest = { + filter, + limit: 100, + fullTextFilter: { + term: 'KiNg ', + fields: ['metadata.title', 'metadata.name'], + }, + }; + const response = await catalog.queryEntities(request); + + expect(response.items).toEqual([ + entityFrom('KingOfTheJungle', { uid: 'id0', title: 'lion' }), + entityFrom('NotKingOfTheJungle', { uid: 'id1', title: 'cat' }), + entityFrom('NotACatKing', { uid: 'id2', title: 'atcatss' }), + entityFrom('123', { uid: 'id3', title: 'king' }), + ]); + expect(response.pageInfo.nextCursor).toBeUndefined(); + expect(response.pageInfo.prevCursor).toBeUndefined(); + expect(response.totalItems).toBe(4); + + const paginatedResponse = await catalog.queryEntities({ + ...request, + limit: 2, + }); + expect(paginatedResponse.items).toEqual([ + entityFrom('KingOfTheJungle', { uid: 'id0', title: 'lion' }), + entityFrom('NotKingOfTheJungle', { uid: 'id1', title: 'cat' }), + ]); + expect(paginatedResponse.pageInfo.nextCursor).not.toBeUndefined(); + expect(paginatedResponse.pageInfo.prevCursor).toBeUndefined(); + expect(paginatedResponse.totalItems).toBe(4); + + const paginatedResponseNext = await catalog.queryEntities({ + cursor: paginatedResponse.pageInfo.nextCursor!, + }); + expect(paginatedResponseNext.items).toEqual([ + entityFrom('NotACatKing', { uid: 'id2', title: 'atcatss' }), + entityFrom('123', { uid: 'id3', title: 'king' }), + ]); + expect(paginatedResponseNext.pageInfo.nextCursor).toBeUndefined(); + expect(paginatedResponseNext.pageInfo.prevCursor).not.toBeUndefined(); + expect(paginatedResponseNext.totalItems).toBe(4); + + const paginatedResponsePrev = await catalog.queryEntities({ + cursor: paginatedResponseNext.pageInfo.prevCursor!, + }); + expect(paginatedResponsePrev).toMatchObject(paginatedResponse); }, ); @@ -1635,7 +1764,11 @@ describe('DefaultEntitiesCatalog', () => { function entityFrom( name: string, - { uid, namespace }: { uid?: string; namespace?: string } = {}, + { + uid, + namespace, + title, + }: { uid?: string; namespace?: string; title?: string } = {}, ) { return { apiVersion: 'a', @@ -1644,6 +1777,7 @@ function entityFrom( name, ...(!!namespace && { namespace }), ...(!!uid && { uid }), + ...(!!title && { title }), }, spec: { should_include_this: 'yes' }, }; diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index bc6c93ec90..ba165f96af 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -384,16 +384,28 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog { const normalizedFullTextFilterTerm = cursor.fullTextFilter?.term?.trim(); const textFilterFields = cursor.fullTextFilter?.fields ?? [sortField.field]; if (normalizedFullTextFilterTerm) { - const matchQuery = db('search') - .select('search.entity_id') - .whereIn('key', textFilterFields) - .andWhere(function keyFilter() { - this.andWhereRaw( - 'value like ?', - `%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`, - ); - }); - dbQuery.andWhere('search.entity_id', 'in', matchQuery); + if ( + textFilterFields.length === 1 && + textFilterFields[0] === sortField.field + ) { + // If there is one item, apply the like query to the top level query which is already + // filtered based on the singular sortField. + dbQuery.andWhereRaw( + 'value like ?', + `%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`, + ); + } else { + const matchQuery = db('search') + .select('search.entity_id') + .whereIn('key', textFilterFields) + .andWhere(function keyFilter() { + this.andWhereRaw( + 'value like ?', + `%${normalizedFullTextFilterTerm.toLocaleLowerCase('en-US')}%`, + ); + }); + dbQuery.andWhere('search.entity_id', 'in', matchQuery); + } } const countQuery = dbQuery.clone(); From 6b69593dbf6a6dabec5675e15573d34f21511f1e Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 17:03:40 +0100 Subject: [PATCH 254/511] chore: fixing api-reports and merge conflicts Signed-off-by: blam --- plugins/scaffolder/alpha-api-report.md | 4 ++++ .../src/next/TemplateListPage/TemplateGroups.test.tsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index 1fc77322bd..58d70e3c71 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -31,6 +31,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; + templateFilter?: TemplateFilter; FormProps?: FormProps_2; contextMenu?: { editor?: boolean; @@ -44,6 +45,9 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; +// @alpha (undocumented) +export type TemplateFilter = (entity: Entity) => boolean; + // @alpha (undocumented) export type TemplateGroupFilter = { title?: React_2.ReactNode; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx index 291804abbd..c0fb503d9b 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx @@ -243,7 +243,7 @@ describe('TemplateGroups', () => { , { mountedRoutes: { - '/next': nextRouteRef, + '/create': rootRouteRef, }, }, ); From 70ae9f30db9e2d5f8a6be36952ac5604d6824b30 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 17 Mar 2023 17:06:32 +0100 Subject: [PATCH 255/511] chore: reworking changeset Signed-off-by: blam --- .changeset/ten-mayflies-beam.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/ten-mayflies-beam.md b/.changeset/ten-mayflies-beam.md index 038f9eec87..ff7d9e52e9 100644 --- a/.changeset/ten-mayflies-beam.md +++ b/.changeset/ten-mayflies-beam.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder': patch +'@backstage/plugin-scaffolder': minor --- -Making it possible to hide software templates via a template filter. +Added a `templateFilter` prop to the `` component to allow for filtering of templates through a function. From 420164593cfdc8459b2138b911b25cb81c294aa6 Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Fri, 17 Mar 2023 19:56:04 +0100 Subject: [PATCH 256/511] Improve GitlabUrlReader to only load requested sub-path Signed-off-by: Andreas Berger --- .changeset/ten-hounds-bathe.md | 5 ++ .../src/reading/GitlabUrlReader.test.ts | 50 +++++++++++++++-- .../src/reading/GitlabUrlReader.ts | 53 +++++++++++++----- .../gitlab-subpath-archive.tar.gz | Bin 0 -> 346 bytes 4 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 .changeset/ten-hounds-bathe.md create mode 100644 packages/backend-common/src/reading/__fixtures__/gitlab-subpath-archive.tar.gz diff --git a/.changeset/ten-hounds-bathe.md b/.changeset/ten-hounds-bathe.md new file mode 100644 index 0000000000..85bda89138 --- /dev/null +++ b/.changeset/ten-hounds-bathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Improve GitlabUrlReader to only load requested sub-path diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index d926b2be9b..5af4faf7e5 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -556,6 +556,10 @@ describe('GitlabUrlReader', () => { path.resolve(__dirname, '__fixtures__/gitlab-archive.tar.gz'), ); + const archiveSubPathBuffer = fs.readFileSync( + path.resolve(__dirname, '__fixtures__/gitlab-subpath-archive.tar.gz'), + ); + const projectGitlabApiResponse = { id: 11111111, default_branch: 'main', @@ -566,21 +570,34 @@ describe('GitlabUrlReader', () => { id: 'sha123abc', }, ]; + const commitsOfSubPathGitlabApiResponse = [ + { + id: 'sha456abc', + }, + ]; beforeEach(() => { worker.use( rest.get( 'https://gitlab.com/api/v4/projects/backstage%2Fmock/repository/archive', - (_, res, ctx) => - res( + (req, res, ctx) => { + const filepath = req.url.searchParams.get('path'); + let filename = 'mock-main-sha123abc.zip'; + let body = archiveBuffer; + if (filepath === 'docs') { + filename = 'gitlab-subpath-archive.tar.gz'; + body = archiveSubPathBuffer; + } + return res( ctx.status(200), ctx.set('Content-Type', 'application/zip'), ctx.set( 'content-disposition', - 'attachment; filename="mock-main-sha123abc.zip"', + `attachment; filename="${filename}"`, ), - ctx.body(archiveBuffer), - ), + ctx.body(body), + ); + }, ), rest.get( 'https://gitlab.com/api/v4/projects/backstage%2Fmock', @@ -596,6 +613,14 @@ describe('GitlabUrlReader', () => { (req, res, ctx) => { const refName = req.url.searchParams.get('ref_name'); if (refName === 'main') { + const filepath = req.url.searchParams.get('path'); + if (filepath === 'docs') { + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(commitsOfSubPathGitlabApiResponse), + ); + } return res( ctx.status(200), ctx.set('Content-Type', 'application/json'), @@ -622,6 +647,21 @@ describe('GitlabUrlReader', () => { ); }); + it('load only relevant path', async () => { + const result = await gitlabProcessor.search( + 'https://gitlab.com/backstage/mock/tree/main/docs/**/index.*', + ); + + expect(result.etag).toBe('sha456abc'); + expect(result.files.length).toBe(1); + expect(result.files[0].url).toBe( + 'https://gitlab.com/backstage/mock/tree/main/docs/index.md', + ); + await expect(result.files[0].content()).resolves.toEqual( + Buffer.from('# Test Subpath\n'), + ); + }); + it('throws NotModifiedError when same etag', async () => { await expect( gitlabProcessor.search( diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index df8441c1f7..ab59c19b16 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -26,7 +26,6 @@ import parseGitUrl from 'git-url-parse'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { stripFirstDirectoryFromPath } from './tree/util'; import { ReadTreeResponseFactory, ReaderFactory, @@ -163,7 +162,7 @@ export class GitlabUrlReader implements UrlReader { // ref is an empty string if no branch is set in provided url to readTree. const branch = ref || projectGitlabResponseJson.default_branch; - // Fetch the latest commit that modifies the the filepath in the provided or default branch + // Fetch the latest commit that modifies the filepath in the provided or default branch // to compare against the provided sha. const commitsReqParams = new URLSearchParams(); commitsReqParams.set('ref_name', branch); @@ -200,11 +199,16 @@ export class GitlabUrlReader implements UrlReader { throw new NotModifiedError(); } + const archiveReqParams = new URLSearchParams(); + archiveReqParams.set('sha', branch); + if (!!filepath) { + archiveReqParams.set('path', filepath); + } // https://docs.gitlab.com/ee/api/repositories.html#get-file-archive const archiveGitLabResponse = await fetch( `${this.integration.config.apiBaseUrl}/projects/${encodeURIComponent( repoFullName, - )}/repository/archive?sha=${branch}`, + )}/repository/archive?${archiveReqParams.toString()}`, { ...getGitLabRequestOptions(this.integration.config), // TODO(freben): The signal cast is there because pre-3.x versions of @@ -234,31 +238,54 @@ export class GitlabUrlReader implements UrlReader { async search(url: string, options?: SearchOptions): Promise { const { filepath } = parseGitUrl(url); + const staticPart = this.getStaticPart(filepath); const matcher = new Minimatch(filepath); - - // TODO(freben): For now, read the entire repo and filter through that. In - // a future improvement, we could be smart and try to deduce that non-glob - // prefixes (like for filepaths such as some-prefix/**/a.yaml) can be used - // to get just that part of the repo. - const treeUrl = trimEnd(url.replace(filepath, ''), '/'); - + const treeUrl = trimEnd(url.replace(filepath, staticPart), `/`); + const pathPrefix = staticPart ? `${staticPart}/` : ''; const tree = await this.readTree(treeUrl, { etag: options?.etag, signal: options?.signal, - filter: path => matcher.match(stripFirstDirectoryFromPath(path)), + filter: path => matcher.match(`${pathPrefix}${path}`), }); - const files = await tree.files(); + const files = await tree.files(); return { etag: tree.etag, files: files.map(file => ({ - url: this.integration.resolveUrl({ url: `/${file.path}`, base: url }), + url: this.integration.resolveUrl({ + url: `/${pathPrefix}${file.path}`, + base: url, + }), content: file.content, lastModifiedAt: file.lastModifiedAt, })), }; } + /** + * This function splits the input globPattern string into segments using the path separator /. It then iterates over + * the segments from the end of the array towards the beginning, checking if the concatenated string up to that + * segment matches the original globPattern using the minimatch function. If a match is found, it continues iterating. + * If no match is found, it returns the concatenated string up to the current segment, which is the static part of the + * glob pattern. + * + * E.g. `catalog/foo/*.yaml` will return `catalog/foo`. + * + * @param globPattern the glob pattern + * @private + */ + private getStaticPart(globPattern: string) { + const segments = globPattern.split('/'); + let i = segments.length; + while ( + i > 0 && + new Minimatch(segments.slice(0, i).join('/')).match(globPattern) + ) { + i--; + } + return segments.slice(0, i).join('/'); + } + toString() { const { host, token } = this.integration.config; return `gitlab{host=${host},authed=${Boolean(token)}}`; diff --git a/packages/backend-common/src/reading/__fixtures__/gitlab-subpath-archive.tar.gz b/packages/backend-common/src/reading/__fixtures__/gitlab-subpath-archive.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c41714b4527dd224ef71cd80af75c1785cfb64ee GIT binary patch literal 346 zcmV-g0j2&QiwFRBwG?Ck1MQYwYlAQphQ02u2<&?8iJp_J7rWnOVfzEA5p`^K_%UR^ ze$mc;$hsm#M==jV2!c7u;d$dm)lZSqQND`P@=a~;RURhkXXIG~03;FfWXo}cjzBPu zAOwO$@)>X;2|QNYEaDPXQL5aO@|tFGn5f Date: Fri, 17 Mar 2023 14:16:07 -0700 Subject: [PATCH 257/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Tracey Radcliffe --- .../package.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json index 10aef2bca3..595b39ee83 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json @@ -31,20 +31,18 @@ "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", - "fs-extra": "^11.1.0", + "fs-extra": "10.1.0", "git-url-parse": "^13.1.0", "jest": "^29.5.0", - "node-fetch": "2.6.7", + "node-fetch": "^2.6.7", "node-html-markdown": "^1.3.0", - "ts-jest": "^29.0.5", - "yaml": "^2.2.1" + "yaml": "^2.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/test-utils": "workspace:^", "mock-fs": "^5.2.0", - "msw": "^1.1.0", - "os": "^0.1.2" + "msw": "^1.0.0", }, "files": [ "dist" From 98b21c24f2a1a3c35a662ff3a5ee7e15cf9cdffa Mon Sep 17 00:00:00 2001 From: Tracey Date: Fri, 17 Mar 2023 14:54:22 -0700 Subject: [PATCH 258/511] updated action id, added a comment and addressed other changes suggested during code reivew Signed-off-by: Tracey --- .../.eslintrc.js | 0 .../README.md | 4 +- .../package.json | 3 +- .../confluence/confluenceToMarkdown.test.ts | 2 +- .../confluence/confluenceToMarkdown.ts | 5 +- .../src/actions/confluence/helpers.ts | 0 .../src/actions/confluence/index.ts | 0 .../src/actions/index.ts | 0 .../src/index.ts | 0 yarn.lock | 113 ++++-------------- 10 files changed, 32 insertions(+), 95 deletions(-) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/.eslintrc.js (100%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/README.md (96%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/package.json (97%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/actions/confluence/confluenceToMarkdown.test.ts (99%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/actions/confluence/confluenceToMarkdown.ts (94%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/actions/confluence/helpers.ts (100%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/actions/confluence/index.ts (100%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/actions/index.ts (100%) rename plugins/{scaffolder-backend-module-confluence-to-markdowwn => scaffolder-backend-module-confluence-to-markdown}/src/index.ts (100%) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js b/plugins/scaffolder-backend-module-confluence-to-markdown/.eslintrc.js similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/.eslintrc.js rename to plugins/scaffolder-backend-module-confluence-to-markdown/.eslintrc.js diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md similarity index 96% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md rename to plugins/scaffolder-backend-module-confluence-to-markdown/README.md index 56ca4afffc..7f526db553 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/README.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md @@ -1,6 +1,6 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown -Welcome to the `transform:confluence-to-markdown` action for the `scaffolder-backend`. +Welcome to the `confluence:transform:markdown` action for the `scaffolder-backend`. ## Getting started @@ -99,7 +99,7 @@ spec: steps: - id: create-docs name: Get markdown file created and update markdown.yaml file - action: transform:confluence-to-markdown + action: confluence:transform:markdown input: confluenceUrls: ${{ parameters.confluenceUrls }} repoUrl: ${{ parameters.repoUrl }} diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json similarity index 97% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json rename to plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 595b39ee83..7ad5f127f6 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -33,7 +33,6 @@ "@backstage/types": "workspace:^", "fs-extra": "10.1.0", "git-url-parse": "^13.1.0", - "jest": "^29.5.0", "node-fetch": "^2.6.7", "node-html-markdown": "^1.3.0", "yaml": "^2.0.0" @@ -42,7 +41,7 @@ "@backstage/cli": "workspace:^", "@backstage/test-utils": "workspace:^", "mock-fs": "^5.2.0", - "msw": "^1.0.0", + "msw": "^1.0.0" }, "files": [ "dist" diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts similarity index 99% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts index ae98c38c03..a7d0ea7b25 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts @@ -39,7 +39,7 @@ jest.mock('fs-extra', () => ({ writeStream: jest.fn(), })); -describe('transform:confluence-to-markdown', () => { +describe('confluence:transform:markdown', () => { const baseUrl = `https://nodomain.confluence.com`; const worker = setupServer(); setupRequestMockHandlers(worker); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts similarity index 94% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts index 2a7d28048a..6cbf4da53a 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts @@ -45,7 +45,7 @@ export const createConfluenceToMarkdownAction = (options: { confluenceUrls: string[]; repoUrl: string; }>({ - id: 'transform:confluence-to-markdown', + id: 'confluence:transform:markdown', schema: { input: { properties: { @@ -154,7 +154,8 @@ export const createConfluenceToMarkdownAction = (options: { const markdownToPublish = NodeHtmlMarkdown.translate(html); let newString: string = markdownToPublish; productArray.forEach((product: string[]) => { - const regex = product[1].includes('pdf') + // This regex is looking for either [](link to confluence) or ![](link to confluence) in the newly created markdown doc and updating it to point to the versions saved(in ./docs/img) in the local version of GitHub Repo during getAndWriteAttachments + const regex = product[0].includes('pdf') ? new RegExp(`(\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi') : new RegExp(`(\\!\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi'); newString = newString.replace(regex, `$1./img/${product[1]}$3`); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/helpers.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/index.ts similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/confluence/index.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/index.ts diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/index.ts similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/actions/index.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/index.ts diff --git a/plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts similarity index 100% rename from plugins/scaffolder-backend-module-confluence-to-markdowwn/src/index.ts rename to plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts diff --git a/yarn.lock b/yarn.lock index 4514e3757b..e4434d5168 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7651,9 +7651,9 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn": +"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown": version: 0.0.0-use.local - resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdowwn" + resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown" dependencies: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" @@ -7664,16 +7664,13 @@ __metadata: "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" - fs-extra: ^11.1.0 + fs-extra: 10.1.0 git-url-parse: ^13.1.0 - jest: ^29.5.0 mock-fs: ^5.2.0 - msw: ^1.1.0 - node-fetch: 2.6.7 + msw: ^1.0.0 + node-fetch: ^2.6.7 node-html-markdown: ^1.3.0 - os: ^0.1.2 - ts-jest: ^29.0.5 - yaml: ^2.2.1 + yaml: ^2.0.0 languageName: unknown linkType: soft @@ -18363,15 +18360,6 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -23317,7 +23305,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -23953,17 +23941,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.1.0": - version: 11.1.0 - resolution: "fs-extra@npm:11.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f - languageName: node - linkType: hard - "fs-extra@npm:^7.0.1, fs-extra@npm:~7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -27161,7 +27138,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.4.3, jest-util@npm:^29.5.0": +"jest-util@npm:^29.4.3, jest-util@npm:^29.5.0": version: 29.5.0 resolution: "jest-util@npm:29.5.0" dependencies: @@ -27248,7 +27225,7 @@ __metadata: languageName: node linkType: hard -"jest@npm:^29.0.2, jest@npm:^29.5.0": +"jest@npm:^29.0.2": version: 29.5.0 resolution: "jest@npm:29.5.0" dependencies: @@ -27761,7 +27738,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -28731,7 +28708,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2": +"lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 @@ -29015,7 +28992,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -30263,7 +30240,7 @@ __metadata: languageName: node linkType: hard -"msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.1.0": +"msw@npm:^1.0.0, msw@npm:^1.0.1": version: 1.1.0 resolution: "msw@npm:1.1.0" dependencies: @@ -31363,13 +31340,6 @@ __metadata: languageName: node linkType: hard -"os@npm:^0.1.2": - version: 0.1.2 - resolution: "os@npm:0.1.2" - checksum: dc2d99759eef13f5dc47ddb12c67b9760a7196fd83a35a7aec2d75b82f91163ca1d4e8872238f8c2a35f4cddd5adf5ce6638a234c0563c748d3cd1d69a9f7153 - languageName: node - linkType: hard - "ospath@npm:^1.2.2": version: 1.2.2 resolution: "ospath@npm:1.2.2" @@ -35434,7 +35404,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0": +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -35445,15 +35424,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -37631,39 +37601,6 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.0.5": - version: 29.0.5 - resolution: "ts-jest@npm:29.0.5" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 - json5: ^2.2.3 - lodash.memoize: 4.x - make-error: 1.x - semver: 7.x - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: f60f129c2287f4c963d9ee2677132496c5c5a5d39c27ad234199a1140c26318a7d5bda34890ab0e30636ec42a8de28f84487c09e9dcec639c9c67812b3a38373 - languageName: node - linkType: hard - "ts-log@npm:^2.2.3": version: 2.2.3 resolution: "ts-log@npm:2.2.3" @@ -39592,7 +39529,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3, yaml@npm:^2.2.1": +"yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3": version: 2.2.1 resolution: "yaml@npm:2.2.1" checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 @@ -39616,7 +39553,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.0.1": +"yargs-parser@npm:^21.0.0": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c From 78c19ce5d79dcf0bf9484bf816855be9d2d9a8e9 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 21:20:11 -0400 Subject: [PATCH 259/511] chore: Rename files for better list sorting Signed-off-by: Adam Harvey --- ...kstage-analytics-module-ga.yaml => analytics-module-ga.yaml} | 0 .../{backstage-plugin-api-linter.yaml => api-linter.yaml} | 2 +- .../plugins/{backstage-plugin-ldap-auth.yml => ldap-auth.yml} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename microsite/data/plugins/{backstage-analytics-module-ga.yaml => analytics-module-ga.yaml} (100%) rename microsite/data/plugins/{backstage-plugin-api-linter.yaml => api-linter.yaml} (91%) rename microsite/data/plugins/{backstage-plugin-ldap-auth.yml => ldap-auth.yml} (100%) diff --git a/microsite/data/plugins/backstage-analytics-module-ga.yaml b/microsite/data/plugins/analytics-module-ga.yaml similarity index 100% rename from microsite/data/plugins/backstage-analytics-module-ga.yaml rename to microsite/data/plugins/analytics-module-ga.yaml diff --git a/microsite/data/plugins/backstage-plugin-api-linter.yaml b/microsite/data/plugins/api-linter.yaml similarity index 91% rename from microsite/data/plugins/backstage-plugin-api-linter.yaml rename to microsite/data/plugins/api-linter.yaml index ae2a451ea7..a68da228eb 100644 --- a/microsite/data/plugins/backstage-plugin-api-linter.yaml +++ b/microsite/data/plugins/api-linter.yaml @@ -1,5 +1,5 @@ --- -title: backstage-plugin-api-linter +title: API Linter author: Zalando authorUrl: https://github.com/zalando category: Linting diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite/data/plugins/ldap-auth.yml similarity index 100% rename from microsite/data/plugins/backstage-plugin-ldap-auth.yml rename to microsite/data/plugins/ldap-auth.yml From a72378401b2d690bd5be66ae7881f38796d91841 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 21:20:29 -0400 Subject: [PATCH 260/511] chore: Align Roadie's author line Signed-off-by: Adam Harvey --- microsite/data/plugins/cloudsmith.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/cloudsmith.yaml b/microsite/data/plugins/cloudsmith.yaml index 650f0b253c..4a07318a67 100644 --- a/microsite/data/plugins/cloudsmith.yaml +++ b/microsite/data/plugins/cloudsmith.yaml @@ -1,6 +1,6 @@ --- title: Cloudsmith -author: Roadie +author: roadie.io authorUrl: https://roadie.io category: CI/CD description: Show Cloudsmith Repository stats, Quota, Audit logs and Security scans for specific repositories. From faa009bd988147a20345bef897da2b476e0868c6 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 21:20:57 -0400 Subject: [PATCH 261/511] chore: Proper case for GitHub Signed-off-by: Adam Harvey --- microsite/data/plugins/github-pull-requests-board.yaml | 2 +- microsite/data/plugins/statusneo-github-plugin.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/github-pull-requests-board.yaml b/microsite/data/plugins/github-pull-requests-board.yaml index 09776eb468..9fe2570f91 100644 --- a/microsite/data/plugins/github-pull-requests-board.yaml +++ b/microsite/data/plugins/github-pull-requests-board.yaml @@ -1,5 +1,5 @@ --- -title: Github Pull Requests Board +title: GitHub Pull Requests Board author: DAZN authorUrl: https://engineering.dazn.com category: Source Control Mgmt diff --git a/microsite/data/plugins/statusneo-github-plugin.yaml b/microsite/data/plugins/statusneo-github-plugin.yaml index eea4b84e06..9c56dd4ae4 100644 --- a/microsite/data/plugins/statusneo-github-plugin.yaml +++ b/microsite/data/plugins/statusneo-github-plugin.yaml @@ -1,4 +1,4 @@ -title: Statusneo Github Plugin +title: Statusneo GitHub Plugin author: Statusneo authorUrl: https://statusneo.com/ category: GitHub From 6e9b8245e28bea27b5208dd92fe012c4a54cc937 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 21:21:13 -0400 Subject: [PATCH 262/511] chore: Align category Signed-off-by: Adam Harvey --- microsite/data/plugins/vault.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/vault.yaml b/microsite/data/plugins/vault.yaml index 29e20417d8..37d474371b 100644 --- a/microsite/data/plugins/vault.yaml +++ b/microsite/data/plugins/vault.yaml @@ -2,7 +2,7 @@ title: Vault author: Spread Group authorUrl: https://github.com/ivangonzalezacuna -category: Vault +category: Security description: Visualize a list of the secrets stored in your HashiCorp Vault instance. documentation: https://github.com/backstage/backstage/tree/master/plugins/vault iconUrl: /img/vault.png From 3f7e1c1925707018c84ce887466fdb3383787b8d Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 21:21:30 -0400 Subject: [PATCH 263/511] chore: Improve description Signed-off-by: Adam Harvey --- microsite/data/plugins/scaffolder-backend-roadie-aws.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/scaffolder-backend-roadie-aws.yaml b/microsite/data/plugins/scaffolder-backend-roadie-aws.yaml index e8e67dbdad..65808b9af2 100644 --- a/microsite/data/plugins/scaffolder-backend-roadie-aws.yaml +++ b/microsite/data/plugins/scaffolder-backend-roadie-aws.yaml @@ -1,9 +1,9 @@ --- -title: Scaffolder AWS cli actions +title: Scaffolder AWS CLI actions author: roadie.io authorUrl: https://roadie.io/?utm_source=backstage.io&utm_medium=marketplace&utm_campaign=scaffolder-aws category: Scaffolder -description: Here you can find some AWS cli actions +description: Scaffolder actions you can trigger for Amazon Web Services. documentation: https://github.com/RoadieHQ/roadie-backstage-plugins/blob/main/plugins/scaffolder-actions/scaffolder-backend-module-aws/README.md iconUrl: https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg npmPackageName: '@roadiehq/scaffolder-backend-module-aws' From 5b73227f4215fddab134a16bdd24118c59f59ae7 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:13:58 -0400 Subject: [PATCH 264/511] chore: Fix typo in README sample code Signed-off-by: Adam Harvey --- plugins/dynatrace/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dynatrace/README.md b/plugins/dynatrace/README.md index df6bb75f10..b07fe985fe 100644 --- a/plugins/dynatrace/README.md +++ b/plugins/dynatrace/README.md @@ -49,7 +49,7 @@ const serviceEntityPage = ( + > + + - + ) ``` From ebeac7ccc9a0a026b1248823f579c109a3d299ba Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:16:21 -0400 Subject: [PATCH 265/511] chore: Add API Reference Signed-off-by: Adam Harvey --- plugins/analytics-module-ga/api-report.md | 2 -- plugins/analytics-module-ga/src/index.ts | 6 ++++++ plugins/apollo-explorer/api-report.md | 2 -- plugins/apollo-explorer/src/index.ts | 6 ++++++ plugins/dynatrace/api-report.md | 2 -- plugins/dynatrace/src/index.ts | 6 ++++++ 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/plugins/analytics-module-ga/api-report.md b/plugins/analytics-module-ga/api-report.md index 557f472f71..f28c919f33 100644 --- a/plugins/analytics-module-ga/api-report.md +++ b/plugins/analytics-module-ga/api-report.md @@ -25,6 +25,4 @@ export class GoogleAnalytics implements AnalyticsApi { }, ): GoogleAnalytics; } - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/analytics-module-ga/src/index.ts b/plugins/analytics-module-ga/src/index.ts index fca8d91658..7b96c761fb 100644 --- a/plugins/analytics-module-ga/src/index.ts +++ b/plugins/analytics-module-ga/src/index.ts @@ -14,5 +14,11 @@ * limitations under the License. */ +/** + * Analytics Module plugin for Google Analytics. + * + * @packageDocumentation + */ + export { analyticsModuleGA } from './plugin'; export * from './apis/implementations/AnalyticsApi'; diff --git a/plugins/apollo-explorer/api-report.md b/plugins/apollo-explorer/api-report.md index 1d3b41eac1..66cc473d0b 100644 --- a/plugins/apollo-explorer/api-report.md +++ b/plugins/apollo-explorer/api-report.md @@ -40,6 +40,4 @@ export const apolloExplorerPlugin: BackstagePlugin< {}, {} >; - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/apollo-explorer/src/index.ts b/plugins/apollo-explorer/src/index.ts index 6d07535fc3..565557e79f 100644 --- a/plugins/apollo-explorer/src/index.ts +++ b/plugins/apollo-explorer/src/index.ts @@ -13,4 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** + * Integrates Apollo Explorer graphs as a tool to browse GraphQL API endpoints inside Backstage. + * + * @packageDocumentation + */ export { apolloExplorerPlugin, ApolloExplorerPage } from './plugin'; diff --git a/plugins/dynatrace/api-report.md b/plugins/dynatrace/api-report.md index 1677318a9f..1dded736ad 100644 --- a/plugins/dynatrace/api-report.md +++ b/plugins/dynatrace/api-report.md @@ -16,6 +16,4 @@ export const DynatraceTab: () => JSX.Element; // @public export const isDynatraceAvailable: (entity: Entity) => boolean; - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/dynatrace/src/index.ts b/plugins/dynatrace/src/index.ts index 0c5da219a5..90688a544f 100644 --- a/plugins/dynatrace/src/index.ts +++ b/plugins/dynatrace/src/index.ts @@ -14,4 +14,10 @@ * limitations under the License. */ +/** + * A Backstage plugin that integrates towards Dynatrace. + * + * @packageDocumentation + */ + export { dynatracePlugin, DynatraceTab, isDynatraceAvailable } from './plugin'; From 04ad71e6939d9e43a22c4159006a83b4a4953050 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:17:06 -0400 Subject: [PATCH 266/511] chore(analytics-module-ga): Fix Markdown heading levels Signed-off-by: Adam Harvey --- plugins/analytics-module-ga/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/analytics-module-ga/README.md b/plugins/analytics-module-ga/README.md index d6e2642e2b..6fdfc91306 100644 --- a/plugins/analytics-module-ga/README.md +++ b/plugins/analytics-module-ga/README.md @@ -236,7 +236,7 @@ make and test changes is to do the following: Code for the isolated version of the plugin can be found inside the [/dev](./dev) directory. Changes to the plugin are hot-reloaded. -#### Recommended Dev Config +### Recommended Dev Config Paste this into your `app-config.local.yaml` while developing this plugin: From 5f211006091328f4168175c88bc0aa9b15270ae4 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:17:44 -0400 Subject: [PATCH 267/511] chore: Properly link up API Reference Signed-off-by: Adam Harvey --- plugins/airbrake/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/airbrake/src/index.ts b/plugins/airbrake/src/index.ts index 717d544dc9..6f189e36b8 100644 --- a/plugins/airbrake/src/index.ts +++ b/plugins/airbrake/src/index.ts @@ -15,7 +15,7 @@ */ /** - * The Airbrake plugin provides connectivity between Backstage and Airbrake (https://airbrake.io/). + * The Airbrake plugin provides connectivity between Backstage and {@link https://airbrake.io/ | Airbrake}. * * @packageDocumentation */ From ac87cddad60dd38e798bbb688043ac754ee81453 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:18:42 -0400 Subject: [PATCH 268/511] chore: Improve API Reference package description Signed-off-by: Adam Harvey --- plugins/adr-backend/src/index.ts | 2 +- plugins/adr/src/index.ts | 2 +- plugins/circleci/src/index.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/adr-backend/src/index.ts b/plugins/adr-backend/src/index.ts index 5cc8f50b72..89c88ab3e7 100644 --- a/plugins/adr-backend/src/index.ts +++ b/plugins/adr-backend/src/index.ts @@ -15,7 +15,7 @@ */ /** - * ADR backend plugin + * Architecture Decision Records backend plugin. * * @packageDocumentation */ diff --git a/plugins/adr/src/index.ts b/plugins/adr/src/index.ts index f24b3ac531..f405621c4a 100644 --- a/plugins/adr/src/index.ts +++ b/plugins/adr/src/index.ts @@ -15,7 +15,7 @@ */ /** - * ADR frontend plugin + * Architecture Decision Records frontend plugin. * * @packageDocumentation */ diff --git a/plugins/circleci/src/index.ts b/plugins/circleci/src/index.ts index e20f5c7d6b..442f774b68 100644 --- a/plugins/circleci/src/index.ts +++ b/plugins/circleci/src/index.ts @@ -15,7 +15,7 @@ */ /** - * A Backstage plugin that integrates towards Circle CI + * A Backstage plugin that integrates towards CircleCI. * * @packageDocumentation */ From 7d75f6d9b8fb9d5af12c8225f000c22fc2a5bf5c Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 17 Mar 2023 22:19:51 -0400 Subject: [PATCH 269/511] chore: Add changeset Signed-off-by: Adam Harvey --- .changeset/pretty-carpets-cross.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changeset/pretty-carpets-cross.md diff --git a/.changeset/pretty-carpets-cross.md b/.changeset/pretty-carpets-cross.md new file mode 100644 index 0000000000..e479ab5bda --- /dev/null +++ b/.changeset/pretty-carpets-cross.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-analytics-module-ga': patch +'@backstage/plugin-apollo-explorer': patch +'@backstage/plugin-adr-backend': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-adr': patch +--- + +chore: Improve API Reference documentation From b9839d7135c88fb04cc3b622a05adb07a089adca Mon Sep 17 00:00:00 2001 From: David Weber Date: Sat, 18 Mar 2023 11:23:11 +0100 Subject: [PATCH 270/511] fix: use posix for joining paths Signed-off-by: David Weber --- .changeset/mighty-lamps-cross.md | 5 +++++ packages/cli/src/lib/bundler/config.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/mighty-lamps-cross.md diff --git a/.changeset/mighty-lamps-cross.md b/.changeset/mighty-lamps-cross.md new file mode 100644 index 0000000000..6819442105 --- /dev/null +++ b/.changeset/mighty-lamps-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Use `posix` for joining paths instead of platform dependent joins. diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index 01f323a082..db98f1486f 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -15,7 +15,7 @@ */ import fs from 'fs-extra'; -import { resolve as resolvePath, join as joinPath } from 'path'; +import { resolve as resolvePath, posix as posixPath } from 'path'; import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import ModuleScopePlugin from 'react-dev-utils/ModuleScopePlugin'; @@ -39,6 +39,7 @@ import yn from 'yn'; import { readEntryPoints } from '../monorepo/entryPoints'; import { ExtendedPackage } from '../monorepo'; +const joinPath = posixPath.join; const BUILD_CACHE_ENV_VAR = 'BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE'; export function resolveBaseUrl(config: Config): URL { From f64345108a0e870107e0c27c93298c3a0e1ca7e6 Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Tue, 21 Feb 2023 15:54:23 +0100 Subject: [PATCH 271/511] Add new config option for GitlabDiscoveryEntityProvider to distinguish between `branch` and `fallbackBranch` * A new config option `fallbackBranch` is added to the GitlabDiscoveryEntityProvider, to define the branch to use , if there is no default branch configured at the repository * The existing `branch` configuration is now used to explicitly set the branch to look up the catalog-info resolves #13587 Signed-off-by: Andreas Berger --- .changeset/fresh-schools-fly.md | 11 ++ docs/integrations/gitlab/discovery.md | 1 + .../src/lib/types.ts | 5 +- .../GitlabDiscoveryEntityProvider.test.ts | 107 ++++++++++++++++++ .../GitlabDiscoveryEntityProvider.ts | 10 +- .../src/providers/config.test.ts | 4 + .../src/providers/config.ts | 11 +- 7 files changed, 136 insertions(+), 13 deletions(-) create mode 100644 .changeset/fresh-schools-fly.md diff --git a/.changeset/fresh-schools-fly.md b/.changeset/fresh-schools-fly.md new file mode 100644 index 0000000000..52502a4ad8 --- /dev/null +++ b/.changeset/fresh-schools-fly.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': major +--- + +The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: + +- The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered. +- The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used + if no default branch is defined on the project itself. + +To migrate to the new configuration value, rename `branch` to `fallbackBranch` diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index 6d0bb7e2e2..48383c4275 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -21,6 +21,7 @@ catalog: gitlab: yourProviderId: host: gitlab-host # Identifies one of the hosts set up in the integrations + branch: main # Optional. Used to discover on a concrete branch fallbackBranch: main # Optional. Fallback to be used if there is no default branch configured at the Gitlab repository. It is only used, if `branch` is undefined. Uses `master` as default group: example-group # Optional. Group and subgroup (if needed) to look for repositories. If not present the whole instance will be scanned entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` diff --git a/plugins/catalog-backend-module-gitlab/src/lib/types.ts b/plugins/catalog-backend-module-gitlab/src/lib/types.ts index b4480efdc2..c27007861b 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/types.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/types.ts @@ -70,11 +70,12 @@ export type GitlabProviderConfig = { group: string; id: string; /** - * @deprecated use `fallbackBranch` instead + * The name of the branch to be used, to discover catalog files. */ branch?: string; /** - * If there is no default branch defined at the project, this fallback is used to discover catalog files. + * If no `branch` is configured and there is no default branch defined at the project as well, this fallback is used + * to discover catalog files. * Defaults to: `master` */ fallbackBranch: string; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index 42fa1b471c..75a4c6414c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -449,4 +449,111 @@ describe('GitlabDiscoveryEntityProvider', () => { 'GitlabDiscoveryEntityProvider:test-id', ); }); + + it('should filter found projects based on the branch', async () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'test-gitlab', + apiBaseUrl: 'https://api.gitlab.example/api/v4', + token: '1234', + }, + ], + }, + catalog: { + providers: { + gitlab: { + 'test-id': { + host: 'test-gitlab', + branch: 'test', + }, + }, + }, + }, + }); + const schedule = new PersistingTaskRunner(); + const entityProviderConnection: EntityProviderConnection = { + applyMutation: jest.fn(), + refresh: jest.fn(), + }; + const provider = GitlabDiscoveryEntityProvider.fromConfig(config, { + logger, + schedule, + })[0]; + + server.use( + rest.get( + `https://api.gitlab.example/api/v4/projects`, + (_req, res, ctx) => { + const response = [ + { + id: 123, + default_branch: 'master', + archived: false, + last_activity_at: new Date().toString(), + web_url: 'https://api.gitlab.example/test-group/test-repo', + path_with_namespace: 'test-group/test-repo', + }, + { + id: 124, + default_branch: 'master', + archived: false, + last_activity_at: new Date().toString(), + web_url: 'https://api.gitlab.example/john/example', + path_with_namespace: 'john/example', + }, + ]; + return res(ctx.json(response)); + }, + ), + rest.head( + 'https://api.gitlab.example/api/v4/projects/test-group%2Ftest-repo/repository/files/catalog-info.yaml', + (_, res, ctx) => { + return res(ctx.status(404, 'Not Found')); + }, + ), + rest.head( + 'https://api.gitlab.example/api/v4/projects/john%2Fexample/repository/files/catalog-info.yaml', + (req, res, ctx) => { + if (req.url.searchParams.get('ref') === 'test') { + return res(ctx.status(200)); + } + return res(ctx.status(404, 'Not Found')); + }, + ), + ); + + await provider.connect(entityProviderConnection); + + await provider.refresh(logger); + + expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ + type: 'full', + entities: [ + { + entity: { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + annotations: { + 'backstage.io/managed-by-location': + 'url:https://api.gitlab.example/john/example/-/blob/test/catalog-info.yaml', + 'backstage.io/managed-by-origin-location': + 'url:https://api.gitlab.example/john/example/-/blob/test/catalog-info.yaml', + }, + name: 'generated-232185d858fee049986d202c10316d634e76a3d1', + }, + spec: { + presence: 'optional', + target: + 'https://api.gitlab.example/john/example/-/blob/test/catalog-info.yaml', + type: 'url', + }, + }, + locationKey: 'GitlabDiscoveryEntityProvider:test-id', + }, + ], + }); + }); }); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index ece10ee8c6..2f5baa68f6 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -181,6 +181,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { } if ( + !this.config.branch && this.config.fallbackBranch === '*' && project.default_branch === undefined ) { @@ -188,7 +189,9 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { } const project_branch = - project.default_branch ?? this.config.fallbackBranch; + this.config.branch ?? + project.default_branch ?? + this.config.fallbackBranch; const projectHasFile: boolean = await client.hasFile( project.path_with_namespace ?? '', @@ -211,7 +214,10 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { } private createLocationSpec(project: GitLabProject): LocationSpec { - const project_branch = project.default_branch ?? this.config.fallbackBranch; + const project_branch = + this.config.branch ?? + project.default_branch ?? + this.config.fallbackBranch; return { type: 'url', target: `${project.web_url}/-/blob/${project_branch}/${this.config.catalogFile}`, diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts index c9b35e78c2..87d9e5deb0 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts @@ -53,6 +53,7 @@ describe('config', () => { expect(r).toStrictEqual({ id: 'test', group: 'group', + fallbackBranch: undefined, fallbackBranch: 'master', host: 'host', catalogFile: 'catalog-info.yaml', @@ -74,6 +75,7 @@ describe('config', () => { group: 'group', host: 'host', branch: 'not-master', + fallbackBranch: 'main', entityFilename: 'custom-file.yaml', }, }, @@ -88,6 +90,7 @@ describe('config', () => { id: 'test', group: 'group', fallbackBranch: 'not-master', + fallbackBranch: 'main', host: 'host', catalogFile: 'custom-file.yaml', projectPattern: /[\s\S]*/, @@ -125,6 +128,7 @@ describe('config', () => { expect(r).toStrictEqual({ id: 'test', group: 'group', + fallbackBranch: undefined, fallbackBranch: 'master', host: 'host', catalogFile: 'catalog-info.yaml', diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.ts index e5cf5a6298..c9b44f601f 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.ts @@ -36,15 +36,7 @@ function readGitlabConfig( const group = config.getOptionalString('group') ?? ''; const host = config.getString('host'); const branch = config.getOptionalString('branch'); - - if (branch) { - logger.warn( - 'The configuration key `branch` has been deprecated in favor of the configuration key `fallbackBranch`.', - ); - } - - const fallbackBranch = - config.getOptionalString('fallbackBranch') ?? branch ?? 'master'; + const fallbackBranch = config.getOptionalString('fallbackBranch') ?? 'master'; const catalogFile = config.getOptionalString('entityFilename') ?? 'catalog-info.yaml'; const projectPattern = new RegExp( @@ -65,6 +57,7 @@ function readGitlabConfig( return { id, group, + branch, fallbackBranch, host, catalogFile, From 359f9f796027e153e47fdf893ca8c2cbc24b85fa Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Wed, 22 Feb 2023 16:33:34 +0100 Subject: [PATCH 272/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Andreas Berger --- .changeset/fresh-schools-fly.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fresh-schools-fly.md b/.changeset/fresh-schools-fly.md index 52502a4ad8..bde325b574 100644 --- a/.changeset/fresh-schools-fly.md +++ b/.changeset/fresh-schools-fly.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-gitlab': major +'@backstage/plugin-catalog-backend-module-gitlab': minor --- The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: From 259abbdc884ea993fb138d3dd6d67e5aef2e192c Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Sat, 18 Mar 2023 17:42:11 +0100 Subject: [PATCH 273/511] cleanup after rebase Signed-off-by: Andreas Berger --- .../GitlabDiscoveryEntityProvider.ts | 5 +---- .../GitlabOrgDiscoveryEntityProvider.ts | 5 +---- .../src/providers/config.test.ts | 21 ++++++++---------- .../src/providers/config.ts | 22 +++---------------- 4 files changed, 14 insertions(+), 39 deletions(-) diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index 2f5baa68f6..6001a32a4a 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -61,10 +61,7 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { throw new Error('Either schedule or scheduler must be provided.'); } - const providerConfigs = readGitlabConfigs( - config, - options.logger.child({ target: 'GitlabDiscoveryEntityProvider' }), - ); + const providerConfigs = readGitlabConfigs(config); const integrations = ScmIntegrations.fromConfig(config).gitlab; const providers: GitlabDiscoveryEntityProvider[] = []; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts index 12cdf40e0c..1fe607afbb 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabOrgDiscoveryEntityProvider.ts @@ -72,10 +72,7 @@ export class GitlabOrgDiscoveryEntityProvider implements EntityProvider { throw new Error('Either schedule or scheduler must be provided.'); } - const providerConfigs = readGitlabConfigs( - config, - options.logger.child({ target: 'GitlabOrgDiscoveryEntityProvider' }), - ); + const providerConfigs = readGitlabConfigs(config); const integrations = ScmIntegrations.fromConfig(config).gitlab; const providers: GitlabOrgDiscoveryEntityProvider[] = []; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts index 87d9e5deb0..1035538939 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts @@ -17,9 +17,6 @@ import { ConfigReader } from '@backstage/config'; import { Duration } from 'luxon'; import { readGitlabConfigs } from './config'; -import { getVoidLogger } from '@backstage/backend-common'; - -const logger = getVoidLogger(); describe('config', () => { it('empty gitlab config', () => { @@ -29,7 +26,7 @@ describe('config', () => { }, }); - const result = readGitlabConfigs(config, logger); + const result = readGitlabConfigs(config); expect(result).toHaveLength(0); }); @@ -47,13 +44,13 @@ describe('config', () => { }, }); - const result = readGitlabConfigs(config, logger); + const result = readGitlabConfigs(config); expect(result).toHaveLength(1); result.forEach(r => expect(r).toStrictEqual({ id: 'test', group: 'group', - fallbackBranch: undefined, + branch: undefined, fallbackBranch: 'master', host: 'host', catalogFile: 'catalog-info.yaml', @@ -83,13 +80,13 @@ describe('config', () => { }, }); - const result = readGitlabConfigs(config, logger); + const result = readGitlabConfigs(config); expect(result).toHaveLength(1); result.forEach(r => expect(r).toStrictEqual({ id: 'test', group: 'group', - fallbackBranch: 'not-master', + branch: 'not-master', fallbackBranch: 'main', host: 'host', catalogFile: 'custom-file.yaml', @@ -122,13 +119,13 @@ describe('config', () => { }, }); - const result = readGitlabConfigs(config, logger); + const result = readGitlabConfigs(config); expect(result).toHaveLength(1); result.forEach(r => expect(r).toStrictEqual({ id: 'test', group: 'group', - fallbackBranch: undefined, + branch: undefined, fallbackBranch: 'master', host: 'host', catalogFile: 'catalog-info.yaml', @@ -162,7 +159,7 @@ describe('config', () => { }, }); - expect(() => readGitlabConfigs(config, logger)).toThrow( + expect(() => readGitlabConfigs(config)).toThrow( "Missing required config value at 'catalog.providers.gitlab.test.host'", ); }); @@ -181,7 +178,7 @@ describe('config', () => { }, }); - const result = readGitlabConfigs(config, logger); + const result = readGitlabConfigs(config); expect(result).toHaveLength(1); expect(result[0].group).toEqual(''); }); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.ts index c9b44f601f..cd15c4825c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.ts @@ -17,7 +17,6 @@ import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GitlabProviderConfig } from '../lib'; -import { Logger } from 'winston'; /** * Extracts the gitlab config from a config object @@ -26,13 +25,8 @@ import { Logger } from 'winston'; * * @param id - The provider key * @param config - The config object to extract from - * @param logger - The logger */ -function readGitlabConfig( - id: string, - config: Config, - logger: Logger, -): GitlabProviderConfig { +function readGitlabConfig(id: string, config: Config): GitlabProviderConfig { const group = config.getOptionalString('group') ?? ''; const host = config.getString('host'); const branch = config.getOptionalString('branch'); @@ -75,12 +69,8 @@ function readGitlabConfig( * @public * * @param config - The config object to extract from - * @param logger - The logger */ -export function readGitlabConfigs( - config: Config, - logger: Logger, -): GitlabProviderConfig[] { +export function readGitlabConfigs(config: Config): GitlabProviderConfig[] { const configs: GitlabProviderConfig[] = []; const providerConfigs = config.getOptionalConfig('catalog.providers.gitlab'); @@ -90,13 +80,7 @@ export function readGitlabConfigs( } for (const id of providerConfigs.keys()) { - configs.push( - readGitlabConfig( - id, - providerConfigs.getConfig(id), - logger.child({ target: id }), - ), - ); + configs.push(readGitlabConfig(id, providerConfigs.getConfig(id))); } return configs; From 40a0a194342f2a42fb3923035ad1c33510e041ce Mon Sep 17 00:00:00 2001 From: blam Date: Sun, 19 Mar 2023 13:05:16 +0100 Subject: [PATCH 274/511] chore: don't have a type for `TemplateFilter` Signed-off-by: blam --- plugins/scaffolder/alpha-api-report.md | 8 ++----- plugins/scaffolder/api-report.md | 2 +- plugins/scaffolder/src/alpha.ts | 1 - plugins/scaffolder/src/components/Router.tsx | 2 +- .../ScaffolderPage/ScaffolderPage.tsx | 7 +++--- .../components/TemplateList/TemplateList.tsx | 22 +++++++++++++++---- plugins/scaffolder/src/next/Router/Router.tsx | 4 ++-- .../next/TemplateListPage/TemplateGroups.tsx | 22 ++++++++----------- .../TemplateListPage/TemplateListPage.tsx | 8 ++----- .../src/next/TemplateListPage/index.ts | 2 +- 10 files changed, 39 insertions(+), 39 deletions(-) diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index 58d70e3c71..abb0dc9e03 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -5,7 +5,6 @@ ```ts /// -import { Entity } from '@backstage/catalog-model'; import { FormProps as FormProps_2 } from '@backstage/plugin-scaffolder-react/alpha'; import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; import { PropsWithChildren } from 'react'; @@ -31,7 +30,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; - templateFilter?: TemplateFilter; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; FormProps?: FormProps_2; contextMenu?: { editor?: boolean; @@ -45,13 +44,10 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; -// @alpha (undocumented) -export type TemplateFilter = (entity: Entity) => boolean; - // @alpha (undocumented) export type TemplateGroupFilter = { title?: React_2.ReactNode; - filter: (entity: Entity) => boolean; + filter: (entity: TemplateEntityV1beta3) => boolean; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 3865a2517d..7173bbd3e6 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -332,7 +332,7 @@ export type RouterProps = { title?: React_2.ReactNode; filter: (entity: Entity) => boolean; }>; - templateFilter?: (entity: Entity) => boolean; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; defaultPreviewTemplate?: string; headerOptions?: { pageTitleOverride?: string; diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index e1c2260acb..72eb073fba 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -17,7 +17,6 @@ export { NextScaffolderPage } from './plugin'; export { type TemplateGroupFilter, - type TemplateFilter, type NextRouterProps, type FormProps, } from './next'; diff --git a/plugins/scaffolder/src/components/Router.tsx b/plugins/scaffolder/src/components/Router.tsx index b84fb664bc..05d5cc9f0a 100644 --- a/plugins/scaffolder/src/components/Router.tsx +++ b/plugins/scaffolder/src/components/Router.tsx @@ -58,7 +58,7 @@ export type RouterProps = { title?: React.ReactNode; filter: (entity: Entity) => boolean; }>; - templateFilter?: (entity: Entity) => boolean; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; defaultPreviewTemplate?: string; headerOptions?: { pageTitleOverride?: string; diff --git a/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx b/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx index b56ebd83af..40435573e9 100644 --- a/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx +++ b/plugins/scaffolder/src/components/ScaffolderPage/ScaffolderPage.tsx @@ -22,7 +22,6 @@ import { Page, SupportButton, } from '@backstage/core-components'; -import { Entity } from '@backstage/catalog-model'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { useRouteRef } from '@backstage/core-plugin-api'; import { @@ -47,9 +46,9 @@ export type ScaffolderPageProps = { | undefined; groups?: Array<{ title?: React.ReactNode; - filter: (entity: Entity) => boolean; + filter: (entity: TemplateEntityV1beta3) => boolean; }>; - templateFilter?: (entity: Entity) => boolean; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; contextMenu?: { editor?: boolean; actions?: boolean; @@ -72,7 +71,7 @@ export const ScaffolderPageContents = ({ const registerComponentLink = useRouteRef(registerComponentRouteRef); const otherTemplatesGroup = { title: groups ? 'Other Templates' : 'Templates', - filter: (entity: Entity) => { + filter: (entity: TemplateEntityV1beta3) => { const filtered = (groups ?? []).map(group => group.filter(entity)); return !filtered.some(result => result === true); }, diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx index 190c0cd0ac..cf1ee66810 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx @@ -38,9 +38,9 @@ export type TemplateListProps = { | undefined; group?: { title?: React.ReactNode; - filter: (entity: Entity) => boolean; + filter: (entity: TemplateEntityV1beta3) => boolean; }; - templateFilter?: (entity: Entity) => boolean; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; }; /** @@ -54,8 +54,22 @@ export const TemplateList = ({ const { loading, error, entities } = useEntityList(); const Card = TemplateCardComponent || TemplateCard; const maybeFilteredEntities = ( - group ? entities.filter(e => group.filter(e)) : entities - ).filter(e => (templateFilter ? !templateFilter(e) : true)); + group + ? entities + .filter( + (e): e is TemplateEntityV1beta3 => + e.kind === 'Template' && + e.apiVersion === 'scaffolder.backstage.io/v1beta3', + ) + .filter(group.filter) + : entities + ) + .filter( + (e): e is TemplateEntityV1beta3 => + e.kind === 'Template' && + e.apiVersion === 'scaffolder.backstage.io/v1beta3', + ) + .filter(e => (templateFilter ? !templateFilter(e) : true)); const titleComponent: React.ReactNode = (() => { if (group && group.title) { diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 167801c255..75d87602e4 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -29,7 +29,7 @@ import { } from '@backstage/plugin-scaffolder-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { TemplateGroupFilter, TemplateFilter } from '../TemplateListPage'; +import { TemplateGroupFilter } from '../TemplateListPage'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { @@ -61,7 +61,7 @@ export type NextRouterProps = { }>; }; groups?: TemplateGroupFilter[]; - templateFilter?: TemplateFilter; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; // todo(blam): rename this to formProps FormProps?: FormProps; contextMenu?: { diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index decfeee470..1096553352 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -15,11 +15,7 @@ */ import React, { useCallback } from 'react'; -import { - Entity, - parseEntityRef, - stringifyEntityRef, -} from '@backstage/catalog-model'; +import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { useEntityList } from '@backstage/plugin-catalog-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { Progress, Link, DocsIcon } from '@backstage/core-components'; @@ -34,22 +30,17 @@ import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; -/** - * @alpha - */ -export type TemplateFilter = (entity: Entity) => boolean; - /** * @alpha */ export type TemplateGroupFilter = { title?: React.ReactNode; - filter: (entity: Entity) => boolean; + filter: (entity: TemplateEntityV1beta3) => boolean; }; export interface TemplateGroupsProps { groups: TemplateGroupFilter[]; - templateFilter?: TemplateFilter; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; }>; @@ -96,8 +87,13 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { <> {groups.map(({ title, filter }, index) => { const templates = entities + .filter( + (e): e is TemplateEntityV1beta3 => + e.kind === 'Template' && + e.apiVersion === 'scaffolder.backstage.io/v1beta3', + ) .filter(e => (templateFilter ? !templateFilter(e) : true)) - .filter((e): e is TemplateEntityV1beta3 => filter(e)) + .filter(filter) .map(template => { const { kind, namespace, name } = parseEntityRef( stringifyEntityRef(template), diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 3f81188e06..0af20db6c9 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -35,11 +35,7 @@ import { import { CategoryPicker } from './CategoryPicker'; import { RegisterExistingButton } from './RegisterExistingButton'; import { useRouteRef } from '@backstage/core-plugin-api'; -import { - TemplateGroupFilter, - TemplateGroups, - TemplateFilter, -} from './TemplateGroups'; +import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; import { registerComponentRouteRef } from '../../routes'; import { ContextMenu } from './ContextMenu'; @@ -48,7 +44,7 @@ export type TemplateListPageProps = { template: TemplateEntityV1beta3; }>; groups?: TemplateGroupFilter[]; - templateFilter?: TemplateFilter; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; contextMenu?: { editor?: boolean; actions?: boolean; diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index a974052730..0436cfeeeb 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ export { TemplateListPage } from './TemplateListPage'; -export type { TemplateGroupFilter, TemplateFilter } from './TemplateGroups'; +export type { TemplateGroupFilter } from './TemplateGroups'; From 3c63be7d0e3a3a8dffd596537a747b869f2d8d02 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 19 Mar 2023 17:13:48 +0000 Subject: [PATCH 275/511] chore(deps): update dependency @types/d3-selection to v3.0.5 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3cf7b49696..cca0dd189b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14364,9 +14364,9 @@ __metadata: linkType: hard "@types/d3-selection@npm:*, @types/d3-selection@npm:^3.0.1": - version: 3.0.4 - resolution: "@types/d3-selection@npm:3.0.4" - checksum: b1e486db7f020610c854996a96b2f59a43b89d48bc7ac2ef9479f6f6e6324d3b21d7dfc8031a0b6d049a84b769b14eca65d73fc42613ab0044ef67973a9fe6ca + version: 3.0.5 + resolution: "@types/d3-selection@npm:3.0.5" + checksum: 77ea35c92273cd2d736355ab5a4cf6477086b064a1f608489a6fef4198ee6bc1d5440e5dfd880099265ac96c4f4b4fda659d89fbaaef37ba03708663196ba8ad languageName: node linkType: hard From f4615e2619ed3944b7d82d818b63392a9b291e47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 19 Mar 2023 17:49:21 +0000 Subject: [PATCH 276/511] fix(deps): update dependency @gitbeaker/node to v35.8.1 Signed-off-by: Renovate Bot --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index cca0dd189b..adc0ba595e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9842,7 +9842,7 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.0, @gitbeaker/core@npm:^35.8.1": +"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.1": version: 35.8.1 resolution: "@gitbeaker/core@npm:35.8.1" dependencies: @@ -9857,19 +9857,19 @@ __metadata: linkType: hard "@gitbeaker/node@npm:^35.1.0": - version: 35.8.0 - resolution: "@gitbeaker/node@npm:35.8.0" + version: 35.8.1 + resolution: "@gitbeaker/node@npm:35.8.1" dependencies: - "@gitbeaker/core": ^35.8.0 - "@gitbeaker/requester-utils": ^35.8.0 + "@gitbeaker/core": ^35.8.1 + "@gitbeaker/requester-utils": ^35.8.1 delay: ^5.0.0 got: ^11.8.3 xcase: ^2.0.1 - checksum: af75fa2348ec6fcdd1605f269df10c13bd7d53f9a5c42da7e013db920a1129075072de3a0ada97d800be732575bb838b8a462472faebcfaf9fe243b93d29a464 + checksum: b9439c8dadadc6c1c19c4528543226e18dffdff4bdb00904b18a0621af62f0449e203a500ec3f27f386c7a02adc373585e06a1f6e0f93b6b34a0be1ced857e92 languageName: node linkType: hard -"@gitbeaker/requester-utils@npm:^35.8.0, @gitbeaker/requester-utils@npm:^35.8.1": +"@gitbeaker/requester-utils@npm:^35.8.1": version: 35.8.1 resolution: "@gitbeaker/requester-utils@npm:35.8.1" dependencies: From c611f57d78fad3034f7e33b0f58099d43df9d7f9 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 Mar 2023 10:15:42 +0100 Subject: [PATCH 277/511] cli: tweak posix path fix Signed-off-by: Patrik Oldsberg --- .changeset/mighty-lamps-cross.md | 2 +- packages/cli/src/lib/bundler/config.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.changeset/mighty-lamps-cross.md b/.changeset/mighty-lamps-cross.md index 6819442105..af09263f2e 100644 --- a/.changeset/mighty-lamps-cross.md +++ b/.changeset/mighty-lamps-cross.md @@ -2,4 +2,4 @@ '@backstage/cli': patch --- -Use `posix` for joining paths instead of platform dependent joins. +Fixed backend start command on Windows by removing the use of platform dependent path joins. diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index db98f1486f..6fc7482dce 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -39,7 +39,6 @@ import yn from 'yn'; import { readEntryPoints } from '../monorepo/entryPoints'; import { ExtendedPackage } from '../monorepo'; -const joinPath = posixPath.join; const BUILD_CACHE_ENV_VAR = 'BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE'; export function resolveBaseUrl(config: Config): URL { @@ -237,7 +236,7 @@ export async function createBackendConfig( const { packages } = await getPackages(cliPaths.targetDir); const localPackageEntryPoints = packages.flatMap(p => { const entryPoints = readEntryPoints((p as ExtendedPackage).packageJson); - return entryPoints.map(e => joinPath(p.packageJson.name, e.mount)); + return entryPoints.map(e => posixPath.join(p.packageJson.name, e.mount)); }); const moduleDirs = packages.map(p => resolvePath(p.dir, 'node_modules')); // See frontend config From fc84b1b04e6b77a06635dbf3561aa69e1b674801 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Fri, 17 Mar 2023 12:30:59 +0100 Subject: [PATCH 278/511] removed internal package from changeset Signed-off-by: Morgan Bentell --- .changeset/seven-gifts-fetch.md | 1 - plugins/techdocs-react/src/hooks.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/seven-gifts-fetch.md b/.changeset/seven-gifts-fetch.md index 0646eb3d9e..acb66e2d18 100644 --- a/.changeset/seven-gifts-fetch.md +++ b/.changeset/seven-gifts-fetch.md @@ -6,7 +6,6 @@ '@backstage/plugin-git-release-manager': patch '@backstage/plugin-github-deployments': patch '@backstage/plugin-newrelic-dashboard': patch -'@internal/plugin-todo-list': patch '@backstage/core-components': patch '@backstage/plugin-scaffolder-react': patch '@backstage/plugin-cicd-statistics': patch diff --git a/plugins/techdocs-react/src/hooks.ts b/plugins/techdocs-react/src/hooks.ts index 42d8f0fbc1..4007db58cd 100644 --- a/plugins/techdocs-react/src/hooks.ts +++ b/plugins/techdocs-react/src/hooks.ts @@ -82,7 +82,7 @@ export const useShadowRootSelection = (waitMillis: number = 0) => { [shadowRoot, setSelection, waitMillis], ); - useEffect(() => handleSelectionChange.cancel); + useEffect(() => handleSelectionChange.cancel, [handleSelectionChange.cancel]); useEffect(() => { window.document.addEventListener('selectionchange', handleSelectionChange); From 925ff125ec68e46e05b58989db3e647c05000d64 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Mon, 20 Mar 2023 11:00:53 +0100 Subject: [PATCH 279/511] add comment to gitignore Signed-off-by: Morgan Bentell --- plugins/techdocs-backend/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/techdocs-backend/.gitignore b/plugins/techdocs-backend/.gitignore index ff1cdd948f..e45a1be0e2 100644 --- a/plugins/techdocs-backend/.gitignore +++ b/plugins/techdocs-backend/.gitignore @@ -1,2 +1,4 @@ static + +# Folder generated by plantuml containing jdk font config **/?/ From ceab3c402f39b6a6597ce90cbfaa1a5d3534d46b Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 20 Mar 2023 11:28:59 +0100 Subject: [PATCH 280/511] chore: refactoring some of the simplification Signed-off-by: blam --- .../components/TemplateList/TemplateList.tsx | 20 ++++------------ .../scaffolder/src/lib/isTemplateEntity.ts | 23 +++++++++++++++++++ .../next/TemplateListPage/TemplateGroups.tsx | 7 ++---- 3 files changed, 29 insertions(+), 21 deletions(-) create mode 100644 plugins/scaffolder/src/lib/isTemplateEntity.ts diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx index cf1ee66810..9aa0ec5eef 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx @@ -28,6 +28,7 @@ import { import { useEntityList } from '@backstage/plugin-catalog-react'; import { Typography } from '@material-ui/core'; import { TemplateCard } from '../TemplateCard'; +import { isTemplateEntity } from '../../lib/isTemplateEntity'; /** * @internal @@ -53,23 +54,10 @@ export const TemplateList = ({ }: TemplateListProps) => { const { loading, error, entities } = useEntityList(); const Card = TemplateCardComponent || TemplateCard; + const templateEntities = entities.filter(isTemplateEntity); const maybeFilteredEntities = ( - group - ? entities - .filter( - (e): e is TemplateEntityV1beta3 => - e.kind === 'Template' && - e.apiVersion === 'scaffolder.backstage.io/v1beta3', - ) - .filter(group.filter) - : entities - ) - .filter( - (e): e is TemplateEntityV1beta3 => - e.kind === 'Template' && - e.apiVersion === 'scaffolder.backstage.io/v1beta3', - ) - .filter(e => (templateFilter ? !templateFilter(e) : true)); + group ? templateEntities.filter(group.filter) : templateEntities + ).filter(e => (templateFilter ? !templateFilter(e) : true)); const titleComponent: React.ReactNode = (() => { if (group && group.title) { diff --git a/plugins/scaffolder/src/lib/isTemplateEntity.ts b/plugins/scaffolder/src/lib/isTemplateEntity.ts new file mode 100644 index 0000000000..61ceabaa53 --- /dev/null +++ b/plugins/scaffolder/src/lib/isTemplateEntity.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2023 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 { Entity } from '@backstage/catalog-model'; +import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; + +export const isTemplateEntity = ( + entity: Entity, +): entity is TemplateEntityV1beta3 => + entity.apiVersion === 'scaffolder.backstage.io/v1beta3' && + entity.kind === 'Template'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index 1096553352..79e2648d2f 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -29,6 +29,7 @@ import { import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; +import { isTemplateEntity } from '../../lib/isTemplateEntity'; /** * @alpha @@ -87,11 +88,7 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { <> {groups.map(({ title, filter }, index) => { const templates = entities - .filter( - (e): e is TemplateEntityV1beta3 => - e.kind === 'Template' && - e.apiVersion === 'scaffolder.backstage.io/v1beta3', - ) + .filter(isTemplateEntity) .filter(e => (templateFilter ? !templateFilter(e) : true)) .filter(filter) .map(template => { From 486dfe1dc0a153dec6da7c21f2ea0aefc0632084 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 20 Mar 2023 11:56:28 +0100 Subject: [PATCH 281/511] chore: bump rjsf deps Signed-off-by: blam --- plugins/scaffolder-react/package.json | 8 ++-- plugins/scaffolder/package.json | 4 +- yarn.lock | 54 ++++++++++++++++----------- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index f744bb6423..b7c5cd4410 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -60,11 +60,11 @@ "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", - "@rjsf/core-v5": "npm:@rjsf/core@5.1.0", + "@rjsf/core-v5": "npm:@rjsf/core@5.3.1", "@rjsf/material-ui": "^3.2.1", - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.1.0", - "@rjsf/utils": "5.1.0", - "@rjsf/validator-ajv8": "5.3.0", + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.3.1", + "@rjsf/utils": "5.3.1", + "@rjsf/validator-ajv8": "5.3.1", "@types/json-schema": "^7.0.9", "classnames": "^2.2.6", "humanize-duration": "^3.25.1", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index dac8713fed..ee8af7f756 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -69,8 +69,8 @@ "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", - "@rjsf/utils": "5.1.0", - "@rjsf/validator-ajv8": "5.3.0", + "@rjsf/utils": "5.3.1", + "@rjsf/validator-ajv8": "5.3.1", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", "git-url-parse": "^13.0.0", diff --git a/yarn.lock b/yarn.lock index adc0ba595e..8b1e102b29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7669,11 +7669,11 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 - "@rjsf/core-v5": "npm:@rjsf/core@5.1.0" + "@rjsf/core-v5": "npm:@rjsf/core@5.3.1" "@rjsf/material-ui": ^3.2.1 - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.1.0" - "@rjsf/utils": 5.1.0 - "@rjsf/validator-ajv8": 5.3.0 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.3.1" + "@rjsf/utils": 5.3.1 + "@rjsf/validator-ajv8": 5.3.1 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7734,8 +7734,8 @@ __metadata: "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 "@rjsf/material-ui": ^3.2.1 - "@rjsf/utils": 5.1.0 - "@rjsf/validator-ajv8": 5.3.0 + "@rjsf/utils": 5.3.1 + "@rjsf/validator-ajv8": 5.3.1 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -12919,18 +12919,19 @@ __metadata: languageName: node linkType: hard -"@rjsf/core-v5@npm:@rjsf/core@5.1.0": - version: 5.1.0 - resolution: "@rjsf/core@npm:5.1.0" +"@rjsf/core-v5@npm:@rjsf/core@5.3.1": + version: 5.3.1 + resolution: "@rjsf/core@npm:5.3.1" dependencies: lodash: ^4.17.15 lodash-es: ^4.17.15 + markdown-to-jsx: ^7.1.9 nanoid: ^3.3.4 prop-types: ^15.7.2 peerDependencies: "@rjsf/utils": ^5.0.0 react: ^16.14.0 || >=17 - checksum: ff38046bb25de86b57e404c5d1ccea84b0485e916caf33a3cb25b030a38ed930a9b89a411671a7c29b047da38e0c682e20b43b13e61d77df770299385ba3c67a + checksum: e7f5c05a594db0549c5289f1dc570977fa37c9ca0f1fed47ec17fa49dd4b6b85ffc3844c9c11d36455a66ff17f898469b6a2dca159223de348f84bdadd28ae32 languageName: node linkType: hard @@ -12953,16 +12954,16 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.1.0": - version: 5.1.0 - resolution: "@rjsf/material-ui@npm:5.1.0" +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.3.1": + version: 5.3.1 + resolution: "@rjsf/material-ui@npm:5.3.1" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.0.0 "@rjsf/utils": ^5.0.0 react: ^16.14.0 || >=17 - checksum: f8e2c486f33a60703cae5bb42ae82bc431b3d743c239868ca71907e7b4127a39d1688200820c0c8acdf3ecd3f5eaddef4ba47264695feead28e9b439d9be7ce8 + checksum: 169d78e3983742b38008de95ab320cdc1f52995dabf2e75d44052c09fb0b734ecb45c58fbdf51dea18bf8bd45130aec01dc0b4b75a2635e82ef5c489d1d35af1 languageName: node linkType: hard @@ -12978,9 +12979,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/utils@npm:5.1.0": - version: 5.1.0 - resolution: "@rjsf/utils@npm:5.1.0" +"@rjsf/utils@npm:5.3.1": + version: 5.3.1 + resolution: "@rjsf/utils@npm:5.3.1" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -12989,13 +12990,13 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 76d7caf144f98b1547067bfdc2b1baecf452c63bd9d6f2cae6c162a99154bb4d2f5033f6abc0e26ab767dca9ea743f1f5a9d796696e90dd5ed1fdca5ee3c5280 + checksum: 400a17bf99a043557adbd4e0dc3651b9d1b47ab61a40acb8756c5b986d044a329bd26bf45263a667eb963acf51084d612c043c9409aeaac4e4c6ab66af0bb700 languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.3.0": - version: 5.3.0 - resolution: "@rjsf/validator-ajv8@npm:5.3.0" +"@rjsf/validator-ajv8@npm:5.3.1": + version: 5.3.1 + resolution: "@rjsf/validator-ajv8@npm:5.3.1" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 @@ -13003,7 +13004,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0 - checksum: 210c2d0066bfa40e523d453eb26dc4fad1f1d34a1efc632061c1c00e90b69697ee88a4ce5e130890dac79253ccf7e31e39c005f504acb3ee7e33962547b1db41 + checksum: b99e0d2df6b6431438ea81c2e31636aa5a1939d054153236851e5d8e8b06f8a1958c8c16887dd2babfd1608e18aa1ce3f1c0a778b3b3198028b92f0553e0383e languageName: node linkType: hard @@ -28718,6 +28719,15 @@ __metadata: languageName: node linkType: hard +"markdown-to-jsx@npm:^7.1.9": + version: 7.2.0 + resolution: "markdown-to-jsx@npm:7.2.0" + peerDependencies: + react: ">= 0.14.0" + checksum: ea417e684d7eec9f1beebc9423aba377116ef77c3cd83a2d622df1b9030ffef99aa9b3f431192b94f3237943a33560e6dda9be8a4c1d25187518d09986dad22f + languageName: node + linkType: hard + "marked@npm:^4.0.10, marked@npm:^4.0.14": version: 4.2.12 resolution: "marked@npm:4.2.12" From c11f33b8429e21eb5ce876138f85874994320377 Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Mon, 20 Mar 2023 11:57:00 +0100 Subject: [PATCH 282/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Andreas Berger --- .changeset/fresh-schools-fly.md | 2 +- docs/integrations/gitlab/discovery.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/fresh-schools-fly.md b/.changeset/fresh-schools-fly.md index bde325b574..e364e08d43 100644 --- a/.changeset/fresh-schools-fly.md +++ b/.changeset/fresh-schools-fly.md @@ -2,7 +2,7 @@ '@backstage/plugin-catalog-backend-module-gitlab': minor --- -The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: +**BREAKING**: The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: - The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered. - The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index 48383c4275..45991b2cf5 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -21,7 +21,7 @@ catalog: gitlab: yourProviderId: host: gitlab-host # Identifies one of the hosts set up in the integrations - branch: main # Optional. Used to discover on a concrete branch + branch: main # Optional. Used to discover on a specific branch fallbackBranch: main # Optional. Fallback to be used if there is no default branch configured at the Gitlab repository. It is only used, if `branch` is undefined. Uses `master` as default group: example-group # Optional. Group and subgroup (if needed) to look for repositories. If not present the whole instance will be scanned entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` From 7a6b16cc50675c0fd22ba306106d817dfb8f0e33 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 20 Mar 2023 11:57:16 +0100 Subject: [PATCH 283/511] chore: changeset Signed-off-by: blam --- .changeset/lazy-apples-destroy.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/lazy-apples-destroy.md diff --git a/.changeset/lazy-apples-destroy.md b/.changeset/lazy-apples-destroy.md new file mode 100644 index 0000000000..43fcfbae85 --- /dev/null +++ b/.changeset/lazy-apples-destroy.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +`scaffolder/next`: Bump `@rjsf/*` deps to 5.3.1 From 370d6605c75e542a66db6db4763a264994947923 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Mon, 20 Mar 2023 12:11:04 +0100 Subject: [PATCH 284/511] escape questionmark folder name in gitignore Signed-off-by: Morgan Bentell --- plugins/techdocs-backend/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/techdocs-backend/.gitignore b/plugins/techdocs-backend/.gitignore index e45a1be0e2..b1befabea2 100644 --- a/plugins/techdocs-backend/.gitignore +++ b/plugins/techdocs-backend/.gitignore @@ -1,4 +1,4 @@ static # Folder generated by plantuml containing jdk font config -**/?/ +**/\?/ From 20576cf57f65fba39e58afb00a7a55c368fa5bb3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:26:00 +0000 Subject: [PATCH 285/511] chore(deps): update dependency @types/express-session to v1.17.7 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index adc0ba595e..f018107841 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14533,11 +14533,11 @@ __metadata: linkType: hard "@types/express-session@npm:^1.17.2": - version: 1.17.6 - resolution: "@types/express-session@npm:1.17.6" + version: 1.17.7 + resolution: "@types/express-session@npm:1.17.7" dependencies: "@types/express": "*" - checksum: f5f2201d6b9568d8b9319735a4f6806b5ca144cee450274965aec54bc0a0331ba8bfffc1ad5addadf2e625769e13813a48cb5aea5b166fa05f474a12302dbb38 + checksum: 4764eafaf4e26842e891e83fa9fee30b92cc3724d91987aac3a658322f9a69fb544dae24fc3aba6e15fe9575ed862760ebecd7ff97a947afb695284967434a65 languageName: node linkType: hard From db2d5dd57297f20190edbe5e371151cab1f22cbe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:26:37 +0000 Subject: [PATCH 286/511] chore(deps): update dependency prettier to v2.8.5 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 20a704960f..0b6745e677 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8558,11 +8558,11 @@ __metadata: linkType: hard "prettier@npm:^2.6.2": - version: 2.8.4 - resolution: "prettier@npm:2.8.4" + version: 2.8.5 + resolution: "prettier@npm:2.8.5" bin: prettier: bin-prettier.js - checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e + checksum: b7f8d30e14061e0478bc5a59d4d889688d804c173a0daa91b1b85dc08eef5eb6956d1b59f4037770776fda5b967f6c9ca3b7a8a43c50bedb4c7b182029f865aa languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index adc0ba595e..5a755b466f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32492,11 +32492,11 @@ __metadata: linkType: hard "prettier@npm:^2.2.1, prettier@npm:^2.7.1": - version: 2.8.4 - resolution: "prettier@npm:2.8.4" + version: 2.8.5 + resolution: "prettier@npm:2.8.5" bin: prettier: bin-prettier.js - checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e + checksum: b7f8d30e14061e0478bc5a59d4d889688d804c173a0daa91b1b85dc08eef5eb6956d1b59f4037770776fda5b967f6c9ca3b7a8a43c50bedb4c7b182029f865aa languageName: node linkType: hard From dd760b8abd529996f6d188c4f501a1671c417bca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 12:04:17 +0000 Subject: [PATCH 287/511] fix(deps): update dependency @codemirror/legacy-modes to v6.3.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f018107841..c85c4ade63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9150,11 +9150,11 @@ __metadata: linkType: hard "@codemirror/legacy-modes@npm:^6.1.0": - version: 6.3.1 - resolution: "@codemirror/legacy-modes@npm:6.3.1" + version: 6.3.2 + resolution: "@codemirror/legacy-modes@npm:6.3.2" dependencies: "@codemirror/language": ^6.0.0 - checksum: 9065e521bf14e33856e9d3ea114d7b352adf341a8b8d4fb94b4c866189336a32b5ed42ffc20f5d2fa3c839f1bdf29a868bbf9b74c105ed83fa9fd6080e0429e9 + checksum: fa5f5477fb9e19267251e2ecd3de8c1a4c2512813555bb60111dce3951f2c3f6080a2985a573b7542534ba1d2c34115f7e39ee23fdf8f6f81db6f8ce447c1efc languageName: node linkType: hard From 6f8035a265a73a38424ef04c5a76e17bf7ad17a5 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Mon, 20 Mar 2023 13:13:37 +0100 Subject: [PATCH 288/511] make unmount effect more explicit Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/hooks.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/techdocs-react/src/hooks.ts b/plugins/techdocs-react/src/hooks.ts index 4007db58cd..d084a91cf5 100644 --- a/plugins/techdocs-react/src/hooks.ts +++ b/plugins/techdocs-react/src/hooks.ts @@ -82,7 +82,10 @@ export const useShadowRootSelection = (waitMillis: number = 0) => { [shadowRoot, setSelection, waitMillis], ); - useEffect(() => handleSelectionChange.cancel, [handleSelectionChange.cancel]); + useEffect(() => { + // cancel debounce on unmount + return () => handleSelectionChange.cancel(); + }, [handleSelectionChange]); useEffect(() => { window.document.addEventListener('selectionchange', handleSelectionChange); From 49fe8c20005c8a09780a044f917bf388b096ff33 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Tue, 28 Feb 2023 14:34:34 +0100 Subject: [PATCH 289/511] define interfaces for extension points and services Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- .../search-backend-node/src/IndexBuilder.ts | 7 ++- plugins/search-backend-node/src/index.ts | 2 +- plugins/search-backend-node/src/types.ts | 26 ++++++++ plugins/search-backend/src/plugin.ts | 59 +++++++++++++++++++ 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 plugins/search-backend/src/plugin.ts diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 907519f289..9397c098aa 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { createServiceRef } from '@backstage/backend-plugin-api'; import { DocumentDecoratorFactory, DocumentTypeInfo, @@ -23,16 +24,20 @@ import { Transform, pipeline } from 'stream'; import { Logger } from 'winston'; import { Scheduler } from './Scheduler'; import { + IndexBuilderService, IndexBuilderOptions, RegisterCollatorParameters, RegisterDecoratorParameters, } from './types'; +export const searchIndexBuilderRef = createServiceRef({ + id: 'search.index-node', +}); /** * Used for adding collators, decorators and compile them into tasks which are added to a scheduler returned to the caller. * @public */ -export class IndexBuilder { +export class IndexBuilder implements IndexBuilderService { private collators: Record; private decorators: Record; private documentTypes: Record; diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index a188509c1c..1bcd31de93 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -20,7 +20,7 @@ * @packageDocumentation */ -export { IndexBuilder } from './IndexBuilder'; +export { IndexBuilder, searchIndexBuilderRef } from './IndexBuilder'; export { Scheduler } from './Scheduler'; export * from './collators'; export { LunrSearchEngine } from './engines'; diff --git a/plugins/search-backend-node/src/types.ts b/plugins/search-backend-node/src/types.ts index dfcf4d12ce..94b21cceec 100644 --- a/plugins/search-backend-node/src/types.ts +++ b/plugins/search-backend-node/src/types.ts @@ -18,9 +18,11 @@ import { TaskRunner } from '@backstage/backend-tasks'; import { DocumentCollatorFactory, DocumentDecoratorFactory, + DocumentTypeInfo, SearchEngine, } from '@backstage/plugin-search-common'; import { Logger } from 'winston'; +import { Scheduler } from './Scheduler'; /** * Options required to instantiate the index builder. @@ -57,3 +59,27 @@ export interface RegisterDecoratorParameters { */ factory: DocumentDecoratorFactory; } + +export type IndexBuilderServiceBuildOptions = { + searchEngine: SearchEngine; + collators: RegisterCollatorParameters[]; + decorators: RegisterDecoratorParameters[]; +}; +export interface IndexBuilderService { + build(options: IndexBuilderServiceBuildOptions): Promise<{ + scheduler: Scheduler; + }>; + getDocumentTypes(): Record; +} + +export interface SearchIndexRegistryExtensionPoint { + addCollator(options: RegisterCollatorParameters): void; + addDecorator(options: RegisterDecoratorParameters): void; + getCollators(): RegisterCollatorParameters[]; + getDecorators(): RegisterDecoratorParameters[]; +} + +export interface SearchEngineRegistryExtensionPoint { + setSearchEngine(searchEngine: SearchEngine): void; + getSearchEngine(): SearchEngine; +} diff --git a/plugins/search-backend/src/plugin.ts b/plugins/search-backend/src/plugin.ts new file mode 100644 index 0000000000..5d7c7935a8 --- /dev/null +++ b/plugins/search-backend/src/plugin.ts @@ -0,0 +1,59 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + searchIndexBuilderRef, + searchEngineExtensionPoint, + searchIndexExtensionPoint, +} from '@backstage/plugin-search-backend-node'; + +import { createRouter } from './service/router'; + +export const searchPlugin = createBackendPlugin({ + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + logger: coreServices.logger, + config: coreServices.config, + permissions: coreServices.permissions, + http: coreServices.httpRouter, + searchIndexBuilder: searchIndexBuilderRef, + searchEngineRegistry: searchEngineExtensionPoint, + searchIndexRegistry: searchIndexExtensionPoint, + }, + async init({ + config, + logger, + permissions, + http, + searchEngineRegistry, + searchIndexRegistry, + searchIndexBuilder, + }) { + const searchEngine = searchEngineRegistry.getSearchEngine(); + const collators = searchIndexRegistry.getCollators(); + const decorators = searchIndexRegistry.getDecorators(); + + const { scheduler } = searchIndexBuilder.build({ + searchEngine, + collators, + decorators, + }); + scheduler.start(); + + const router = await createRouter({ + config, + permissions, + logger: loggerToWinstonLogger(logger), + engine: searchEngine, + types: searchIndexBuilder.getDocumentTypes(), + }); + // We register the router with the http service. + http.use(router); + }, + }); + }, +}); From b49c312875a08b24f8633815cffee99b82fcea7d Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 1 Mar 2023 21:14:18 +0100 Subject: [PATCH 290/511] feat(search): create search services and extension points Signed-off-by: Camila Belo --- plugins/search-backend-node/package.json | 1 + .../search-backend-node/src/IndexBuilder.ts | 7 +- plugins/search-backend-node/src/extensions.ts | 31 +++++++ plugins/search-backend-node/src/index.ts | 8 +- plugins/search-backend-node/src/services.ts | 87 +++++++++++++++++++ plugins/search-backend-node/src/types.ts | 4 +- 6 files changed, 129 insertions(+), 9 deletions(-) create mode 100644 plugins/search-backend-node/src/extensions.ts create mode 100644 plugins/search-backend-node/src/services.ts diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 2abc0a8ef0..d77551ef29 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 9397c098aa..907519f289 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { createServiceRef } from '@backstage/backend-plugin-api'; import { DocumentDecoratorFactory, DocumentTypeInfo, @@ -24,20 +23,16 @@ import { Transform, pipeline } from 'stream'; import { Logger } from 'winston'; import { Scheduler } from './Scheduler'; import { - IndexBuilderService, IndexBuilderOptions, RegisterCollatorParameters, RegisterDecoratorParameters, } from './types'; -export const searchIndexBuilderRef = createServiceRef({ - id: 'search.index-node', -}); /** * Used for adding collators, decorators and compile them into tasks which are added to a scheduler returned to the caller. * @public */ -export class IndexBuilder implements IndexBuilderService { +export class IndexBuilder { private collators: Record; private decorators: Record; private documentTypes: Record; diff --git a/plugins/search-backend-node/src/extensions.ts b/plugins/search-backend-node/src/extensions.ts new file mode 100644 index 0000000000..23392b70a5 --- /dev/null +++ b/plugins/search-backend-node/src/extensions.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2023 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 { createExtensionPoint } from '@backstage/backend-plugin-api'; +import { + SearchEngineRegistryExtensionPoint, + SearchIndexRegistryExtensionPoint, +} from './types'; + +export const searchEngineRegistryExtensionPoint = + createExtensionPoint({ + id: 'search.engine.registry', + }); + +export const searchIndexRegistryExtensionPoint = + createExtensionPoint({ + id: 'search.index.registry', + }); diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index 1bcd31de93..741410f7f8 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -20,7 +20,7 @@ * @packageDocumentation */ -export { IndexBuilder, searchIndexBuilderRef } from './IndexBuilder'; +export { IndexBuilder } from './IndexBuilder'; export { Scheduler } from './Scheduler'; export * from './collators'; export { LunrSearchEngine } from './engines'; @@ -33,9 +33,15 @@ export type { IndexBuilderOptions, RegisterCollatorParameters, RegisterDecoratorParameters, + SearchIndexRegistryExtensionPoint, + SearchEngineRegistryExtensionPoint, } from './types'; export * from './errors'; export * from './indexing'; export * from './test-utils'; export type { ScheduleTaskParameters } from './Scheduler'; + +// TODO: export as alfa subpath +export * from './services'; +export * from './extensions'; diff --git a/plugins/search-backend-node/src/services.ts b/plugins/search-backend-node/src/services.ts new file mode 100644 index 0000000000..7a39184cf8 --- /dev/null +++ b/plugins/search-backend-node/src/services.ts @@ -0,0 +1,87 @@ +/* + * Copyright 2023 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 { Logger } from 'winston'; +import { + createServiceRef, + createServiceFactory, + coreServices, +} from '@backstage/backend-plugin-api'; +import { DocumentTypeInfo } from '@backstage/plugin-search-common'; +import { IndexBuilder } from './IndexBuilder'; +import { Scheduler } from './Scheduler'; +import { + IndexBuilderServiceBuildOptions, + SearchIndexBuilderService, +} from './types'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; + +type DefaultSearchIndexBuilderServiceOptions = { + logger: Logger; +}; + +class DefaultSearchIndexBuilderService implements SearchIndexBuilderService { + private logger: Logger; + private indexBuilder: IndexBuilder | null = null; + + private constructor(options: DefaultSearchIndexBuilderServiceOptions) { + this.logger = options.logger; + } + + static fromConfig(options: DefaultSearchIndexBuilderServiceOptions) { + return new DefaultSearchIndexBuilderService(options); + } + + build( + options: IndexBuilderServiceBuildOptions, + ): Promise<{ scheduler: Scheduler }> { + this.indexBuilder = new IndexBuilder({ + logger: this.logger, + searchEngine: options.searchEngine, + }); + + options.collators.forEach(collator => + this.indexBuilder?.addCollator(collator), + ); + + options.decorators.forEach(decorator => + this.indexBuilder?.addDecorator(decorator), + ); + + return this.indexBuilder?.build(); + } + + getDocumentTypes(): Record { + return this.indexBuilder?.getDocumentTypes() ?? {}; + } +} + +export const searchIndexBuilderService = + createServiceRef({ + id: 'search.index.builder', + defaultFactory: async service => + createServiceFactory({ + service, + deps: { + logger: coreServices.logger, + }, + factory({ logger }) { + return DefaultSearchIndexBuilderService.fromConfig({ + logger: loggerToWinstonLogger(logger), + }); + }, + }), + }); diff --git a/plugins/search-backend-node/src/types.ts b/plugins/search-backend-node/src/types.ts index 94b21cceec..4bf726bd0a 100644 --- a/plugins/search-backend-node/src/types.ts +++ b/plugins/search-backend-node/src/types.ts @@ -65,7 +65,7 @@ export type IndexBuilderServiceBuildOptions = { collators: RegisterCollatorParameters[]; decorators: RegisterDecoratorParameters[]; }; -export interface IndexBuilderService { +export interface SearchIndexBuilderService { build(options: IndexBuilderServiceBuildOptions): Promise<{ scheduler: Scheduler; }>; @@ -81,5 +81,5 @@ export interface SearchIndexRegistryExtensionPoint { export interface SearchEngineRegistryExtensionPoint { setSearchEngine(searchEngine: SearchEngine): void; - getSearchEngine(): SearchEngine; + getSearchEngine(): SearchEngine | null; } From 4f759aeef4ceb42c504ff0dabd1d1054654190d8 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 1 Mar 2023 21:15:20 +0100 Subject: [PATCH 291/511] feat(search): create search plugin implementation Signed-off-by: Camila Belo --- plugins/search-backend/package.json | 1 + plugins/search-backend/src/index.ts | 3 + plugins/search-backend/src/plugin.ts | 100 ++++++++++++++++++++++----- 3 files changed, 87 insertions(+), 17 deletions(-) diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 02d4d53a92..bbd5d78f79 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", diff --git a/plugins/search-backend/src/index.ts b/plugins/search-backend/src/index.ts index 851efd1875..0775a64378 100644 --- a/plugins/search-backend/src/index.ts +++ b/plugins/search-backend/src/index.ts @@ -21,3 +21,6 @@ */ export * from './service/router'; + +// TODO: export as alfa subpath +export { searchPlugin } from './plugin'; diff --git a/plugins/search-backend/src/plugin.ts b/plugins/search-backend/src/plugin.ts index 5d7c7935a8..5e17f03740 100644 --- a/plugins/search-backend/src/plugin.ts +++ b/plugins/search-backend/src/plugin.ts @@ -1,43 +1,109 @@ +/* + * Copyright 2023 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 { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; import { loggerToWinstonLogger } from '@backstage/backend-common'; import { - searchIndexBuilderRef, - searchEngineExtensionPoint, - searchIndexExtensionPoint, + searchIndexBuilderService, + searchIndexRegistryExtensionPoint, + SearchIndexRegistryExtensionPoint, + searchEngineRegistryExtensionPoint, + RegisterCollatorParameters, + RegisterDecoratorParameters, + SearchEngineRegistryExtensionPoint, + LunrSearchEngine, } from '@backstage/plugin-search-backend-node'; import { createRouter } from './service/router'; +import { SearchEngine } from '@backstage/plugin-search-common'; + +class SearchIndexRegistry implements SearchIndexRegistryExtensionPoint { + private collators: RegisterCollatorParameters[] = []; + private decorators: RegisterDecoratorParameters[] = []; + + public addCollator(options: RegisterCollatorParameters): void { + this.collators.push(options); + } + + public addDecorator(options: RegisterDecoratorParameters): void { + this.decorators.push(options); + } + + public getCollators(): RegisterCollatorParameters[] { + return this.collators; + } + + public getDecorators(): RegisterDecoratorParameters[] { + return this.decorators; + } +} + +class SearchEngineRegistry implements SearchEngineRegistryExtensionPoint { + private searchEngine: SearchEngine | null = null; + + public setSearchEngine(searchEngine: SearchEngine): void { + if (this.searchEngine) { + throw new Error('Multiple Search engines is not supported at this time'); + } + this.searchEngine = searchEngine; + } + + public getSearchEngine(): SearchEngine | null { + return this.searchEngine; + } +} export const searchPlugin = createBackendPlugin({ pluginId: 'search', register(env) { + const searchIndexRegistry = new SearchIndexRegistry(); + env.registerExtensionPoint( + searchIndexRegistryExtensionPoint, + searchIndexRegistry, + ); + + const searchEngineRegistry = new SearchEngineRegistry(); + env.registerExtensionPoint( + searchEngineRegistryExtensionPoint, + searchEngineRegistry, + ); + env.registerInit({ deps: { logger: coreServices.logger, config: coreServices.config, permissions: coreServices.permissions, http: coreServices.httpRouter, - searchIndexBuilder: searchIndexBuilderRef, - searchEngineRegistry: searchEngineExtensionPoint, - searchIndexRegistry: searchIndexExtensionPoint, + searchIndexBuilder: searchIndexBuilderService, }, - async init({ - config, - logger, - permissions, - http, - searchEngineRegistry, - searchIndexRegistry, - searchIndexBuilder, - }) { - const searchEngine = searchEngineRegistry.getSearchEngine(); + async init({ config, logger, permissions, http, searchIndexBuilder }) { + let searchEngine = searchEngineRegistry.getSearchEngine(); + if (!searchEngine) { + searchEngine = new LunrSearchEngine({ + logger: loggerToWinstonLogger(logger), + }); + } + const collators = searchIndexRegistry.getCollators(); const decorators = searchIndexRegistry.getDecorators(); - const { scheduler } = searchIndexBuilder.build({ + const { scheduler } = await searchIndexBuilder.build({ searchEngine, collators, decorators, From 406647ea6b8f73db3ae5db58b70acfff6a76322e Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 1 Mar 2023 21:15:54 +0100 Subject: [PATCH 292/511] feat(search): update yarn lock Signed-off-by: Camila Belo --- yarn.lock | 2 ++ 1 file changed, 2 insertions(+) diff --git a/yarn.lock b/yarn.lock index adc0ba595e..6615236acf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7812,6 +7812,7 @@ __metadata: resolution: "@backstage/plugin-search-backend-node@workspace:plugins/search-backend-node" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -7833,6 +7834,7 @@ __metadata: resolution: "@backstage/plugin-search-backend@workspace:plugins/search-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" From 97e5d514d17350eb31f5cc9c7e282766da4a01e0 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 1 Mar 2023 21:47:19 +0100 Subject: [PATCH 293/511] create backend modules for search engines Signed-off-by: Emma Indal --- packages/backend-next/src/index.ts | 10 ++++++ .../src/engines/ElasticSearchSearchEngine.ts | 32 ++++++++++++++++++- .../src/engines/index.ts | 1 + .../src/index.ts | 1 + .../src/PgSearchEngine/PgSearchEngine.ts | 26 +++++++++++++++ .../src/PgSearchEngine/index.ts | 2 +- .../src/engines/LunrSearchEngine.ts | 24 ++++++++++++++ .../search-backend-node/src/engines/index.ts | 2 +- plugins/search-backend-node/src/index.ts | 2 +- plugins/search-backend/src/index.ts | 4 +-- 10 files changed, 97 insertions(+), 7 deletions(-) diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 8f8984b192..ff7e5aa3db 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -20,6 +20,10 @@ import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; +import { searchPlugin } from '@backstage/plugin-search-backend'; +import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch'; +import { pgSearchEngineModule } from '@backstage/plugin-search-backend-module-pg'; +import { lunrSearchEngineModule } from '@backstage/plugin-search-backend-node/'; const backend = createBackend(); @@ -28,4 +32,10 @@ backend.add(catalogModuleTemplateKind()); backend.add(appPlugin({ appPackageName: 'example-app' })); backend.add(todoPlugin()); backend.add(techdocsPlugin()); + +backend.add(searchPlugin()); +backend.add(elasticSearchEngineModule()); +backend.add(pgSearchEngineModule()); +backend.add(lunrSearchEngineModule()); + backend.start(); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index 25df3101de..bbeceabaa6 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -30,9 +30,17 @@ import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; import { ElasticSearchCustomIndexTemplate } from './types'; import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; import { Logger } from 'winston'; -import { MissingIndexError } from '@backstage/plugin-search-backend-node'; +import { + MissingIndexError, + searchEngineRegistryExtensionPoint, +} from '@backstage/plugin-search-backend-node'; import esb from 'elastic-builder'; import { v4 as uuid } from 'uuid'; +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; export type { ElasticSearchClientOptions }; @@ -521,3 +529,25 @@ export async function createElasticSearchClientOptions( : {}), }; } + +export const elasticSearchEngineModule = createBackendModule({ + moduleId: 'elasticSearchEngineModule', + pluginId: 'search-backend', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + logger: coreServices.logger, + config: coreServices.config, + }, + async init({ searchEngineRegistry, logger, config }) { + searchEngineRegistry.setSearchEngine( + await ElasticSearchSearchEngine.fromConfig({ + logger: loggerToWinstonLogger(logger), + config: config, + }), + ); + }, + }); + }, +}); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/index.ts b/plugins/search-backend-module-elasticsearch/src/engines/index.ts index cb24bdc56a..01f77034a0 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/index.ts @@ -17,6 +17,7 @@ export { decodePageCursor as decodeElasticSearchPageCursor, ElasticSearchSearchEngine, + elasticSearchEngineModule, } from './ElasticSearchSearchEngine'; export { isOpenSearchCompatible } from './ElasticSearchClientOptions'; export type { diff --git a/plugins/search-backend-module-elasticsearch/src/index.ts b/plugins/search-backend-module-elasticsearch/src/index.ts index e0b05014cc..acff595246 100644 --- a/plugins/search-backend-module-elasticsearch/src/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/index.ts @@ -23,6 +23,7 @@ export { decodeElasticSearchPageCursor, ElasticSearchSearchEngine, + elasticSearchEngineModule, isOpenSearchCompatible, } from './engines'; export type { diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index d2cf80e0ca..7f1bb89754 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -30,6 +30,11 @@ import { import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; import { Config } from '@backstage/config'; +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; /** * Search query that the Postgres search engine understands. @@ -244,3 +249,24 @@ export function decodePageCursor(pageCursor?: string): { page: number } { export function encodePageCursor({ page }: { page: number }): string { return Buffer.from(`${page}`, 'utf-8').toString('base64'); } + +export const pgSearchEngineModule = createBackendModule({ + moduleId: 'pgSearchEngineModule', + pluginId: 'search-backend', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + database: coreServices.database, + config: coreServices.config, + }, + async init({ searchEngineRegistry, database, config }) { + searchEngineRegistry.setSearchEngine( + await PgSearchEngine.fromConfig(config, { + database: database, + }), + ); + }, + }); + }, +}); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts index e62e709f26..7a90d9e3f7 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export { PgSearchEngine } from './PgSearchEngine'; +export { PgSearchEngine, pgSearchEngineModule } from './PgSearchEngine'; export type { ConcretePgSearchQuery, PgSearchQueryTranslatorOptions, diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index b69b5ea863..0db9051e84 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -26,6 +26,12 @@ import lunr from 'lunr'; import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer'; +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchEngineRegistryExtensionPoint } from '../extensions'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; /** * Type of translated query for the Lunr Search Engine. @@ -334,3 +340,21 @@ export function parseHighlightFields({ }), ); } + +export const lunrSearchEngineModule = createBackendModule({ + moduleId: 'lunrSearchEngineModule', + pluginId: 'search-backend', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + logger: coreServices.logger, + }, + async init({ searchEngineRegistry, logger }) { + searchEngineRegistry.setSearchEngine( + new LunrSearchEngine({ logger: loggerToWinstonLogger(logger) }), + ); + }, + }); + }, +}); diff --git a/plugins/search-backend-node/src/engines/index.ts b/plugins/search-backend-node/src/engines/index.ts index 0d710eadc2..59aa4a24b0 100644 --- a/plugins/search-backend-node/src/engines/index.ts +++ b/plugins/search-backend-node/src/engines/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export { LunrSearchEngine } from './LunrSearchEngine'; +export { LunrSearchEngine, lunrSearchEngineModule } from './LunrSearchEngine'; export type { ConcreteLunrQuery, LunrQueryTranslator, diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index 741410f7f8..7395036672 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -23,7 +23,7 @@ export { IndexBuilder } from './IndexBuilder'; export { Scheduler } from './Scheduler'; export * from './collators'; -export { LunrSearchEngine } from './engines'; +export { LunrSearchEngine, lunrSearchEngineModule } from './engines'; export type { ConcreteLunrQuery, LunrQueryTranslator, diff --git a/plugins/search-backend/src/index.ts b/plugins/search-backend/src/index.ts index 0775a64378..335841d383 100644 --- a/plugins/search-backend/src/index.ts +++ b/plugins/search-backend/src/index.ts @@ -21,6 +21,4 @@ */ export * from './service/router'; - -// TODO: export as alfa subpath -export { searchPlugin } from './plugin'; +export * from './plugin'; From cbf03b44646dbb03362ffc3d4222b810c03d72da Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 1 Mar 2023 22:13:22 +0100 Subject: [PATCH 294/511] add possibilities to pass options to elasticSearchEngineModule Signed-off-by: Emma Indal --- packages/backend-next/src/index.ts | 16 ++++-- .../src/engines/ElasticSearchSearchEngine.ts | 53 ++++++++++++------- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index ff7e5aa3db..071a446cae 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -22,8 +22,8 @@ import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; import { searchPlugin } from '@backstage/plugin-search-backend'; import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch'; -import { pgSearchEngineModule } from '@backstage/plugin-search-backend-module-pg'; -import { lunrSearchEngineModule } from '@backstage/plugin-search-backend-node/'; +// import { pgSearchEngineModule } from '@backstage/plugin-search-backend-module-pg'; +// import { lunrSearchEngineModule } from '@backstage/plugin-search-backend-node/'; const backend = createBackend(); @@ -34,8 +34,14 @@ backend.add(todoPlugin()); backend.add(techdocsPlugin()); backend.add(searchPlugin()); -backend.add(elasticSearchEngineModule()); -backend.add(pgSearchEngineModule()); -backend.add(lunrSearchEngineModule()); +// just as example of search engine module, remove before shipping and use default +backend.add( + elasticSearchEngineModule({ + indexTemplate: { + name: 'my-custom-template', + body: { index_patterns: ['*index*'], template: {} }, + }, + }), +); backend.start(); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index bbeceabaa6..288365a438 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -530,24 +530,39 @@ export async function createElasticSearchClientOptions( }; } -export const elasticSearchEngineModule = createBackendModule({ - moduleId: 'elasticSearchEngineModule', - pluginId: 'search-backend', - register(env) { - env.registerInit({ - deps: { - searchEngineRegistry: searchEngineRegistryExtensionPoint, - logger: coreServices.logger, - config: coreServices.config, - }, - async init({ searchEngineRegistry, logger, config }) { - searchEngineRegistry.setSearchEngine( - await ElasticSearchSearchEngine.fromConfig({ +export type ElasticSearchEngineModuleOptions = { + translator?: ElasticSearchQueryTranslator; + indexTemplate?: ElasticSearchCustomIndexTemplate; +}; + +export const elasticSearchEngineModule = createBackendModule( + (options?: ElasticSearchEngineModuleOptions) => ({ + moduleId: 'elasticSearchEngineModule', + pluginId: 'search-backend', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + logger: coreServices.logger, + config: coreServices.config, + }, + async init({ searchEngineRegistry, logger, config }) { + const searchEngine = await ElasticSearchSearchEngine.fromConfig({ logger: loggerToWinstonLogger(logger), config: config, - }), - ); - }, - }); - }, -}); + }); + searchEngineRegistry.setSearchEngine(searchEngine); + // set custom translator if available + if (options?.translator) { + searchEngine.setTranslator(options.translator); + } + + // set custom index template if available TODO(emmaindal): make it possible to pass in mutliple index templates + if (options?.indexTemplate) { + searchEngine.setIndexTemplate(options.indexTemplate); + } + }, + }); + }, + }), +); From 58f758386151c718b034dba9d17297738e52d3e5 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 08:29:03 +0100 Subject: [PATCH 295/511] create searchIndexRegistry module + add to backend Signed-off-by: Emma Indal --- packages/backend-next/src/index.ts | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 071a446cae..93161de9a2 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -22,9 +22,56 @@ import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; import { searchPlugin } from '@backstage/plugin-search-backend'; import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch'; +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; +import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; // import { pgSearchEngineModule } from '@backstage/plugin-search-backend-module-pg'; // import { lunrSearchEngineModule } from '@backstage/plugin-search-backend-node/'; +// TODO: move to search-backend-node? +export const searchIndexRegistry = createBackendModule({ + moduleId: 'searchIndexRegistry', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + indexRegistry: searchIndexRegistryExtensionPoint, + config: coreServices.config, + discovery: coreServices.discovery, + tokenManager: coreServices.tokenManager, + logger: coreServices.logger, + scheduler: coreServices.scheduler, + }, + async init({ + indexRegistry, + config, + discovery, + tokenManager, + scheduler, + }) { + const schedule = scheduler.createScheduledTaskRunner({ + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + // A 3 second delay gives the backend server a chance to initialize before + // any collators are executed, which may attempt requests against the API. + initialDelay: { seconds: 3 }, + }); + + indexRegistry.addCollator({ + schedule, + factory: DefaultCatalogCollatorFactory.fromConfig(config, { + discovery: discovery, + tokenManager: tokenManager, + }), + }); + }, + }); + }, +}); + const backend = createBackend(); backend.add(catalogPlugin()); @@ -43,5 +90,6 @@ backend.add( }, }), ); +backend.add(searchIndexRegistry()); backend.start(); From d5fe020807ee9e8cfe1c035cdff2dba5165bbbc1 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 08:29:42 +0100 Subject: [PATCH 296/511] update plugin id to match naming conventions Signed-off-by: Emma Indal --- .../src/engines/ElasticSearchSearchEngine.ts | 2 +- .../src/PgSearchEngine/PgSearchEngine.ts | 2 +- plugins/search-backend-node/src/engines/LunrSearchEngine.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index 288365a438..dbd8db7a0d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -538,7 +538,7 @@ export type ElasticSearchEngineModuleOptions = { export const elasticSearchEngineModule = createBackendModule( (options?: ElasticSearchEngineModuleOptions) => ({ moduleId: 'elasticSearchEngineModule', - pluginId: 'search-backend', + pluginId: 'search', register(env) { env.registerInit({ deps: { diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 7f1bb89754..845c12fa3d 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -252,7 +252,7 @@ export function encodePageCursor({ page }: { page: number }): string { export const pgSearchEngineModule = createBackendModule({ moduleId: 'pgSearchEngineModule', - pluginId: 'search-backend', + pluginId: 'search', register(env) { env.registerInit({ deps: { diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index 0db9051e84..75875dc944 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -343,7 +343,7 @@ export function parseHighlightFields({ export const lunrSearchEngineModule = createBackendModule({ moduleId: 'lunrSearchEngineModule', - pluginId: 'search-backend', + pluginId: 'search', register(env) { env.registerInit({ deps: { From bf54977e6878cbf33bc8094c35a557cee5811bbe Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 09:54:51 +0100 Subject: [PATCH 297/511] remove getter methods on interfaces Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- plugins/search-backend-node/src/types.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/search-backend-node/src/types.ts b/plugins/search-backend-node/src/types.ts index 4bf726bd0a..e280e1a7ef 100644 --- a/plugins/search-backend-node/src/types.ts +++ b/plugins/search-backend-node/src/types.ts @@ -75,11 +75,8 @@ export interface SearchIndexBuilderService { export interface SearchIndexRegistryExtensionPoint { addCollator(options: RegisterCollatorParameters): void; addDecorator(options: RegisterDecoratorParameters): void; - getCollators(): RegisterCollatorParameters[]; - getDecorators(): RegisterDecoratorParameters[]; } export interface SearchEngineRegistryExtensionPoint { setSearchEngine(searchEngine: SearchEngine): void; - getSearchEngine(): SearchEngine | null; } From 1a79af33f2934442aacb0fd4f69c241f70152c71 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 10:35:24 +0100 Subject: [PATCH 298/511] clean up comments and dependencies Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- packages/backend-next/package.json | 5 ++ packages/backend-next/src/index.ts | 60 +------------- packages/backend-next/src/plugins/search.ts | 82 +++++++++++++++++++ .../package.json | 2 + .../src/engines/ElasticSearchSearchEngine.ts | 2 +- plugins/search-backend/src/plugin.ts | 2 +- yarn.lock | 6 ++ 7 files changed, 98 insertions(+), 61 deletions(-) create mode 100644 packages/backend-next/src/plugins/search.ts diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 14ec71f352..8df5ace282 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -25,10 +25,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/backend-common": "workspace:^", "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-explore-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", + "@backstage/plugin-search-backend": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-techdocs-backend": "workspace:^", "@backstage/plugin-todo-backend": "workspace:^" }, diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 93161de9a2..cf275ae3ad 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -21,56 +21,7 @@ import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; import { searchPlugin } from '@backstage/plugin-search-backend'; -import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch'; -import { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; -import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; -// import { pgSearchEngineModule } from '@backstage/plugin-search-backend-module-pg'; -// import { lunrSearchEngineModule } from '@backstage/plugin-search-backend-node/'; - -// TODO: move to search-backend-node? -export const searchIndexRegistry = createBackendModule({ - moduleId: 'searchIndexRegistry', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - indexRegistry: searchIndexRegistryExtensionPoint, - config: coreServices.config, - discovery: coreServices.discovery, - tokenManager: coreServices.tokenManager, - logger: coreServices.logger, - scheduler: coreServices.scheduler, - }, - async init({ - indexRegistry, - config, - discovery, - tokenManager, - scheduler, - }) { - const schedule = scheduler.createScheduledTaskRunner({ - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - // A 3 second delay gives the backend server a chance to initialize before - // any collators are executed, which may attempt requests against the API. - initialDelay: { seconds: 3 }, - }); - - indexRegistry.addCollator({ - schedule, - factory: DefaultCatalogCollatorFactory.fromConfig(config, { - discovery: discovery, - tokenManager: tokenManager, - }), - }); - }, - }); - }, -}); +import { searchIndexRegistry } from './plugins/search'; const backend = createBackend(); @@ -81,15 +32,6 @@ backend.add(todoPlugin()); backend.add(techdocsPlugin()); backend.add(searchPlugin()); -// just as example of search engine module, remove before shipping and use default -backend.add( - elasticSearchEngineModule({ - indexTemplate: { - name: 'my-custom-template', - body: { index_patterns: ['*index*'], template: {} }, - }, - }), -); backend.add(searchIndexRegistry()); backend.start(); diff --git a/packages/backend-next/src/plugins/search.ts b/packages/backend-next/src/plugins/search.ts new file mode 100644 index 0000000000..559e6a9cd1 --- /dev/null +++ b/packages/backend-next/src/plugins/search.ts @@ -0,0 +1,82 @@ +/* + * Copyright 2023 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 { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; +import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; +import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; +import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; + +export const searchIndexRegistry = createBackendModule({ + moduleId: 'searchIndexRegistry', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + indexRegistry: searchIndexRegistryExtensionPoint, + config: coreServices.config, + discovery: coreServices.discovery, + tokenManager: coreServices.tokenManager, + logger: coreServices.logger, + scheduler: coreServices.scheduler, + }, + async init({ + indexRegistry, + config, + logger, + discovery, + tokenManager, + scheduler, + }) { + const schedule = scheduler.createScheduledTaskRunner({ + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + // A 3 second delay gives the backend server a chance to initialize before + // any collators are executed, which may attempt requests against the API. + initialDelay: { seconds: 3 }, + }); + + indexRegistry.addCollator({ + schedule, + factory: DefaultCatalogCollatorFactory.fromConfig(config, { + discovery, + tokenManager, + }), + }); + + indexRegistry.addCollator({ + schedule, + factory: DefaultTechDocsCollatorFactory.fromConfig(config, { + discovery, + logger: loggerToWinstonLogger(logger), + tokenManager, + }), + }); + + indexRegistry.addCollator({ + schedule, + factory: ToolDocumentCollatorFactory.fromConfig(config, { + discovery, + logger: loggerToWinstonLogger(logger), + }), + }); + }, + }); + }, +}); diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index e854687360..aff861b784 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -23,6 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index dbd8db7a0d..f368799673 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -557,7 +557,7 @@ export const elasticSearchEngineModule = createBackendModule( searchEngine.setTranslator(options.translator); } - // set custom index template if available TODO(emmaindal): make it possible to pass in mutliple index templates + // set custom index template if available if (options?.indexTemplate) { searchEngine.setIndexTemplate(options.indexTemplate); } diff --git a/plugins/search-backend/src/plugin.ts b/plugins/search-backend/src/plugin.ts index 5e17f03740..35a9835ef6 100644 --- a/plugins/search-backend/src/plugin.ts +++ b/plugins/search-backend/src/plugin.ts @@ -117,7 +117,7 @@ export const searchPlugin = createBackendPlugin({ engine: searchEngine, types: searchIndexBuilder.getDocumentTypes(), }); - // We register the router with the http service. + http.use(router); }, }); diff --git a/yarn.lock b/yarn.lock index 6615236acf..3c787dceb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7773,6 +7773,7 @@ __metadata: resolution: "@backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" @@ -22481,11 +22482,16 @@ __metadata: version: 0.0.0-use.local resolution: "example-backend-next@workspace:packages/backend-next" dependencies: + "@backstage/backend-common": "workspace:^" "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-explore-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/plugin-search-backend": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-techdocs-backend": "workspace:^" "@backstage/plugin-todo-backend": "workspace:^" languageName: unknown From 791c7467d44dfd32d073609e43c60f00584d5b05 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Mon, 20 Mar 2023 13:27:47 +0100 Subject: [PATCH 299/511] cancel the debounce in the cleanup function that actually handles the event setup and teardown, where it belongs Signed-off-by: Morgan Bentell --- plugins/techdocs-react/src/hooks.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/plugins/techdocs-react/src/hooks.ts b/plugins/techdocs-react/src/hooks.ts index d084a91cf5..2984a4b588 100644 --- a/plugins/techdocs-react/src/hooks.ts +++ b/plugins/techdocs-react/src/hooks.ts @@ -82,18 +82,15 @@ export const useShadowRootSelection = (waitMillis: number = 0) => { [shadowRoot, setSelection, waitMillis], ); - useEffect(() => { - // cancel debounce on unmount - return () => handleSelectionChange.cancel(); - }, [handleSelectionChange]); - useEffect(() => { window.document.addEventListener('selectionchange', handleSelectionChange); - return () => + return () => { + handleSelectionChange.cancel(); window.document.removeEventListener( 'selectionchange', handleSelectionChange, ); + }; }, [handleSelectionChange]); return selection; From 4cc252bdd5b5e404fe54383f1a220e24c93afbae Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 11:22:17 +0100 Subject: [PATCH 300/511] use alpha exports Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- packages/backend-next/src/index.ts | 2 +- packages/backend-next/src/plugins/search.ts | 2 +- .../package.json | 19 +++++- .../src/alpha.ts | 63 +++++++++++++++++++ .../src/engines/ElasticSearchSearchEngine.ts | 47 +------------- .../src/engines/index.ts | 1 - .../src/index.ts | 1 - plugins/search-backend-module-pg/package.json | 20 +++++- .../src/PgSearchEngine/PgSearchEngine.ts | 26 -------- .../src/PgSearchEngine/index.ts | 2 +- plugins/search-backend-module-pg/src/alpha.ts | 42 +++++++++++++ plugins/search-backend-node/package.json | 19 +++++- .../src/{services.ts => alpha.ts} | 51 +++++++++++++-- .../src/engines/LunrSearchEngine.ts | 2 +- plugins/search-backend-node/src/index.ts | 6 -- plugins/search-backend-node/src/types.ts | 23 ------- plugins/search-backend/package.json | 19 +++++- .../src/alpha.ts} | 16 +---- plugins/search-backend/src/index.ts | 1 - plugins/search-backend/src/plugin.ts | 12 ++-- yarn.lock | 1 + 21 files changed, 229 insertions(+), 146 deletions(-) create mode 100644 plugins/search-backend-module-elasticsearch/src/alpha.ts create mode 100644 plugins/search-backend-module-pg/src/alpha.ts rename plugins/search-backend-node/src/{services.ts => alpha.ts} (67%) rename plugins/{search-backend-node/src/extensions.ts => search-backend/src/alpha.ts} (56%) diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index cf275ae3ad..10680ca798 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -20,7 +20,7 @@ import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; -import { searchPlugin } from '@backstage/plugin-search-backend'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; import { searchIndexRegistry } from './plugins/search'; const backend = createBackend(); diff --git a/packages/backend-next/src/plugins/search.ts b/packages/backend-next/src/plugins/search.ts index 559e6a9cd1..1329135e56 100644 --- a/packages/backend-next/src/plugins/search.ts +++ b/packages/backend-next/src/plugins/search.ts @@ -17,7 +17,7 @@ import { coreServices, createBackendModule, } from '@backstage/backend-plugin-api'; -import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend'; diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index aff861b784..3c16bd1a7d 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -6,9 +6,22 @@ "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "backend-plugin-module" diff --git a/plugins/search-backend-module-elasticsearch/src/alpha.ts b/plugins/search-backend-module-elasticsearch/src/alpha.ts new file mode 100644 index 0000000000..ad83919ee4 --- /dev/null +++ b/plugins/search-backend-module-elasticsearch/src/alpha.ts @@ -0,0 +1,63 @@ +/* + * Copyright 2023 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 { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + ElasticSearchCustomIndexTemplate, + ElasticSearchQueryTranslator, + ElasticSearchSearchEngine, +} from './engines'; + +export type ElasticSearchEngineModuleOptions = { + translator?: ElasticSearchQueryTranslator; + indexTemplate?: ElasticSearchCustomIndexTemplate; +}; + +export const elasticSearchEngineModule = createBackendModule( + (options?: ElasticSearchEngineModuleOptions) => ({ + moduleId: 'elasticSearchEngineModule', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + logger: coreServices.logger, + config: coreServices.config, + }, + async init({ searchEngineRegistry, logger, config }) { + const searchEngine = await ElasticSearchSearchEngine.fromConfig({ + logger: loggerToWinstonLogger(logger), + config: config, + }); + searchEngineRegistry.setSearchEngine(searchEngine); + // set custom translator if available + if (options?.translator) { + searchEngine.setTranslator(options.translator); + } + + // set custom index template if available + if (options?.indexTemplate) { + searchEngine.setIndexTemplate(options.indexTemplate); + } + }, + }); + }, + }), +); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index f368799673..25df3101de 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -30,17 +30,9 @@ import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; import { ElasticSearchCustomIndexTemplate } from './types'; import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; import { Logger } from 'winston'; -import { - MissingIndexError, - searchEngineRegistryExtensionPoint, -} from '@backstage/plugin-search-backend-node'; +import { MissingIndexError } from '@backstage/plugin-search-backend-node'; import esb from 'elastic-builder'; import { v4 as uuid } from 'uuid'; -import { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; export type { ElasticSearchClientOptions }; @@ -529,40 +521,3 @@ export async function createElasticSearchClientOptions( : {}), }; } - -export type ElasticSearchEngineModuleOptions = { - translator?: ElasticSearchQueryTranslator; - indexTemplate?: ElasticSearchCustomIndexTemplate; -}; - -export const elasticSearchEngineModule = createBackendModule( - (options?: ElasticSearchEngineModuleOptions) => ({ - moduleId: 'elasticSearchEngineModule', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - searchEngineRegistry: searchEngineRegistryExtensionPoint, - logger: coreServices.logger, - config: coreServices.config, - }, - async init({ searchEngineRegistry, logger, config }) { - const searchEngine = await ElasticSearchSearchEngine.fromConfig({ - logger: loggerToWinstonLogger(logger), - config: config, - }); - searchEngineRegistry.setSearchEngine(searchEngine); - // set custom translator if available - if (options?.translator) { - searchEngine.setTranslator(options.translator); - } - - // set custom index template if available - if (options?.indexTemplate) { - searchEngine.setIndexTemplate(options.indexTemplate); - } - }, - }); - }, - }), -); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/index.ts b/plugins/search-backend-module-elasticsearch/src/engines/index.ts index 01f77034a0..cb24bdc56a 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/index.ts @@ -17,7 +17,6 @@ export { decodePageCursor as decodeElasticSearchPageCursor, ElasticSearchSearchEngine, - elasticSearchEngineModule, } from './ElasticSearchSearchEngine'; export { isOpenSearchCompatible } from './ElasticSearchClientOptions'; export type { diff --git a/plugins/search-backend-module-elasticsearch/src/index.ts b/plugins/search-backend-module-elasticsearch/src/index.ts index acff595246..e0b05014cc 100644 --- a/plugins/search-backend-module-elasticsearch/src/index.ts +++ b/plugins/search-backend-module-elasticsearch/src/index.ts @@ -23,7 +23,6 @@ export { decodeElasticSearchPageCursor, ElasticSearchSearchEngine, - elasticSearchEngineModule, isOpenSearchCompatible, } from './engines'; export type { diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index b284557369..be1762394d 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -6,9 +6,22 @@ "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "backend-plugin-module" @@ -24,6 +37,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 845c12fa3d..d2cf80e0ca 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -30,11 +30,6 @@ import { import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; import { Config } from '@backstage/config'; -import { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node'; /** * Search query that the Postgres search engine understands. @@ -249,24 +244,3 @@ export function decodePageCursor(pageCursor?: string): { page: number } { export function encodePageCursor({ page }: { page: number }): string { return Buffer.from(`${page}`, 'utf-8').toString('base64'); } - -export const pgSearchEngineModule = createBackendModule({ - moduleId: 'pgSearchEngineModule', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - searchEngineRegistry: searchEngineRegistryExtensionPoint, - database: coreServices.database, - config: coreServices.config, - }, - async init({ searchEngineRegistry, database, config }) { - searchEngineRegistry.setSearchEngine( - await PgSearchEngine.fromConfig(config, { - database: database, - }), - ); - }, - }); - }, -}); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts index 7a90d9e3f7..e62e709f26 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export { PgSearchEngine, pgSearchEngineModule } from './PgSearchEngine'; +export { PgSearchEngine } from './PgSearchEngine'; export type { ConcretePgSearchQuery, PgSearchQueryTranslatorOptions, diff --git a/plugins/search-backend-module-pg/src/alpha.ts b/plugins/search-backend-module-pg/src/alpha.ts new file mode 100644 index 0000000000..bd12b4f118 --- /dev/null +++ b/plugins/search-backend-module-pg/src/alpha.ts @@ -0,0 +1,42 @@ +/* + * Copyright 2023 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 { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { PgSearchEngine } from './PgSearchEngine'; + +export const pgSearchEngineModule = createBackendModule({ + moduleId: 'pgSearchEngineModule', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + searchEngineRegistry: searchEngineRegistryExtensionPoint, + database: coreServices.database, + config: coreServices.config, + }, + async init({ searchEngineRegistry, database, config }) { + searchEngineRegistry.setSearchEngine( + await PgSearchEngine.fromConfig(config, { + database: database, + }), + ); + }, + }); + }, +}); diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index d77551ef29..869f008de1 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -6,9 +6,22 @@ "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "node-library" diff --git a/plugins/search-backend-node/src/services.ts b/plugins/search-backend-node/src/alpha.ts similarity index 67% rename from plugins/search-backend-node/src/services.ts rename to plugins/search-backend-node/src/alpha.ts index 7a39184cf8..b2ca6570e1 100644 --- a/plugins/search-backend-node/src/services.ts +++ b/plugins/search-backend-node/src/alpha.ts @@ -15,19 +15,42 @@ */ import { Logger } from 'winston'; + import { createServiceRef, createServiceFactory, coreServices, } from '@backstage/backend-plugin-api'; -import { DocumentTypeInfo } from '@backstage/plugin-search-common'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + DocumentTypeInfo, + SearchEngine, +} from '@backstage/plugin-search-common'; +import { createExtensionPoint } from '@backstage/backend-plugin-api'; + +import { + RegisterCollatorParameters, + RegisterDecoratorParameters, +} from './types'; + import { IndexBuilder } from './IndexBuilder'; import { Scheduler } from './Scheduler'; -import { - IndexBuilderServiceBuildOptions, - SearchIndexBuilderService, -} from './types'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; + +export interface SearchIndexBuilderService { + build(options: IndexBuilderServiceBuildOptions): Promise<{ + scheduler: Scheduler; + }>; + getDocumentTypes(): Record; +} + +export interface SearchIndexRegistryExtensionPoint { + addCollator(options: RegisterCollatorParameters): void; + addDecorator(options: RegisterDecoratorParameters): void; +} + +export interface SearchEngineRegistryExtensionPoint { + setSearchEngine(searchEngine: SearchEngine): void; +} type DefaultSearchIndexBuilderServiceOptions = { logger: Logger; @@ -85,3 +108,19 @@ export const searchIndexBuilderService = }, }), }); + +export const searchEngineRegistryExtensionPoint = + createExtensionPoint({ + id: 'search.engine.registry', + }); + +export const searchIndexRegistryExtensionPoint = + createExtensionPoint({ + id: 'search.index.registry', + }); + +export type IndexBuilderServiceBuildOptions = { + searchEngine: SearchEngine; + collators: RegisterCollatorParameters[]; + decorators: RegisterDecoratorParameters[]; +}; diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index 75875dc944..57fe123ede 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -30,7 +30,7 @@ import { coreServices, createBackendModule, } from '@backstage/backend-plugin-api'; -import { searchEngineRegistryExtensionPoint } from '../extensions'; +import { searchEngineRegistryExtensionPoint } from '../alpha'; import { loggerToWinstonLogger } from '@backstage/backend-common'; /** diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index 7395036672..140c0a22f8 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -33,15 +33,9 @@ export type { IndexBuilderOptions, RegisterCollatorParameters, RegisterDecoratorParameters, - SearchIndexRegistryExtensionPoint, - SearchEngineRegistryExtensionPoint, } from './types'; export * from './errors'; export * from './indexing'; export * from './test-utils'; export type { ScheduleTaskParameters } from './Scheduler'; - -// TODO: export as alfa subpath -export * from './services'; -export * from './extensions'; diff --git a/plugins/search-backend-node/src/types.ts b/plugins/search-backend-node/src/types.ts index e280e1a7ef..dfcf4d12ce 100644 --- a/plugins/search-backend-node/src/types.ts +++ b/plugins/search-backend-node/src/types.ts @@ -18,11 +18,9 @@ import { TaskRunner } from '@backstage/backend-tasks'; import { DocumentCollatorFactory, DocumentDecoratorFactory, - DocumentTypeInfo, SearchEngine, } from '@backstage/plugin-search-common'; import { Logger } from 'winston'; -import { Scheduler } from './Scheduler'; /** * Options required to instantiate the index builder. @@ -59,24 +57,3 @@ export interface RegisterDecoratorParameters { */ factory: DocumentDecoratorFactory; } - -export type IndexBuilderServiceBuildOptions = { - searchEngine: SearchEngine; - collators: RegisterCollatorParameters[]; - decorators: RegisterDecoratorParameters[]; -}; -export interface SearchIndexBuilderService { - build(options: IndexBuilderServiceBuildOptions): Promise<{ - scheduler: Scheduler; - }>; - getDocumentTypes(): Record; -} - -export interface SearchIndexRegistryExtensionPoint { - addCollator(options: RegisterCollatorParameters): void; - addDecorator(options: RegisterDecoratorParameters): void; -} - -export interface SearchEngineRegistryExtensionPoint { - setSearchEngine(searchEngine: SearchEngine): void; -} diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index bbd5d78f79..6e971ba646 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -6,9 +6,22 @@ "types": "src/index.ts", "license": "Apache-2.0", "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } }, "backstage": { "role": "backend-plugin" diff --git a/plugins/search-backend-node/src/extensions.ts b/plugins/search-backend/src/alpha.ts similarity index 56% rename from plugins/search-backend-node/src/extensions.ts rename to plugins/search-backend/src/alpha.ts index 23392b70a5..e35b33188b 100644 --- a/plugins/search-backend-node/src/extensions.ts +++ b/plugins/search-backend/src/alpha.ts @@ -14,18 +14,4 @@ * limitations under the License. */ -import { createExtensionPoint } from '@backstage/backend-plugin-api'; -import { - SearchEngineRegistryExtensionPoint, - SearchIndexRegistryExtensionPoint, -} from './types'; - -export const searchEngineRegistryExtensionPoint = - createExtensionPoint({ - id: 'search.engine.registry', - }); - -export const searchIndexRegistryExtensionPoint = - createExtensionPoint({ - id: 'search.index.registry', - }); +export { searchPlugin } from './plugin'; diff --git a/plugins/search-backend/src/index.ts b/plugins/search-backend/src/index.ts index 335841d383..851efd1875 100644 --- a/plugins/search-backend/src/index.ts +++ b/plugins/search-backend/src/index.ts @@ -21,4 +21,3 @@ */ export * from './service/router'; -export * from './plugin'; diff --git a/plugins/search-backend/src/plugin.ts b/plugins/search-backend/src/plugin.ts index 35a9835ef6..7c01ddc607 100644 --- a/plugins/search-backend/src/plugin.ts +++ b/plugins/search-backend/src/plugin.ts @@ -19,16 +19,18 @@ import { createBackendPlugin, } from '@backstage/backend-plugin-api'; import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + RegisterCollatorParameters, + RegisterDecoratorParameters, + LunrSearchEngine, +} from '@backstage/plugin-search-backend-node'; import { searchIndexBuilderService, searchIndexRegistryExtensionPoint, SearchIndexRegistryExtensionPoint, - searchEngineRegistryExtensionPoint, - RegisterCollatorParameters, - RegisterDecoratorParameters, SearchEngineRegistryExtensionPoint, - LunrSearchEngine, -} from '@backstage/plugin-search-backend-node'; + searchEngineRegistryExtensionPoint, +} from '@backstage/plugin-search-backend-node/alpha'; import { createRouter } from './service/router'; import { SearchEngine } from '@backstage/plugin-search-common'; diff --git a/yarn.lock b/yarn.lock index 3c787dceb3..c2c60036fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7796,6 +7796,7 @@ __metadata: resolution: "@backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" From 5db02fc935a7baaf1dfecfb8eadce776052ce7e3 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 15:00:11 +0100 Subject: [PATCH 301/511] generate api reports Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- .../alpha-api-report.md | 61 +++++++++ .../src/alpha.ts | 29 +++- .../alpha-api-report.md | 12 ++ plugins/search-backend-module-pg/src/alpha.ts | 4 + .../search-backend-node/alpha-api-report.md | 62 +++++++++ plugins/search-backend-node/src/alpha.ts | 111 ++++++++++----- .../src/engines/LunrSearchEngine.ts | 24 ---- .../search-backend-node/src/engines/index.ts | 2 +- plugins/search-backend-node/src/index.ts | 2 +- plugins/search-backend/alpha-api-report.md | 12 ++ plugins/search-backend/src/alpha.ts | 115 +++++++++++++++- plugins/search-backend/src/plugin.ts | 127 ------------------ 12 files changed, 369 insertions(+), 192 deletions(-) create mode 100644 plugins/search-backend-module-elasticsearch/alpha-api-report.md create mode 100644 plugins/search-backend-module-pg/alpha-api-report.md create mode 100644 plugins/search-backend-node/alpha-api-report.md create mode 100644 plugins/search-backend/alpha-api-report.md delete mode 100644 plugins/search-backend/src/plugin.ts diff --git a/plugins/search-backend-module-elasticsearch/alpha-api-report.md b/plugins/search-backend-module-elasticsearch/alpha-api-report.md new file mode 100644 index 0000000000..acdd14e781 --- /dev/null +++ b/plugins/search-backend-module-elasticsearch/alpha-api-report.md @@ -0,0 +1,61 @@ +## API Report File for "@backstage/plugin-search-backend-module-elasticsearch" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { SearchQuery } from '@backstage/plugin-search-common'; + +// @public +export type ElasticSearchConcreteQuery = { + documentTypes?: string[]; + elasticSearchQuery: Object; + pageSize: number; +}; + +// @public +export type ElasticSearchCustomIndexTemplate = { + name: string; + body: ElasticSearchCustomIndexTemplateBody; +}; + +// @public +export type ElasticSearchCustomIndexTemplateBody = { + index_patterns: string[]; + composed_of?: string[]; + template?: Record; +}; + +// @alpha +export const elasticSearchEngineModule: ( + options?: ElasticsearchEngineModuleOptions | undefined, +) => BackendFeature; + +// @alpha +export type ElasticsearchEngineModuleOptions = { + translator?: ElasticSearchQueryTranslator; + indexTemplate?: ElasticSearchCustomIndexTemplate; +}; + +// @public (undocumented) +export type ElasticSearchHighlightConfig = { + fragmentDelimiter: string; + fragmentSize: number; + numFragments: number; + preTag: string; + postTag: string; +}; + +// @public +export type ElasticSearchQueryTranslator = ( + query: SearchQuery, + options?: ElasticSearchQueryTranslatorOptions, +) => ElasticSearchConcreteQuery; + +// @public +export type ElasticSearchQueryTranslatorOptions = { + highlightOptions?: ElasticSearchHighlightConfig; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-module-elasticsearch/src/alpha.ts b/plugins/search-backend-module-elasticsearch/src/alpha.ts index ad83919ee4..8e75c9f603 100644 --- a/plugins/search-backend-module-elasticsearch/src/alpha.ts +++ b/plugins/search-backend-module-elasticsearch/src/alpha.ts @@ -20,18 +20,30 @@ import { } from '@backstage/backend-plugin-api'; import { loggerToWinstonLogger } from '@backstage/backend-common'; import { + ElasticSearchHighlightConfig, + ElasticSearchQueryTranslatorOptions, + ElasticSearchConcreteQuery, ElasticSearchCustomIndexTemplate, + ElasticSearchCustomIndexTemplateBody, ElasticSearchQueryTranslator, ElasticSearchSearchEngine, } from './engines'; -export type ElasticSearchEngineModuleOptions = { +/** + * @alpha + * Options for {@link elasticSearchEngineModule}. + */ +export type ElasticsearchEngineModuleOptions = { translator?: ElasticSearchQueryTranslator; indexTemplate?: ElasticSearchCustomIndexTemplate; }; +/** + * @alpha + * Search backend module for the Elasticsearch engine. + */ export const elasticSearchEngineModule = createBackendModule( - (options?: ElasticSearchEngineModuleOptions) => ({ + (options?: ElasticsearchEngineModuleOptions) => ({ moduleId: 'elasticSearchEngineModule', pluginId: 'search', register(env) { @@ -46,7 +58,7 @@ export const elasticSearchEngineModule = createBackendModule( logger: loggerToWinstonLogger(logger), config: config, }); - searchEngineRegistry.setSearchEngine(searchEngine); + // set custom translator if available if (options?.translator) { searchEngine.setTranslator(options.translator); @@ -56,8 +68,19 @@ export const elasticSearchEngineModule = createBackendModule( if (options?.indexTemplate) { searchEngine.setIndexTemplate(options.indexTemplate); } + + searchEngineRegistry.setSearchEngine(searchEngine); }, }); }, }), ); + +export type { + ElasticSearchCustomIndexTemplate, + ElasticSearchCustomIndexTemplateBody, + ElasticSearchQueryTranslator, + ElasticSearchQueryTranslatorOptions, + ElasticSearchHighlightConfig, + ElasticSearchConcreteQuery, +}; diff --git a/plugins/search-backend-module-pg/alpha-api-report.md b/plugins/search-backend-module-pg/alpha-api-report.md new file mode 100644 index 0000000000..01a83bace4 --- /dev/null +++ b/plugins/search-backend-module-pg/alpha-api-report.md @@ -0,0 +1,12 @@ +## API Report File for "@backstage/plugin-search-backend-module-pg" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; + +// @alpha +export const pgSearchEngineModule: () => BackendFeature; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-module-pg/src/alpha.ts b/plugins/search-backend-module-pg/src/alpha.ts index bd12b4f118..80ce31adf6 100644 --- a/plugins/search-backend-module-pg/src/alpha.ts +++ b/plugins/search-backend-module-pg/src/alpha.ts @@ -20,6 +20,10 @@ import { import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { PgSearchEngine } from './PgSearchEngine'; +/** + * @alpha + * Search backend module for the Postgres engine. + */ export const pgSearchEngineModule = createBackendModule({ moduleId: 'pgSearchEngineModule', pluginId: 'search', diff --git a/plugins/search-backend-node/alpha-api-report.md b/plugins/search-backend-node/alpha-api-report.md new file mode 100644 index 0000000000..f53f86b709 --- /dev/null +++ b/plugins/search-backend-node/alpha-api-report.md @@ -0,0 +1,62 @@ +## API Report File for "@backstage/plugin-search-backend-node" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { DocumentDecoratorFactory } from '@backstage/plugin-search-common'; +import { DocumentTypeInfo } from '@backstage/plugin-search-common'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { SearchEngine } from '@backstage/plugin-search-common'; +import { ServiceRef } from '@backstage/backend-plugin-api'; +import { TaskRunner } from '@backstage/backend-tasks'; + +// @alpha +export type IndexServiceBuildOptions = { + searchEngine: SearchEngine; + collators: RegisterCollatorParameters[]; + decorators: RegisterDecoratorParameters[]; +}; + +// @public +export interface RegisterCollatorParameters { + factory: DocumentCollatorFactory; + schedule: TaskRunner; +} + +// @public +export interface RegisterDecoratorParameters { + factory: DocumentDecoratorFactory; +} + +// @alpha +export interface SearchEngineRegistryExtensionPoint { + // (undocumented) + setSearchEngine(searchEngine: SearchEngine): void; +} + +// @alpha +export const searchEngineRegistryExtensionPoint: ExtensionPoint; + +// @alpha +export interface SearchIndexRegistryExtensionPoint { + // (undocumented) + addCollator(options: RegisterCollatorParameters): void; + // (undocumented) + addDecorator(options: RegisterDecoratorParameters): void; +} + +// @alpha +export const searchIndexRegistryExtensionPoint: ExtensionPoint; + +// @alpha +export interface SearchIndexService { + getDocumentTypes(): Record; + start(options: IndexServiceBuildOptions): Promise; +} + +// @alpha +export const searchIndexService: ServiceRef; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-node/src/alpha.ts b/plugins/search-backend-node/src/alpha.ts index b2ca6570e1..22c6508b15 100644 --- a/plugins/search-backend-node/src/alpha.ts +++ b/plugins/search-backend-node/src/alpha.ts @@ -34,43 +34,70 @@ import { } from './types'; import { IndexBuilder } from './IndexBuilder'; -import { Scheduler } from './Scheduler'; -export interface SearchIndexBuilderService { - build(options: IndexBuilderServiceBuildOptions): Promise<{ - scheduler: Scheduler; - }>; +/** + * @alpha + * Options for build method on {@link SearchIndexService}. + */ +export type IndexServiceBuildOptions = { + searchEngine: SearchEngine; + collators: RegisterCollatorParameters[]; + decorators: RegisterDecoratorParameters[]; +}; + +/** + * @alpha + * Interface for implementation of index service. + */ +export interface SearchIndexService { + /** + * Starts indexing process + */ + start(options: IndexServiceBuildOptions): Promise; + /** + * Returns an index types list. + */ getDocumentTypes(): Record; } +/** + * @alpha + * Interface for search index registry extension point. + */ export interface SearchIndexRegistryExtensionPoint { addCollator(options: RegisterCollatorParameters): void; addDecorator(options: RegisterDecoratorParameters): void; } +/** + * @alpha + * Interface for search engine registry extension point. + */ export interface SearchEngineRegistryExtensionPoint { setSearchEngine(searchEngine: SearchEngine): void; } -type DefaultSearchIndexBuilderServiceOptions = { +type DefaultSearchIndexServiceOptions = { logger: Logger; }; -class DefaultSearchIndexBuilderService implements SearchIndexBuilderService { +/** + * @alpha + * Reponsible for register the indexing task and start the schedule. + */ +class DefaultSearchIndexService implements SearchIndexService { private logger: Logger; private indexBuilder: IndexBuilder | null = null; - private constructor(options: DefaultSearchIndexBuilderServiceOptions) { + private constructor(options: DefaultSearchIndexServiceOptions) { this.logger = options.logger; } - static fromConfig(options: DefaultSearchIndexBuilderServiceOptions) { - return new DefaultSearchIndexBuilderService(options); + static fromConfig(options: DefaultSearchIndexServiceOptions) { + return new DefaultSearchIndexService(options); } - build( - options: IndexBuilderServiceBuildOptions, - ): Promise<{ scheduler: Scheduler }> { + async start(options: IndexServiceBuildOptions): Promise { this.indexBuilder = new IndexBuilder({ logger: this.logger, searchEngine: options.searchEngine, @@ -84,7 +111,8 @@ class DefaultSearchIndexBuilderService implements SearchIndexBuilderService { this.indexBuilder?.addDecorator(decorator), ); - return this.indexBuilder?.build(); + const { scheduler } = await this.indexBuilder?.build(); + scheduler.start(); } getDocumentTypes(): Record { @@ -92,35 +120,48 @@ class DefaultSearchIndexBuilderService implements SearchIndexBuilderService { } } -export const searchIndexBuilderService = - createServiceRef({ - id: 'search.index.builder', - defaultFactory: async service => - createServiceFactory({ - service, - deps: { - logger: coreServices.logger, - }, - factory({ logger }) { - return DefaultSearchIndexBuilderService.fromConfig({ - logger: loggerToWinstonLogger(logger), - }); - }, - }), - }); +/** + * @alpha + * Service that builds a search index. + */ +export const searchIndexServiceRef = createServiceRef({ + id: 'search.index.service', + defaultFactory: async service => + createServiceFactory({ + service, + deps: { + logger: coreServices.logger, + }, + factory({ logger }) { + return DefaultSearchIndexService.fromConfig({ + logger: loggerToWinstonLogger(logger), + }); + }, + }), +}); +/** + * @alpha + * Extension point for register a search engine. + */ export const searchEngineRegistryExtensionPoint = createExtensionPoint({ id: 'search.engine.registry', }); +/** + * @alpha + * Extension point for registering collators and decorators + */ export const searchIndexRegistryExtensionPoint = createExtensionPoint({ id: 'search.index.registry', }); -export type IndexBuilderServiceBuildOptions = { - searchEngine: SearchEngine; - collators: RegisterCollatorParameters[]; - decorators: RegisterDecoratorParameters[]; -}; +/** + * @alpha + */ +export type { + RegisterCollatorParameters, + RegisterDecoratorParameters, +} from './types'; diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index 57fe123ede..b69b5ea863 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -26,12 +26,6 @@ import lunr from 'lunr'; import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer'; -import { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { searchEngineRegistryExtensionPoint } from '../alpha'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; /** * Type of translated query for the Lunr Search Engine. @@ -340,21 +334,3 @@ export function parseHighlightFields({ }), ); } - -export const lunrSearchEngineModule = createBackendModule({ - moduleId: 'lunrSearchEngineModule', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - searchEngineRegistry: searchEngineRegistryExtensionPoint, - logger: coreServices.logger, - }, - async init({ searchEngineRegistry, logger }) { - searchEngineRegistry.setSearchEngine( - new LunrSearchEngine({ logger: loggerToWinstonLogger(logger) }), - ); - }, - }); - }, -}); diff --git a/plugins/search-backend-node/src/engines/index.ts b/plugins/search-backend-node/src/engines/index.ts index 59aa4a24b0..0d710eadc2 100644 --- a/plugins/search-backend-node/src/engines/index.ts +++ b/plugins/search-backend-node/src/engines/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export { LunrSearchEngine, lunrSearchEngineModule } from './LunrSearchEngine'; +export { LunrSearchEngine } from './LunrSearchEngine'; export type { ConcreteLunrQuery, LunrQueryTranslator, diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index 140c0a22f8..a188509c1c 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -23,7 +23,7 @@ export { IndexBuilder } from './IndexBuilder'; export { Scheduler } from './Scheduler'; export * from './collators'; -export { LunrSearchEngine, lunrSearchEngineModule } from './engines'; +export { LunrSearchEngine } from './engines'; export type { ConcreteLunrQuery, LunrQueryTranslator, diff --git a/plugins/search-backend/alpha-api-report.md b/plugins/search-backend/alpha-api-report.md new file mode 100644 index 0000000000..6ee94a0e29 --- /dev/null +++ b/plugins/search-backend/alpha-api-report.md @@ -0,0 +1,12 @@ +## API Report File for "@backstage/plugin-search-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; + +// @alpha +export const searchPlugin: () => BackendFeature; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend/src/alpha.ts b/plugins/search-backend/src/alpha.ts index e35b33188b..0c14852875 100644 --- a/plugins/search-backend/src/alpha.ts +++ b/plugins/search-backend/src/alpha.ts @@ -14,4 +14,117 @@ * limitations under the License. */ -export { searchPlugin } from './plugin'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + RegisterCollatorParameters, + RegisterDecoratorParameters, + LunrSearchEngine, +} from '@backstage/plugin-search-backend-node'; +import { + searchIndexServiceRef, + searchIndexRegistryExtensionPoint, + SearchIndexRegistryExtensionPoint, + SearchEngineRegistryExtensionPoint, + searchEngineRegistryExtensionPoint, +} from '@backstage/plugin-search-backend-node/alpha'; + +import { createRouter } from './service/router'; +import { SearchEngine } from '@backstage/plugin-search-common'; + +class SearchIndexRegistry implements SearchIndexRegistryExtensionPoint { + private collators: RegisterCollatorParameters[] = []; + private decorators: RegisterDecoratorParameters[] = []; + + public addCollator(options: RegisterCollatorParameters): void { + this.collators.push(options); + } + + public addDecorator(options: RegisterDecoratorParameters): void { + this.decorators.push(options); + } + + public getCollators(): RegisterCollatorParameters[] { + return this.collators; + } + + public getDecorators(): RegisterDecoratorParameters[] { + return this.decorators; + } +} + +class SearchEngineRegistry implements SearchEngineRegistryExtensionPoint { + private searchEngine: SearchEngine | null = null; + + public setSearchEngine(searchEngine: SearchEngine): void { + if (this.searchEngine) { + throw new Error('Multiple Search engines is not supported at this time'); + } + this.searchEngine = searchEngine; + } + + public getSearchEngine(): SearchEngine | null { + return this.searchEngine; + } +} + +/** + * The Search plugin is responsible for starting search indexing processes and return search results. + * @alpha + */ +export const searchPlugin = createBackendPlugin({ + pluginId: 'search', + register(env) { + const searchIndexRegistry = new SearchIndexRegistry(); + env.registerExtensionPoint( + searchIndexRegistryExtensionPoint, + searchIndexRegistry, + ); + + const searchEngineRegistry = new SearchEngineRegistry(); + env.registerExtensionPoint( + searchEngineRegistryExtensionPoint, + searchEngineRegistry, + ); + + env.registerInit({ + deps: { + logger: coreServices.logger, + config: coreServices.config, + permissions: coreServices.permissions, + http: coreServices.httpRouter, + searchIndexService: searchIndexServiceRef, + }, + async init({ config, logger, permissions, http, searchIndexService }) { + let searchEngine = searchEngineRegistry.getSearchEngine(); + if (!searchEngine) { + searchEngine = new LunrSearchEngine({ + logger: loggerToWinstonLogger(logger), + }); + } + + const collators = searchIndexRegistry.getCollators(); + const decorators = searchIndexRegistry.getDecorators(); + + await searchIndexService.start({ + searchEngine, + collators, + decorators, + }); + + const router = await createRouter({ + config, + permissions, + logger: loggerToWinstonLogger(logger), + engine: searchEngine, + types: searchIndexService.getDocumentTypes(), + }); + + http.use(router); + }, + }); + }, +}); diff --git a/plugins/search-backend/src/plugin.ts b/plugins/search-backend/src/plugin.ts deleted file mode 100644 index 7c01ddc607..0000000000 --- a/plugins/search-backend/src/plugin.ts +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2023 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; -import { - RegisterCollatorParameters, - RegisterDecoratorParameters, - LunrSearchEngine, -} from '@backstage/plugin-search-backend-node'; -import { - searchIndexBuilderService, - searchIndexRegistryExtensionPoint, - SearchIndexRegistryExtensionPoint, - SearchEngineRegistryExtensionPoint, - searchEngineRegistryExtensionPoint, -} from '@backstage/plugin-search-backend-node/alpha'; - -import { createRouter } from './service/router'; -import { SearchEngine } from '@backstage/plugin-search-common'; - -class SearchIndexRegistry implements SearchIndexRegistryExtensionPoint { - private collators: RegisterCollatorParameters[] = []; - private decorators: RegisterDecoratorParameters[] = []; - - public addCollator(options: RegisterCollatorParameters): void { - this.collators.push(options); - } - - public addDecorator(options: RegisterDecoratorParameters): void { - this.decorators.push(options); - } - - public getCollators(): RegisterCollatorParameters[] { - return this.collators; - } - - public getDecorators(): RegisterDecoratorParameters[] { - return this.decorators; - } -} - -class SearchEngineRegistry implements SearchEngineRegistryExtensionPoint { - private searchEngine: SearchEngine | null = null; - - public setSearchEngine(searchEngine: SearchEngine): void { - if (this.searchEngine) { - throw new Error('Multiple Search engines is not supported at this time'); - } - this.searchEngine = searchEngine; - } - - public getSearchEngine(): SearchEngine | null { - return this.searchEngine; - } -} - -export const searchPlugin = createBackendPlugin({ - pluginId: 'search', - register(env) { - const searchIndexRegistry = new SearchIndexRegistry(); - env.registerExtensionPoint( - searchIndexRegistryExtensionPoint, - searchIndexRegistry, - ); - - const searchEngineRegistry = new SearchEngineRegistry(); - env.registerExtensionPoint( - searchEngineRegistryExtensionPoint, - searchEngineRegistry, - ); - - env.registerInit({ - deps: { - logger: coreServices.logger, - config: coreServices.config, - permissions: coreServices.permissions, - http: coreServices.httpRouter, - searchIndexBuilder: searchIndexBuilderService, - }, - async init({ config, logger, permissions, http, searchIndexBuilder }) { - let searchEngine = searchEngineRegistry.getSearchEngine(); - if (!searchEngine) { - searchEngine = new LunrSearchEngine({ - logger: loggerToWinstonLogger(logger), - }); - } - - const collators = searchIndexRegistry.getCollators(); - const decorators = searchIndexRegistry.getDecorators(); - - const { scheduler } = await searchIndexBuilder.build({ - searchEngine, - collators, - decorators, - }); - scheduler.start(); - - const router = await createRouter({ - config, - permissions, - logger: loggerToWinstonLogger(logger), - engine: searchEngine, - types: searchIndexBuilder.getDocumentTypes(), - }); - - http.use(router); - }, - }); - }, -}); From 1469daa409e313f4ecb966ec773aab10df81ef0a Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 15:27:33 +0100 Subject: [PATCH 302/511] add changesets and how to guide Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- .changeset/funny-pots-hide.md | 5 ++ .changeset/giant-hairs-serve.md | 6 ++ .changeset/nine-clouds-flow.md | 5 ++ .changeset/warm-buses-switch.md | 5 ++ docs/features/search/how-to-guides.md | 82 +++++++++++++++++++++++++++ 5 files changed, 103 insertions(+) create mode 100644 .changeset/funny-pots-hide.md create mode 100644 .changeset/giant-hairs-serve.md create mode 100644 .changeset/nine-clouds-flow.md create mode 100644 .changeset/warm-buses-switch.md diff --git a/.changeset/funny-pots-hide.md b/.changeset/funny-pots-hide.md new file mode 100644 index 0000000000..32388a93a5 --- /dev/null +++ b/.changeset/funny-pots-hide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': minor +--- + +Exports search plugin that can be used with the new backend system. For documentation on how to migrate, check out the [how to migrate to the new backend system guide](../docs/features/search/how-to-guides.md#how-to-migrate-to-use-search-together-with-the-new-backend-system). diff --git a/.changeset/giant-hairs-serve.md b/.changeset/giant-hairs-serve.md new file mode 100644 index 0000000000..ae450234d1 --- /dev/null +++ b/.changeset/giant-hairs-serve.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': minor +'@backstage/plugin-search-backend-module-pg': minor +--- + +Search backend modules migrated to the new backend system. For documentation on how to migrate, check out the [how to migrate to the new backend system guide](../docs/features/search/how-to-guides.md#how-to-migrate-to-use-search-together-with-the-new-backend-system). diff --git a/.changeset/nine-clouds-flow.md b/.changeset/nine-clouds-flow.md new file mode 100644 index 0000000000..fca6bbbf1c --- /dev/null +++ b/.changeset/nine-clouds-flow.md @@ -0,0 +1,5 @@ +--- +'example-backend-next': patch +--- + +Adds search plugin and search index registry to backend. diff --git a/.changeset/warm-buses-switch.md b/.changeset/warm-buses-switch.md new file mode 100644 index 0000000000..5564f33d67 --- /dev/null +++ b/.changeset/warm-buses-switch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-node': minor +--- + +Exports services and extension points that can be used with the new backend system. For documentation on how to migrate, check out the [how to migrate to the new backend system guide](../docs/features/search/how-to-guides.md#how-to-migrate-to-use-search-together-with-the-new-backend-system). diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index 5b28e259b5..e8f58e9f26 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -369,3 +369,85 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => ( ``` There are other more specific search results layout components that also accept result item extensions, check their documentation: [SearchResultList](https://backstage.io/storybook/?path=/story/plugins-search-searchresultlist--with-result-item-extensions) and [SearchResultGroup](https://backstage.io/storybook/?path=/story/plugins-search-searchresultgroup--with-result-item-extensions). + +## How to migrate to use Search together with the new backend system + +> DISCLAIMER: The new backend system is in alpha, and so are the search backend support for the new backend system. We don't recommend you to migrate your backend installations to the new system yet. But if you want to experiment, this is the guide for you! + +Recently, the Backstage maintainers [announced the new Backend System](https://backstage.io/blog/2023/02/15/backend-system-alpha). The search plugins are now migrated to support the new backend system. In this guide you will learn how to update your backend set up. + +1. In packages/backend/search.ts + +```ts +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; +import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; +import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; + +export const searchIndexRegistry = createBackendModule({ + moduleId: 'searchIndexRegistry', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + indexRegistry: searchIndexRegistryExtensionPoint, + config: coreServices.config, + discovery: coreServices.discovery, + tokenManager: coreServices.tokenManager, + logger: coreServices.logger, + scheduler: coreServices.scheduler, + }, + async init({ + indexRegistry, + config, + logger, + discovery, + tokenManager, + scheduler, + }) { + // define scheule, the same way you did it before + const schedule = scheduler.createScheduledTaskRunner({ + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + // A 3 second delay gives the backend server a chance to initialize before + // any collators are executed, which may attempt requests against the API. + initialDelay: { seconds: 3 }, + }); + + indexRegistry.addCollator({ + schedule, + factory: DefaultCatalogCollatorFactory.fromConfig(config, { + discovery, + tokenManager, + }), + }); + + // .... other collators and decorators + }, + }); + }, +}); +``` + +2. In packages/backend/index.ts + +```ts +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch/alpha'; +import { searchIndexRegistry } from './plugins/search'; + +const backend = createBackend(); +// ...other modules +backend.add(searchPlugin()); +backend.add(searchIndexRegistry()); + +// the default search engine is Lunr, if you want to extend the search backend with another search engine. +backend.add(elasticSearchEngineModule()); + +backend.start(); +``` From 6422b85d468abc1c4cc9506ec18262f1f72ad04f Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 6 Mar 2023 15:47:45 +0100 Subject: [PATCH 303/511] fixup api report Signed-off-by: Emma Indal --- plugins/search-backend-node/alpha-api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/search-backend-node/alpha-api-report.md b/plugins/search-backend-node/alpha-api-report.md index f53f86b709..27d4875bd6 100644 --- a/plugins/search-backend-node/alpha-api-report.md +++ b/plugins/search-backend-node/alpha-api-report.md @@ -56,7 +56,7 @@ export interface SearchIndexService { } // @alpha -export const searchIndexService: ServiceRef; +export const searchIndexServiceRef: ServiceRef; // (No @packageDocumentation comment for this package) ``` From 1473dd9eb69cbe0f60b23beddc7de3b0fc5d4afa Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Tue, 7 Mar 2023 09:22:22 +0100 Subject: [PATCH 304/511] add initial test for search plugin Signed-off-by: Emma Indal --- plugins/search-backend/package.json | 1 + plugins/search-backend/src/alpha.test.ts | 31 ++++++++++++++++++++++++ yarn.lock | 1 + 3 files changed, 33 insertions(+) create mode 100644 plugins/search-backend/src/alpha.test.ts diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 6e971ba646..50a28d3ac5 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -57,6 +57,7 @@ "zod": "~3.18.0" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" diff --git a/plugins/search-backend/src/alpha.test.ts b/plugins/search-backend/src/alpha.test.ts new file mode 100644 index 0000000000..527f099236 --- /dev/null +++ b/plugins/search-backend/src/alpha.test.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2023 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 { startTestBackend } from '@backstage/backend-test-utils'; +import request from 'supertest'; +import { searchPlugin } from './alpha'; + +describe('searchPlugin', () => { + it('should serve search results on query endpoint', async () => { + const { server } = await startTestBackend({ + features: [searchPlugin()], + }); + + const response = await request(server).get('/api/search/query'); + expect(response.status).toBe(200); + expect(response.body).toEqual({ numberOfResults: 0, results: [] }); + }); +}); diff --git a/yarn.lock b/yarn.lock index c2c60036fb..b5203fbe29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7837,6 +7837,7 @@ __metadata: dependencies: "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" From d6ed5277b4864dc2fb88e9ae8f49c6862c059e90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 13:30:38 +0000 Subject: [PATCH 305/511] fix(deps): update dependency react-markdown to v8.0.6 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c85c4ade63..b885cca2f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33364,8 +33364,8 @@ __metadata: linkType: hard "react-markdown@npm:^8.0.0": - version: 8.0.5 - resolution: "react-markdown@npm:8.0.5" + version: 8.0.6 + resolution: "react-markdown@npm:8.0.6" dependencies: "@types/hast": ^2.0.0 "@types/prop-types": ^15.0.0 @@ -33385,7 +33385,7 @@ __metadata: peerDependencies: "@types/react": ">=16" react: ">=16" - checksum: 9d11b7aba16216d590e56b4744e05d2925141bfb0f5885b3d9400ccf006cd24b79ce3b3d20af8a083a01324215b58fa4c5979e44f69d54123ff1dd5dacb0dc89 + checksum: 59fd5dcd089df0cd9098755e3063d8fcf4b4635b1ac2d5e05fcda9923769724476396abdf2afb80fb8e7589a951deac50d6f89c4740d5ec6decd34076122c80c languageName: node linkType: hard From 97d141c1720e49399ffc8794e02b0e5054c5448e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 Mar 2023 14:43:34 +0100 Subject: [PATCH 306/511] Apply suggestions from code review Co-authored-by: Josh Berkus Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 691383af45..0e0bf89ebb 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -116,7 +116,7 @@ A Project Area Maintainer has all the rights and responsibilities of an Organiza ### Responsibilities -- Review PRs towards their project area. Project area maintainers are expected to review at least 20 PRs per year, or the majority of all PRs towards the area +- Review PRs towards their project area. Project area maintainers are expected to review at least 20 PRs per year, or the majority of all PRs towards the area, if it is less than 20 - Follow the [reviewing guide](REVIEWING.md) - Triage and respond to issues related to their project area - Mentor new project area maintainers From 7dde04015702d2e32aa91139cfd371ce96e8d2f6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 Mar 2023 14:34:10 +0100 Subject: [PATCH 307/511] GOVERNANCE: avoid -ing Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 0e0bf89ebb..6e972bb662 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -29,12 +29,12 @@ A Contributor contributes directly to the project and adds value to it. Contribu ### How to get involved -- Participating in community discussions -- Helping other users -- Submitting bug reports -- Commenting on issues -- Trying out new releases -- Attending community events +- Participate in community discussions +- Help other users +- Submit bug reports +- Comment on issues +- Try out new releases +- Attend community events ### How to contribute From f2dba12699703aeb0e34363a855163975a3f4832 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 Mar 2023 14:38:18 +0100 Subject: [PATCH 308/511] GOVERNANCE: call out alternative to contributions captured by Devstats Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 6e972bb662..1e713144ed 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -56,7 +56,7 @@ An Organization Member must meet the responsibilities and has the requirements o ### Responsibilities -- Continues to contribute regularly, as demonstrated by having at least 10 GitHub contributions per year, as found in [Devstats](https://backstage.devstats.cncf.io/d/48/users-statistics-by-repository-group?orgId=1&var-period=y&var-metric=contributions&var-repogroup_name=All&from=now-1y&to=now&var-users=All). +- Continues to contribute regularly, as demonstrated by having at least 10 GitHub contributions per year in [Devstats](https://backstage.devstats.cncf.io/d/48/users-statistics-by-repository-group?orgId=1&var-period=y&var-metric=contributions&var-repogroup_name=All&from=now-1y&to=now&var-users=All), or contributions of a similar effort that might not be captured in Devstats. ### Requirements From 0997f8d7a1b308a913a6208e53dbc30a5f59168c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:14:41 +0000 Subject: [PATCH 309/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.294.0 Signed-off-by: Renovate Bot --- yarn.lock | 138 +++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/yarn.lock b/yarn.lock index dda7bd7d5b..804a9eac75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -518,15 +518,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.293.0" +"@aws-sdk/client-cognito-identity@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.294.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.293.0 + "@aws-sdk/client-sts": 3.294.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.293.0 + "@aws-sdk/credential-provider-node": 3.294.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -557,20 +557,20 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 1902b344dec5807817583bf76df60d13eb62b663b73a3587aad513046f775222644859c5e146ddfc443486436d9912881aa8e00715f8ff26d5e497cf75aea22b + checksum: 438789bc1c3ce038666a981087682f451a79b911d8455b2eaa20539a4be86b78392a7dfa765591569cf8e2475aa2e18c797c9dcc1cf1b6f04fe327041111ac9b languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/client-s3@npm:3.293.0" + version: 3.294.0 + resolution: "@aws-sdk/client-s3@npm:3.294.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.293.0 + "@aws-sdk/client-sts": 3.294.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.293.0 + "@aws-sdk/credential-provider-node": 3.294.0 "@aws-sdk/eventstream-serde-browser": 3.292.0 "@aws-sdk/eventstream-serde-config-resolver": 3.292.0 "@aws-sdk/eventstream-serde-node": 3.292.0 @@ -619,19 +619,19 @@ __metadata: "@aws-sdk/xml-builder": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: c049bbd40964ebfc189f8a72aed2e5dafcfbc949b4c06a2e811eb0fb58ab34ac681aa039fe7f3473310a9efe226feed889268ff0f44c9eb71805aea3018b5bc7 + checksum: 1511b57f49833c5f22a54acc49eb7778bcca682498f2594ea889e7e725bc9232dab2ca47d77e3986df85f0549d0e190b90e478e33fe9be0ee3a0332fef9d0f97 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/client-sqs@npm:3.293.0" + version: 3.294.0 + resolution: "@aws-sdk/client-sqs@npm:3.294.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.293.0 + "@aws-sdk/client-sts": 3.294.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.293.0 + "@aws-sdk/credential-provider-node": 3.294.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -665,13 +665,13 @@ __metadata: "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: d07b9729ac138e71c789851d146a7632fdf1a50cb8d23a85af14b957bc23d18dbd42d291e04ee1df52844f75168e71818a3d2d962dc47a530350d760fefd8300 + checksum: 1fd2df404b9c0111c6f4b0b13919c0b1b671417a01fd6675a6b5dc563068a5b3feb0b7342442c0608980c03f6940ee575d48d702ab077e9e5a19c004e348fe7d languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.293.0" +"@aws-sdk/client-sso-oidc@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.294.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -705,13 +705,13 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: 4137f631355f75f7eea083b3e172dcbd67b1e7701cfe02fb21c922a39aa0d4f80171458473833d72150341f2320fc21fef74bb5cffdd15b4723f719c8caa4bce + checksum: ac2ef9fb1d96cdb0ad53a373a18b929d214bfad52208465466006443aef8f4704f646e5f4e00a0165922d97aa419c74f43390ae1f92cf1d4015af7a23ec06491 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/client-sso@npm:3.293.0" +"@aws-sdk/client-sso@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/client-sso@npm:3.294.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -745,18 +745,18 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.292.0 "@aws-sdk/util-utf8": 3.292.0 tslib: ^2.3.1 - checksum: a502dddebf8905b765f1bf126435d7948ac32e857f0127ac68e3fb1328cacaa660eed026d264853c7a6da39126cbcfedd5b022a1073525ea8ee66c409157b9a4 + checksum: 5c6cda16e7204fc1993af198de32e9f00821cb29e1f43a73252d77876cb453535a4e985d55e4cc27e903183c123c9df2eb100ec6841d5bbbfc017f99c3b1bf4b languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.293.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/client-sts@npm:3.293.0" +"@aws-sdk/client-sts@npm:3.294.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.294.0 + resolution: "@aws-sdk/client-sts@npm:3.294.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.293.0 + "@aws-sdk/credential-provider-node": 3.294.0 "@aws-sdk/fetch-http-handler": 3.292.0 "@aws-sdk/hash-node": 3.292.0 "@aws-sdk/invalid-dependency": 3.292.0 @@ -789,7 +789,7 @@ __metadata: "@aws-sdk/util-utf8": 3.292.0 fast-xml-parser: 4.1.2 tslib: ^2.3.1 - checksum: c99efc08e494098436fef2ba1321fa8362008d9190fcafff0694490f09f7bed76cc16c24b0d938c0d143255149efa6bffd8a568ecca5eab5fb103eba57f61966 + checksum: 75cb38df86db0880e82bd55002377f6089ac9c59fb9aa9a68cca12057cf98d49aaa6b9d9cfd5ed06691c99ceb4e363567cb7e3f96785463578431fe2121e18aa languageName: node linkType: hard @@ -806,15 +806,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.293.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.294.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.293.0 + "@aws-sdk/client-cognito-identity": 3.294.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: e23bcc010cf8002e4264b3074af6734f9fb81a8d556d453f19196765174ff313173749e2c17a76f9e7c4a485b82cb5f91a7d55e7742f5262fde5c7b93e279b9d + checksum: d4e3a8990edb7e6a468c291a471d27c3debed4566a657f0e20ee3e607778b7c908021c4dee90276f75fb3f3f0c220fefb7b1077099139721e6fd009f306e8827 languageName: node linkType: hard @@ -842,38 +842,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.293.0" +"@aws-sdk/credential-provider-ini@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.294.0" dependencies: "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.293.0 + "@aws-sdk/credential-provider-sso": 3.294.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 7fafb9ada9e0eec303b46bb02f392c0ff63861214df9345f6e4678d158d573cc2d5f941e25e8bad1491fc67f6913053e72cf6327ac4432fe4f7e70b68cdaeef3 + checksum: 9ff139aeb7ccc8cac8822fa86ede6c49226f625d76ecd83ca861fda7508c3f939df2bf96e026c7542ffbf2372eebfc85ad6c28dd50083bd40c711df2638e7747 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.293.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.293.0" +"@aws-sdk/credential-provider-node@npm:3.294.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.294.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.294.0" dependencies: "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.293.0 + "@aws-sdk/credential-provider-ini": 3.294.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.293.0 + "@aws-sdk/credential-provider-sso": 3.294.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: c0ff0ef0f4983ed6b56d73e910fb2a1f9ad43faf9cd9067fb6f276dd384e23ef7035016ff339273c9a2dfba1e4d0a27887f22acc86fb0d65018c85c5e1f6b1ab + checksum: 7182ca60b6208b0be3ac5416397725a6f0975ed80326925eec268342419d7dd99baa37941bbca3098390577cd057d22e6625bd99b5bf42f38688279936a8ae9e languageName: node linkType: hard @@ -889,17 +889,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.293.0" +"@aws-sdk/credential-provider-sso@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.294.0" dependencies: - "@aws-sdk/client-sso": 3.293.0 + "@aws-sdk/client-sso": 3.294.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/token-providers": 3.293.0 + "@aws-sdk/token-providers": 3.294.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 75fa91c622d526ebfee18d83e1eeeeac12f2069abae5d7921a1df21b85dd241da2d67b9976522f2efdfc319d53334e89b3715df4c4a857bf3978d38a3326dd00 + checksum: c9e05370b1334cf73311d13b5bdb67ccd7d10781eac952c57bc00c2f850bb0676dab3306ac9d6b9588d1e9f01942a14bbed0b14272e413a9e2c7181128852fbd languageName: node linkType: hard @@ -915,25 +915,25 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/credential-providers@npm:3.293.0" + version: 3.294.0 + resolution: "@aws-sdk/credential-providers@npm:3.294.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.293.0 - "@aws-sdk/client-sso": 3.293.0 - "@aws-sdk/client-sts": 3.293.0 - "@aws-sdk/credential-provider-cognito-identity": 3.293.0 + "@aws-sdk/client-cognito-identity": 3.294.0 + "@aws-sdk/client-sso": 3.294.0 + "@aws-sdk/client-sts": 3.294.0 + "@aws-sdk/credential-provider-cognito-identity": 3.294.0 "@aws-sdk/credential-provider-env": 3.292.0 "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.293.0 - "@aws-sdk/credential-provider-node": 3.293.0 + "@aws-sdk/credential-provider-ini": 3.294.0 + "@aws-sdk/credential-provider-node": 3.294.0 "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.293.0 + "@aws-sdk/credential-provider-sso": 3.294.0 "@aws-sdk/credential-provider-web-identity": 3.292.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: cca87d8518e353612c610e8c81944452d4461733d317f68fa29b819eac4741fe7438bc90261c67bd4284721158ce710c1ca7130e5e09eb3ad4f6174f2c14d34b + checksum: 6921e5d71e61d5e4cbb7de52c696f40a3babb7d6fe3460d7d425ace4f0a88d3925242392fda49f2d83d17b33b7954ba42290e6f054aa19d386b9d66912f25305 languageName: node linkType: hard @@ -1060,8 +1060,8 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.293.0 - resolution: "@aws-sdk/lib-storage@npm:3.293.0" + version: 3.294.0 + resolution: "@aws-sdk/lib-storage@npm:3.294.0" dependencies: "@aws-sdk/middleware-endpoint": 3.292.0 "@aws-sdk/smithy-client": 3.292.0 @@ -1072,7 +1072,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 99742e84bc4c4c18e0d9863cfd5d84dfcad2c57d83b1766973f5440840b0185264a069e172b504e212f5d8c9d0e38cd11ed2d5a06ecfcb93edb11ea44cc2cf92 + checksum: 26c0db366050efd252acbc067b56b11b7c6d450aa5561f7b0108646e766b34a0129fa7a89efe028d8a8196ad0a1d5bd22554724277e606216b5873804bc4f648 languageName: node linkType: hard @@ -1430,16 +1430,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/token-providers@npm:3.293.0" +"@aws-sdk/token-providers@npm:3.294.0": + version: 3.294.0 + resolution: "@aws-sdk/token-providers@npm:3.294.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.293.0 + "@aws-sdk/client-sso-oidc": 3.294.0 "@aws-sdk/property-provider": 3.292.0 "@aws-sdk/shared-ini-file-loader": 3.292.0 "@aws-sdk/types": 3.292.0 tslib: ^2.3.1 - checksum: 3a12f7f190e34e7341bff58d273706176538662bc1435637f866444233035ac142aabdb9fb7529d75b4d224fd3c739878ebd6a19f5fefb0ee054f63627cc3d2f + checksum: 7d982876b2083a06810f6df62fce140b2408177debbd078eb3e4c591007db38b769abac308c7ebd86598784bc690a92619e6d5d917bef005242e02c4978b64b9 languageName: node linkType: hard From 4e23f9bd33913aa01e62951f9b5aaa9f6722eecc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:15:16 +0000 Subject: [PATCH 310/511] fix(deps): update dependency @tanstack/react-query to v4.28.0 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index dda7bd7d5b..9c59f6c92c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13766,18 +13766,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.26.1": - version: 4.26.1 - resolution: "@tanstack/query-core@npm:4.26.1" - checksum: c7bc751d7d08ce27dd7262aa75a263808b128902b8f3a5dd1ff9b1dfda6511af965388bcdb7d8130bdf10756c1d583f527ead274b1d3e4f4db29c83260b416b0 +"@tanstack/query-core@npm:4.27.0": + version: 4.27.0 + resolution: "@tanstack/query-core@npm:4.27.0" + checksum: 914b4f01ac75632f4603b650e9105f64c739b79250baf76aad16cee216f7bad6060c04eda0c70838fe61a5f6c17883e19fcc3075b2433a906539da95ce785796 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.26.1 - resolution: "@tanstack/react-query@npm:4.26.1" + version: 4.28.0 + resolution: "@tanstack/react-query@npm:4.28.0" dependencies: - "@tanstack/query-core": 4.26.1 + "@tanstack/query-core": 4.27.0 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -13788,7 +13788,7 @@ __metadata: optional: true react-native: optional: true - checksum: 3b43a5acc84841364c08ed7c7d0f495008214f1f39b7fb073a95a53528ce40b4841dbc407070b4c0082d73990277bbcf9bc88df40217e70c226be4931efaa081 + checksum: 7baa70d22b55cfa22f8a1d92ba9f8379c5436ee81fce3f0e7df4a8c29bb26bfef4a83759cf10f752b40ae2940099fcce88ce91a773240f4999ae91136980c6e3 languageName: node linkType: hard From 61a086f7c432a9f2287b69384b877847abdfeabc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 15:02:00 +0000 Subject: [PATCH 311/511] fix(deps): update dependency isomorphic-git to v1.23.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d0d6e5c3e4..79842e27e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26139,8 +26139,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.8.0": - version: 1.22.0 - resolution: "isomorphic-git@npm:1.22.0" + version: 1.23.0 + resolution: "isomorphic-git@npm:1.23.0" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -26155,7 +26155,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: 59f1bf6a6f3e3fad2d43ffa992c20fea41c41e041e11422caea2da252e6cb712e6c18bb2878ed5c7e6b37336d4dc967fb54f7335d28a365c062b7c23e4ba07a9 + checksum: a733c1183855a90edd6d82cfdccd467886045fa98af211a50df7cbb2d3088e122542b9eef0f79ebe9d5e127a81c62dfa0ff561d906f0c9d4e5eb7a0c1f13f56f languageName: node linkType: hard From 758c1f6765e756cea1bfc1a09f932ca0cae17c13 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 15:03:11 +0000 Subject: [PATCH 312/511] fix(deps): update dependency sass to v1.59.3 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 0b6745e677..a0467071b9 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -9437,15 +9437,15 @@ __metadata: linkType: hard "sass@npm:^1.57.1": - version: 1.58.3 - resolution: "sass@npm:1.58.3" + version: 1.59.3 + resolution: "sass@npm:1.59.3" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 35a2b98c037ef80fdc93c9b0be846e6ccc7d75596351a37ee79c397e66666d0a754c52c4696e746c0aff32327471e185343ca349e998a58340411adc9d0489a5 + checksum: 839b5282cdf7d0ba3fdbfb605277dd584a8c40fa3e3e58ad905d64cd812acfb82ff0a4072d4981673db884ee61505472ff07c5c5a8a497f16ba013b183ba6473 languageName: node linkType: hard From 4c511b4c3f720dab38be31c5d25c04cdaf4355fa Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 9 Jan 2023 16:55:55 +0100 Subject: [PATCH 313/511] Add Gitlab Backend Scaffolder Plugin Signed-off-by: Dominik Pfaffenbauer --- .../.eslintrc.js | 1 + .../README.md | 118 + .../package.json | 52 + .../src/actions/createProjectAccessToken.ts | 109 + .../actions/createProjectDeployToken.test.ts | 94 + .../src/actions/createProjectDeployToken.ts | 111 + .../src/actions/createProjectVariable.ts | 140 + .../src/index.ts | 19 + .../src/util.ts | 29 + yarn.lock | 10009 ++++++++-------- 10 files changed, 5876 insertions(+), 4806 deletions(-) create mode 100644 plugins/scaffolder-backend-module-gitlab/.eslintrc.js create mode 100644 plugins/scaffolder-backend-module-gitlab/README.md create mode 100644 plugins/scaffolder-backend-module-gitlab/package.json create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/index.ts create mode 100644 plugins/scaffolder-backend-module-gitlab/src/util.ts diff --git a/plugins/scaffolder-backend-module-gitlab/.eslintrc.js b/plugins/scaffolder-backend-module-gitlab/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md new file mode 100644 index 0000000000..5689c105ab --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -0,0 +1,118 @@ +# scaffolder-backend-module-gitlab + +Welcome to the Gitlab Module for Scaffolder. + +Here you can find all Gitlab related features to improve your scaffolder: + +## Getting started + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-scaffolder-backend-module-gitlab +``` + +Configure the action (you can check +the [docs](https://backstage.io/docs/features/software-templates/writing-custom-actions#registering-custom-actions) to +see all options): + +After that you can use the action in your template: + +```yaml +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: gitlab-demo + title: Gitlab DEMO + description: Scaffolder Gitlab Demo +spec: + owner: backstage/techdocs-core + type: service + + parameters: + - title: Fill in some steps + required: + - name + properties: + name: + title: Name + type: string + description: Unique name of the component + ui:autofocus: true + ui:options: + rows: 5 + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - gitlab.com + + steps: + - id: fetch + name: Fetch + action: fetch:template + input: + url: https://github.com/TEMPLATE + values: + name: ${{ parameters.name }} + + - id: publish + name: Publish + action: publish:gitlab + input: + description: This is ${{ parameters.name }} + repoUrl: ${{ parameters.repoUrl }} + sourcePath: pimcore + defaultBranch: main + + - id: gitlab-deploy-token + name: Create Deploy Token + action: gitlab:create-project-deploy-token + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish'].output.projectId }}" + name: ${{ parameters.name }}-secret + username: ${{ parameters.name }}-secret + scopes: ['read_registry'] + + - id: gitlab-access-token + name: Gitlab Access Token + action: gitlab:create-project-access-token + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish-manifest'].output.projectId }}" + name: ${{ parameters.name }}-access-token + accessLevel: 40 + scopes: ['read_repository', 'write_repository'] + + - id: gitlab-project-variable + name: Manifest CI/CD Variable + action: gitlab:create-project-variable + input: + repoUrl: ${{ parameters.repoUrl }} + projectId: "${{ steps['publish'].output.projectId }}" + key: 'VARIABLE_NAME' + value: "${{ steps['gitlab-access-token'].output.access_token }}" + variableType: 'env_var' + masked: true + variableProtected: false + raw: false + environmentScope: '*' + + - id: register + name: Register + action: catalog:register + input: + repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} + catalogInfoPath: '/catalog-info.yaml' + + output: + links: + - title: Repository + url: ${{ steps['publish'].output.remoteUrl }} +``` diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json new file mode 100644 index 0000000000..9864188049 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -0,0 +1,52 @@ +{ + "name": "@backstage/plugin-scaffolder-backend-module-gitlab", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/core-components": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/plugin-scaffolder-backend": "workspace:^", + "@gitbeaker/node": "^35.8.0", + "fs-extra": "10.1.0" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@backstage/core-app-api": "workspace:^", + "@backstage/dev-utils": "workspace:^", + "@backstage/test-utils": "workspace:^", + "@testing-library/jest-dom": "^5.10.1", + "@testing-library/react": "^12.1.3", + "@testing-library/user-event": "^14.0.0", + "@types/node": "*", + "cross-fetch": "^3.1.5", + "msw": "^0.49.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts new file mode 100644 index 0000000000..384512f183 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -0,0 +1,109 @@ +/* + * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { parseRepoHost } from '../util'; + +export const createGitlabProjectAccessToken = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction<{ + repoUrl: string; + projectId: string | number; + name: string; + accessLevel: number; + scopes: string[]; + token?: string; + }>({ + id: 'gitlab:create-project-access-token', + schema: { + input: { + required: ['projectId'], + type: 'object', + properties: { + repoUrl: { + title: 'Repository Location', + type: 'string', + }, + projectId: { + title: 'Project ID', + type: 'string | number', + }, + name: { + title: 'Deploy Token Name', + type: 'string', + }, + accessLevel: { + title: 'Access Level of the Token', + type: 'number', + }, + scopes: { + title: 'Scopes', + type: 'array', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to GitLab', + }, + }, + }, + }, + async handler(ctx) { + ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); + const { repoUrl, projectId, name, accessLevel, scopes } = ctx.input; + + const host = parseRepoHost(repoUrl); + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = ctx.input.token || integrationConfig.config.token!; + const tokenType = ctx.input.token ? 'oauthToken' : 'token'; + + if (tokenType === 'oauthToken') { + throw new InputError(`OAuth Token is currently not supported`); + } + + const response = await fetch( + `${integrationConfig.config.baseUrl}/api/v4/projects/${projectId}/access_tokens`, + { + method: 'POST', // *GET, POST, PUT, DELETE, etc. + headers: { + 'PRIVATE-TOKEN': token, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name: name, + scopes: scopes, + access_level: accessLevel, + }), + }, + ); + + const result = await response.json(); + + ctx.output('access_token', result.token); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts new file mode 100644 index 0000000000..c2d1c223c4 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts @@ -0,0 +1,94 @@ +/* + * Copyright 2021 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 { createGitlabProjectDeployToken } from './createProjectDeployToken'; +import { ScmIntegrations } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; +import { getVoidLogger } from '@backstage/backend-common'; +// eslint-disable-next-line no-restricted-imports +import { PassThrough } from 'stream'; + +const mockGitlabClient = { + ProjectDeployTokens: { + add: jest.fn(), + }, +}; +jest.mock('@gitbeaker/node', () => ({ + Gitlab: class { + constructor() { + return mockGitlabClient; + } + }, +})); + +describe('gitlab:create-deploy-token', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createGitlabProjectDeployToken({ integrations }); + const mockContext = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + projectId: '123', + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_repository'], + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should work when there is a token provided through ctx.input', async () => { + await action.handler({ + ...mockContext, + input: { + repoUrl: 'hosted.gitlab.com?repo=bob&owner=owner', + projectId: '123', + name: 'tokenname', + username: 'tokenuser', + scopes: ['read_repository'], + }, + }); + + expect(mockGitlabClient.ProjectDeployTokens.add).toHaveBeenCalledWith( + '123', + 'tokenname', + ['read_repository'], + { username: 'tokenuser' }, + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts new file mode 100644 index 0000000000..165d7a7863 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -0,0 +1,111 @@ +/* + * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { Gitlab } from '@gitbeaker/node'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { DeployTokenScope } from '@gitbeaker/core/dist/types/templates/ResourceDeployTokens'; +import { parseRepoHost } from '../util'; + +export const createGitlabProjectDeployToken = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction<{ + repoUrl: string; + projectId: string | number; + name: string; + username: string; + scopes: string[]; + token?: string; + }>({ + id: 'gitlab:create-project-deploy-token', + schema: { + input: { + required: ['projectId'], + type: 'object', + properties: { + repoUrl: { + title: 'Repository Location', + type: 'string', + }, + projectId: { + title: 'Project ID', + type: 'string | number', + }, + name: { + title: 'Deploy Token Name', + type: 'string', + }, + username: { + title: 'Deploy Token Username', + type: 'string', + }, + scopes: { + title: 'Scopes', + type: 'array', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to GitLab', + }, + }, + }, + }, + async handler(ctx) { + ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); + const { repoUrl, projectId, name, username, scopes } = ctx.input; + + const host = parseRepoHost(repoUrl); + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = ctx.input.token || integrationConfig.config.token!; + const tokenType = ctx.input.token ? 'oauthToken' : 'token'; + + if (tokenType === 'oauthToken') { + throw new InputError(`OAuth Token is currently not supported`); + } + + const api = new Gitlab({ + host: integrationConfig.config.baseUrl, + token: token, + }); + + const deployToken = await api.ProjectDeployTokens.add( + projectId, + name, + scopes as DeployTokenScope[], + { + username: username, + }, + ); + + const string = JSON.stringify(deployToken); + const result = JSON.parse(string); + + ctx.output('deploy_token', result.token); + ctx.output('user', deployToken.username); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts new file mode 100644 index 0000000000..1b007a9c46 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -0,0 +1,140 @@ +/* + * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { InputError } from '@backstage/errors'; +import { parseRepoHost } from '../util'; +import { Gitlab } from '@gitbeaker/node'; + +export const createGitlabProjectVariable = (options: { + integrations: ScmIntegrationRegistry; +}) => { + const { integrations } = options; + return createTemplateAction<{ + repoUrl: string; + projectId: string | number; + key: string; + value: string; + variableType: string; + variableProtected: boolean; + masked: boolean; + raw: boolean; + environmentScope: string; + token?: string; + }>({ + id: 'gitlab:create-project-variable', + schema: { + input: { + required: [ + 'projectId', + 'key', + 'value', + 'variableType', + 'variableProtected', + 'masked', + 'raw', + 'environmentScope', + ], + type: 'object', + properties: { + repoUrl: { + title: 'Repository Location', + type: 'string', + }, + key: { + title: + 'The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed', + type: 'string', + }, + value: { + title: 'The value of a variable', + type: 'string', + }, + variableType: { + title: 'Variable Type (env_var or file)', + type: 'string', + }, + variableProtected: { + title: 'Whether the variable is protected. Default: false', + type: 'boolean', + }, + masked: { + title: 'Whether the variable is masked. Default: false', + type: 'boolean', + }, + raw: { + title: 'Whether the variable is expandable. Default: false', + type: 'boolean', + }, + environmentScope: { + title: 'The environment_scope of the variable. Default: *', + type: 'string', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to GitLab', + }, + }, + }, + }, + async handler(ctx) { + const { + repoUrl, + projectId, + key, + value, + variableType, + variableProtected, + masked, + raw, + environmentScope, + } = ctx.input; + + const host = parseRepoHost(repoUrl); + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = ctx.input.token || integrationConfig.config.token!; + const tokenType = ctx.input.token ? 'oauthToken' : 'token'; + + if (tokenType === 'oauthToken') { + throw new InputError(`OAuth Token is currently not supported`); + } + + const api = new Gitlab({ + host: integrationConfig.config.baseUrl, + token: token, + }); + + await api.ProjectVariables.create(projectId, { + key: key, + value: value, + variable_type: variableType, + protected: variableProtected, + masked: masked, + raw: raw, + environment_scope: environmentScope, + }); + }, + }); +}; diff --git a/plugins/scaffolder-backend-module-gitlab/src/index.ts b/plugins/scaffolder-backend-module-gitlab/src/index.ts new file mode 100644 index 0000000000..1d72d6f4b5 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2021 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. + */ + +export * from './actions/createProjectDeployToken'; +export * from './actions/createProjectAccessToken'; +export * from './actions/createProjectVariable'; diff --git a/plugins/scaffolder-backend-module-gitlab/src/util.ts b/plugins/scaffolder-backend-module-gitlab/src/util.ts new file mode 100644 index 0000000000..b937c01f9a --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/src/util.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2021 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 { InputError } from '@backstage/errors'; + +export const parseRepoHost = (repoUrl: string): string => { + let parsed; + try { + parsed = new URL(`https://${repoUrl}`); + } catch (error) { + throw new InputError( + `Invalid repo URL passed to publisher, got ${repoUrl}, ${error}`, + ); + } + return parsed.host; +}; diff --git a/yarn.lock b/yarn.lock index d0d6e5c3e4..cf87f7aff9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,18 +6,19 @@ __metadata: cacheKey: 8 "@adobe/css-tools@npm:^4.0.1": - version: 4.0.1 - resolution: "@adobe/css-tools@npm:4.0.1" - checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 + version: 4.2.0 + resolution: "@adobe/css-tools@npm:4.2.0" + checksum: dc5cc92ba3d562e7ffddb79d6d222c7e00b65f255fd2725b3d71490ff268844be322f917415d8c4ab39eca646343b632058db8bd5b1d646193fcc94d1d3e420b languageName: node linkType: hard -"@ampproject/remapping@npm:^2.1.0": - version: 2.1.2 - resolution: "@ampproject/remapping@npm:2.1.2" +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" dependencies: - "@jridgewell/trace-mapping": ^0.3.0 - checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 languageName: node linkType: hard @@ -324,7 +325,7 @@ __metadata: languageName: node linkType: hard -"@ardatan/sync-fetch@npm:0.0.1": +"@ardatan/sync-fetch@npm:^0.0.1": version: 0.0.1 resolution: "@ardatan/sync-fetch@npm:0.0.1" dependencies: @@ -352,11 +353,11 @@ __metadata: linkType: hard "@asyncapi/parser@npm:^1.18.0": - version: 1.18.0 - resolution: "@asyncapi/parser@npm:1.18.0" + version: 1.18.1 + resolution: "@asyncapi/parser@npm:1.18.1" dependencies: "@apidevtools/json-schema-ref-parser": ^9.0.6 - "@asyncapi/specs": ^4.1.0 + "@asyncapi/specs": ^4.1.1 "@fmvilas/pseudo-yaml-ast": ^0.3.1 ajv: ^6.10.1 js-yaml: ^3.13.1 @@ -364,7 +365,7 @@ __metadata: lodash.clonedeep: ^4.5.0 node-fetch: ^2.6.0 tiny-merge-patch: ^0.1.2 - checksum: 7e08cae52990ce97299170faf99aaf27a8e2e02e6b03df28518d256f5687f394c26fd0a4aba235514ed4e3c2fd081a79321a489c20987ed22122afdb0b9ea0dd + checksum: 6c2799d9338e9650001f2e6afaf1e7525ad9231243130da4adeb96b8af37f0ba2cac41181513aa903aacc08690e64defda8518c78f2b88007d67a7c71d58818e languageName: node linkType: hard @@ -387,12 +388,12 @@ __metadata: languageName: node linkType: hard -"@asyncapi/specs@npm:^4.1.0": - version: 4.1.0 - resolution: "@asyncapi/specs@npm:4.1.0" +"@asyncapi/specs@npm:^4.1.1": + version: 4.2.0 + resolution: "@asyncapi/specs@npm:4.2.0" dependencies: "@types/json-schema": ^7.0.11 - checksum: 6e95f3c1ef7267480cdfc69f5a015f63b9101874289e31843a629346a3ea07490e3043b296a089bf3458e877c664d83d4b4738dcb53d37d7e13b75c7bc08c879 + checksum: 1eae980e1d7754469cf079bfbbaa2f1185b5fd0293f5bf5d7903014c81fb1c8658ef463a09f6dcca58081f87c0e98b3e0c13b09e3858c738bf209182472763e0 languageName: node linkType: hard @@ -1565,11 +1566,11 @@ __metadata: linkType: hard "@aws-sdk/util-locate-window@npm:^3.0.0": - version: 3.183.0 - resolution: "@aws-sdk/util-locate-window@npm:3.183.0" + version: 3.292.0 + resolution: "@aws-sdk/util-locate-window@npm:3.292.0" dependencies: tslib: ^2.3.1 - checksum: c29899b440c148aa44a5d9322e06e4cf21644e47bee10555cf8db104d9d76b3985fa4da6e8ca92c137b0b739f7504a7d106e9da49e1d189b84f51f45c21b2204 + checksum: d1c0f0a41ab3e1210af26db11d1a71ba5fbe11cd69203331cdd4edb9f4dc78c7e455da242b1d34859da7caef9b1417c4cf163cb8a6291dd2a04507a19122c13a languageName: node linkType: hard @@ -1655,11 +1656,11 @@ __metadata: linkType: hard "@aws-sdk/util-utf8-browser@npm:^3.0.0": - version: 3.188.0 - resolution: "@aws-sdk/util-utf8-browser@npm:3.188.0" + version: 3.259.0 + resolution: "@aws-sdk/util-utf8-browser@npm:3.259.0" dependencies: tslib: ^2.3.1 - checksum: dacd27164aa0835888434e080b67f04510e2281560540ff73496f2d0aa73b0b7f830ec08491b35c3a51bf6214615579182aff8727e151e54a74a97a197a2ac31 + checksum: b6a1e580da1c9b62c749814182a7649a748ca4253edb4063aa521df97d25b76eae3359eb1680b86f71aac668e05cc05c514379bca39ebf4ba998ae4348412da8 languageName: node linkType: hard @@ -1694,11 +1695,11 @@ __metadata: linkType: hard "@azure/abort-controller@npm:^1.0.0": - version: 1.0.2 - resolution: "@azure/abort-controller@npm:1.0.2" + version: 1.1.0 + resolution: "@azure/abort-controller@npm:1.1.0" dependencies: - tslib: ^2.0.0 - checksum: 2af40548b521fcd8c9c3a9b04f25ab00fecd873f659cfb3bd0b38a507643a2c7f32c367e4ea8a0ffa6ef3ab084e13285c9792ad9133a1ac03d60e7ea70ea381c + tslib: ^2.2.0 + checksum: 0f45e504d4aea799486867179afe7589255f6c111951279958e9d0aa5faebb2c96b8f88e3e3c958ce07b02bcba0b0cddb1bbec94705f573a48ecdb93eec1a92a languageName: node linkType: hard @@ -1740,8 +1741,8 @@ __metadata: linkType: hard "@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" + version: 1.7.2 + resolution: "@azure/core-client@npm:1.7.2" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.4.0 @@ -1750,7 +1751,7 @@ __metadata: "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 + checksum: 2c6af345ed7f97d7d214873cf08c2564603c659abc8950a1b866b137dfb8b68cc367f75a1c0d0ea840ac8f66a50604661f6f2569184dcda717ec4e62c3c6d977 languageName: node linkType: hard @@ -1777,29 +1778,28 @@ __metadata: linkType: hard "@azure/core-lro@npm:^2.2.0": - version: 2.2.4 - resolution: "@azure/core-lro@npm:2.2.4" + version: 2.5.1 + resolution: "@azure/core-lro@npm:2.5.1" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: f3db331409f95fc71206acd9f64efbbdf43a83d86c2012bdd19e577a603225b3a7e74e827e5c6aad1cf18024bdd8110c4cf341f7386fc83c5cb86ab72f5ad9ca + checksum: 33a47694b539dfe0b97601972b7e1f1cd0c0248ffa2109f69d425cb7e9397ebcfb9221e65a183b4e5890e49721a526e2b39b529e7c372bc455598d800811023b languageName: node linkType: hard "@azure/core-paging@npm:^1.1.1, @azure/core-paging@npm:^1.2.0": - version: 1.3.0 - resolution: "@azure/core-paging@npm:1.3.0" + version: 1.5.0 + resolution: "@azure/core-paging@npm:1.5.0" dependencies: tslib: ^2.2.0 - checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 + checksum: 156230f0fdf757a0353a2aac6d012d385ed88f8ab5bccf00eee27d8d75843e681674b2d10ed43309669f9cb93bf8d9d000232896593b6fcf399fa391442a59c5 languageName: node linkType: hard "@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.8.0, @azure/core-rest-pipeline@npm:^1.9.1": - version: 1.9.2 - resolution: "@azure/core-rest-pipeline@npm:1.9.2" + version: 1.10.2 + resolution: "@azure/core-rest-pipeline@npm:1.10.2" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.4.0 @@ -1811,7 +1811,7 @@ __metadata: https-proxy-agent: ^5.0.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 + checksum: 2f8af40fedf06d4c6f4bb9a337a6c6bbb93baa0585e57c8a10044c0ee811e6b4a7fcf053a7e620decaa39ee2d7de6c053ab7d825566c0a5eda37c814a55fac49 languageName: node linkType: hard @@ -1869,11 +1869,11 @@ __metadata: linkType: hard "@azure/logger@npm:^1.0.0": - version: 1.0.1 - resolution: "@azure/logger@npm:1.0.1" + version: 1.0.4 + resolution: "@azure/logger@npm:1.0.4" dependencies: - tslib: ^2.0.0 - checksum: a9312a3a2c19cb23a48a08adfc37dc618755f00428c4bac549bcf996f5bb19a1e220172f44ca33d126b7001192261ce2c92d665748e2cb3ea16798a63a5c8982 + tslib: ^2.2.0 + checksum: 2c243d4c667bbc5cd3e60d4473d0f1169fcef2498a02138398af15547fe1b2870197bcb4c487327451488e4d71dee05244771d51328f03611e193b99fb9aa9af languageName: node linkType: hard @@ -1889,8 +1889,8 @@ __metadata: linkType: hard "@azure/ms-rest-js@npm:^2.2.0": - version: 2.6.2 - resolution: "@azure/ms-rest-js@npm:2.6.2" + version: 2.6.4 + resolution: "@azure/ms-rest-js@npm:2.6.4" dependencies: "@azure/core-auth": ^1.1.4 abort-controller: ^3.0.0 @@ -1901,41 +1901,41 @@ __metadata: tunnel: 0.0.6 uuid: ^8.3.2 xml2js: ^0.4.19 - checksum: de650dfc3928a2036923fb3bf50e0324f9f36f5d320ca6d128005b1345ad80b39ab3410073ac35fb137dec4c7d799c602b1cafdf9573b3432b6b8eee8a1e39f8 + checksum: eefc1bf2cc00ee5f603a64b6d145aef98287fe9de7fbb3d8cd68c2f24b38eddb4af4535b6bd937f8fac285c47a6c68db3c005095444d78b5e70fb5adaa4f2780 languageName: node linkType: hard "@azure/msal-browser@npm:^2.26.0": - version: 2.27.0 - resolution: "@azure/msal-browser@npm:2.27.0" + version: 2.34.0 + resolution: "@azure/msal-browser@npm:2.34.0" dependencies: - "@azure/msal-common": ^7.1.0 - checksum: 6cafb4d41a92f1bbb82e7128f64ccd6538ec116a2521f412108d94c4173601d31ea62febb7b22206dcae691e6a01cf7f9ce92793420599437b50a24c7e6ab851 + "@azure/msal-common": ^11.0.0 + checksum: 0ce02792d4488aa7440dfb1d05895192e36edc6f99364e1665327ed7724b922b3f7626d9d7abc6c269f7797c21519433a52f2eb53750c5afb95b920515af92c3 languageName: node linkType: hard -"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.1.0": - version: 7.1.0 - resolution: "@azure/msal-common@npm:7.1.0" - checksum: 761a8b9363c7b620d831aba7d7e7a66e341685e306034b027b57dc31dae11abdf86c3187c08fc8008448c845ffdcbbc42c767c75355625cf87aba25ba7e2832e +"@azure/msal-common@npm:^11.0.0": + version: 11.0.0 + resolution: "@azure/msal-common@npm:11.0.0" + checksum: 32aa79b20ead2943d6622779aee6656f1b73ce4d981437da9bcfa7541799514c688e3f3d9d68ec5cc48031745a723be1a6de984c56c031bf9364daee559f5240 languageName: node linkType: hard -"@azure/msal-common@npm:^9.0.2": - version: 9.0.2 - resolution: "@azure/msal-common@npm:9.0.2" - checksum: 5a44d23b1d0f80d3e2221d157c1bd48bdfd19f5a4ac2fc58c73c52ffd25868c1760ea27ad0408931e07f552adc19764757bf91f7bec59258d9d931274df15657 +"@azure/msal-common@npm:^7.0.0": + version: 7.6.0 + resolution: "@azure/msal-common@npm:7.6.0" + checksum: b2541603c87778daad4627ddd796577651ccae18c93d518f4c0e40e42475dab8781644903ad1c7f876277e0c436d47548c82d9034b458bca00c746fd465ae184 languageName: node linkType: hard "@azure/msal-node@npm:^1.10.0": - version: 1.14.6 - resolution: "@azure/msal-node@npm:1.14.6" + version: 1.16.0 + resolution: "@azure/msal-node@npm:1.16.0" dependencies: - "@azure/msal-common": ^9.0.2 + "@azure/msal-common": ^11.0.0 jsonwebtoken: ^9.0.0 uuid: ^8.3.0 - checksum: 7fb2085fe772474bb4c6c1e0a2467da6b2380dfa66f7c67f63d4a8774f591744dc64a6f3337d43c810ff433bc327be470ece59dcd0fa7aff4459e32beb4c738b + checksum: e8f5aec00cd104d142b485777898ed00efee969eb433af1789f57616ddfe7a65bfb75971789e3feb1877f5d4af8fc0978a0d75bf482c70c479678b1f118d7f29 languageName: node linkType: hard @@ -1973,44 +1973,45 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.18.8, @babel/compat-data@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/compat-data@npm:7.19.1" - checksum: f985887ea08a140e4af87a94d3fb17af0345491eb97f5a85b1840255c2e2a97429f32a8fd12a7aae9218af5f1024f1eb12a5cd280d2d69b2337583c17ea506ba +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5": + version: 7.21.0 + resolution: "@babel/compat-data@npm:7.21.0" + checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5": - version: 7.19.1 - resolution: "@babel/core@npm:7.19.1" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.19.6": + version: 7.21.3 + resolution: "@babel/core@npm:7.21.3" dependencies: - "@ampproject/remapping": ^2.1.0 + "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.0 - "@babel/helper-compilation-targets": ^7.19.1 - "@babel/helper-module-transforms": ^7.19.0 - "@babel/helpers": ^7.19.0 - "@babel/parser": ^7.19.1 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.1 - "@babel/types": ^7.19.0 + "@babel/generator": ^7.21.3 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helpers": ^7.21.0 + "@babel/parser": ^7.21.3 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.3 + "@babel/types": ^7.21.3 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.1 + json5: ^2.2.2 semver: ^6.3.0 - checksum: 941c8c119b80bdba5fafc80bbaa424d51146b6d3c30b8fae35879358dd37c11d3d0926bc7e970a0861229656eedaa8c884d4a3a25cc904086eb73b827a2f1168 + checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.19.0, @babel/generator@npm:^7.7.2": - version: 7.19.3 - resolution: "@babel/generator@npm:7.19.3" +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.21.3, @babel/generator@npm:^7.7.2": + version: 7.21.3 + resolution: "@babel/generator@npm:7.21.3" dependencies: - "@babel/types": ^7.19.3 + "@babel/types": ^7.21.3 "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: b1585e398f6c37f442a2fdac964a326b348fbc8fb99a6aaf4f72bbe993adb0ca792bc0a9c65e59930b2a2e55eb5aa3aab360ceb678d3d40692eb0cda2b7b6aa6 + checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 languageName: node linkType: hard @@ -2033,68 +2034,68 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-compilation-targets@npm:7.19.1" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" dependencies: - "@babel/compat-data": ^7.19.1 + "@babel/compat-data": ^7.20.5 "@babel/helper-validator-option": ^7.18.6 browserslist: ^4.21.3 + lru-cache: ^5.1.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: c2d3039265e498b341a6b597f855f2fcef02659050fefedf36ad4e6815e6aafe1011a761214cc80d98260ed07ab15a8cbe959a0458e97bec5f05a450e1b1741b + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6": - version: 7.18.9 - resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-member-expression-to-functions": ^7.21.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.9 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 + checksum: 3e781d91d1056ea9b3a0395f3017492594a8b86899119b4a1645227c31727b8bec9bc8f6b72e86b1c5cf2dd6690893d2e8c5baff4974c429e616ead089552a21 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": + version: 7.21.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.1.0 + regexpu-core: ^5.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2d76e660cbfd0bfcb01ca9f177f0e9091c871a6b99f68ece6bcf4ab4a9df073485bdc2d87ecdfbde44b7f3723b26d13085d0f92082adb3ae80d31b246099f10a + checksum: 63a6396a4e9444edc7e97617845583ea5cf059573d0b4cc566869f38576d543e37fde0edfcc21d6dfb7962ed241e909561714dc41c5213198bac04e0983b04f2 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.1": - version: 0.3.1 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" +"@babel/helper-define-polyfill-provider@npm:^0.3.3": + version: 0.3.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" dependencies: - "@babel/helper-compilation-targets": ^7.13.0 - "@babel/helper-module-imports": ^7.12.13 - "@babel/helper-plugin-utils": ^7.13.0 - "@babel/traverse": ^7.13.0 + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-plugin-utils": ^7.16.7 debug: ^4.1.1 lodash.debounce: ^4.0.8 resolve: ^1.14.2 semver: ^6.1.2 peerDependencies: "@babel/core": ^7.4.0-0 - checksum: e3e93cb22febfc0449a210cdafb278e5e1a038af2ca2b02f5dee71c7a49e8ba26e469d631ee11a4243885961a62bb2e5b0a4deb3ec1d7918a33c953d05c3e584 + checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.6, @babel/helper-environment-visitor@npm:^7.18.9": +"@babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 @@ -2110,13 +2111,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e languageName: node linkType: hard @@ -2129,16 +2130,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" +"@babel/helper-member-expression-to-functions@npm:^7.20.7, @babel/helper-member-expression-to-functions@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.21.0" dependencies: - "@babel/types": ^7.18.9 - checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a + "@babel/types": ^7.21.0 + checksum: 49cbb865098195fe82ba22da3a8fe630cde30dcd8ebf8ad5f9a24a2b685150c6711419879cf9d99b94dad24cff9244d8c2a890d3d7ec75502cd01fe58cff5b5d languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -2147,19 +2148,19 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9, @babel/helper-module-transforms@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-module-transforms@npm:7.19.0" +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/helper-module-transforms@npm:7.21.2" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.18.6 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.2 + "@babel/types": ^7.21.2 + checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 languageName: node linkType: hard @@ -2172,14 +2173,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.6": +"@babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -2193,34 +2194,35 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-replace-supers@npm:7.18.9" +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-replace-supers@npm:7.20.7" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.20.7 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-simple-access@npm:7.18.6" +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" dependencies: - "@babel/types": ^7.18.6 - checksum: 37cd36eef199e0517845763c1e6ff6ea5e7876d6d707a6f59c9267c547a50aa0e84260ba9285d49acfaf2cfa0a74a772d92967f32ac1024c961517d40b6c16a5 + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" dependencies: - "@babel/types": ^7.18.9 - checksum: 6e93ccd10248293082606a4b3e30eed32c6f796d378f6b662796c88f462f348aa368aadeb48eb410cfcc8250db93b2d6627c2e55662530f08fc25397e588d68a + "@babel/types": ^7.20.0 + checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd languageName: node linkType: hard @@ -2233,10 +2235,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/helper-string-parser@npm:7.18.10" - checksum: d554a4393365b624916b5c00a4cc21c990c6617e7f3fe30be7d9731f107f12c33229a7a3db9d829bfa110d2eb9f04790745d421640e3bd245bb412dc0ea123c1 +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 languageName: node linkType: hard @@ -2247,33 +2249,33 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf +"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 languageName: node linkType: hard "@babel/helper-wrap-function@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-wrap-function@npm:7.18.9" + version: 7.20.5 + resolution: "@babel/helper-wrap-function@npm:7.20.5" dependencies: - "@babel/helper-function-name": ^7.18.9 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: da818e519b48bbaa748a4fa87b0ba681bc627c9eb9557008d5307d42d3f536fe435b775163088dd9639b0120c8ea1ae1021777f48806f9f83397f4df622b88d3 + "@babel/helper-function-name": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b languageName: node linkType: hard -"@babel/helpers@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helpers@npm:7.19.0" +"@babel/helpers@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helpers@npm:7.21.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.0 + "@babel/types": ^7.21.0 + checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 languageName: node linkType: hard @@ -2288,12 +2290,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.1, @babel/parser@npm:^7.20.15": - version: 7.20.15 - resolution: "@babel/parser@npm:7.20.15" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/parser@npm:7.21.3" bin: parser: ./bin/babel-parser.js - checksum: 1d0f47ca67ff2652f1c0ff1570bed8deccbc4b53509e7cd73476af9cc7ed23480c99f1179bd6d0be01612368b92b39e206d330ad6054009d699934848a89298b + checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be languageName: node linkType: hard @@ -2309,29 +2311,29 @@ __metadata: linkType: hard "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" + version: 7.20.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/plugin-proposal-optional-chaining": ^7.20.7 peerDependencies: "@babel/core": ^7.13.0 - checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f + checksum: d610f532210bee5342f5b44a12395ccc6d904e675a297189bc1e401cc185beec09873da523466d7fec34ae1574f7a384235cba1ccc9fe7b89ba094167897c845 languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.6" +"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": + version: 7.20.7 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" dependencies: - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-remap-async-to-generator": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-remap-async-to-generator": ^7.18.9 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3f708808ba6f8a9bd18805b1b22ab90ec0b362d949111a776e0bade5391f143f55479dcc444b2cec25fc89ac21035ee92e9a5ec37c02c610639197a0c2f7dcb0 + checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 languageName: node linkType: hard @@ -2348,15 +2350,15 @@ __metadata: linkType: hard "@babel/plugin-proposal-class-static-block@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.6" + version: 7.21.0 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-class-static-block": ^7.14.5 peerDependencies: "@babel/core": ^7.12.0 - checksum: b8d7ae99ed5ad784f39e7820e3ac03841f91d6ed60ab4a98c61d6112253da36013e12807bae4ffed0ef3cb318e47debac112ed614e03b403fb8b075b09a828ee + checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b languageName: node linkType: hard @@ -2397,14 +2399,14 @@ __metadata: linkType: hard "@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" + version: 7.20.7 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f + checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 languageName: node linkType: hard @@ -2432,18 +2434,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.20.2": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.18.8 + "@babel/plugin-transform-parameters": ^7.20.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 66b9bae741d46edf1c96776d26dfe5d335981e57164ec2450583e3d20dfaa08a5137ffebb897e443913207789f9816bfec4ae845f38762c0196a60949eaffdba + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 languageName: node linkType: hard @@ -2459,16 +2461,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9, @babel/plugin-proposal-optional-chaining@npm:^7.20.7": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f + checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 languageName: node linkType: hard @@ -2485,16 +2487,16 @@ __metadata: linkType: hard "@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.18.6" + version: 7.21.0 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c8e56a972930730345f39f2384916fd8e711b3f4b4eae2ca9740e99958980118120d5cc9b6ac150f0965a5a35f825910e2c3013d90be3e9993ab6111df444569 + checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 languageName: node linkType: hard @@ -2576,18 +2578,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-flow@npm:7.16.7" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-flow@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee + checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.18.6": +"@babel/plugin-syntax-import-assertions@npm:7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.20.0": version: 7.20.0 resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" dependencies: @@ -2719,38 +2721,38 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.18.6, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.18.6 - resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" +"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2cde73725ec51118ebf410bf02d78781c03fa4d3185993fcc9d253b97443381b621c44810084c5dd68b92eb8bdfae0e5b163e91b32bebbb33852383d1815c05d + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 languageName: node linkType: hard "@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" + version: 7.20.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 900f5c695755062b91eec74da6f9092f40b8fada099058b92576f1e23c55e9813ec437051893a9b3c05cefe39e8ac06303d4a91b384e1c03dd8dc1581ea11602 + checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 languageName: node linkType: hard "@babel/plugin-transform-async-to-generator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.18.6" + version: 7.20.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" dependencies: "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-remap-async-to-generator": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-remap-async-to-generator": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c2cca47468cf1aeefdc7ec35d670e195c86cee4de28a1970648c46a88ce6bd1806ef0bab27251b9e7fb791bb28a64dcd543770efd899f28ee5f7854e64e873d3 + checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 languageName: node linkType: hard @@ -2765,54 +2767,56 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" +"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.20.2": + version: 7.21.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f8064ea431eb7aa349dc5b6be87a650f912b48cd65afde917e8644f6f840d7f9d2ce4795f2aa3955aa5b23a73d4ad38abd03386ae109b4b8702b746c6d35bda3 + checksum: 15aacaadbecf96b53a750db1be4990b0d89c7f5bc3e1794b63b49fb219638c1fd25d452d15566d7e5ddf5b5f4e1a0a0055c35c1c7aee323c7b114bf49f66f4b0 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-classes@npm:7.18.9" +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.20.2": + version: 7.21.0 + resolution: "@babel/plugin-transform-classes@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.20.7 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.21.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-replace-supers": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-replace-supers": ^7.20.7 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad + checksum: 088ae152074bd0e90f64659169255bfe50393e637ec8765cb2a518848b11b0299e66b91003728fd0a41563a6fdc6b8d548ece698a314fd5447f5489c22e466b7 languageName: node linkType: hard "@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" + version: 7.20.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/template": ^7.20.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d + checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.20.2": + version: 7.21.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd + checksum: 43ebbe0bfa20287e34427be7c2200ce096c20913775ea75268fb47fe0e55f9510800587e6052c42fe6dffa0daaad95dd465c3e312fd1ef9785648384c45417ac languageName: node linkType: hard @@ -2851,26 +2855,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.18.6": + version: 7.21.0 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-flow": ^7.16.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-flow": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba + checksum: a45951c57265c366f95db9a5e70a62cfc3eafafa3f3d23295357577b5fc139d053d45416cdbdf4a0a387e41cefc434ab94dd6c3048d03b094ff6d041dd10a0b0 languageName: node linkType: hard "@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/plugin-transform-for-of@npm:7.18.8" + version: 7.21.0 + resolution: "@babel/plugin-transform-for-of@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 + checksum: 2f3f86ca1fab2929fcda6a87e4303d5c635b5f96dc9a45fd4ca083308a3020c79ac33b9543eb4640ef2b79f3586a00ab2d002a7081adb9e9d7440dce30781034 languageName: node linkType: hard @@ -2909,45 +2913,42 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-amd@npm:7.18.6" +"@babel/plugin-transform-modules-amd@npm:^7.19.6": + version: 7.20.11 + resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" dependencies: - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - babel-plugin-dynamic-import-node: ^2.3.3 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f60c4c4e0eaec41e42c003cbab44305da7a8e05b2c9bdfc2b3fe0f9e1d7441c959ff5248aa03e350abe530e354028cbf3aa20bf07067b11510997dad8dd39be0 + checksum: 23665c1c20c8f11c89382b588fb9651c0756d130737a7625baeaadbd3b973bc5bfba1303bedffa8fb99db1e6d848afb01016e1df2b69b18303e946890c790001 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.6" +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.19.6": + version: 7.21.2 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" dependencies: - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-simple-access": ^7.18.6 - babel-plugin-dynamic-import-node: ^2.3.3 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-simple-access": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7e356e3df8a6a8542cced7491ec5b1cc1093a88d216a59e63a5d2b9fe9d193cbea864f680a41429e41a4f9ecec930aa5b0b8f57e2b17b3b4d27923bb12ba5d14 + checksum: 65aa06e3e3792f39b99eb5f807034693ff0ecf80438580f7ae504f4c4448ef04147b1889ea5e6f60f3ad4a12ebbb57c6f1f979a249dadbd8d11fe22f4441918b languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": + version: 7.20.11 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-validator-identifier": ^7.18.6 - babel-plugin-dynamic-import-node: ^2.3.3 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-validator-identifier": ^7.19.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 + checksum: 4546c47587f88156d66c7eb7808e903cf4bb3f6ba6ac9bc8e3af2e29e92eb9f0b3f44d52043bfd24eb25fa7827fd7b6c8bfeac0cac7584e019b87e1ecbd0e673 languageName: node linkType: hard @@ -2963,15 +2964,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": + version: 7.20.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.20.5 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 + checksum: 528c95fb1087e212f17e1c6456df041b28a83c772b9c93d2e407c9d03b72182b0d9d126770c1d6e0b23aab052599ceaf25ed6a2c0627f4249be34a83f6fae853 languageName: node linkType: hard @@ -2998,14 +2999,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/plugin-transform-parameters@npm:7.18.8" +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.1, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.21.3 + resolution: "@babel/plugin-transform-parameters@npm:7.21.3" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2b5863300da60face8a250d91da16294333bd5626e9721b13a3ba2078bd2a5a190e32c6e7a1323d5f547f579aeb2804ff49a62a55fcad2b1d099e55a55b788ea + checksum: c92128d7b1fcf54e2cab186c196bbbf55a9a6de11a83328dc2602649c9dc6d16ef73712beecd776cd49bfdc624b5f56740f4a53568d3deb9505ec666bc869da3 languageName: node linkType: hard @@ -3020,14 +3021,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-constant-elements@npm:^7.17.12": - version: 7.18.9 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.9" +"@babel/plugin-transform-react-constant-elements@npm:^7.18.12": + version: 7.21.3 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.21.3" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bbdc4bc38317e62bb729d6d2b48bfac4cca52cb476a1a537a6fe693610852a6f2c3b3f616e1c73f17fb4b0dae551b1c96f898b7867a02ff2fbe3e858a346c767 + checksum: 1ca5cfaa6547d5fe6004fdef5687aa5b757940a132cf56c268c0d369a63aa7d83afafa27c66808687ecc12c871ae28a36b53923733483571e9596fa50e03180f languageName: node linkType: hard @@ -3054,17 +3055,17 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx@npm:7.18.6" + version: 7.21.0 + resolution: "@babel/plugin-transform-react-jsx@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.18.6 + "@babel/types": ^7.21.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 46129eaf1ab7a7a73e3e8c9d9859b630f5b381c5e19fb1559e2db7b943a7825b6715ad950623fb03fe7bd31ed618ce1d0bd539b13fa030a50c39d5a873a5ba00 + checksum: c77d277d2e55b489a9b9be185c3eed5d8e2c87046778810f8e47ee3c87b47e64cad93c02211c968486c7958fd05ce203c66779446484c98a7b3a69bec687d5dc languageName: node linkType: hard @@ -3081,14 +3082,14 @@ __metadata: linkType: hard "@babel/plugin-transform-regenerator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-regenerator@npm:7.18.6" + version: 7.20.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - regenerator-transform: ^0.15.0 + "@babel/helper-plugin-utils": ^7.20.2 + regenerator-transform: ^0.15.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 60bd482cb0343c714f85c3e19a13b3b5fa05ee336c079974091c0b35e263307f4e661f4555dff90707a87d5efe19b1d51835db44455405444ac1813e268ad750 + checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 languageName: node linkType: hard @@ -3114,15 +3115,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-spread@npm:7.18.9" +"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.19.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-spread@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 + checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 languageName: node linkType: hard @@ -3159,27 +3160,28 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.18.6": - version: 7.18.8 - resolution: "@babel/plugin-transform-typescript@npm:7.18.8" +"@babel/plugin-transform-typescript@npm:^7.21.0": + version: 7.21.3 + resolution: "@babel/plugin-transform-typescript@npm:7.21.3" dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-typescript": ^7.18.6 + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-typescript": ^7.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 627211f1658870274fcabf38a71bb08ae219e3ac672423083574fabe2c857f28d39243cb7279adada8468c912a7beebc0622770ed66885a1e33b84ccc8bfd7df + checksum: c16fd577bf43f633deb76fca2a8527d8ae25968c8efdf327c1955472c3e0257e62992473d1ad7f9ee95379ce2404699af405ea03346055adadd3478ad0ecd117 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.6" +"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 297a03706723164a777263f76a8d89bccfb1d3fbc5e1075079dfd84372a5416d579da7d44c650abf935a1150a995bfce0e61966447b657f958e51c4ea45b72dc + checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd languageName: node linkType: hard @@ -3195,17 +3197,17 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.2": - version: 7.18.9 - resolution: "@babel/preset-env@npm:7.18.9" +"@babel/preset-env@npm:^7.19.4": + version: 7.20.2 + resolution: "@babel/preset-env@npm:7.20.2" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.18.6 + "@babel/plugin-proposal-async-generator-functions": ^7.20.1 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -3214,7 +3216,7 @@ __metadata: "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.18.9 + "@babel/plugin-proposal-object-rest-spread": ^7.20.2 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 "@babel/plugin-proposal-optional-chaining": ^7.18.9 "@babel/plugin-proposal-private-methods": ^7.18.6 @@ -3225,7 +3227,7 @@ __metadata: "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.18.6 + "@babel/plugin-syntax-import-assertions": ^7.20.0 "@babel/plugin-syntax-json-strings": ^7.8.3 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 @@ -3238,10 +3240,10 @@ __metadata: "@babel/plugin-transform-arrow-functions": ^7.18.6 "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.18.9 - "@babel/plugin-transform-classes": ^7.18.9 + "@babel/plugin-transform-block-scoping": ^7.20.2 + "@babel/plugin-transform-classes": ^7.20.2 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.20.2 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -3249,47 +3251,47 @@ __metadata: "@babel/plugin-transform-function-name": ^7.18.9 "@babel/plugin-transform-literals": ^7.18.9 "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.18.6 - "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.18.9 + "@babel/plugin-transform-modules-amd": ^7.19.6 + "@babel/plugin-transform-modules-commonjs": ^7.19.6 + "@babel/plugin-transform-modules-systemjs": ^7.19.6 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.18.8 + "@babel/plugin-transform-parameters": ^7.20.1 "@babel/plugin-transform-property-literals": ^7.18.6 "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.18.9 + "@babel/plugin-transform-spread": ^7.19.0 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.6 + "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.18.9 - babel-plugin-polyfill-corejs2: ^0.3.1 - babel-plugin-polyfill-corejs3: ^0.5.2 - babel-plugin-polyfill-regenerator: ^0.3.1 - core-js-compat: ^3.22.1 + "@babel/types": ^7.20.2 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 + core-js-compat: ^3.25.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 311002b9255d1aa261afe712ab73a93687652437804e2f44e6cc55438f8b199463f53bb2b8e0912b0034f208a42eee664a9e126a6061ca504a792ede97dd027e + checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e languageName: node linkType: hard "@babel/preset-flow@npm:^7.13.13": - version: 7.16.7 - resolution: "@babel/preset-flow@npm:7.16.7" + version: 7.18.6 + resolution: "@babel/preset-flow@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-flow-strip-types": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-flow-strip-types": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f + checksum: 9100d4eab3402e6601e361a5b235e46d90cfd389c12db19e2a071e1082ca2a00c04bd47eb185ce68d8979e7c8f3e548cd5d61b86dcd701135468fb929c3aecb6 languageName: node linkType: hard @@ -3308,7 +3310,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.17.12": +"@babel/preset-react@npm:^7.18.6": version: 7.18.6 resolution: "@babel/preset-react@npm:7.18.6" dependencies: @@ -3324,90 +3326,97 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12": - version: 7.18.6 - resolution: "@babel/preset-typescript@npm:7.18.6" +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.18.6": + version: 7.21.0 + resolution: "@babel/preset-typescript@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-typescript": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-validator-option": ^7.21.0 + "@babel/plugin-transform-typescript": ^7.21.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c + checksum: 6e1f4d7294de2678fbaf36035e98847b2be432f40fe7a1204e5e45b8b05bcbe22902fe0d726e16af14de5bc08987fae28a7899871503fd661050d85f58755af6 languageName: node linkType: hard "@babel/register@npm:^7.13.16": - version: 7.16.9 - resolution: "@babel/register@npm:7.16.9" + version: 7.21.0 + resolution: "@babel/register@npm:7.21.0" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 make-dir: ^2.1.0 - pirates: ^4.0.0 + pirates: ^4.0.5 source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bbe9552c9e5816aec2bf7d899b43f95fd649714f38d14de48f42c895cc9ef65708f1359f393c235d5f02224c115544aeeb174495682a07734cdf9484ed2e6175 + checksum: 9745cc7520b4c5e64cc54f4851c3b78af82e1f8cffc9041f5cc0b9aef62d86a9a8617327fc975b5e0e39cb5cc0aba7ae02429884390ee93e0de29152fa849b4f languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/runtime-corejs3@npm:7.18.9" +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.18.9, @babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7": + version: 7.21.0 + resolution: "@babel/runtime-corejs3@npm:7.21.0" dependencies: - core-js-pure: ^3.20.2 - regenerator-runtime: ^0.13.4 - checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d + core-js-pure: ^3.25.1 + regenerator-runtime: ^0.13.11 + checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.20.13 - resolution: "@babel/runtime@npm:7.20.13" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" dependencies: regenerator-runtime: ^0.13.11 - checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": - version: 7.18.10 - resolution: "@babel/template@npm:7.18.10" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.10 - "@babel/types": ^7.18.10 - checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e languageName: node linkType: hard -"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": - version: 7.19.1 - resolution: "@babel/traverse@npm:7.19.1" +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": + version: 7.21.3 + resolution: "@babel/traverse@npm:7.21.3" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.0 + "@babel/generator": ^7.21.3 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.21.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.19.1 - "@babel/types": ^7.19.0 + "@babel/parser": ^7.21.3 + "@babel/types": ^7.21.3 debug: ^4.1.0 globals: ^11.1.0 - checksum: 9d782b5089ebc989e54c2406814ed1206cb745ed2734e6602dee3e23d4b6ebbb703ff86e536276630f8de83fda6cde99f0634e3c3d847ddb40572d0303ba8800 + checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.19.3 - resolution: "@babel/types@npm:7.19.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.21.3 + resolution: "@babel/types@npm:7.21.3" dependencies: - "@babel/helper-string-parser": ^7.18.10 + "@babel/helper-string-parser": ^7.19.4 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77 + checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 languageName: node linkType: hard @@ -6559,7 +6568,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@^0.4.30, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.4.31, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -7500,6 +7509,33 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-scaffolder-backend-module-gitlab@workspace:plugins/scaffolder-backend-module-gitlab": + version: 0.0.0-use.local + resolution: "@backstage/plugin-scaffolder-backend-module-gitlab@workspace:plugins/scaffolder-backend-module-gitlab" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/dev-utils": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" + "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@gitbeaker/node": ^35.8.0 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/node": "*" + cross-fetch: ^3.1.5 + fs-extra: 10.1.0 + msw: ^0.49.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + languageName: unknown + linkType: soft + "@backstage/plugin-scaffolder-backend-module-rails@workspace:^, @backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails" @@ -8863,10 +8899,10 @@ __metadata: languageName: node linkType: hard -"@braintree/sanitize-url@npm:=6.0.0": - version: 6.0.0 - resolution: "@braintree/sanitize-url@npm:6.0.0" - checksum: 409ce7709dc1a0c67bc887d20af1becd4145d5c62cc5124b1c4c1f3ea2a8d69b0ee9f582d446469c6f5294b56442b99048cbbba6861dd5c834d4e019b95e1f40 +"@braintree/sanitize-url@npm:=6.0.2": + version: 6.0.2 + resolution: "@braintree/sanitize-url@npm:6.0.2" + checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a languageName: node linkType: hard @@ -9107,31 +9143,31 @@ __metadata: linkType: hard "@codemirror/autocomplete@npm:^6.0.0": - version: 6.3.0 - resolution: "@codemirror/autocomplete@npm:6.3.0" + version: 6.4.2 + resolution: "@codemirror/autocomplete@npm:6.4.2" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.0.0 + "@codemirror/view": ^6.6.0 "@lezer/common": ^1.0.0 peerDependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: 903b24732230ce3713e5be2bea615ef11f42b6253859274b37206a7158b8f7aed1700c9013d9330665c16d6f9576fd71efb686b4def4434e29b5c1e4e15520dc + checksum: c6cc4edb1c412153e6f6f27926674d7f1d386d1f30d6d4f60c5b52bfa0105870b0c70449b69891937bcf082340d8b0fa6d1f9f28f5eb60adc2974ed4c73aadc1 languageName: node linkType: hard "@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0": - version: 6.1.0 - resolution: "@codemirror/commands@npm:6.1.0" + version: 6.2.2 + resolution: "@codemirror/commands@npm:6.2.2" dependencies: "@codemirror/language": ^6.0.0 - "@codemirror/state": ^6.0.0 + "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: 0b95ed5b657590adda3171ef8cb1b662078ed1c02109b414bbd71503ae8cac3d5d56a56a159020178a4e8f1e7168bd3c5f5782eb2d90a6e25f067fc8c39dbc87 + checksum: d3aa1ca8cbd7b9434eedba6b6d783411670796bf6ab61990afc4fd0c04645189fe4dd55bb95e23b943e9089f9739bc7e92aa4b2ac3eac09cfa2b91a45f608d3e languageName: node linkType: hard @@ -9159,47 +9195,47 @@ __metadata: linkType: hard "@codemirror/lint@npm:^6.0.0": - version: 6.0.0 - resolution: "@codemirror/lint@npm:6.0.0" + version: 6.2.0 + resolution: "@codemirror/lint@npm:6.2.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: e1da165ad3a60c70e99c2d26a3ae3beb8392600a9147d15502c740d9259ef3d866c78f7dd2b5b1389153bf015c9c2bc115026d5c9f4433ca647679a1f095cc40 + checksum: b97e55a07bca9f7e357e495853ba189ae0ff7dfe7e7ae445d7a0d6c6926ec792c7f5c6b6c13a1f137fd9fedf44a6624e9d500f76d0d46a3c3e9d19c2cda9d28a languageName: node linkType: hard "@codemirror/search@npm:^6.0.0": - version: 6.2.1 - resolution: "@codemirror/search@npm:6.2.1" + version: 6.3.0 + resolution: "@codemirror/search@npm:6.3.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: fdd352c6df6972863ea7e07a0dbad8872d4bd7e3ada01417d562a2cde4cf2b4fdfde47ed801c66e18342bb695c00b1cecd9918bd2e1dab74eaedab7b2dde5feb + checksum: b757eebbb541c9d74fe36ccfdd03bc3e4e7aebb08b491e207d5898f24aaa612558c393ba49de5bf375972f5774de817fcfbad1ac551dda1a34badb41cf130d36 languageName: node linkType: hard -"@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 +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": + version: 6.2.0 + resolution: "@codemirror/state@npm:6.2.0" + checksum: fdc99c773dc09c700dd02bf918f06132aa8d3069c262cc4eb6ca5c810ce24ae2d7e90719ae7630a8158fd263018de6d40bd78f312e6bfba754e737b64e6c6b3d languageName: node linkType: hard "@codemirror/theme-one-dark@npm:^6.0.0": - version: 6.1.0 - resolution: "@codemirror/theme-one-dark@npm:6.1.0" + version: 6.1.1 + resolution: "@codemirror/theme-one-dark@npm:6.1.1" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/highlight": ^1.0.0 - checksum: 7454742006f0ea23ed36b1c8e232d55bd1cdf6cd3c9b5ad7f7212a4b5fe7907eecaeb1d908fed2022c2ca5d667176c93e9f071c939d54449cfe740dc028a16d8 + checksum: e314033c77732deb6eddb44d5e43d134842dd4e174f0525161f90edb0fd4fa93e482710b7371e3ed573645b8e0c402d518d5cdae41867546cd7e2ccee8da455e languageName: node linkType: hard -"@codemirror/view@npm:^6.0.0": +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0": version: 6.9.2 resolution: "@codemirror/view@npm:6.9.2" dependencies: @@ -9217,6 +9253,419 @@ __metadata: languageName: node linkType: hard +"@cspell/cspell-bundled-dicts@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/cspell-bundled-dicts@npm:6.30.2" + dependencies: + "@cspell/dict-ada": ^4.0.1 + "@cspell/dict-aws": ^3.0.0 + "@cspell/dict-bash": ^4.1.1 + "@cspell/dict-companies": ^3.0.9 + "@cspell/dict-cpp": ^5.0.2 + "@cspell/dict-cryptocurrencies": ^3.0.1 + "@cspell/dict-csharp": ^4.0.2 + "@cspell/dict-css": ^4.0.5 + "@cspell/dict-dart": ^2.0.2 + "@cspell/dict-django": ^4.0.2 + "@cspell/dict-docker": ^1.1.6 + "@cspell/dict-dotnet": ^5.0.0 + "@cspell/dict-elixir": ^4.0.2 + "@cspell/dict-en-common-misspellings": ^1.0.2 + "@cspell/dict-en-gb": 1.1.33 + "@cspell/dict-en_us": ^4.3.1 + "@cspell/dict-filetypes": ^3.0.0 + "@cspell/dict-fonts": ^3.0.1 + "@cspell/dict-fullstack": ^3.1.4 + "@cspell/dict-gaming-terms": ^1.0.4 + "@cspell/dict-git": ^2.0.0 + "@cspell/dict-golang": ^6.0.1 + "@cspell/dict-haskell": ^4.0.1 + "@cspell/dict-html": ^4.0.3 + "@cspell/dict-html-symbol-entities": ^4.0.0 + "@cspell/dict-java": ^5.0.5 + "@cspell/dict-k8s": ^1.0.1 + "@cspell/dict-latex": ^4.0.0 + "@cspell/dict-lorem-ipsum": ^3.0.0 + "@cspell/dict-lua": ^4.0.1 + "@cspell/dict-node": ^4.0.2 + "@cspell/dict-npm": ^5.0.5 + "@cspell/dict-php": ^4.0.1 + "@cspell/dict-powershell": ^5.0.1 + "@cspell/dict-public-licenses": ^2.0.2 + "@cspell/dict-python": ^4.0.2 + "@cspell/dict-r": ^2.0.1 + "@cspell/dict-ruby": ^5.0.0 + "@cspell/dict-rust": ^4.0.1 + "@cspell/dict-scala": ^5.0.0 + "@cspell/dict-software-terms": ^3.1.5 + "@cspell/dict-sql": ^2.1.0 + "@cspell/dict-svelte": ^1.0.2 + "@cspell/dict-swift": ^2.0.1 + "@cspell/dict-typescript": ^3.1.1 + "@cspell/dict-vue": ^3.0.0 + checksum: 5abc82358bbaa4bb8a7dae19ee25c39f296ccad9b291d99520ae2a51ff1bb4141f030ff8b5a2bc90e34127f5e281a030d225e746028f4e353b1ebadabd5c23b4 + languageName: node + linkType: hard + +"@cspell/cspell-pipe@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/cspell-pipe@npm:6.30.2" + checksum: eef05ad52500789bc95e167ea3d25d470f59f57bba8e9c1900799cc9acddff1dabe0b6ae07c0cd5ac3a4a15fa8bbec68fa8b3fe845919ed3c436064ab7a4c925 + languageName: node + linkType: hard + +"@cspell/cspell-service-bus@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/cspell-service-bus@npm:6.30.2" + checksum: 2c933b7e1f0f003668e64b980e403914d30b22f3899aaff8458dacf43371ba3ef022e24efc0c235a89b9a3627b5fbbf01587890f5d580705f431e2b45e7310fb + languageName: node + linkType: hard + +"@cspell/cspell-types@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/cspell-types@npm:6.30.2" + checksum: a41d2e59ac0b212cbdd74c135915bb7a6f43bc9146f22654684bcb49c1a9effcf42c44305d631d4e17282e199a31950494b64041eded607f5d39e87b825a25e7 + languageName: node + linkType: hard + +"@cspell/dict-ada@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-ada@npm:4.0.1" + checksum: 3422487c8decf01d9dd14e666dcbe29557d730085f60fcd859d03fc5c177359d12df19171368cd105dad29f315d0decfa56f29eeb7c594a300d47c65805c4349 + languageName: node + linkType: hard + +"@cspell/dict-aws@npm:^3.0.0": + version: 3.0.0 + resolution: "@cspell/dict-aws@npm:3.0.0" + checksum: d06284d5cc438c18175c26e4f5d450f3235d603dbc989fa2d7515bb01d1c7a8b303ce054d532ca4f814fc6cd7c65ef9558d46bf5bacb06d35504b3c259ebe95c + languageName: node + linkType: hard + +"@cspell/dict-bash@npm:^4.1.1": + version: 4.1.1 + resolution: "@cspell/dict-bash@npm:4.1.1" + checksum: 5b6fbb597c53fa6b9957213aa77688c6e0231f8d59eed02f0eecda456f3606855fc0f4c0c5121a909e9055c164de83e3f151b32a9abd1ccd4a161634ffee6691 + languageName: node + linkType: hard + +"@cspell/dict-companies@npm:^3.0.9": + version: 3.0.9 + resolution: "@cspell/dict-companies@npm:3.0.9" + checksum: 9f6446707072002ec653b42d2a1c06f82a8d21445ed7e2953a6f9cded1d02f5f58735c387b1bcadead88825c4edce3daccdbf7136f5d6e2d79f02580ef5f55a4 + languageName: node + linkType: hard + +"@cspell/dict-cpp@npm:^5.0.2": + version: 5.0.2 + resolution: "@cspell/dict-cpp@npm:5.0.2" + checksum: 6483cea117b1a8313c67d6be5211c490347f36a926d9b2c402740ddd2c15a395e9ba5bd09d038fe9355dd58eafb2f48d0d74658a86accb2ad1d177e0ccc326ab + languageName: node + linkType: hard + +"@cspell/dict-cryptocurrencies@npm:^3.0.1": + version: 3.0.1 + resolution: "@cspell/dict-cryptocurrencies@npm:3.0.1" + checksum: 5d646f569e8dc5998de8a508ff3de39db5f5a5db0a846ee4fc750ea3880080d922d5c28fdce38f93910eaacde2723e2fe4c305d50b3f9d53b817ce33a3bed66a + languageName: node + linkType: hard + +"@cspell/dict-csharp@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-csharp@npm:4.0.2" + checksum: d2ecb2aada51c5f0d6d557fd4f0c6eddb5b299e0955e066c49cd2afe96a1c6fe0afde699fdb885dd3183603a1efbd1d793b6a490b8d039256445b4b154b7375b + languageName: node + linkType: hard + +"@cspell/dict-css@npm:^4.0.5": + version: 4.0.5 + resolution: "@cspell/dict-css@npm:4.0.5" + checksum: f5fbe4e71ae7739ee7999c601befafb6e9b9313efa6d2b129fd8ba5ebfd2bf6137163439dd12fb5d540ac5ca5ae78af3ece43d51fb49027ace9a63d425771deb + languageName: node + linkType: hard + +"@cspell/dict-dart@npm:^2.0.2": + version: 2.0.2 + resolution: "@cspell/dict-dart@npm:2.0.2" + checksum: ef88d6d980247badbea01bb8e1a51eaa53cb9eedd611df4ae0324a93d64f5de1e2aef0932805504111ae455ca90181938f74bd522a4304054b55baa5bfd706a8 + languageName: node + linkType: hard + +"@cspell/dict-django@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-django@npm:4.0.2" + checksum: 9b700702c864848ed1e133c8ab8500223e0ac68a6ba58ad872fd5eb9179003fda04b713e9a31b3f6b3bf80f4bb2a6c1473c12aa0bed3a3250b495e53ca1af585 + languageName: node + linkType: hard + +"@cspell/dict-docker@npm:^1.1.6": + version: 1.1.6 + resolution: "@cspell/dict-docker@npm:1.1.6" + checksum: ad2e77557f1e0e388910567749e59cd169d9743ea3aed22b0ecff2137750d87d1a90dff7c84c5d1955762ef8d568d1e48c702c990b09b24834bdade188f43ac4 + languageName: node + linkType: hard + +"@cspell/dict-dotnet@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-dotnet@npm:5.0.0" + checksum: 3e55abd3cc0ecb0924caa245b83595c8e90b42a8fb438f3294d06ad32d30f3235dc8943a2865f06eaec5285a8d6a7df1db71fb228753d56a678a0f0cff87c24c + languageName: node + linkType: hard + +"@cspell/dict-elixir@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-elixir@npm:4.0.2" + checksum: 0d80b2c9f7a05f38df6de7a574641149fa782e9f2c61a91a715293b1a04c81fdaf378c1d5643f14ecacaa3f3d927589a3c3e6b282b3cf3c860d56a907e0c1a8b + languageName: node + linkType: hard + +"@cspell/dict-en-common-misspellings@npm:^1.0.2": + version: 1.0.2 + resolution: "@cspell/dict-en-common-misspellings@npm:1.0.2" + checksum: 6f818f9fe3b76ae3d0c71c109d3543f01607ffbd605d9ecb0b6884e6ffa795adba25fd1206b1c85c089d4ffaab20171f5aa803de49a8eadf2bc5b7f5c326917c + languageName: node + linkType: hard + +"@cspell/dict-en-gb@npm:1.1.33": + version: 1.1.33 + resolution: "@cspell/dict-en-gb@npm:1.1.33" + checksum: 09a9e7a3ee4cad75c87cc7adf6b5981b3ec52d4e3707e8de2e1a2a55cd5c8539057a7742d9c7035e23eb0aeff80a95b9599696c7192c9b3b9d8f14440fe01938 + languageName: node + linkType: hard + +"@cspell/dict-en_us@npm:^4.3.1": + version: 4.3.1 + resolution: "@cspell/dict-en_us@npm:4.3.1" + checksum: 15da93ff9a8248c89c96a08c3935f0e2b347461612f9609e906f2d7ff89ff180ad69dc64cea8afb9e861e69e11854e8fc4fd07ad643f7eb469b20c20f1ebc9c0 + languageName: node + linkType: hard + +"@cspell/dict-filetypes@npm:^3.0.0": + version: 3.0.0 + resolution: "@cspell/dict-filetypes@npm:3.0.0" + checksum: 8afd0785583f913c8d6ad1a2b56a527600258b291fc6ed8e83f543ba70a5273095195495601aca7d80fdeb17cab6a10e8a8aa44bea3083962cd42af130260d8a + languageName: node + linkType: hard + +"@cspell/dict-fonts@npm:^3.0.1": + version: 3.0.1 + resolution: "@cspell/dict-fonts@npm:3.0.1" + checksum: 15110749c6e245df707efab30e16ecdcc1f0676a9fc720f9070b88df056a01114ce2350d862a4421ce06d1a739652aee4e687b8c798a7170f0f9cfdca49bfb0f + languageName: node + linkType: hard + +"@cspell/dict-fullstack@npm:^3.1.4": + version: 3.1.4 + resolution: "@cspell/dict-fullstack@npm:3.1.4" + checksum: 7bfdc5dcebedc52c63e1fc6b73b2e51352001f7e0ae1a2b0d26c46ec3d1ddfaf8aa127e56b07ebc60480110b0a0cbeaf2835509124a75519e8828b313c55446c + languageName: node + linkType: hard + +"@cspell/dict-gaming-terms@npm:^1.0.4": + version: 1.0.4 + resolution: "@cspell/dict-gaming-terms@npm:1.0.4" + checksum: 3e57f5567747a8598b3e4de4f63a3b8090cccf7688f3e91f0a9e005e916645db1224ea600afd5b497b7e8c6a1f9291dfd4cb932278dfd423657107203a2ace0b + languageName: node + linkType: hard + +"@cspell/dict-git@npm:^2.0.0": + version: 2.0.0 + resolution: "@cspell/dict-git@npm:2.0.0" + checksum: eb3985f1f8717ad4e41e146f1b011e0476d7625ab1ebee55364575b727323300773a89a8dd5a20466c74c57b7d2678e0c92446453bd484a44203be737bc07964 + languageName: node + linkType: hard + +"@cspell/dict-golang@npm:^6.0.1": + version: 6.0.1 + resolution: "@cspell/dict-golang@npm:6.0.1" + checksum: 465dc7a879fa34be010aecc7dac9820bc93ea694abc24299757662c10b8d9f632df7d18c37b31d7dabb67b721bfa9a6d02bd50125e464f79e1d466aa8073a35b + languageName: node + linkType: hard + +"@cspell/dict-haskell@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-haskell@npm:4.0.1" + checksum: cfb51e415b60c5eb266a5782d0a4b19a37f1389b9b018d1bbb2ff4358bd739af1f76f68f26a138d4b4bd0ab67146d6eb9032fc3d3c212695237c134e05339c79 + languageName: node + linkType: hard + +"@cspell/dict-html-symbol-entities@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-html-symbol-entities@npm:4.0.0" + checksum: 79f05f9080f39dbde703980eb587ed6624b8fc2f5cedc297327bc1b9b7e6022a7c382e6013149b1afe00609b96003ab5c8d18d378979f76f336ab626317183f4 + languageName: node + linkType: hard + +"@cspell/dict-html@npm:^4.0.3": + version: 4.0.3 + resolution: "@cspell/dict-html@npm:4.0.3" + checksum: ebc011c83c4600ef40e68cedf598c402819ef8ab5543a9f264a9b18bf7592f95aade77fd83121befafe338a791a4609aea273f0fa7584b029f34844924344ae0 + languageName: node + linkType: hard + +"@cspell/dict-java@npm:^5.0.5": + version: 5.0.5 + resolution: "@cspell/dict-java@npm:5.0.5" + checksum: a40fafeb4f1b454e025be19bd56e3d591666a7d69be5d06ca673a28743eb84261bf5e193ad16a46bc7698c7b1b6bdd30c34a6939bec0615d827bb0f9ea04bffd + languageName: node + linkType: hard + +"@cspell/dict-k8s@npm:^1.0.1": + version: 1.0.1 + resolution: "@cspell/dict-k8s@npm:1.0.1" + checksum: 90800857566c8d774523d26bbb962d2cdf2d5587162851a14ef85d6b38f70a9da9c61eac26287476371f680556862ef75d18c155a8dfb77de0c543e5e9390714 + languageName: node + linkType: hard + +"@cspell/dict-latex@npm:^4.0.0": + version: 4.0.0 + resolution: "@cspell/dict-latex@npm:4.0.0" + checksum: 33a3f158d8c0151cbb4e6bd79ba1189d167b3916e1ce37d7b5754d18dffefe061320fa54c3cb482bd5c7cf37392d0112530b07a3eca63dffbe1069de317dc652 + languageName: node + linkType: hard + +"@cspell/dict-lorem-ipsum@npm:^3.0.0": + version: 3.0.0 + resolution: "@cspell/dict-lorem-ipsum@npm:3.0.0" + checksum: 145a79ec536bee3ec515b189be3f4a5347a28c563060ac5da6f6783a288e63cb0662fc918be008e1a377bdeb48cfa7a2aa1f9e9f8aef6371109f95f4b049731d + languageName: node + linkType: hard + +"@cspell/dict-lua@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-lua@npm:4.0.1" + checksum: a85da787f1f347a46cfa44fdc26dea39c0665f636936f4ae7ee656b0e3395a2b3d8787a5f4af35e7d777efde15397ed57ba21d2de9b01e27df4239b3d86e27bd + languageName: node + linkType: hard + +"@cspell/dict-node@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-node@npm:4.0.2" + checksum: 7a63ee44c4c493b429c821eb9e5fdcd1d0f549a2ada64d8ce3f7f0a88e2d26f82daada8801ee6f09a582502a1500d63985aa47204757b39014dff747211539d5 + languageName: node + linkType: hard + +"@cspell/dict-npm@npm:^5.0.5": + version: 5.0.5 + resolution: "@cspell/dict-npm@npm:5.0.5" + checksum: ecb0f4d99b394f09ebcdf103b91ff4ea3c89d58843eeed99880032c322caf1bd9a81266a0e9fa3b816b88aa32685878fdce8716c2eb3a593b361f0bce2076fc2 + languageName: node + linkType: hard + +"@cspell/dict-php@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-php@npm:4.0.1" + checksum: 163727eca4af8d2e5d759fdda2dcc80065bd01fbc44020dd26cf0d1a3d2906a0c9caa52a97ece9eafecea36d682609c7ffa77ad8d736505058505c64106d7c06 + languageName: node + linkType: hard + +"@cspell/dict-powershell@npm:^5.0.1": + version: 5.0.1 + resolution: "@cspell/dict-powershell@npm:5.0.1" + checksum: 42bb95e5eef228ccdb5c787b7492b77a028ac205ca27cc775fa792558b760814808bb65952214b2282131d7ab4cbd3f80c12c5bee9184b8559f0a2cf1e488008 + languageName: node + linkType: hard + +"@cspell/dict-public-licenses@npm:^2.0.2": + version: 2.0.2 + resolution: "@cspell/dict-public-licenses@npm:2.0.2" + checksum: 79f16b2c3a31208e299bd552d684f7f89da8e73bef97704e2d0e1bfc99448b9dd7758315b6ed5aa04f067908def11f0d481550843568f02cba8a2b2fd7a687ba + languageName: node + linkType: hard + +"@cspell/dict-python@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-python@npm:4.0.2" + checksum: 23825b92af39a9b43a6af3862babbeaf01a5718ffe621e9f487400dc62582e5bd840213af22f1b2f4a78ba8e8b24dbb4cd7de9c190aa2cfea2bff7c15338ae7a + languageName: node + linkType: hard + +"@cspell/dict-r@npm:^2.0.1": + version: 2.0.1 + resolution: "@cspell/dict-r@npm:2.0.1" + checksum: fe85939ad4c8ada34284a673918be711cca60b6d6f1c48ee98602c27905228dfbaea3462a350094633032c1d6b6bba9548df7019e0b21673cf1cf887c57ca228 + languageName: node + linkType: hard + +"@cspell/dict-ruby@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-ruby@npm:5.0.0" + checksum: e1f99f97fa3459a19f8f25dbae7d879e77bd503e9435aaf640d99ad4212223548fb9e5544d076f9a766f74829958178e814ebfe6f941738fb5e5452969bbdfb2 + languageName: node + linkType: hard + +"@cspell/dict-rust@npm:^4.0.1": + version: 4.0.1 + resolution: "@cspell/dict-rust@npm:4.0.1" + checksum: 146d3af5d0b1b84ec62059353416cd5d4b53995ed0a0edb47b96ed89f1b8b82881e76c1bac46311318f41d1619eab87d81e0cdc94855f50b79cfa0719333cbb1 + languageName: node + linkType: hard + +"@cspell/dict-scala@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-scala@npm:5.0.0" + checksum: 759dd8746e68e45299b65eeaf1dfd32d1e345fd80fd9a623af502266598c384198853001f70a700c454d8490fb9a5e1358ca1e0d7c0d43154a4f07e2d5531c72 + languageName: node + linkType: hard + +"@cspell/dict-software-terms@npm:^3.1.5": + version: 3.1.6 + resolution: "@cspell/dict-software-terms@npm:3.1.6" + checksum: 76b5d33dc830effa229096050964ccbf652cf83a2b648fa313b77a0ee80a8a1979382a07e72e5bed9c8aaadecbb59103a6b578fe10e8892dc53081cffbab3d85 + languageName: node + linkType: hard + +"@cspell/dict-sql@npm:^2.1.0": + version: 2.1.0 + resolution: "@cspell/dict-sql@npm:2.1.0" + checksum: 12eb8f1d3cb9d2f7957375b7258f4e13c2482de3e46a567e4854159e1d6242ca6e25575ccbddcb5c10b1ca8f738d271eabce7c4538e1f31e610bcd002f800b4a + languageName: node + linkType: hard + +"@cspell/dict-svelte@npm:^1.0.2": + version: 1.0.2 + resolution: "@cspell/dict-svelte@npm:1.0.2" + checksum: 5b42989bc6743a26ca5172cc23ebc1449d930695b10c908376048ce1835bf57fef7a0004f02ec5e43219f24a97f154e125041df470441199a045ed0be9e654fc + languageName: node + linkType: hard + +"@cspell/dict-swift@npm:^2.0.1": + version: 2.0.1 + resolution: "@cspell/dict-swift@npm:2.0.1" + checksum: 0bbb106266205c5f5e12886a73ebf0db2078bab1bdd2e1f304fe28445cd72d847a4c5072bf4fe8f9e8cdb4bc69d52fffec0806aea19ea9b64b7a87c67ee01175 + languageName: node + linkType: hard + +"@cspell/dict-typescript@npm:^3.1.1": + version: 3.1.1 + resolution: "@cspell/dict-typescript@npm:3.1.1" + checksum: e70b03d0867070e6695787acea05f32fc5eac6f90f1473ebe3f0833c0578c52d36d85ef20c43f10ff10b8f0be48d9df3e77a21eeed1794fe282b6fca79451293 + languageName: node + linkType: hard + +"@cspell/dict-vue@npm:^3.0.0": + version: 3.0.0 + resolution: "@cspell/dict-vue@npm:3.0.0" + checksum: 4db58b1d6f9be1a523a35678877f2cca2bb04548b136ec5ec4e7186500978dbc32cc8747ced80ade3cad3acc3c80eb23afe980679165810f8f8f26802e952e2f + languageName: node + linkType: hard + +"@cspell/dynamic-import@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/dynamic-import@npm:6.30.2" + dependencies: + import-meta-resolve: ^2.2.2 + checksum: a12a8b18be303c0bb6b9c737d72092686c97c38dafc14cbdd05396a0fb60ebffcd67778b77502b3f8cb9a485cb08e74d4a582e88a828026000ec7241b4050055 + languageName: node + linkType: hard + +"@cspell/strong-weak-map@npm:6.30.2": + version: 6.30.2 + resolution: "@cspell/strong-weak-map@npm:6.30.2" + checksum: 63f923a70bce89abb7955ad38ff1224b91b92afa4e310f333885bdd6b1220316ef51bb4d11455c9f65e5233d2d9504335409944649af5f722fed11e17df46d0a + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -9227,8 +9676,8 @@ __metadata: linkType: hard "@cypress/request@npm:^2.88.10": - version: 2.88.10 - resolution: "@cypress/request@npm:2.88.10" + version: 2.88.11 + resolution: "@cypress/request@npm:2.88.11" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -9243,12 +9692,12 @@ __metadata: json-stringify-safe: ~5.0.1 mime-types: ~2.1.19 performance-now: ^2.1.0 - qs: ~6.5.2 + qs: ~6.10.3 safe-buffer: ^5.1.2 tough-cookie: ~2.5.0 tunnel-agent: ^0.6.0 uuid: ^8.3.2 - checksum: 69c3e3b332e9be4866a900f6bcca5d274d8cea6c99707fbcce061de8dbab11c9b1e39f4c017f6e83e6e682717781d4f6106fd6b7cf9546580fcfac353b6676cf + checksum: e4b3f62e0c41c4ccca6c942828461d8ea717e752fd918d685e9f74e2ebcfa8b7942427f7ce971e502635c3bf3d40011476db84dc753d3dc360c6d08350da6f93 languageName: node linkType: hard @@ -9263,13 +9712,13 @@ __metadata: linkType: hard "@dabh/diagnostics@npm:^2.0.2": - version: 2.0.2 - resolution: "@dabh/diagnostics@npm:2.0.2" + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" dependencies: colorspace: 1.1.x enabled: 2.0.x kuler: ^2.0.0 - checksum: 4d95cc31249a840b6cc3dba3dc4345a9295265413456068a0d07b69fa0ec6a5a5bc2c39e56ec04c6509ac1f4d9c17fc80baaaddd5caa1abcdd3aaeffe2b63cec + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 languageName: node linkType: hard @@ -9344,6 +9793,19 @@ __metadata: languageName: node linkType: hard +"@emotion/cache@npm:^11.10.5": + version: 11.10.5 + resolution: "@emotion/cache@npm:11.10.5" + dependencies: + "@emotion/memoize": ^0.8.0 + "@emotion/sheet": ^1.2.1 + "@emotion/utils": ^1.2.0 + "@emotion/weak-memoize": ^0.3.0 + stylis: 4.1.3 + checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b + languageName: node + linkType: hard + "@emotion/hash@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/hash@npm:0.8.0" @@ -9351,19 +9813,26 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.1.0": - version: 1.1.2 - resolution: "@emotion/is-prop-valid@npm:1.1.2" +"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/is-prop-valid@npm:1.2.0" dependencies: - "@emotion/memoize": ^0.7.4 - checksum: 58b1f2d429a589f8f5bc2c33a8732cbb7bbcb17131a103511ef9a94ac754d7eeb53d627f947da480cd977f9d419fd92e244991680292f3287204159652745707 + "@emotion/memoize": ^0.8.0 + checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 languageName: node linkType: hard -"@emotion/memoize@npm:^0.7.4": - version: 0.7.5 - resolution: "@emotion/memoize@npm:0.7.5" - checksum: 83da8d4a7649a92c72f960817692bc6be13cc13e107b9f7e878d63766525ed4402881bfeb3cda61145c050281e7e260f114a0a2870515527346f2ef896b915b3 +"@emotion/memoize@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/memoize@npm:0.8.0" + checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/sheet@npm:1.2.1" + checksum: ce78763588ea522438156344d9f592203e2da582d8d67b32e1b0b98eaba26994c6c270f8c7ad46442fc9c0a9f048685d819cd73ca87e544520fd06f0e24a1562 languageName: node linkType: hard @@ -9381,6 +9850,20 @@ __metadata: languageName: node linkType: hard +"@emotion/utils@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/utils@npm:1.2.0" + checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.0": + version: 0.3.0 + resolution: "@emotion/weak-memoize@npm:0.3.0" + checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 + languageName: node + linkType: hard + "@esbuild-kit/cjs-loader@npm:^2.4.1": version: 2.4.2 resolution: "@esbuild-kit/cjs-loader@npm:2.4.2" @@ -9392,12 +9875,12 @@ __metadata: linkType: hard "@esbuild-kit/core-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "@esbuild-kit/core-utils@npm:3.0.0" + version: 3.1.0 + resolution: "@esbuild-kit/core-utils@npm:3.1.0" dependencies: - esbuild: ~0.15.10 + esbuild: ~0.17.6 source-map-support: ^0.5.21 - checksum: 0e89ec718e2211bf95c48a8085aaef88e8e416f42abd1c62d488d5458eecd3fbc144179a0c5570ad36fa7e2d3bbc411f8d3fb28802c37ced2154dc2c6ded9dfe + checksum: d54fd5adb3ce6784d84bb025ad54ddcfbab99267071a7f65298e547f56696f0b9d0dba96c535f9678a30d4887ec71cd445fdd277d65fbec1f3b504f6808f693e languageName: node linkType: hard @@ -9415,13 +9898,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.15.18": - version: 0.15.18 - resolution: "@esbuild/android-arm@npm:0.15.18" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/android-arm@npm:0.16.17" @@ -9548,13 +10024,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.18": - version: 0.15.18 - resolution: "@esbuild/linux-loong64@npm:0.15.18" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-loong64@npm:0.16.17" @@ -9723,70 +10192,45 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.4.1": - version: 1.4.1 - resolution: "@eslint/eslintrc@npm:1.4.1" +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.3.0 + resolution: "@eslint-community/eslint-utils@npm:4.3.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: f487760a692f0f1fef76e248ad72976919576ba57edc2b1b1dc1d182553bae6b5bf7b078e654da85d04f0af8a485d20bd26280002768f4fbcd2e330078340cb0 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/regexpp@npm:4.4.0" + checksum: 2d127af0c752b80e8a782eacfe996a86925d21de92da3ffc6f9e615e701145e44a62e26bdd88bfac2cd76779c39ba8d9875a91046ec5e7e5f23cb647c247ea6a + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.0.1": + version: 2.0.1 + resolution: "@eslint/eslintrc@npm:2.0.1" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.4.0 + espree: ^9.5.0 globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 + checksum: 56b9192a687a450db53a7b883daf9f0f447c43b3510189cf88808a7a2467c2a302a42a50f184cc6d5a9faf3d1df890a2ef0fd0d60b751f32a3e9dfea717c6b48 languageName: node linkType: hard -"@f/animate@npm:^1.0.1": - version: 1.0.1 - resolution: "@f/animate@npm:1.0.1" - dependencies: - "@f/elapsed-time": ^1.0.0 - "@f/raf": ^1.0.0 - "@f/tween": ^1.0.0 - checksum: 660b44d297b1a6e5e28c48438633e00ded40f8e51adb4bfb26fc809b60c8c056f567f2e61f4f842c8fd2cf8a85dffaa1c2502bd0963eb926135f2d66d9f997db - languageName: node - linkType: hard - -"@f/elapsed-time@npm:^1.0.0": - version: 1.0.0 - resolution: "@f/elapsed-time@npm:1.0.0" - dependencies: - "@f/timestamp": ^1.0.0 - checksum: 5934d24a667bae4e0089408aa362c0ee1503945adf73ca0ff0d09fed33d62d070f0323eb9a54f42c37bd0545330a0f63da13319f66cc89fef59b8917a3278b5f - languageName: node - linkType: hard - -"@f/map-obj@npm:^1.2.2": - version: 1.2.2 - resolution: "@f/map-obj@npm:1.2.2" - checksum: d67db6074e1daa7a3c0f8c2e54094bff48b54d11817fddc886631dd8a17586d0040e7116282a374cc1d3d643d05862d49a1062ea5b2d03b9069507c09ae888a4 - languageName: node - linkType: hard - -"@f/raf@npm:^1.0.0": - version: 1.0.3 - resolution: "@f/raf@npm:1.0.3" - checksum: 800344caf4c649c0bcdefd4febbf3f0eed96bb9b7e54b5bc6eebd7d781c9e6d98ba22fb39da41474080d97ac21916bd1e82051558b43dabcbbf410d2dd0899c1 - languageName: node - linkType: hard - -"@f/timestamp@npm:^1.0.0": - version: 1.0.0 - resolution: "@f/timestamp@npm:1.0.0" - checksum: 8c37acb40cf67952309a214be2ddfd5c4f6634a414efc47406e8d1c1624e74662f584f6b48f3382c742f256aea1537e730e74c6078e52be3a28d0624cc7306a0 - languageName: node - linkType: hard - -"@f/tween@npm:^1.0.0": - version: 1.0.1 - resolution: "@f/tween@npm:1.0.1" - dependencies: - "@f/map-obj": ^1.2.2 - checksum: e37155c43875becc9eca8425b8dc83e64a78fa327738b33fcb3946418369568aa77007ade39591991379187381da829702e5cb84729dd2a0bc3bb4b7c94e4f2b +"@eslint/js@npm:8.36.0": + version: 8.36.0 + resolution: "@eslint/js@npm:8.36.0" + checksum: b7d6b84b823c8c7784be390741196617565527b1f7c0977fde9455bfb57fd88f81c074a03dd878757d2c33fa29f24291e9ecbc1425710f067917324b55e1bf3a languageName: node linkType: hard @@ -9856,7 +10300,7 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/node@npm:^35.1.0": +"@gitbeaker/node@npm:^35.1.0, @gitbeaker/node@npm:^35.8.0": version: 35.8.1 resolution: "@gitbeaker/node@npm:35.8.1" dependencies: @@ -9919,9 +10363,9 @@ __metadata: linkType: hard "@google-cloud/promisify@npm:^3.0.0": - version: 3.0.0 - resolution: "@google-cloud/promisify@npm:3.0.0" - checksum: 5339e36bd5bc7957ae72b959e21c5d50fe028ad8eae9affb6e8e172aab715f3bf6a7b3c01720d6b4b67ea080d91dd30ac00f0dc88d455620c8bb10df263385a2 + version: 3.0.1 + resolution: "@google-cloud/promisify@npm:3.0.1" + checksum: 44b4de760425d6ea328f6208c46219cfcc44383b4015c67a6b18b55b8fee5b754a11f80ed481a7d779bc471950b2b856dce51e36e8004b0d2f73a93e50d756ce languageName: node linkType: hard @@ -10144,30 +10588,16 @@ __metadata: linkType: hard "@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.6 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.6" + version: 7.3.26 + resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.26" dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/utils": 8.9.0 - "@whatwg-node/fetch": ^0.2.4 + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/utils": ^9.2.1 + "@whatwg-node/fetch": ^0.8.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e9711b32fd90d41c97ea8eb6bcc68e5a78374114fdd628ae9f1d4855cc163aecda78d22697c0f6ab556f816a01d27d684bd756ed1b777e7fa42b63200c240b90 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:8.5.14": - version: 8.5.14 - resolution: "@graphql-tools/batch-execute@npm:8.5.14" - dependencies: - "@graphql-tools/utils": 9.1.3 - dataloader: 2.1.0 - 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: a48a11f471fe804852abb60f361eb8e398e5fd9d3b8bc61e3734983a5c8c284f3087b903b5277a2c7e365434947af534a881e67c147b0a3d47849617e124ac33 + checksum: 2dd0324cd677c0a399a3cda6f155e4367ac38c8f6ec8a36c50931e97ce93d70f716f95575bcfda33d5a5b3c75f0ba04c73b82d22613f1a89e3c31965f576ae22 languageName: node linkType: hard @@ -10200,24 +10630,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/delegate@npm:9.0.21": - version: 9.0.21 - resolution: "@graphql-tools/delegate@npm:9.0.21" - dependencies: - "@graphql-tools/batch-execute": 8.5.14 - "@graphql-tools/executor": 0.0.11 - "@graphql-tools/schema": 9.0.12 - "@graphql-tools/utils": 9.1.3 - dataloader: 2.1.0 - 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: fab07abfb06325d82382e6de45bbf2bc6501f18ebabbe50661772b58f512d6e713565be16bd7f99f71fcb00ffeed25bba871d4d459a705880803878e20c2a183 - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:9.0.28": +"@graphql-tools/delegate@npm:9.0.28, @graphql-tools/delegate@npm:^9.0.27": version: 9.0.28 resolution: "@graphql-tools/delegate@npm:9.0.28" dependencies: @@ -10234,68 +10647,53 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/executor-graphql-ws@npm:0.0.5": - version: 0.0.5 - resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.5" +"@graphql-tools/executor-graphql-ws@npm:^0.0.12": + version: 0.0.12 + resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.12" dependencies: - "@graphql-tools/utils": 9.1.3 + "@graphql-tools/utils": 9.2.1 "@repeaterjs/repeater": 3.0.4 "@types/ws": ^8.0.0 - graphql-ws: 5.11.2 + graphql-ws: 5.12.0 isomorphic-ws: 5.0.0 tslib: ^2.4.0 - ws: 8.11.0 + ws: 8.12.1 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 79ced279e56b7508282859f805ca8fe1286eec3b53592893e35517f93e5204eca2db327258599749b0d832918d9d709962059087b4e6a894eacc16ceb0142273 + checksum: 017f970c19e843c24da9f2b2cf45b5d922f5652b05e34c69fb27c3882618c8cc6a6ee008d4e767c1e74b2ba8630147ec8c7821996ff0eb1724f15dc27b95d1fd languageName: node linkType: hard -"@graphql-tools/executor-http@npm:0.0.7": - version: 0.0.7 - resolution: "@graphql-tools/executor-http@npm:0.0.7" +"@graphql-tools/executor-http@npm:^0.1.7": + version: 0.1.9 + resolution: "@graphql-tools/executor-http@npm:0.1.9" dependencies: - "@graphql-tools/utils": 9.1.3 - "@repeaterjs/repeater": 3.0.4 - "@whatwg-node/fetch": 0.5.3 - dset: 3.1.2 + "@graphql-tools/utils": ^9.2.1 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/fetch": ^0.8.1 + dset: ^3.1.2 extract-files: ^11.0.0 - meros: 1.2.1 + meros: ^1.2.1 tslib: ^2.4.0 - value-or-promise: 1.0.11 + value-or-promise: ^1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 05918ee65cb7d3e927e707acddb184ba2efbccf03656454ff8b172654aa41c4ad35bed487c0399ca085ba39ca434421cdaadb78dec4d7ebabbd25fe3c5cbb81c + checksum: de62f839c3775141f444a6a453bf8cd01e42257a915845180b7f840b59bb781c21eeb59f68b609dcbab5bae73bc9fa40f3d16449f23410bc616b1f347dedf1d1 languageName: node linkType: hard -"@graphql-tools/executor-legacy-ws@npm:0.0.5": - version: 0.0.5 - resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.5" +"@graphql-tools/executor-legacy-ws@npm:^0.0.9": + version: 0.0.9 + resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.9" dependencies: - "@graphql-tools/utils": 9.1.3 + "@graphql-tools/utils": 9.2.1 "@types/ws": ^8.0.0 isomorphic-ws: 5.0.0 tslib: ^2.4.0 - ws: 8.11.0 + ws: 8.12.1 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2705e57ae81fbe3117d14900d50ab2459618d93192f795db97e2b98e9a772ebfe2308c17e72d92735123ec32fbedad014158d20fd1cc569fa287d47c90037a71 - languageName: node - linkType: hard - -"@graphql-tools/executor@npm:0.0.11": - version: 0.0.11 - resolution: "@graphql-tools/executor@npm:0.0.11" - dependencies: - "@graphql-tools/utils": 9.1.3 - "@graphql-typed-document-node/core": 3.1.1 - "@repeaterjs/repeater": 3.0.4 - 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: 9f4c5d50eb574ab788a70684150502d4ad25b2681a3933a9415a0bbd78bfdf5ee203dca8bccc4cef93727157254216f0c22c5359bef1c1738f652b3122048b17 + checksum: 9f35a38d1e064d4c82eee8d91d0b12552f75b65a413e1defc3831c726c6304f26b3651d3bd26aff3f58e049e40639ddf9b27f681a8bc49fdf11fb693e0d05392 languageName: node linkType: hard @@ -10315,68 +10713,52 @@ __metadata: linkType: hard "@graphql-tools/git-loader@npm:^7.2.13": - version: 7.2.13 - resolution: "@graphql-tools/git-loader@npm:7.2.13" + version: 7.2.20 + resolution: "@graphql-tools/git-loader@npm:7.2.20" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.4.0 - "@graphql-tools/utils": 9.1.1 + "@graphql-tools/graphql-tag-pluck": 7.5.0 + "@graphql-tools/utils": 9.2.1 is-glob: 4.0.3 micromatch: ^4.0.4 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4690d473bb05d91765ee54fbfd0cb3859bda8cef776feced26e477b6aef22c582923ff18bdc963adcb649d8fa975344371001af60867d1e2cfd5624917cf6e91 + checksum: a0f16d44c60261eb9680f907d56b86ce3dda4642118ef3c436946f8e5dc1390151b9fd5ae75d34736c78d16e3e1191c1596bd8a86866fe2384ee7b73b9000e29 languageName: node linkType: hard "@graphql-tools/github-loader@npm:^7.3.20": - version: 7.3.20 - resolution: "@graphql-tools/github-loader@npm:7.3.20" + version: 7.3.27 + resolution: "@graphql-tools/github-loader@npm:7.3.27" dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/graphql-tag-pluck": 7.4.0 - "@graphql-tools/utils": 9.1.1 - "@whatwg-node/fetch": ^0.5.0 + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/graphql-tag-pluck": ^7.4.6 + "@graphql-tools/utils": ^9.2.1 + "@whatwg-node/fetch": ^0.8.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 96292e59f8b394fb1e69fae91b3fdf037962e8feadd15da7461043c9559450fc35c2438b669727b14a6d509f784f0c5401477f3f90f693a93fc8c59c246d0c77 + checksum: 467d5c9f0df5a26656dbd5939768335277eb25023331a359fd4748c2cd85de85affe8d7ac93ac9d51202ed208c54357561e32e2520fae28fdbc42dda72dd99f4 languageName: node linkType: hard "@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.0 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.0" + version: 7.5.16 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.16" dependencies: - "@graphql-tools/import": 6.7.1 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/import": 6.7.17 + "@graphql-tools/utils": 9.2.1 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 57f9f64a26f62d25fcb65282d27a8f6cce8d99fd0ec8f1d5b31ab43fd5698876760e4df42fd96f2b5ea524f2e755768496ee2b3516d559d43270330551371359 + checksum: 5f9af56511a2f791677ad2601e745053d3f28b3afdf5542261e4bbf9924b9872244dcb0c9f6c7ca7fe91b658c12f4d91529efd9638653e112ad75bf79c915d78 languageName: node linkType: hard -"@graphql-tools/graphql-tag-pluck@npm:7.4.0": - version: 7.4.0 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.4.0" - dependencies: - "@babel/parser": ^7.16.8 - "@babel/plugin-syntax-import-assertions": 7.20.0 - "@babel/traverse": ^7.16.8 - "@babel/types": ^7.16.8 - "@graphql-tools/utils": 9.1.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 670888e691707d430066a84ddcc9a34f64c6146e3f1406ab9fbdf74d5805fcbac8d32462cd387c411fbb81a5fc6bfb4d4d14e0568c5b887c72df8ebb7ef66c1b - languageName: node - linkType: hard - -"@graphql-tools/graphql-tag-pluck@npm:7.5.0": +"@graphql-tools/graphql-tag-pluck@npm:7.5.0, @graphql-tools/graphql-tag-pluck@npm:^7.4.6": version: 7.5.0 resolution: "@graphql-tools/graphql-tag-pluck@npm:7.5.0" dependencies: @@ -10392,68 +10774,44 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/import@npm:6.7.1": - version: 6.7.1 - resolution: "@graphql-tools/import@npm:6.7.1" +"@graphql-tools/import@npm:6.7.17": + version: 6.7.17 + resolution: "@graphql-tools/import@npm:6.7.17" dependencies: - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": 9.2.1 resolve-from: 5.0.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1ba6ff176851eff345ccfd37616bd2d800fba074b88abb9a777b59fe153a1e55f2c24d8c033b141303267212f6a01eb874088e403b7efdf10c01c9ec7833af49 + checksum: 232debc4abed340f9ab04a9474e6f1af0f50d5b6b66dc6f7b7307872a27bd00745bc4fad1d7d00bf3503686766d2e26c9c42c4f1e2409111799ad80119a8303a languageName: node linkType: hard "@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.1 - resolution: "@graphql-tools/json-file-loader@npm:7.4.1" + version: 7.4.17 + resolution: "@graphql-tools/json-file-loader@npm:7.4.17" dependencies: - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": 9.2.1 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9eae0fd4229b60fa93d3e523e7255eeb2400bda44a2e73ba036955c514be4f02c83e7578c4749c4a7e84b44d318d4c65979b745ddb34fa4d219449f455e3e873 + checksum: 54e4d1acf5bb1b55d72500b2ebb521d821edfb99ad7c1b0f0d6b2e3f87cfcda2d61ce6d4a886117ac11fb94354da6f7435f35a1ffdc359cf2e39da1d0fde76c5 languageName: node linkType: hard "@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.8.0": - version: 7.8.10 - resolution: "@graphql-tools/load@npm:7.8.10" + version: 7.8.13 + resolution: "@graphql-tools/load@npm:7.8.13" dependencies: - "@graphql-tools/schema": 9.0.14 - "@graphql-tools/utils": 9.1.4 + "@graphql-tools/schema": 9.0.17 + "@graphql-tools/utils": 9.2.1 p-limit: 3.1.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9b1fd7041fc69072c4f7d6bc320c9de7f990e1792db567d3d913b9cc77f5c164ffee968dd90a688d89856e1e8c01beb8e1bbe9f22464fa8c563553229c3a3f28 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.3.14": - version: 8.3.14 - resolution: "@graphql-tools/merge@npm:8.3.14" - dependencies: - "@graphql-tools/utils": 9.1.3 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: d77098959a7ecf1346958eb6731f7354fc1155d253aa25169ca48b73053784f3db203ff88ada6a1cdfa9a0b026e55ce02afb83ac61b501223c018e97accf7cdc - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.3.16": - version: 8.3.16 - resolution: "@graphql-tools/merge@npm:8.3.16" - dependencies: - "@graphql-tools/utils": 9.1.4 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4d7fa594e0d97b6d596c85619a8203cb9c88452b75efac4191697de00db5d043639ed47f6bf0a3ccc11e8638714d92a4a8bc37e77b61b46790ddf4a1e5d4bb87 + checksum: f8dafe3b1575a33234b798751a6ec4ee9d78bfb32055395da45f7081737d30f863fe5bb2cc8c2aadd5b46d3a443d1dec75d7f2cc58399c071ac35c8470cb7ff6 languageName: node linkType: hard @@ -10470,25 +10828,24 @@ __metadata: linkType: hard "@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.0 - resolution: "@graphql-tools/optimize@npm:1.3.0" + version: 1.3.1 + resolution: "@graphql-tools/optimize@npm:1.3.1" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 56a5e8e3079a7ac69639410143315bafd43175c0366a95cf037698b64799ff80fc737b747b7751a4de31b44a679f67b7499468c556ca457932d5d1052db73f19 + checksum: 4eed041bc3199a70ab426eeb10bc4af65f18fa0c5907613aec236fd7e14918d0f895e12489df6ff501562415eef64c99777a3ca6f6a4ee3c796b68e7cb778342 languageName: node linkType: hard "@graphql-tools/prisma-loader@npm:^7.2.49": - version: 7.2.49 - resolution: "@graphql-tools/prisma-loader@npm:7.2.49" + version: 7.2.65 + resolution: "@graphql-tools/prisma-loader@npm:7.2.65" dependencies: - "@graphql-tools/url-loader": 7.16.28 - "@graphql-tools/utils": 9.1.3 + "@graphql-tools/url-loader": 7.17.14 + "@graphql-tools/utils": 9.2.1 "@types/js-yaml": ^4.0.0 "@types/json-stable-stringify": ^1.0.32 - "@types/jsonwebtoken": ^8.5.0 chalk: ^4.1.0 debug: ^4.3.1 dotenv: ^16.0.0 @@ -10496,57 +10853,29 @@ __metadata: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 isomorphic-fetch: ^3.0.0 + jose: ^4.11.4 js-yaml: ^4.0.0 json-stable-stringify: ^1.0.1 - jsonwebtoken: ^9.0.0 lodash: ^4.17.20 scuid: ^1.1.0 tslib: ^2.4.0 yaml-ast-parser: ^0.0.43 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9a392346107ec5e468a8725c1d931b638e1899c25a80e34e9c888c050abf85dfde85faea9fdb19a8bfd9425bdb97949e14e759157d083aa91812fcff516ad82d + checksum: 2354b7e2074b7a519984bb36f1923a1d24c26b83db5e3ad9c319a3e94365c469984fd8e0a442b9a1d6740e7b25830ae31069c89c2ae3c1ac63fa87b444d2b58f languageName: node linkType: hard "@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.0 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.0" + version: 6.5.17 + resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.17" dependencies: "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/utils": 9.2.1 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: eea705c0508b801806d36a6031997868d1aa35a2bee0a21c36e5ac345691a9fec88c9c00bc3c96fa998aa28deb2be667d65e6123ac469f22072f3eba2781b5ad - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:9.0.12": - version: 9.0.12 - resolution: "@graphql-tools/schema@npm:9.0.12" - dependencies: - "@graphql-tools/merge": 8.3.14 - "@graphql-tools/utils": 9.1.3 - 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: c5ea750466181b425dd77822b1dc774227bcdb3a01631f114734d450cfc2dabeac60b3fac40e047090d6035b6a559b614716f1b61068889cf5aae0785650c31b - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:9.0.14": - version: 9.0.14 - resolution: "@graphql-tools/schema@npm:9.0.14" - dependencies: - "@graphql-tools/merge": 8.3.16 - "@graphql-tools/utils": 9.1.4 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: ae958892363fe8b1715a9fd3c4bdb56d0d5d429693dbb9774ce930d104ed5a7c94db3c41c12d91fd930bf90ab186337d3ba660e765a99a98bde892f0d2dcf40e + checksum: 1e5163390b2834c2246c4842c9ca7b9a63cdff17f5b5afe5934bbb837b5b26e14e2144ef3fad992e3618d4012fb6736a71c34a38e1fdb4e628e3de7f74fac8bd languageName: node linkType: hard @@ -10564,81 +10893,26 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/url-loader@npm:7.16.28, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": - version: 7.16.28 - resolution: "@graphql-tools/url-loader@npm:7.16.28" +"@graphql-tools/url-loader@npm:7.17.14, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": + version: 7.17.14 + resolution: "@graphql-tools/url-loader@npm:7.17.14" dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/delegate": 9.0.21 - "@graphql-tools/executor-graphql-ws": 0.0.5 - "@graphql-tools/executor-http": 0.0.7 - "@graphql-tools/executor-legacy-ws": 0.0.5 - "@graphql-tools/utils": 9.1.3 - "@graphql-tools/wrap": 9.2.23 + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/delegate": ^9.0.27 + "@graphql-tools/executor-graphql-ws": ^0.0.12 + "@graphql-tools/executor-http": ^0.1.7 + "@graphql-tools/executor-legacy-ws": ^0.0.9 + "@graphql-tools/utils": ^9.2.1 + "@graphql-tools/wrap": ^9.3.8 "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.5.0 - isomorphic-ws: 5.0.0 + "@whatwg-node/fetch": ^0.8.0 + isomorphic-ws: ^5.0.0 tslib: ^2.4.0 value-or-promise: ^1.0.11 - ws: 8.11.0 + ws: ^8.12.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fca2dada0d80c051358f928a321eda0cfa96bb71704b4feb7e61dfd7226f78fb1dd2e8268f4e81080a2984cf57ee92ef6c8608c89c6f931860a0cbdd63bcb031 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.8.0": - version: 8.8.0 - resolution: "@graphql-tools/utils@npm:8.8.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 631aa690fcf7c01c42829af93f2af1c62d2eeaca99a74f2ae9d6424b7662383391fff37443d61f76fd9f00243b33d0ba0a7df8792c835e1db1fd1b4cee2f32f0 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.9.0": - version: 8.9.0 - resolution: "@graphql-tools/utils@npm:8.9.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 8d1d8a11722e211dc8723cd3fd7a97fa5401ab22146e4240a0f9d45547792476c34814ff914524578beec961db7b0ff23a6ddff8fe059764537e594cff35c906 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.1.1": - version: 9.1.1 - resolution: "@graphql-tools/utils@npm:9.1.1" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5a5120417c00b0f8a834b69dca9b7496022f8b1ed3719c2cf7de8253ff639ecc0f4a8e2bcaf0193ce44bd59431098180e94bdd96406e9f260e058b16c0e26975 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.1.3": - version: 9.1.3 - resolution: "@graphql-tools/utils@npm:9.1.3" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3b5acd41ae939e2811f496b1676e6219be61a95f3e502bb3783542a67e7703d7709d4ae87fc9deb7284280aea687fb4b0e596f538d7f1cdf5a8827a2952ee994 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.1.4": - version: 9.1.4 - resolution: "@graphql-tools/utils@npm:9.1.4" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 467135297a07b21bdd706ca03385354931db85fcf2accc514d69b7415c8cb0fb9e551e4bba0870278eab58bf4de757d354d53c88fd0f55b52d8562dbcba71869 + checksum: a9473c0d49299d4807c5ab881407b7e96989a06cc583bddd34eb059295fd847df982bf95b82fc713150ac60fe1ccdd1db78bc17e3903db44684b5cce0f7cb82a languageName: node linkType: hard @@ -10654,22 +10928,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:9.2.23": - version: 9.2.23 - resolution: "@graphql-tools/wrap@npm:9.2.23" - dependencies: - "@graphql-tools/delegate": 9.0.21 - "@graphql-tools/schema": 9.0.12 - "@graphql-tools/utils": 9.1.3 - 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: 8f4f289d51adb92a7099940892c52b710e61f76d02580a3223e80aaed790d32f769cae33a4afeff398357f33a55267427d9703de6f0bd30ec9ba57ee3bd5ef5c - languageName: node - linkType: hard - -"@graphql-tools/wrap@npm:^9.0.0": +"@graphql-tools/wrap@npm:^9.0.0, @graphql-tools/wrap@npm:^9.3.8": version: 9.3.8 resolution: "@graphql-tools/wrap@npm:9.3.8" dependencies: @@ -10684,16 +10943,7 @@ __metadata: languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:3.1.1": - version: 3.1.1 - resolution: "@graphql-typed-document-node/core@npm:3.1.1" - 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: 87ff4cee308f1075f4472b80f9f9409667979940f8f701e87f0aa35ce5cf104d94b41258ea8192d05a0893475cd0f086a3929a07663b4fe8d0e805a277f07ed5 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:3.1.2, @graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": +"@graphql-typed-document-node/core@npm:3.1.2": version: 3.1.2 resolution: "@graphql-typed-document-node/core@npm:3.1.2" peerDependencies: @@ -10702,19 +10952,28 @@ __metadata: languageName: node linkType: hard +"@graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d + languageName: node + linkType: hard + "@grpc/grpc-js@npm:~1.8.0": - version: 1.8.9 - resolution: "@grpc/grpc-js@npm:1.8.9" + version: 1.8.12 + resolution: "@grpc/grpc-js@npm:1.8.12" dependencies: "@grpc/proto-loader": ^0.7.0 "@types/node": ">=12.12.47" - checksum: 40408af0c0e2b61dbb0fe1c246ae30404c89c601f3e9f9f8447f82d01d8dc0c8befccf2afe9ded07dfc8bd89c927bcbfb5925d4b1ae887299112b2ab549f519c + checksum: bf6135f8c87d6008f42452a7234b9bfa4bb558dd553a77dcd90cd2fbc9c8f01585504788e479a2805e4ab5f0d4e6d3480f7096324b3ab5db9e492e674b8c375a languageName: node linkType: hard "@grpc/proto-loader@npm:^0.7.0": - version: 0.7.2 - resolution: "@grpc/proto-loader@npm:0.7.2" + version: 0.7.5 + resolution: "@grpc/proto-loader@npm:0.7.5" dependencies: "@types/long": ^4.0.1 lodash.camelcase: ^4.3.0 @@ -10723,23 +10982,23 @@ __metadata: yargs: ^16.2.0 bin: proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: b6b45b3da96d634886cae149be67c8754de6e6ed03fee974308610b99df417d7b33f12c22b2770755482634193876baeff13469f9d82898e0a5ccf4e5d8b3535 + checksum: ca3a16fc18526a835d006802d15dcf21cb3e2a7a803a988bf34397ebeb07ae94062b3f06db3d1a9b8ec3c40bd96354ca69d9e2ac06ef4c3a74a990d9e55ca2fd languageName: node linkType: hard "@hapi/hoek@npm:^9.0.0": - version: 9.0.4 - resolution: "@hapi/hoek@npm:9.0.4" - checksum: a5503ebaad5407e0c99d0656b0bbc3e9ccac9eddc9b9f66e0358a2da9a9dd173c63c9f7c5e46504a05e1fc41d853e9a19617e258d4fcbe1a4be7f9e61da83920 + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 languageName: node linkType: hard "@hapi/topo@npm:^5.0.0": - version: 5.0.0 - resolution: "@hapi/topo@npm:5.0.0" + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" dependencies: "@hapi/hoek": ^9.0.0 - checksum: 8aa81f71696f88d7daeab4547e120e43c6ab78081a4f215eec5103dd858f3122a703512cdacc43aa7e27d99607345165acfeb2ee69e556e63afd50c5c57a36c3 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 languageName: node linkType: hard @@ -10866,9 +11125,9 @@ __metadata: linkType: soft "@ioredis/commands@npm:^1.1.1": - version: 1.1.1 - resolution: "@ioredis/commands@npm:1.1.1" - checksum: 66a9dc315dc077826fef4057c027c77c5af3fba247e6a5156c6847700fec8968a1b180bca344120ad561f5654cda54ed63119f790a041b0a010cacf02421ecff + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 languageName: node linkType: hard @@ -10880,21 +11139,22 @@ __metadata: linkType: hard "@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.0.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.0.0" + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" dependencies: camelcase: ^5.3.1 find-up: ^4.1.0 + get-package-type: ^0.1.0 js-yaml: ^3.13.1 resolve-from: ^5.0.0 - checksum: 6671bd5029a30c1215106d12f870a67a0f6d58f1e038173c84e0006f22f6e724eeee9e5ca8ae1bcb3e741d8ec4fd4390fdf92092c66302a3db189e16446c9cfc + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": - version: 0.1.2 - resolution: "@istanbuljs/schema@npm:0.1.2" - checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 languageName: node linkType: hard @@ -10907,50 +11167,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/console@npm:29.4.3" +"@jest/console@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/console@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 - checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 + checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 languageName: node linkType: hard -"@jest/core@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/core@npm:29.4.3" +"@jest/core@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/core@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/reporters": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/reporters": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.4.3 - jest-config: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-message-util: ^29.4.3 + jest-changed-files: ^29.5.0 + jest-config: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-resolve-dependencies: ^29.4.3 - jest-runner: ^29.4.3 - jest-runtime: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 - jest-watcher: ^29.4.3 + jest-resolve: ^29.5.0 + jest-resolve-dependencies: ^29.5.0 + jest-runner: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + jest-watcher: ^29.5.0 micromatch: ^4.0.4 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -10958,7 +11218,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 + checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 languageName: node linkType: hard @@ -10971,15 +11231,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/environment@npm:29.4.3" +"@jest/environment@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/environment@npm:29.5.0" dependencies: - "@jest/fake-timers": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^29.4.3 - checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb + jest-mock: ^29.5.0 + checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a languageName: node linkType: hard @@ -10992,60 +11252,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/expect-utils@npm:29.4.3" +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" dependencies: jest-get-type: ^29.4.3 - checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 languageName: node linkType: hard -"@jest/expect@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/expect@npm:29.4.3" +"@jest/expect@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect@npm:29.5.0" dependencies: - expect: ^29.4.3 - jest-snapshot: ^29.4.3 - checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 + expect: ^29.5.0 + jest-snapshot: ^29.5.0 + checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/fake-timers@npm:29.4.3" +"@jest/fake-timers@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/fake-timers@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.4.3 - jest-mock: ^29.4.3 - jest-util: ^29.4.3 - checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee languageName: node linkType: hard -"@jest/globals@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/globals@npm:29.4.3" +"@jest/globals@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/globals@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/expect": ^29.4.3 - "@jest/types": ^29.4.3 - jest-mock: ^29.4.3 - checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/types": ^29.5.0 + jest-mock: ^29.5.0 + checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 languageName: node linkType: hard -"@jest/reporters@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/reporters@npm:29.4.3" +"@jest/reporters@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/reporters@npm:29.5.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -11058,9 +11318,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 - jest-worker: ^29.4.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -11070,7 +11330,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a + checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb languageName: node linkType: hard @@ -11103,50 +11363,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/test-result@npm:29.4.3" +"@jest/test-result@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-result@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/types": ^29.5.0 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb + checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/test-sequencer@npm:29.4.3" +"@jest/test-sequencer@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-sequencer@npm:29.5.0" dependencies: - "@jest/test-result": ^29.4.3 + "@jest/test-result": ^29.5.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 slash: ^3.0.0 - checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e + checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e languageName: node linkType: hard -"@jest/transform@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/transform@npm:29.4.3" +"@jest/transform@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/transform@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 jest-regex-util: ^29.4.3 - jest-util: ^29.4.3 + jest-util: ^29.5.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 + checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d languageName: node linkType: hard @@ -11177,9 +11437,9 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.4.3": - version: 29.4.3 - resolution: "@jest/types@npm:29.4.3" +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" dependencies: "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 @@ -11187,7 +11447,7 @@ __metadata: "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 languageName: node linkType: hard @@ -11198,6 +11458,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -11216,7 +11486,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e @@ -11250,7 +11520,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -11268,18 +11538,18 @@ __metadata: linkType: hard "@jsdoc/salty@npm:^0.2.1": - version: 0.2.3 - resolution: "@jsdoc/salty@npm:0.2.3" + version: 0.2.5 + resolution: "@jsdoc/salty@npm:0.2.5" dependencies: lodash: ^4.17.21 - checksum: d2b29089e6ba942bf3228087d35379ada248c34f136357d1a4bf5c0350a0d5bde0f90dc68d5e7271728bac1951f85fe749075df0a32a9d584ad5d198492bf7f1 + checksum: 16c65d48c340d8f1b892797bdd6ace4f90d916d16bed5023f2a5421240ead20e828031dfb1d07b8eb0e172a62f532c3c005287e723e30ee9a0c8a0d7d2e98953 languageName: node linkType: hard "@juggle/resize-observer@npm:^3.3.1": - version: 3.3.1 - resolution: "@juggle/resize-observer@npm:3.3.1" - checksum: ddabc4044276a2cb57d469c4917206c7e39f2463aa8e3430e33e4eda554412afe29c22afa40e6708b49dad5d56768dc83acd68a704b1dcd49a0906bb96b991b2 + version: 3.4.0 + resolution: "@juggle/resize-observer@npm:3.4.0" + checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 languageName: node linkType: hard @@ -11331,34 +11601,34 @@ __metadata: linkType: hard "@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.3 - resolution: "@leichtgewicht/ip-codec@npm:2.0.3" - checksum: 5b6bee0481c82ac05c748322e34ac68aa01757451b4f49f1ab9cc91e420a1ea4cd0fc4678251e6fa41d566a3e3683cca3e179fb767c87845286863ac98b54f15 + version: 2.0.4 + resolution: "@leichtgewicht/ip-codec@npm:2.0.4" + checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d languageName: node linkType: hard "@lezer/common@npm:^1.0.0": - version: 1.0.0 - resolution: "@lezer/common@npm:1.0.0" - checksum: 0ba652b39f9ff073a6a8a3376a74279f2c2d2ccdd4d2bb57c7b607341dbdbf64baf9c23a196314f09349d175623bc73a6a0b6a0eeb2cc63f3a1190fd631f7c31 + version: 1.0.2 + resolution: "@lezer/common@npm:1.0.2" + checksum: bbcc58e07be02652bf0700d2856042ec089d5be0b95893d628b3e18192ade864fac83b61b19653e10b9f1472261a178b12318d934e9004edd5483a577c0db56b languageName: node linkType: hard "@lezer/highlight@npm:^1.0.0": - version: 1.0.0 - resolution: "@lezer/highlight@npm:1.0.0" + version: 1.1.3 + resolution: "@lezer/highlight@npm:1.1.3" dependencies: "@lezer/common": ^1.0.0 - checksum: 9ce6c4ea041598e2500f11610e74163eba0361954df8dbf5d12b96dc8b5ab5da8af2defda7ff5728ca460d49f053a7502f2840361bcd8dcf30e8a23f7c30672a + checksum: 90ec143ce46b32f6779c3b245f1b5a540d66686939816d3daed8318821acc4bc719466dc222336cfd483bf04a8de4fdc6f279e904cf114d4d9f786f9feccbbd8 languageName: node linkType: hard "@lezer/lr@npm:^1.0.0": - version: 1.0.0 - resolution: "@lezer/lr@npm:1.0.0" + version: 1.3.3 + resolution: "@lezer/lr@npm:1.3.3" dependencies: "@lezer/common": ^1.0.0 - checksum: 1365a2d1fa0a40815a03a635506a0215475b778d8b8907d274b8ee4b0732fcb7266799b50db7c4517254da1d245c153c348fd0d7b1db93b7d66926b9c538ee43 + checksum: 1804074c794005a31c54d80ab72127f19ae5be29bb627c52bc001a57b1af97a9e62732ff13e3aeb7bc53b330202b6bd3747272c64d87f257dbba533e75a183a3 languageName: node linkType: hard @@ -11389,27 +11659,27 @@ __metadata: linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.5 - resolution: "@mapbox/node-pre-gyp@npm:1.0.5" + version: 1.0.10 + resolution: "@mapbox/node-pre-gyp@npm:1.0.10" dependencies: - detect-libc: ^1.0.3 + detect-libc: ^2.0.0 https-proxy-agent: ^5.0.0 make-dir: ^3.1.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 nopt: ^5.0.0 - npmlog: ^4.1.2 + npmlog: ^5.0.1 rimraf: ^3.0.2 - semver: ^7.3.4 - tar: ^6.1.0 + semver: ^7.3.5 + tar: ^6.1.11 bin: node-pre-gyp: bin/node-pre-gyp - checksum: c1f182a707f5782e47b77a76e9d6a073fb043999cf9ad965bc86732e88db27ad00926d1602918edb7105f05cde67871b84a178ee9844eb742319ade419636675 + checksum: 1a98db05d955b74dad3814679593df293b9194853698f3f5f1ed00ecd93128cdd4b14fb8767fe44ac6981ef05c23effcfdc88710e7c1de99ccb6f647890597c8 languageName: node linkType: hard "@material-table/core@npm:^3.1.0": - version: 3.1.0 - resolution: "@material-table/core@npm:3.1.0" + version: 3.2.5 + resolution: "@material-table/core@npm:3.2.5" dependencies: "@babel/runtime": ^7.12.5 "@date-io/date-fns": ^1.3.13 @@ -11422,50 +11692,13 @@ __metadata: prop-types: ^15.7.2 react-beautiful-dnd: ^13.0.0 react-double-scrollbar: 0.0.15 + uuid: ^3.4.0 peerDependencies: "@date-io/core": ^1.3.13 "@material-ui/core": ^4.11.2 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: c54114733c061d99424859465c25fdd0c51314f533d37269ee41062195bb34b5bd7eabae8e7b14532b90baee9363d00333b00d1619c01b821a7ee974053c4947 - languageName: node - linkType: hard - -"@material-ui/core@npm:^3.9.3": - version: 3.9.4 - resolution: "@material-ui/core@npm:3.9.4" - dependencies: - "@babel/runtime": ^7.2.0 - "@material-ui/system": ^3.0.0-alpha.0 - "@material-ui/utils": ^3.0.0-alpha.2 - "@types/jss": ^9.5.6 - "@types/react-transition-group": ^2.0.8 - brcast: ^3.0.1 - classnames: ^2.2.5 - csstype: ^2.5.2 - debounce: ^1.1.0 - deepmerge: ^3.0.0 - dom-helpers: ^3.2.1 - hoist-non-react-statics: ^3.2.1 - is-plain-object: ^2.0.4 - jss: ^9.8.7 - jss-camel-case: ^6.0.0 - jss-default-unit: ^8.0.2 - jss-global: ^3.0.0 - jss-nested: ^6.0.1 - jss-props-sort: ^6.0.0 - jss-vendor-prefixer: ^7.0.0 - normalize-scroll-left: ^0.1.2 - popper.js: ^1.14.1 - prop-types: ^15.6.0 - react-event-listener: ^0.6.2 - react-transition-group: ^2.2.1 - recompose: 0.28.0 - 0.30.0 - warning: ^4.0.1 - peerDependencies: - react: ^16.3.0 - react-dom: ^16.3.0 - checksum: c3923bfba4ef4449fbdcd37712ec0d11393ffa396c575a05b5f9530ca1e714028882d39402eb6918dad49f2eb1c53b261cfd0f2dfed494c2dfd96ee335336b44 + checksum: 707e85cfcb8c1cfc8eb78ea6991509879f774081d7a54ad428f702fe00478b6d3707d0fd85f4ad443ebcfac0c0cab79c046c4d5083adcbc767615445667b50cf languageName: node linkType: hard @@ -11627,21 +11860,6 @@ __metadata: languageName: node linkType: hard -"@material-ui/system@npm:^3.0.0-alpha.0": - version: 3.0.0-alpha.2 - resolution: "@material-ui/system@npm:3.0.0-alpha.2" - dependencies: - "@babel/runtime": ^7.2.0 - deepmerge: ^3.0.0 - prop-types: ^15.6.0 - warning: ^4.0.1 - peerDependencies: - react: ^16.3.0 - react-dom: ^16.3.0 - checksum: 3aacb8b4afe2a820844b90905cfcd86ab934108cd719f11713ee46f8a4da30cb8c50e86219e1440b3c6dd333a09d4123cd1990d9c51862c1d56ec2b36e4d7ded - languageName: node - linkType: hard - "@material-ui/system@npm:^4.12.2": version: 4.12.2 resolution: "@material-ui/system@npm:4.12.2" @@ -11685,20 +11903,6 @@ __metadata: languageName: node linkType: hard -"@material-ui/utils@npm:^3.0.0-alpha.2": - version: 3.0.0-alpha.3 - resolution: "@material-ui/utils@npm:3.0.0-alpha.3" - dependencies: - "@babel/runtime": ^7.2.0 - prop-types: ^15.6.0 - react-is: ^16.6.3 - peerDependencies: - react: ^16.3.0 - react-dom: ^16.3.0 - checksum: 589a16245338c374b604a793d9f7a05bd932c9710f78261e46176b74a61d5d308b3e36dab688988ee5177d689c53d9e9da4649eca009ea11d8aac948db27af50 - languageName: node - linkType: hard - "@material-ui/utils@npm:^4.11.2, @material-ui/utils@npm:^4.11.3, @material-ui/utils@npm:^4.7.1": version: 4.11.3 resolution: "@material-ui/utils@npm:4.11.3" @@ -11723,59 +11927,59 @@ __metadata: linkType: hard "@microsoft/api-documenter@npm:^7.19.27": - version: 7.19.27 - resolution: "@microsoft/api-documenter@npm:7.19.27" + version: 7.21.6 + resolution: "@microsoft/api-documenter@npm:7.21.6" dependencies: - "@microsoft/api-extractor-model": 7.25.3 + "@microsoft/api-extractor-model": 7.26.4 "@microsoft/tsdoc": 0.14.2 - "@rushstack/node-core-library": 3.53.3 - "@rushstack/ts-command-line": 4.13.1 + "@rushstack/node-core-library": 3.55.2 + "@rushstack/ts-command-line": 4.13.2 colors: ~1.2.1 js-yaml: ~3.13.1 resolve: ~1.22.1 bin: api-documenter: bin/api-documenter - checksum: f243f473e1fe58e1cd6e32aad223724b6b621f569276415380abc4845859bf5c23fbe0e370be2a218f362a6c85b01b44b5427336f55800f2ea8bf3f398b0ee41 + checksum: 8225e94860d4c3a7197547a3d5c7bc7b95dfeb15cdf7812b78f39cdf21e0277137f4bc0e3e5defab12190fbbed3ba428cf4389ad9c5eb448ace0e7dcb869f909 languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.25.3": - version: 7.25.3 - resolution: "@microsoft/api-extractor-model@npm:7.25.3" +"@microsoft/api-extractor-model@npm:7.26.4": + version: 7.26.4 + resolution: "@microsoft/api-extractor-model@npm:7.26.4" dependencies: "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.53.3 - checksum: 532ca30606b5649e90035ef70ff46868f6ccc63181e10b783bc5092e580bcb133112b300799b8f71a19da2b79f685a55f7ddbe84c8fe7ad93d71359c1763c521 + "@rushstack/node-core-library": 3.55.2 + checksum: 0b27f9b248396422f3044f2472d86c111a6a4d34b4fd2c67d9995e96e5b144ec41ac35dbf2a005f144766814b824518bc42b424d93e3075d3dc1b17c2f8791d6 languageName: node linkType: hard "@microsoft/api-extractor@npm:^7.33.7": - version: 7.33.7 - resolution: "@microsoft/api-extractor@npm:7.33.7" + version: 7.34.4 + resolution: "@microsoft/api-extractor@npm:7.34.4" dependencies: - "@microsoft/api-extractor-model": 7.25.3 + "@microsoft/api-extractor-model": 7.26.4 "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.53.3 - "@rushstack/rig-package": 0.3.17 - "@rushstack/ts-command-line": 4.13.1 + "@rushstack/node-core-library": 3.55.2 + "@rushstack/rig-package": 0.3.18 + "@rushstack/ts-command-line": 4.13.2 colors: ~1.2.1 lodash: ~4.17.15 - resolve: ~1.17.0 + resolve: ~1.22.1 semver: ~7.3.0 source-map: ~0.6.1 typescript: ~4.8.4 bin: api-extractor: bin/api-extractor - checksum: 3f9034ca8e7bc7a6622cb8ac1f53f7f265ebca529e17f4abb2bef0ca297011cfa0927c0703a819607d974ca79b8f5307371491cfb192788e723cfd316250f9a6 + checksum: 855a04237e30f425553aab661b77bc0cbeb493510d769691d713e5bfdf02439fa7bc2076750271d154237f8c9d4451b209f30724c9ee2a2c4ea307c5db093d42 languageName: node linkType: hard "@microsoft/microsoft-graph-types@npm:^2.25.0, @microsoft/microsoft-graph-types@npm:^2.6.0": - version: 2.25.0 - resolution: "@microsoft/microsoft-graph-types@npm:2.25.0" - checksum: b311385e0a51f827082af5a016f35b1d6cd4d861121e8767b3279ab1a17475977cddbbdcc208abdddf0f953fd6ce4634d3c302e317cf50af4cb6111385347b4f + version: 2.26.0 + resolution: "@microsoft/microsoft-graph-types@npm:2.26.0" + checksum: a4391e8b9e9573eb577f0d2c38c773340b8f21c56342e672ce0f15469bbecd53acfc49a505ec6b18592b7f0de14e2f9a6477a6015d9837ead757795077d07ad6 languageName: node linkType: hard @@ -11809,25 +12013,181 @@ __metadata: linkType: hard "@mswjs/interceptors@npm:^0.17.5": - version: 0.17.5 - resolution: "@mswjs/interceptors@npm:0.17.5" + version: 0.17.9 + resolution: "@mswjs/interceptors@npm:0.17.9" dependencies: "@open-draft/until": ^1.0.3 "@types/debug": ^4.1.7 - "@xmldom/xmldom": ^0.7.5 + "@xmldom/xmldom": ^0.8.3 debug: ^4.3.3 headers-polyfill: ^3.1.0 outvariant: ^1.2.1 strict-event-emitter: ^0.2.4 web-encoding: ^1.1.5 - checksum: 0293ccc56c1c85fb7334cd5902574f7df20c26be74d633c83fde64ffd7620f81e08253fe7985c6b5ad3b64c04ad53c3610e9b9c07621518aabd977343026bb2b + checksum: 4df726cbee93d8baa54ead1ecb11e98124468659f51eb659ef8ead4aca7d6375198baf412ea17d4810fa5f1ee4fa53994702cb3b0b4f6f427a2f0fb890020192 + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-alpha.121": + version: 5.0.0-alpha.121 + resolution: "@mui/base@npm:5.0.0-alpha.121" + dependencies: + "@babel/runtime": ^7.21.0 + "@emotion/is-prop-valid": ^1.2.0 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.13 + "@popperjs/core": ^2.11.6 + clsx: ^1.2.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b14c9b5ed631058a0ef780a78c5e9129c67338baa4f65a4ab90e23f68410e24d133a9c19f195c136325338b5f444600e43cdd817430b546b73e5371b5d24f32f + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.11.13": + version: 5.11.13 + resolution: "@mui/core-downloads-tracker@npm:5.11.13" + checksum: b8a32c9fc4beac4b596afe5fd3d2aecc2449e59d9e58a7ae6fbe528249fa6eabff3abf9195233eb7a46d523d6f1dc5c4ae95e1a69c287182c81311508c07c2c6 + languageName: node + linkType: hard + +"@mui/material@npm:^5.8.1": + version: 5.11.13 + resolution: "@mui/material@npm:5.11.13" + dependencies: + "@babel/runtime": ^7.21.0 + "@mui/base": 5.0.0-alpha.121 + "@mui/core-downloads-tracker": ^5.11.13 + "@mui/system": ^5.11.13 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.13 + "@types/react-transition-group": ^4.4.5 + clsx: ^1.2.1 + csstype: ^3.1.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 008e7e79bff7f193724c80308c9751151fc61dcaa76ce8f96d11473280ec6d78f61c9bdb8d23f0869e78b9359aa0bdd5164953d57a4e2f7160280f5d2a6b0b2d + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.11.13": + version: 5.11.13 + resolution: "@mui/private-theming@npm:5.11.13" + dependencies: + "@babel/runtime": ^7.21.0 + "@mui/utils": ^5.11.13 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 9e5e02c6482945d9fa52e920fb206fb032d1b1df4bb06ea9d032babb53ed171e3b5a7969091072a5d04b0ab52c90f01ba51b90ba27730019d3f7eccc49ca4628 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.11.11": + version: 5.11.11 + resolution: "@mui/styled-engine@npm:5.11.11" + dependencies: + "@babel/runtime": ^7.21.0 + "@emotion/cache": ^11.10.5 + csstype: ^3.1.1 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: 63b71aafe79afbe1638a31d9cc1361d11edd5b4a8eacc50da86d83b5db11c9a1713c5744d1533360488aef85afc8d4a5429517447b78b598493c7a7d639390dd + languageName: node + linkType: hard + +"@mui/system@npm:^5.11.13": + version: 5.11.13 + resolution: "@mui/system@npm:5.11.13" + dependencies: + "@babel/runtime": ^7.21.0 + "@mui/private-theming": ^5.11.13 + "@mui/styled-engine": ^5.11.11 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.13 + clsx: ^1.2.1 + csstype: ^3.1.1 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: e6f1852ecf3dc901645c096f650950b858f5a5e53fc72ca68a7565e844d0841681c79402c3b63100574d1863b3af88d84b832bc680e8dae3a4a2147c7c9aee0f + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.3": + version: 7.2.3 + resolution: "@mui/types@npm:7.2.3" + peerDependencies: + "@types/react": "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b8511cb78f8df25c8978317ad3fd585c782116b657f2d32233352c09d415c77040e532f41bbe96de6ad46be87138767d3129a9f0de3561900a9a64db7693bce4 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.11.13": + version: 5.11.13 + resolution: "@mui/utils@npm:5.11.13" + dependencies: + "@babel/runtime": ^7.21.0 + "@types/prop-types": ^15.7.5 + "@types/react-is": ^16.7.1 || ^17.0.0 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + react: ^17.0.0 || ^18.0.0 + checksum: 0f403f2635fd5cd39c013b9d4defa2cf1ecc023e35b8c9866d6123792480dcafe47207e43420c10b0d030e64df31e78adfdb8248e2476da27f07d80ed0b44927 languageName: node linkType: hard "@n1ru4l/push-pull-async-iterable-iterator@npm:^3.1.0": - version: 3.1.0 - resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.1.0" - checksum: 1762a3c9b8c131e575c375450a408360551ae47b7c481c8115a73e2533ded134cc1d365e02c8c058c281b8b91764041568a0525250346c64fe57825877d4d5ab + version: 3.2.0 + resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.2.0" + checksum: 2c7bdbc6c3d8f0aa05c2e3e80c4a856f766e6113a86198fd0df2448117f7cfa71ee2946f6aa7e745caec6ac04d19a5a61c6c80c6fdbf686d43984b3791f0a04d languageName: node linkType: hard @@ -11955,22 +12315,22 @@ __metadata: linkType: hard "@npmcli/fs@npm:^1.0.0": - version: 1.0.0 - resolution: "@npmcli/fs@npm:1.0.0" + version: 1.1.1 + resolution: "@npmcli/fs@npm:1.1.1" dependencies: "@gar/promisify": ^1.0.1 semver: ^7.3.5 - checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac + checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/fs@npm:2.1.0" + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 languageName: node linkType: hard @@ -12003,14 +12363,14 @@ __metadata: linkType: hard "@npmcli/map-workspaces@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/map-workspaces@npm:2.0.0" + version: 2.0.4 + resolution: "@npmcli/map-workspaces@npm:2.0.4" dependencies: "@npmcli/name-from-folder": ^1.0.1 - glob: ^7.1.6 - minimatch: ^3.0.4 - read-package-json-fast: ^2.0.1 - checksum: 33707f80cc556aca2d748e228bbe62b6d7ae4a6e95b18b94ca64dd72e9c071ace29e7dd140bce4c2f96a238e40030212ee0ac00dda6026c7b2e23b2f173d75c8 + glob: ^8.0.1 + minimatch: ^5.0.1 + read-package-json-fast: ^2.0.3 + checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f languageName: node linkType: hard @@ -12037,12 +12397,12 @@ __metadata: linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/move-file@npm:2.0.0" + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard @@ -12103,22 +12463,22 @@ __metadata: languageName: node linkType: hard -"@octokit/app@npm:^13.0.5": - version: 13.0.5 - resolution: "@octokit/app@npm:13.0.5" +"@octokit/app@npm:^13.1.1": + version: 13.1.2 + resolution: "@octokit/app@npm:13.1.2" dependencies: - "@octokit/auth-app": ^4.0.0 + "@octokit/auth-app": ^4.0.8 "@octokit/auth-unauthenticated": ^3.0.0 "@octokit/core": ^4.0.0 - "@octokit/oauth-app": ^4.0.4 - "@octokit/plugin-paginate-rest": ^3.0.0 - "@octokit/types": ^6.27.1 + "@octokit/oauth-app": ^4.0.7 + "@octokit/plugin-paginate-rest": ^6.0.0 + "@octokit/types": ^9.0.0 "@octokit/webhooks": ^10.0.0 - checksum: 15fdff892f0ec82a1121b94e82eb09aad8a868147efecb0613dc44b06aeb8252f5a4caade2d929644fd7fa8bff2df56f1fb702506574dafa3df8653421a6015a + checksum: e6b2ff1e71cac593831cbef42684e230987db8d688aef418f10cc7833b6e701126d183cdc65489a6d8f90115d10ec0ef2b0a71e7877be96c657aeec991739654 languageName: node linkType: hard -"@octokit/auth-app@npm:^4.0.0": +"@octokit/auth-app@npm:^4.0.0, @octokit/auth-app@npm:^4.0.8": version: 4.0.9 resolution: "@octokit/auth-app@npm:4.0.9" dependencies: @@ -12137,112 +12497,101 @@ __metadata: linkType: hard "@octokit/auth-oauth-app@npm:^5.0.0": - version: 5.0.1 - resolution: "@octokit/auth-oauth-app@npm:5.0.1" + version: 5.0.5 + resolution: "@octokit/auth-oauth-app@npm:5.0.5" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/auth-oauth-user": ^2.0.0 - "@octokit/request": ^5.6.3 - "@octokit/types": ^6.0.3 + "@octokit/request": ^6.0.0 + "@octokit/types": ^9.0.0 "@types/btoa-lite": ^1.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 8e499a071fa0452805e17cdbeb2df58dab9e2ef5d3a2b3d643c529f86d1048ca5cf629fb573b69894d57af0b8528edf13bef669e7fa399511879833840c8ed02 - languageName: node - linkType: hard - -"@octokit/auth-oauth-device@npm:^3.1.1": - version: 3.1.1 - resolution: "@octokit/auth-oauth-device@npm:3.1.1" - dependencies: - "@octokit/oauth-methods": ^1.1.0 - "@octokit/request": ^5.4.14 - "@octokit/types": ^6.10.0 - universal-user-agent: ^6.0.0 - checksum: e769840fb2953ea7b5d677c249a28766137ed0d2960feee9a5a8eb68737d5f5df0630f855d755f5711823fc11b0a8c2d502288e16c2f577da7aacf0f9853faa6 + checksum: 00f1567d89e1c7004aba451a2beb218da9c6e9ec5be1f973b48936de5f7960803e242a6359a4acd6238958ed62d8d3dcee3b3faafa64431504244dd37a16d418 languageName: node linkType: hard "@octokit/auth-oauth-device@npm:^4.0.0": - version: 4.0.0 - resolution: "@octokit/auth-oauth-device@npm:4.0.0" + version: 4.0.4 + resolution: "@octokit/auth-oauth-device@npm:4.0.4" dependencies: "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^6.10.0 + "@octokit/types": ^9.0.0 universal-user-agent: ^6.0.0 - checksum: 171304f616edf860dcf6980f90bad8bbefb9c093107241791fee7f6d8dcd708dd7c52c601299b37038b53108b874c8d164fffcaa206eecd13b2f9babc60e2f66 + checksum: 245e1fd77684d131793a52a45133ad2514dbb14e5bb6af99eeaccff58662b567327196a721e296ef5734c0988e85a7536ef22bbf04613b302eba595995c5c751 languageName: node linkType: hard "@octokit/auth-oauth-user@npm:^2.0.0": - version: 2.0.0 - resolution: "@octokit/auth-oauth-user@npm:2.0.0" + version: 2.1.1 + resolution: "@octokit/auth-oauth-user@npm:2.1.1" dependencies: - "@octokit/auth-oauth-device": ^3.1.1 - "@octokit/oauth-methods": ^1.1.0 + "@octokit/auth-oauth-device": ^4.0.0 + "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^6.12.2 + "@octokit/types": ^9.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: a9a939e9b1ba79793634234393dbcdc9cda33c84cb2b580d7090c1a737a87cd1b8c35fad42573fc1c84c20ffd4f22ba8d6047ab3af2b10f11a1f870236b8a0a9 + checksum: 6dbe5974bbc71340811fcae86cbb60a177302ecc7bb7fdd7954077f5d40a615a4caae839290defb642703a9079752503314265362736a643ca39c4839454908e languageName: node linkType: hard "@octokit/auth-token@npm:^2.4.4": - version: 2.4.4 - resolution: "@octokit/auth-token@npm:2.4.4" + version: 2.5.0 + resolution: "@octokit/auth-token@npm:2.5.0" dependencies: - "@octokit/types": ^6.0.0 - checksum: ee2c90af0f3274b482b6e615f7c200928a8f86b0596ec95f0e49219515578990118bf1db3baff723191b0e2a94d82af376f357df0ba9a2d8d732b77e9b801feb + "@octokit/types": ^6.0.3 + checksum: 45949296c09abcd6beb4c3f69d45b0c1f265f9581d2a9683cf4d1800c4cf8259c2f58d58e44c16c20bffb85a0282a176c0d51f4af300e428b863f27b910e6297 languageName: node linkType: hard "@octokit/auth-token@npm:^3.0.0": - version: 3.0.1 - resolution: "@octokit/auth-token@npm:3.0.1" + version: 3.0.3 + resolution: "@octokit/auth-token@npm:3.0.3" dependencies: - "@octokit/types": ^7.0.0 - checksum: e94ba5abc2f86cf49e8dc0b86225f2fdda6af451328b13a43d68972117d4e3dccba5cb375fa0c5970a43c9392665bf4e4f0ef1332522f76d4fa4b16c5ad6cc1d + "@octokit/types": ^9.0.0 + checksum: 9b3f569cec1b7e0aa88ab6da68aed4b49b6652261bd957257541fabaf6a4d4ed99f908153cc3dd2fe15b8b0ccaff8caaafaa50bb1a4de3925b0954a47cca1900 languageName: node linkType: hard "@octokit/auth-unauthenticated@npm:^3.0.0": - version: 3.0.0 - resolution: "@octokit/auth-unauthenticated@npm:3.0.0" + version: 3.0.4 + resolution: "@octokit/auth-unauthenticated@npm:3.0.4" dependencies: - "@octokit/request-error": ^2.1.0 - "@octokit/types": ^6.0.3 - checksum: 3b2674f6ef363ee1053cf7e978f1efaec39b85b695bdf0c7fe25fbef028a125c7e548e7d67b32f823aef1938a85f32bfe8de0a5b6071bf21ca4bff596bc62a56 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^9.0.0 + checksum: 0f0ed5be93fa991d718728d35f609a627263c05ca5e40f1455ee8ec42686c7c84f411ce536a9e2b95d140f736289c7df903e38d2af44593f9dae4185150c5d38 languageName: node linkType: hard -"@octokit/core@npm:^3.2.3": - version: 3.2.4 - resolution: "@octokit/core@npm:3.2.4" +"@octokit/core@npm:^3.5.1": + version: 3.6.0 + resolution: "@octokit/core@npm:3.6.0" dependencies: "@octokit/auth-token": ^2.4.4 "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.4.12 + "@octokit/request": ^5.6.3 + "@octokit/request-error": ^2.0.5 "@octokit/types": ^6.0.3 - before-after-hook: ^2.1.0 + before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: f9d48423e45103c3e759231f0b4671c7d7d481f8fa7ead7316dc3d126465b697fd1a8f7f258950f22f602a58aacb7524b4b9f617d284f74429df7bd51ad67052 + checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 languageName: node linkType: hard "@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4, @octokit/core@npm:^4.1.0": - version: 4.1.0 - resolution: "@octokit/core@npm:4.1.0" + version: 4.2.0 + resolution: "@octokit/core@npm:4.2.0" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^8.0.0 + "@octokit/types": ^9.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: 4e53e02ff3ebe808b74385be0055cc1cce4b548060b20e3f2d5dd1bf7877ff7b6556f11278edc070842bf24aa869f9f59a02638f1b14083eb290b9e297447a2d + checksum: 5ac56e7f14b42a5da8d3075a2ae41483521a78bee061a01f4a81d8c0ecd6a684b2e945d66baba0cd1fdf264639deedc3a96d0f32c4d2fc39b49ca10f52f4de39 languageName: node linkType: hard @@ -12258,13 +12607,13 @@ __metadata: linkType: hard "@octokit/endpoint@npm:^7.0.0": - version: 7.0.1 - resolution: "@octokit/endpoint@npm:7.0.1" + version: 7.0.5 + resolution: "@octokit/endpoint@npm:7.0.5" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^9.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 - checksum: a0ff70202e8355845e9462df4e56e7ce4b32f15eddfb169d91e9939b7602fb05c78088b9d1ac9936b1655d61a883c7fe7b08e8f60c100ee05f40844bb4a95097 + checksum: 81c9e9eabf50e48940cceff7c4d7fbc9327190296507cfe8a199ea00cd492caf8f18a841caf4e3619828924b481996eb16091826db6b5a649bee44c8718ecaa9 languageName: node linkType: hard @@ -12290,7 +12639,7 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.2.0": +"@octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.0.7, @octokit/oauth-app@npm:^4.2.0": version: 4.2.0 resolution: "@octokit/oauth-app@npm:4.2.0" dependencies: @@ -12307,13 +12656,6 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-authorization-url@npm:^4.3.1": - version: 4.3.1 - resolution: "@octokit/oauth-authorization-url@npm:4.3.1" - checksum: 2d8e78d178d55ac63b2405b8421dc5443a79b3583c4eedd8de8342c7ee48e122c5887361adeb2bddf13f84f49b2ac747b99d035f85747aac165582161dc6a9de - languageName: node - linkType: hard - "@octokit/oauth-authorization-url@npm:^5.0.0": version: 5.0.0 resolution: "@octokit/oauth-authorization-url@npm:5.0.0" @@ -12321,29 +12663,16 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-methods@npm:^1.1.0": - version: 1.2.2 - resolution: "@octokit/oauth-methods@npm:1.2.2" - dependencies: - "@octokit/oauth-authorization-url": ^4.3.1 - "@octokit/request": ^5.4.14 - "@octokit/request-error": ^2.0.5 - "@octokit/types": ^6.12.2 - btoa-lite: ^1.0.0 - checksum: 36df0292335cc896dbb1f2bcf03b29c693cd270b8213b4b6c291696e3354bdf47f3700a7cdc54bcd9d718be1b7bf00ed1703fd6ba134d33a009d2508c2bd0090 - languageName: node - linkType: hard - "@octokit/oauth-methods@npm:^2.0.0": - version: 2.0.2 - resolution: "@octokit/oauth-methods@npm:2.0.2" + version: 2.0.5 + resolution: "@octokit/oauth-methods@npm:2.0.5" dependencies: "@octokit/oauth-authorization-url": ^5.0.0 - "@octokit/request": ^6.0.0 - "@octokit/request-error": ^3.0.0 - "@octokit/types": ^6.12.2 + "@octokit/request": ^6.2.3 + "@octokit/request-error": ^3.0.3 + "@octokit/types": ^9.0.0 btoa-lite: ^1.0.0 - checksum: 008b0fc52b175fee8ff7d0505ff86bf4e4bc1b69d2c3e6dff9f5a3abbdaefc4730d624ebbc8df8366b7639f9543037d1d22a1ffae180a429182721e8a106d737 + checksum: dda36fdc85f1b9a4322e47d88b13183f86fd7e03e66e787ced7be41ea4a1a64f610e2d1a75f82c7ec7ff5c4a76e07a696c2e7232bf944f04fe64aac5c26bd484 languageName: node linkType: hard @@ -12354,20 +12683,6 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^13.0.0": - version: 13.0.1 - resolution: "@octokit/openapi-types@npm:13.0.1" - checksum: a54dcd7af90470737f4e1ff071d1d5b6d963210f31a658bb17ccb618e5d52164ec1e9cfd3ff3e50a28eccda262fbb20a46b65e70697fc483ccb32a49e444718c - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^14.0.0": - version: 14.0.0 - resolution: "@octokit/openapi-types@npm:14.0.0" - checksum: 0a1f8f3be998cd82c5a640e9166d43fd183b33d5d36f5e1a9b81608e94d0da87c01ec46c9988f69cd26585d4e2ffc4d3ec99ee4f75e5fe997fc86dad0aa8293c - languageName: node - linkType: hard - "@octokit/openapi-types@npm:^16.0.0": version: 16.0.0 resolution: "@octokit/openapi-types@npm:16.0.0" @@ -12375,36 +12690,14 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^2.6.2": - version: 2.7.0 - resolution: "@octokit/plugin-paginate-rest@npm:2.7.0" +"@octokit/plugin-paginate-rest@npm:^2.16.8": + version: 2.21.3 + resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" dependencies: - "@octokit/types": ^6.0.1 + "@octokit/types": ^6.40.0 peerDependencies: "@octokit/core": ">=2" - checksum: 68a61e6acb07965a5bd8be5302aeaa46d8e9038e65fa047a85f834fc25c4773f085a878e73eac79c072cb0ace7e4e5187c8549ab6c6d749e620e0f341ee83835 - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^3.0.0": - version: 3.0.0 - resolution: "@octokit/plugin-paginate-rest@npm:3.0.0" - dependencies: - "@octokit/types": ^6.39.0 - peerDependencies: - "@octokit/core": ">=4" - checksum: 1d2c900254f3dcd43f7ba69dfd12ff63f93a0d39a1bf542b1d0f006e95da4924ae0a26044c864ad7fb0309047f44becaf76293aae334d14c946910d65edd2523 - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^4.0.0": - version: 4.0.0 - resolution: "@octokit/plugin-paginate-rest@npm:4.0.0" - dependencies: - "@octokit/types": ^7.0.0 - peerDependencies: - "@octokit/core": ">=4" - checksum: a3fbc1d540cc919df8935dea88b36d59ae85f417713476d8679f1cf8b733cfb44b96d3020094bd7f8daa7b84e4ac9b8403c1cdad323289d586fdb2ed1dcae7c0 + checksum: acf31de2ba4021bceec7ff49c5b0e25309fc3c009d407f153f928ddf436ab66cd4217344138378d5523f5fb233896e1db58c9c7b3ffd9612a66d760bc5d319ed languageName: node linkType: hard @@ -12419,7 +12712,7 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-request-log@npm:^1.0.2, @octokit/plugin-request-log@npm:^1.0.4": +"@octokit/plugin-request-log@npm:^1.0.4": version: 1.0.4 resolution: "@octokit/plugin-request-log@npm:1.0.4" peerDependencies: @@ -12428,27 +12721,15 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:5.3.1": - version: 5.3.1 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.3.1" +"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0": + version: 5.16.2 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" dependencies: - "@octokit/types": ^6.16.2 + "@octokit/types": ^6.39.0 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 7bc7e294dd66af4b2692ce93d28544f2c3473b4fbe5d935cbe6f7765339e5a83bb12977a403af5d093e8fd038fa707bfd68f81b9d38d4038391de64be73d003c - languageName: node - linkType: hard - -"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": - version: 6.7.0 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.7.0" - dependencies: - "@octokit/types": ^8.0.0 - deprecation: ^2.3.1 - peerDependencies: - "@octokit/core": ">=3" - checksum: 513c6c0717d08f3e85848029bd700412b7d9787750f78cc79a3dede356e94b238bf8a518b108f556a7efe626871720dd0466de9f31091578ea4e0f5a016f0ae7 + checksum: 30fcc50c335d1093f03573d9fa3a4b7d027fc98b215c43e07e82ee8dabfa0af0cf1b963feb542312ae32d897a2f68dc671577206f30850215517bebedc5a2c73 languageName: node linkType: hard @@ -12464,25 +12745,27 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-retry@npm:^3.0.9": - version: 3.0.9 - resolution: "@octokit/plugin-retry@npm:3.0.9" +"@octokit/plugin-retry@npm:^4.0.3": + version: 4.1.3 + resolution: "@octokit/plugin-retry@npm:4.1.3" dependencies: - "@octokit/types": ^6.0.3 + "@octokit/types": ^9.0.0 bottleneck: ^2.15.3 - checksum: 5744780d308dd2f2b8174264604a9f8ea977374256f5eaf0314e5181c32f96ec53a3cfcee67bf1b48dc7eed401ebefebd2fa744b41cf03103affac92f397a874 + peerDependencies: + "@octokit/core": ">=3" + checksum: f9ed5869be23dddcf1ee896ce996e46a412a586259b55612ba44c82cdeed91436102e6e3ec57db879bd91a4446dcafbaa94632e4e059c6af56d9cca9b163eacb languageName: node linkType: hard -"@octokit/plugin-throttling@npm:^4.0.1": - version: 4.0.1 - resolution: "@octokit/plugin-throttling@npm:4.0.1" +"@octokit/plugin-throttling@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/plugin-throttling@npm:5.0.1" dependencies: - "@octokit/types": ^6.0.1 + "@octokit/types": ^9.0.0 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ^4.0.0 - checksum: 7642e5968922b8348510782e7675189810d6ed6cb3fc6ae231fd4614ebdb011759628c8f5fbca40f37e5a2cf69898b8b58cdb7722ae75da59012430c6cf7b4d8 + checksum: 11f54c4791ae75055df22184687788c754914da33b383bb908127f59556012874776e6a597b97d9af2102c5e3b19d13287e8c0b030b5bc42d672c15f383b0132 languageName: node linkType: hard @@ -12497,18 +12780,18 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:^3.0.0": - version: 3.0.1 - resolution: "@octokit/request-error@npm:3.0.1" +"@octokit/request-error@npm:^3.0.0, @octokit/request-error@npm:^3.0.3": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^9.0.0 deprecation: ^2.0.0 once: ^1.4.0 - checksum: ae386b5181b3cb66b844047a21d062b683cd7ec4daf70cb9868406c1a51608a72d683955e692c7cc6237d66a09b12c6bcf102a712985da68bcedcc3820117e75 + checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0 languageName: node linkType: hard -"@octokit/request@npm:^5.4.12, @octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": +"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" dependencies: @@ -12522,7 +12805,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^6.0.0": +"@octokit/request@npm:^6.0.0, @octokit/request@npm:^6.2.3": version: 6.2.3 resolution: "@octokit/request@npm:6.2.3" dependencies: @@ -12537,14 +12820,14 @@ __metadata: linkType: hard "@octokit/rest@npm:^18.5.3": - version: 18.5.6 - resolution: "@octokit/rest@npm:18.5.6" + version: 18.12.0 + resolution: "@octokit/rest@npm:18.12.0" dependencies: - "@octokit/core": ^3.2.3 - "@octokit/plugin-paginate-rest": ^2.6.2 - "@octokit/plugin-request-log": ^1.0.2 - "@octokit/plugin-rest-endpoint-methods": 5.3.1 - checksum: f8db5a06692515413b0124edec2b1d77b35bac99659d4b7b9df2aee01b6b145d7fd6deed602addc79d69429095f1d2fee627e9230cc108f1a389041ab270cb91 + "@octokit/core": ^3.5.1 + "@octokit/plugin-paginate-rest": ^2.16.8 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^5.12.0 + checksum: c18bd6676a60b66819b016b0f969fcd04d8dfa04d01b7af9af9a7410ff028c621c995185e29454c23c47906da506c1e01620711259989a964ebbfd9106f5b715 languageName: node linkType: hard @@ -12569,7 +12852,7 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^6.0.0, @octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.16.2, @octokit/types@npm:^6.27.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.8.2": +"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0, @octokit/types@npm:^6.8.2": version: 6.41.0 resolution: "@octokit/types@npm:6.41.0" dependencies: @@ -12578,24 +12861,6 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^7.0.0": - version: 7.0.0 - resolution: "@octokit/types@npm:7.0.0" - dependencies: - "@octokit/openapi-types": ^13.0.0 - checksum: 54d714c1e8296da7ff68eec6a72061313a3f4836793fe844a120aa8604336e03423c631d6316fa2ab00c34aae7a4be0ecb6aed192d04f891084e00674d176fcb - languageName: node - linkType: hard - -"@octokit/types@npm:^8.0.0": - version: 8.0.0 - resolution: "@octokit/types@npm:8.0.0" - dependencies: - "@octokit/openapi-types": ^14.0.0 - checksum: 1a0197b2c4c522ac90f145e02b3f8cb048a47f71c2c6bdbf021a03db7dd30ca92a899c0186acb401337f218efe44e60d33cc1cc68715b622bb75bc1a4e79515d - languageName: node - linkType: hard - "@octokit/types@npm:^9.0.0": version: 9.0.0 resolution: "@octokit/types@npm:9.0.0" @@ -12639,12 +12904,11 @@ __metadata: linkType: hard "@openapi-contrib/openapi-schema-to-json-schema@npm:^3.0.0": - version: 3.0.3 - resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.0.3" + version: 3.2.0 + resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.2.0" dependencies: fast-deep-equal: ^3.1.3 - lodash.clonedeep: ^4.5.0 - checksum: 2296925669a4a78548f8ba055fbfc1f292274572ecb082d1465b6a6255799f43f0538880009bf4010b2fa9e7c84e97f8aa04d22b330fd469677c594ed98df314 + checksum: c47cbf85bee3e38e06a627efbbdffd78c95cdadebf6d935092c8ff616e31a69fcfd739a5d9cca5b4b2c6aef49f8dbced6c300eac1f8ade66b3fab403df19ccb2 languageName: node linkType: hard @@ -12730,14 +12994,14 @@ __metadata: languageName: node linkType: hard -"@peculiar/asn1-schema@npm:^2.1.6": - version: 2.2.0 - resolution: "@peculiar/asn1-schema@npm:2.2.0" +"@peculiar/asn1-schema@npm:^2.1.6, @peculiar/asn1-schema@npm:^2.3.0": + version: 2.3.6 + resolution: "@peculiar/asn1-schema@npm:2.3.6" dependencies: asn1js: ^3.0.5 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: 83c8b4e82d8f829ece3ad1aa96d4e2f0c5f16a5255bb066a1174bd020b031d456469d82786a561e5758af0e56d0391ae5e8c6b3657e73d438f49998ff3cf471f + checksum: fc09387c6e3dea07fca21b54ea8c71ce3ec0f8c92377237e51aef729f0c2df92781aa7a18a546a6fe809519faeaa222df576ec21a35c6095037a78677204a55b languageName: node linkType: hard @@ -12751,15 +13015,15 @@ __metadata: linkType: hard "@peculiar/webcrypto@npm:^1.4.0": - version: 1.4.0 - resolution: "@peculiar/webcrypto@npm:1.4.0" + version: 1.4.1 + resolution: "@peculiar/webcrypto@npm:1.4.1" dependencies: - "@peculiar/asn1-schema": ^2.1.6 + "@peculiar/asn1-schema": ^2.3.0 "@peculiar/json-schema": ^1.1.12 pvtsutils: ^1.3.2 - tslib: ^2.4.0 + tslib: ^2.4.1 webcrypto-core: ^1.7.4 - checksum: 3a7a3c8f253170436f353a61b807d2e2e7a686e6a9607487fde6459ddfff34c8000414287a6cd904bd81e002ce4564811b3c7789a0fd932cf015df6c4002fd02 + checksum: cfcd49f6bd199016de83445f1786b17c49d02aee74b400e7e03ba3bc3707457bdebd23bbaba0e2ff3becdcd769d71b79ec64ae35e0acb80b4ab3ed6326ab111c languageName: node linkType: hard @@ -12802,6 +13066,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.6": + version: 2.11.6 + resolution: "@popperjs/core@npm:2.11.6" + checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0 + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -12898,13 +13169,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.3.2": - version: 1.3.2 - resolution: "@remix-run/router@npm:1.3.2" - checksum: ee2108b87d4a1241cdea137dd7e1741ee679228bd33fd81e22a6bb2940f81186cefe9a85e26d60cc49bbcc1bdbc57d1954b7d4d62f8a51ef69feddfc899f55fa - languageName: node - linkType: hard - "@remix-run/router@npm:1.4.0": version: 1.4.0 resolution: "@remix-run/router@npm:1.4.0" @@ -12912,7 +13176,7 @@ __metadata: languageName: node linkType: hard -"@repeaterjs/repeater@npm:3.0.4": +"@repeaterjs/repeater@npm:3.0.4, @repeaterjs/repeater@npm:^3.0.4": version: 3.0.4 resolution: "@repeaterjs/repeater@npm:3.0.4" checksum: cca0db3e802bc26fcce0b4a574074d9956da53bf43094de03c0e4732d05e13441279a92f0b96e2a7a39da50933684947a138c1213406eaafe39cfd4683d6c0df @@ -13061,14 +13325,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.2 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.2" + version: 2.5.4 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.4" dependencies: - "@backstage/catalog-model": ^1.1.5 - "@backstage/core-components": ^0.12.3 - "@backstage/core-plugin-api": ^1.3.0 - "@backstage/plugin-catalog-react": ^1.2.4 - "@backstage/plugin-home": ^0.4.30 + "@backstage/catalog-model": ^1.2.0 + "@backstage/core-components": ^0.12.4 + "@backstage/core-plugin-api": ^1.4.0 + "@backstage/plugin-catalog-react": ^1.3.0 + "@backstage/plugin-home": ^0.4.31 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 @@ -13085,7 +13349,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: dd8c3301867cd8ccaf094eb62c64b2923c4614e9ba384249c5ddb80b6375bc7f5e8828a7fc12f9e7785ca230948895e03a9c1521be45f69797f663b28cecc3c7 + checksum: 9e93586a68c2a2f6481138e0ad2e27b170395cc53ed63c682b7ea4f74ce1037eb447efdef18c463d2a9eb96bf00b9354ec562b8913914c7d322ed047c906005f languageName: node linkType: hard @@ -13219,48 +13483,52 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.53.3": - version: 3.53.3 - resolution: "@rushstack/node-core-library@npm:3.53.3" +"@rushstack/node-core-library@npm:3.55.2": + version: 3.55.2 + resolution: "@rushstack/node-core-library@npm:3.55.2" dependencies: - "@types/node": 12.20.24 colors: ~1.2.1 fs-extra: ~7.0.1 import-lazy: ~4.0.0 jju: ~1.4.0 - resolve: ~1.17.0 + resolve: ~1.22.1 semver: ~7.3.0 z-schema: ~5.0.2 - checksum: 265d18e176079b8e90cd507e5d4d45f3afb1f811efdf491ea26f25f0397b77c0e9d42065166bf79a04503426c844ea92034cd3f8d5961b2a116de82e45cf6d6a + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: b6b289315cd6a3544471f534405479b7c80f3906b7506590d5eb83a605a0a5b65861bf678f3e6c2277c8db116b8e05f8e7b6864fdc75e0f1514c9ff224b83fe6 languageName: node linkType: hard -"@rushstack/rig-package@npm:0.3.17": - version: 0.3.17 - resolution: "@rushstack/rig-package@npm:0.3.17" +"@rushstack/rig-package@npm:0.3.18": + version: 0.3.18 + resolution: "@rushstack/rig-package@npm:0.3.18" dependencies: - resolve: ~1.17.0 + resolve: ~1.22.1 strip-json-comments: ~3.1.1 - checksum: 54eeea471c85b547575d7efc84fad3c9588f10106e2bfd8cd022bccb02c2fb0bf8ff597fab9114450b3c262abab0f0a4e52dd074bfd120e850b95037cd7b3102 + checksum: 41e719fb14d99e0f79093523fede051dba2be5f53d63d5ae45c2ea1b8448e298e0303d8453be3f9ac5e8bb99e3dcf3ddbe4cc59d9be5eddb914286acbdd0a2f3 languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.13.1": - version: 4.13.1 - resolution: "@rushstack/ts-command-line@npm:4.13.1" +"@rushstack/ts-command-line@npm:4.13.2": + version: 4.13.2 + resolution: "@rushstack/ts-command-line@npm:4.13.2" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: fea24b2549ecb7d3409b6b485d7c58bf8af8f8d1dd19c43a6b3532c45579ffc546bc4533b5db29c91ae1716581fdee4cb725f6a81ecb300e902ef06600e59f1d + checksum: 3938e533e08d5cf4007a651d1aab658a7a60d6136a56414e2370b64434657a5d5a9eff442da4ddc260d5e6dc90f82428de64dbcfa1285e9ae176629f7fcd821d languageName: node linkType: hard "@sagold/json-pointer@npm:^5.0.0": - version: 5.0.0 - resolution: "@sagold/json-pointer@npm:5.0.0" - checksum: 0a087ff25e28d0c49b56566a14d6186ae0ce9fe538569eb7756c1a70989f2794dbc6f0834b5d2f2a0a79b6f0e3096eb05558664d5ff038daba5a46cb5e752e1a + version: 5.0.1 + resolution: "@sagold/json-pointer@npm:5.0.1" + checksum: a83eaf52391d589e346877c27a092130aeec72dc2566dde05f1c0c57876d8a5478b6f89cb70572d664f4d944f9e8262abc0832c338f74c388b4e8997a209dba8 languageName: node linkType: hard @@ -13294,7 +13562,7 @@ __metadata: languageName: node linkType: hard -"@sideway/formula@npm:^3.0.0": +"@sideway/formula@npm:^3.0.1": version: 3.0.1 resolution: "@sideway/formula@npm:3.0.1" checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a @@ -13309,32 +13577,32 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.42 - resolution: "@sinclair/typebox@npm:0.24.42" - checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 languageName: node linkType: hard "@sinclair/typebox@npm:^0.25.16": - version: 0.25.23 - resolution: "@sinclair/typebox@npm:0.25.23" - checksum: 5720daec6e604be9ac849e6361cfa30d19f4d01934c9b79a3a5f5290dfcefaa300192ea0d384bb5dd0104432d88447bbad27adfacdf0b0f042b510bf15fbd5db + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 languageName: node linkType: hard "@sindresorhus/is@npm:^4.0.0": - version: 4.0.0 - resolution: "@sindresorhus/is@npm:4.0.0" - checksum: 0e010f79820099b0a7cb8e1c982f822fc4407ff65d2898708b04e1675949eb6885a470fd7274843f83b84e0d3b74fe0de1ff9291d66553228d68202daca5bbaf + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 languageName: node linkType: hard "@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" + version: 1.8.6 + resolution: "@sinonjs/commons@npm:1.8.6" dependencies: type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 + checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d languageName: node linkType: hard @@ -13356,15 +13624,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^7.0.4": - version: 7.1.2 - resolution: "@sinonjs/fake-timers@npm:7.1.2" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: c84773d7973edad5511a31d2cc75023447b5cf714a84de9bb50eda45dda88a0d3bd2c30bf6e6e936da50a048d5352e2151c694e13e59b97d187ba1f329e9a00c - languageName: node - linkType: hard - "@sinonjs/fake-timers@npm:^9.1.2": version: 9.1.2 resolution: "@sinonjs/fake-timers@npm:9.1.2" @@ -13386,60 +13645,60 @@ __metadata: linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.1 - resolution: "@sinonjs/text-encoding@npm:0.7.1" - checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 + version: 0.7.2 + resolution: "@sinonjs/text-encoding@npm:0.7.2" + checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab languageName: node linkType: hard "@spotify/eslint-config-base@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-base@npm:14.0.1" + version: 14.1.6 + resolution: "@spotify/eslint-config-base@npm:14.1.6" peerDependencies: eslint: ">=7.x" - checksum: 8893e7c903c07ede7f3a03b5b6af03b65d2f334615d30fecb527ce4d888970168b73dbaef43275f9ece9e7b0193e13e6807e506507b32bdde9b64000cc52c8b1 + checksum: be620e179dcdb3e95e5825c133193a7194db1829badbdfcf334dd88cbdccf5cc9889facb6a3d3bb4956f7568ded4dd419d3bd3f9c4e6db2c0da977795461bcba languageName: node linkType: hard "@spotify/eslint-config-react@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-react@npm:14.0.1" + version: 14.1.6 + resolution: "@spotify/eslint-config-react@npm:14.1.6" peerDependencies: eslint: ">=8.x" eslint-plugin-jsx-a11y: 6.x eslint-plugin-react: ">=7.7.0 <8" eslint-plugin-react-hooks: ^4.0.0 - checksum: d8545c3c3967bb8b923bd55dad2c50b5e2eb6d716cd9dcbbfa32417c3a6e786537ee3263ebedae99bd45abe3378acb0879c9644a729820ea61dd5d9e45e55465 + checksum: e85a52eec656ab7013c7ab8726c4d920b6681a9cc0853276700f340af58675dc1ccf19ec16a81145b1966d0f5aaaf8aaf5c95f19e3cd6d2cf4669d08261ec3ba languageName: node linkType: hard "@spotify/eslint-config-typescript@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-typescript@npm:14.0.1" + version: 14.1.6 + resolution: "@spotify/eslint-config-typescript@npm:14.1.6" peerDependencies: "@typescript-eslint/eslint-plugin": ">=5" "@typescript-eslint/parser": ">=5" eslint: ">=8.x" - checksum: faf3ab89880e626d388e9ae212dd3486d6f91ca4d079020066c22d44c3df215dc61439c4e65ef3fc4eb5c3ea9893d5b504a2d251694d7a333d8803991349535b + checksum: cf29a2c356d40a1e6481b1a87525509127ee7b19cbd40c5f05d57081a3df73735c041117aa0ea3a41c4a6077216c88c98bfaadcd74836e30495f1ffc937321d8 languageName: node linkType: hard "@spotify/eslint-plugin@npm:^14.1.3": - version: 14.1.3 - resolution: "@spotify/eslint-plugin@npm:14.1.3" + version: 14.1.6 + resolution: "@spotify/eslint-plugin@npm:14.1.6" peerDependencies: "@typescript-eslint/parser": ^5.13.0 eslint: ^8.10.0 - checksum: 788f5d9aab6f7b6c0ad7e414ebd5f4504f058f26a769dc4bcd0088dd8e6d9e5334965c8f6fffcf5b7ed52dbe25de0dc7bba403bcffa79b6d94c7ba3094757b5f + checksum: 55d844c5733c929a6218f9aae3454556b6090102ae7a7461082dd14ea98485e48e936046f815267b62f7b054c7faa8edd8bde7d4e092d92f810d8eb7246b29bc languageName: node linkType: hard "@spotify/prettier-config@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/prettier-config@npm:14.0.1" + version: 14.1.6 + resolution: "@spotify/prettier-config@npm:14.1.6" peerDependencies: prettier: 2.x - checksum: 07fb33ff3bb4678ab3bfe2f6f5da2cfb366de427c544e94178f5f8c75b3708282f7ea1a4344404e4ad1bbc5b38fccfde10795528cdfe7f61a8afed62076f8fe9 + checksum: 0456825576225e33308752b2940ba22e00afd205e9d23802a1b8bf0ce4e8dce9944e433a84f180e63bb64d8d535c3cfb981fdd031a2b8a936aeb594c2bc2f3ea languageName: node linkType: hard @@ -13454,16 +13713,16 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.0" +"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f65ca26905240b685929a7766411618700bda233673cebd74eb9a8da45af8ce8e0536074a178b37762cd23db8868db494e15067e74b2d73e377b2d247895d054 + checksum: cab83832830a57735329ed68f67c03b57ca21fa037b0134847b0c5c0ef4beca89956d7dacfbf7b2a10fd901e7009e877512086db2ee918b8c69aee7742ae32c0 languageName: node linkType: hard -"@svgr/babel-plugin-remove-jsx-attribute@npm:^6.5.0": +"@svgr/babel-plugin-remove-jsx-attribute@npm:*": version: 6.5.0 resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:6.5.0" peerDependencies: @@ -13472,7 +13731,7 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^6.5.0": +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:*": version: 6.5.0 resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:6.5.0" peerDependencies: @@ -13481,149 +13740,514 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.0" +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e8e77e4026f2e2f910a3495be8bd283f413865449b6e2f639318d76edc05b373e18d86e1210c808038a5477ae273858d3b313b2a7df8e6929450ed902c1441bc + checksum: b7d2125758e766e1ebd14b92216b800bdc976959bc696dbfa1e28682919147c1df4bb8b1b5fd037d7a83026e27e681fea3b8d3741af8d3cf4c9dfa3d412125df languageName: node linkType: hard -"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.0" +"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 55f36f6e3ef986f2d0ba4cd9e2ebf6b17d68c5c2cf98821abc0dbd551d4fd7d92cf3cda83a91898d988ad7118a9768042ac5afe534ad594bdac024fe0009bae1 + checksum: 0fd42ebf127ae9163ef341e84972daa99bdcb9e6ed3f83aabd95ee173fddc43e40e02fa847fbc0a1058cf5549f72b7960a2c5e22c3e4ac18f7e3ac81277852ae languageName: node linkType: hard -"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.0" +"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: af6508c042a7d256081c09520e79e2d3278ecf361a74707dcc1bc61713845ec7fd6eeb52bbc3a2e114ecbbb1df49b16674caf8b97345570a6c5f0a631118cb5e + checksum: c1550ee9f548526fa66fd171e3ffb5696bfc4e4cd108a631d39db492c7410dc10bba4eb5a190e9df824bf806130ccc586ae7d2e43c547e6a4f93bbb29a18f344 languageName: node linkType: hard -"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.0" +"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0e7f1d85a25ef0c49b2bfacdc9ae80520959a0925304e030edc739684c75d41a7d4173ac4a1cd6ec8dee8bc618e7465da49ae59dd5638b87e75dccee05498f4c + checksum: 4c924af22b948b812629e80efb90ad1ec8faae26a232d8ca8a06b46b53e966a2c415a57806a3ff0ea806a622612e546422719b69ec6839717a7755dac19171d9 languageName: node linkType: hard -"@svgr/babel-plugin-transform-svg-component@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.0" +"@svgr/babel-plugin-transform-svg-component@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8613ef673b7e881d661057188729419b9a9d0b3802247954283293698a9910d76414b4fe106b5255e06fb2329c41f9da147ac5e153149b3b82024e06ab87a2b3 + checksum: e496bb5ee871feb6bcab250b6e067322da7dd5c9c2b530b41e5586fe090f86611339b49d0a909c334d9b24cbca0fa755c949a2526c6ad03c6b5885666874cf5f languageName: node linkType: hard -"@svgr/babel-preset@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/babel-preset@npm:6.5.0" +"@svgr/babel-preset@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/babel-preset@npm:6.5.1" dependencies: - "@svgr/babel-plugin-add-jsx-attribute": ^6.5.0 - "@svgr/babel-plugin-remove-jsx-attribute": ^6.5.0 - "@svgr/babel-plugin-remove-jsx-empty-expression": ^6.5.0 - "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.0 - "@svgr/babel-plugin-svg-dynamic-title": ^6.5.0 - "@svgr/babel-plugin-svg-em-dimensions": ^6.5.0 - "@svgr/babel-plugin-transform-react-native-svg": ^6.5.0 - "@svgr/babel-plugin-transform-svg-component": ^6.5.0 + "@svgr/babel-plugin-add-jsx-attribute": ^6.5.1 + "@svgr/babel-plugin-remove-jsx-attribute": "*" + "@svgr/babel-plugin-remove-jsx-empty-expression": "*" + "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.1 + "@svgr/babel-plugin-svg-dynamic-title": ^6.5.1 + "@svgr/babel-plugin-svg-em-dimensions": ^6.5.1 + "@svgr/babel-plugin-transform-react-native-svg": ^6.5.1 + "@svgr/babel-plugin-transform-svg-component": ^6.5.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 987f6eafebc347b061bfab7d15f87b48601eecdf7cde9ff0e4e99c44acad3bb126e554996b0c48f1ccf24d5e6785226b1662850bb4e2182927b2ded24f226ae8 + checksum: 9f124be39a8e64f909162f925b3a63ddaa5a342a5e24fc0b7f7d9d4d7f7e3b916596c754fb557dc259928399cad5366a27cb231627a0d2dcc4b13ac521cf05af languageName: node linkType: hard -"@svgr/core@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/core@npm:6.5.0" +"@svgr/core@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/core@npm:6.5.1" dependencies: - "@babel/core": ^7.18.5 - "@svgr/babel-preset": ^6.5.0 - "@svgr/plugin-jsx": ^6.5.0 + "@babel/core": ^7.19.6 + "@svgr/babel-preset": ^6.5.1 + "@svgr/plugin-jsx": ^6.5.1 camelcase: ^6.2.0 cosmiconfig: ^7.0.1 - checksum: 235747a1d1c0e8918aa16da7e44c9dd2024a9ebaadc6bdff00001756d604566437b25e42d61e521f6f38a32c386d44a18dee57a77a92aedef1116f2410b504e6 + checksum: fd6d6d5da5aeb956703310480b626c1fb3e3973ad9fe8025efc1dcf3d895f857b70d100c63cf32cebb20eb83c9607bafa464c9436e18fe6fe4fafdc73ed6b1a5 languageName: node linkType: hard -"@svgr/hast-util-to-babel-ast@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.0" +"@svgr/hast-util-to-babel-ast@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.1" dependencies: - "@babel/types": ^7.18.4 - entities: ^4.3.0 - checksum: 77dcadb467eded0ce5cba71dbd4cbb4c7ffd7961f351828a4066ab6105d466d55533506bc3bc7db78f938af6692008ceda9fa2ea3dda75fd54e2b736b81ae458 + "@babel/types": ^7.20.0 + entities: ^4.4.0 + checksum: 37923cce1b3f4e2039077b0c570b6edbabe37d1cf1a6ee35e71e0fe00f9cffac450eec45e9720b1010418131a999cb0047331ba1b6d1d2c69af1b92ac785aacf languageName: node linkType: hard -"@svgr/plugin-jsx@npm:6.5.x, @svgr/plugin-jsx@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/plugin-jsx@npm:6.5.0" +"@svgr/plugin-jsx@npm:6.5.x, @svgr/plugin-jsx@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/plugin-jsx@npm:6.5.1" dependencies: - "@babel/core": ^7.18.5 - "@svgr/babel-preset": ^6.5.0 - "@svgr/hast-util-to-babel-ast": ^6.5.0 + "@babel/core": ^7.19.6 + "@svgr/babel-preset": ^6.5.1 + "@svgr/hast-util-to-babel-ast": ^6.5.1 svg-parser: ^2.0.4 peerDependencies: "@svgr/core": ^6.0.0 - checksum: dec7cd47f16cc1b23dd37e333594d596401e7e49825545f4d808c74fe0a3a12a56c1bd55f507794addd6675e1b81dd58346bac4f752daa04016d3edac03e1625 + checksum: 42f22847a6bdf930514d7bedd3c5e1fd8d53eb3594779f9db16cb94c762425907c375cd8ec789114e100a4d38068aca6c7ab5efea4c612fba63f0630c44cc859 languageName: node linkType: hard -"@svgr/plugin-svgo@npm:6.5.x, @svgr/plugin-svgo@npm:^6.5.0": - version: 6.5.0 - resolution: "@svgr/plugin-svgo@npm:6.5.0" +"@svgr/plugin-svgo@npm:6.5.x, @svgr/plugin-svgo@npm:^6.5.1": + version: 6.5.1 + resolution: "@svgr/plugin-svgo@npm:6.5.1" dependencies: cosmiconfig: ^7.0.1 deepmerge: ^4.2.2 svgo: ^2.8.0 peerDependencies: - "@svgr/core": ^6.0.0 - checksum: d1a0ee79283a997aa4af2c2848f502dff71a9fd99623b47b0b2476effd7fe53077456afd1ff54283512a7dd10f30df91736f5d20eb931a462b34f281c90347e0 + "@svgr/core": "*" + checksum: cd2833530ac0485221adc2146fd992ab20d79f4b12eebcd45fa859721dd779483158e11dfd9a534858fe468416b9412416e25cbe07ac7932c44ed5fa2021c72e languageName: node linkType: hard "@svgr/rollup@npm:6.5.x": - version: 6.5.0 - resolution: "@svgr/rollup@npm:6.5.0" + version: 6.5.1 + resolution: "@svgr/rollup@npm:6.5.1" dependencies: - "@babel/core": ^7.18.5 - "@babel/plugin-transform-react-constant-elements": ^7.17.12 - "@babel/preset-env": ^7.18.2 - "@babel/preset-react": ^7.17.12 - "@babel/preset-typescript": ^7.17.12 + "@babel/core": ^7.19.6 + "@babel/plugin-transform-react-constant-elements": ^7.18.12 + "@babel/preset-env": ^7.19.4 + "@babel/preset-react": ^7.18.6 + "@babel/preset-typescript": ^7.18.6 "@rollup/pluginutils": ^4.2.1 - "@svgr/core": ^6.5.0 - "@svgr/plugin-jsx": ^6.5.0 - "@svgr/plugin-svgo": ^6.5.0 - checksum: a3a043034689a335aa9657580251a8636225002439a4667c31fe2b0faa043980182b28aac7da0219804609ef19c0b3b397626850f056a7065c20f61c2f17b4f8 + "@svgr/core": ^6.5.1 + "@svgr/plugin-jsx": ^6.5.1 + "@svgr/plugin-svgo": ^6.5.1 + checksum: 809198a655c280b434d762829aeab0c48e545daaa7a520ac87d5e7cfe96402eb4d0c01f8b25959fcc37a2ce4aa1a53c9e1c4ccb1206cd5833883a34db5799dd4 languageName: node linkType: hard "@svgr/webpack@npm:6.5.x": - version: 6.5.0 - resolution: "@svgr/webpack@npm:6.5.0" + version: 6.5.1 + resolution: "@svgr/webpack@npm:6.5.1" dependencies: - "@babel/core": ^7.18.5 - "@babel/plugin-transform-react-constant-elements": ^7.17.12 - "@babel/preset-env": ^7.18.2 - "@babel/preset-react": ^7.17.12 - "@babel/preset-typescript": ^7.17.12 - "@svgr/core": ^6.5.0 - "@svgr/plugin-jsx": ^6.5.0 - "@svgr/plugin-svgo": ^6.5.0 - checksum: 2c0b18b20694b1301e86893e488269882ae136259cc17b4ab47c208c6edcdfeaefa23894b3fe68d36384e26380eafde23571b0cb143aadf538c027d72eb1d702 + "@babel/core": ^7.19.6 + "@babel/plugin-transform-react-constant-elements": ^7.18.12 + "@babel/preset-env": ^7.19.4 + "@babel/preset-react": ^7.18.6 + "@babel/preset-typescript": ^7.18.6 + "@svgr/core": ^6.5.1 + "@svgr/plugin-jsx": ^6.5.1 + "@svgr/plugin-svgo": ^6.5.1 + checksum: d10582eb4fa82a5b6d314cb49f2c640af4fd3a60f5b76095d2b14e383ef6a43a6f4674b68774a21787dbde69dec0a251cfcfc3f9a96c82754ba5d5c6daf785f0 + languageName: node + linkType: hard + +"@swagger-api/apidom-ast@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ast@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + unraw: =2.0.1 + checksum: 59625e7f3543766d901227d9afec0ebce0cc1368cc63d22ad5f348a9da0b3777ea83acce7eb0eecdbe6210022f3bf0fafdb46d59b0e90d630ad55c428ede14a2 + languageName: node + linkType: hard + +"@swagger-api/apidom-core@npm:=0.69.0, @swagger-api/apidom-core@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-core@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@types/ramda": =0.28.23 + minim: =0.23.8 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + short-unique-id: =4.4.4 + stampit: =4.3.2 + checksum: 036dc1198014fff9d7e879529186c4b0db423ae4c933eecec90650985e198cb3745638feff8681f85940f124703484d1b071dfca4eaf7b9457a4f99186c98972 + languageName: node + linkType: hard + +"@swagger-api/apidom-json-pointer@npm:=0.69.0, @swagger-api/apidom-json-pointer@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-json-pointer@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 7930d938011c608d5c227c3b1cbfcb120eeebd32aedd447220219b079d030af6387a9a61e74461fe53578c06ba29aa78e5e5fdfcd561d5611d5a07ef5534ee49 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-api-design-systems@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: 1c3047d4081cd07bbbdce6fa19c62407d1c57f7bf05b85947fd1e9b3cc2c2792fb85a926a54d3376c761a123ce3b130b06e38830ca68743a20c684aae89275f1 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: c5b9161166ddce0be047a474e7257520a756ed3fe426b806c19122334535d07b48529be60638dd560ab6ff23899641cee1110932cad16b4bf93f8fbe8f52ca05 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: d308227f5849071be3481bd8d4a8dc16d0e9e99edb61250927da88ed34595d176d59792003a2a666a49585643ff659a16774826790aab718a316beda9ce617c3 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: df237753d0c9aa7d22029c22b5355310a14aa7a77aa484cc86d46850bd994db3f0901804510a6c62196e181c150e15fc7a031b97f0f45983b6f819fb7ed71ccb + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: a2059092cfb1797c90b15384270df65fadd6d1e8b469350082ab46d25a1840fd05ff0bea72a8005068f77ab277a049110962a15f1fbeeac63b9c0a34d21d78c2 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: e53bda9fada416e23a5220dd8987b3e4082b3020e3db40c5532fdd454aaa02953d4d72223fd0372897b0a6a73b321f89e83504d60bb8b52fa4fbcdfb5f097e59 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-1@npm:=0.69.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: 7f194ebb36891655fdcd8dfe88e664e70f6efcd713ac6defc75dadefb0087d3fd0358b656dec4920d876342d23c44ff1cee034fa32cfa1f8b3d49ceba9509dbb + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 68b43e19effd7b9c26e52381903a39fff7ef0990ad3cbcbf4aa7de01cf3454d915dc10d8f688aa0fa4405b11f1a6d8f49bc160e6b72c482fadb484bd787bdebd + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 6ded590b93087ad4b848ba4f742c6baeb35a572195d763a1ae0b479b8de4ae7d331175d5042116dab26684413ca6a58680080fb4b28ca5c66c7d72d6e624e174 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: c13b4ea5a603d7422ebf4dd87851a72a999c0036ff451b080cd37b96aa1b455f6483c447e4962303af52b44ac0fca3517573dfeeddbdb7f8d04cb7ff8796089f + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: f3415e86371f98e3677d22f432214f4b4e2267b80da2f505ed28d89c711fa32a627cea94040c6071e83d2ea3cf6aabc454331951d2fd3bcc138b091e78286423 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-json@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + node-gyp: latest + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + tree-sitter: =0.20.1 + tree-sitter-json: =0.20.0 + web-tree-sitter: =0.20.7 + checksum: e640ffbf749285f70ea4d125cbb030ff9920b011e8694e3cd5c379b3a6f3f387805c9535af7786c2bed6f0f67bfd9f6daad6eb65a64ca76b48b45f283933f4d5 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 50c61b46d16ed2a24816665ee810c295f6e82cad8a031ebc91d91aa3650bae92ddcede99ceea4346dcb69ca6edd811213018ebe8b23929012c08b425103a807d + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 9c657b1eb82814958ed2b2c4e710a51378cbb11ca6957d0cc57ec544e0cba4a3bac412475f923e47c1fff8130f5a42cf8edcd99080703316150de8f1b30891b8 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: ee32fc65e053ccda7eae265ad1a43e5acd0688460620912363156ada3babf3115fbec0dd35423ca633aaf78e9e4ed71ee4be030385cfdcc9ed69e8438319cc19 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: c21f6ad4b149f64bb5af24d7d7ba5bd8342c2ab2e0e37d85617ca0d4d3333ee45a4603ce7cdca460d4dcb17c6d41b47f733390d3ef6754664ae11705a628fe9c + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + node-gyp: latest + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + tree-sitter: =0.20.1 + tree-sitter-yaml: =0.5.0 + web-tree-sitter: =0.20.7 + checksum: 6067347f6ab9d2cfbbe55f13345609c86b1660bebb7cea215c90739eab011498695d785bc7bb75fc95055ea98bafc765bbc0d304ad19f72647b72ee4308d249e + languageName: node + linkType: hard + +"@swagger-api/apidom-reference@npm:=0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-reference@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-json-pointer": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.69.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.69.0 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + axios: =1.3.4 + minimatch: =7.3.0 + process: =0.11.10 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + dependenciesMeta: + "@swagger-api/apidom-json-pointer": + optional: true + "@swagger-api/apidom-ns-asyncapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-3-0": + optional: true + "@swagger-api/apidom-ns-openapi-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-json": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-json": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-yaml-1-2": + optional: true + checksum: f176e51e64377c09449e9f5bf50438be7a05fa63d4ff2f9ec5c45cf0722439537aafbe4804e2197661a652cec013c1aaa78f6a2a7ac4f6d63083aa07875c8671 languageName: node linkType: hard @@ -13758,26 +14382,26 @@ __metadata: linkType: hard "@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.5 - resolution: "@szmarczak/http-timer@npm:4.0.5" + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" dependencies: defer-to-connect: ^2.0.0 - checksum: 27b713859bc7d370f81631eea99879a9d496e1def5d33752fccd6c80dba32cde2094f378c8d07d56f236b08afb4b3621fbf6254faaca52b1a8146ece1eba8428 + checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 languageName: node linkType: hard -"@tanstack/query-core@npm:4.26.1": - version: 4.26.1 - resolution: "@tanstack/query-core@npm:4.26.1" - checksum: c7bc751d7d08ce27dd7262aa75a263808b128902b8f3a5dd1ff9b1dfda6511af965388bcdb7d8130bdf10756c1d583f527ead274b1d3e4f4db29c83260b416b0 +"@tanstack/query-core@npm:4.27.0": + version: 4.27.0 + resolution: "@tanstack/query-core@npm:4.27.0" + checksum: 914b4f01ac75632f4603b650e9105f64c739b79250baf76aad16cee216f7bad6060c04eda0c70838fe61a5f6c17883e19fcc3075b2433a906539da95ce785796 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.26.1 - resolution: "@tanstack/react-query@npm:4.26.1" + version: 4.28.0 + resolution: "@tanstack/react-query@npm:4.28.0" dependencies: - "@tanstack/query-core": 4.26.1 + "@tanstack/query-core": 4.27.0 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -13788,7 +14412,7 @@ __metadata: optional: true react-native: optional: true - checksum: 3b43a5acc84841364c08ed7c7d0f495008214f1f39b7fb073a95a53528ce40b4841dbc407070b4c0082d73990277bbcf9bc88df40217e70c226be4931efaa081 + checksum: 7baa70d22b55cfa22f8a1d92ba9f8379c5436ee81fce3f0e7df4a8c29bb26bfef4a83759cf10f752b40ae2940099fcce88ce91a773240f4999ae91136980c6e3 languageName: node linkType: hard @@ -13841,18 +14465,18 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0": - version: 8.11.3 - resolution: "@testing-library/dom@npm:8.11.3" + version: 8.20.0 + resolution: "@testing-library/dom@npm:8.20.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 + "@types/aria-query": ^5.0.1 aria-query: ^5.0.0 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 2245d254b6058590e25de86fb7b3c75e4a31096901a191f80d3efb9fa7e1e273043416f370c8770feb9f3ccc73a1550a877a3b003b593f1728ae828fcb52cd62 + checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 languageName: node linkType: hard @@ -13910,11 +14534,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.0.0": - version: 14.3.0 - resolution: "@testing-library/user-event@npm:14.3.0" + version: 14.4.3 + resolution: "@testing-library/user-event@npm:14.4.3" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: cbd5954460496519cb2ff3fa506ca598d7e4c2e3d2f2e129b21909758f5ec87573aad7d6c79aebffd4bd0ea843315b3064a2a76e545f196bd4c82489cb3afc1d + checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e languageName: node linkType: hard @@ -14023,17 +14647,17 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^4.2.0": - version: 4.2.0 - resolution: "@types/aria-query@npm:4.2.0" - checksum: e4a3748c5511deb88e93c6faf2acb0730233ff75018e9aaed95e3d2833880e9d0eda7e08e4315a827872471779471585671d08bae00ac8b9813fc140194b52e5 +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de languageName: node linkType: hard "@types/aws-lambda@npm:^8.10.83": - version: 8.10.92 - resolution: "@types/aws-lambda@npm:8.10.92" - checksum: 71c44d83a1c88aa6dbc920baedfb2d100b8843a3d210c695ccaafb30dfb75f04398b0e5368100022acbf75c55d456c61774242f20dd70915fc63d85430cbcf8a + version: 8.10.114 + resolution: "@types/aws-lambda@npm:8.10.114" + checksum: 9657d06ac8116f0454e465eb298c08af0eb3c2d6715a2faed6a3acebe31062e5ae70a64d4ce269141ad302545781d7df1bd637c70f0fe660f940e919dcdae794 languageName: node linkType: hard @@ -14047,43 +14671,43 @@ __metadata: linkType: hard "@types/babel__core@npm:^7.1.14": - version: 7.1.18 - resolution: "@types/babel__core@npm:7.1.18" + version: 7.20.0 + resolution: "@types/babel__core@npm:7.20.0" dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 2e5b5d7c84f347d3789575486e58b0df5c91613abc3d27e716274aba3048518e07e1f068250ba829e2ed58532ccc88da595ce95ba2688e7bbcd7c25a3c6627ed + checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.1 - resolution: "@types/babel__generator@npm:7.6.1" + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" dependencies: "@babel/types": ^7.0.0 - checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.0.2 - resolution: "@types/babel__template@npm:7.0.2" + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.0.15 - resolution: "@types/babel__traverse@npm:7.0.15" + version: 7.18.3 + resolution: "@types/babel__traverse@npm:7.18.3" dependencies: "@babel/types": ^7.3.0 - checksum: 6a45519ebf58e6b1197a0177211099fc3ed613d2a435cf9470c39217af35f29013f7984e1f8c2e160a93b588767cfbbcf0d7f77eae399dfcca18d5257f04cbc2 + checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 languageName: node linkType: hard @@ -14123,14 +14747,14 @@ __metadata: linkType: hard "@types/cacheable-request@npm:^6.0.1": - version: 6.0.1 - resolution: "@types/cacheable-request@npm:6.0.1" + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" dependencies: "@types/http-cache-semantics": "*" - "@types/keyv": "*" + "@types/keyv": ^3.1.4 "@types/node": "*" - "@types/responselike": "*" - checksum: c25b1bfa2f4f2cc1ca8e1bebad99f2e2c502a3fc09b5270765bfd6b57b1b73b9fab7127acb618beb04c646534a21c62b052aa6942bdfc461ee49387ec9975cd5 + "@types/responselike": ^1.0.0 + checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 languageName: node linkType: hard @@ -14142,11 +14766,11 @@ __metadata: linkType: hard "@types/classnames@npm:^2.2.9": - version: 2.3.1 - resolution: "@types/classnames@npm:2.3.1" + version: 2.3.0 + resolution: "@types/classnames@npm:2.3.0" dependencies: classnames: "*" - checksum: 09a17ea08fcb83380921efdfdac94cfa162f87025cae0bf6f4ba508c2fa5f436459ce7612905a3f968fdddb68c03b8e6ff08e762ed2d0c110c5c4fceb244dc55 + checksum: e1bd6de60fc5e4ead601838078b10f378d6a66ad21112922856de59a1f450b1361f597aa3ca34f2cc33bc030f950112872fddfde43c5189bec89737a8b237f24 languageName: node linkType: hard @@ -14229,11 +14853,11 @@ __metadata: linkType: hard "@types/connect@npm:*": - version: 3.4.33 - resolution: "@types/connect@npm:3.4.33" + version: 3.4.35 + resolution: "@types/connect@npm:3.4.35" dependencies: "@types/node": "*" - checksum: 1220403e0cd05c6f51c03b83eed0f4e086f252d50c13279effd38d8bfea5cae82db012b134d31004cb8e4705f83d8ad62dddd71028baa190bf6f31c8d9ac916b + checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 languageName: node linkType: hard @@ -14254,9 +14878,9 @@ __metadata: linkType: hard "@types/cookiejar@npm:*": - version: 2.1.1 - resolution: "@types/cookiejar@npm:2.1.1" - checksum: 7b2967a3344e8e646e79e1dc09ef30a70c4ceeb348364c4eb75b56e2f2e695605fbddd40a50f468b2b5932d2ffb58694ba550f0f52d074c972023910c77de2f6 + version: 2.1.2 + resolution: "@types/cookiejar@npm:2.1.2" + checksum: f6e1903454007f86edd6c3520cbb4d553e1d4e17eaf1f77f6f75e3270f48cc828d74397a113a36942f5fe52f9fa71067bcfa738f53ad468fcca0bc52cb1cbd28 languageName: node linkType: hard @@ -14295,17 +14919,24 @@ __metadata: languageName: node linkType: hard -"@types/d3-color@npm:*": - version: 3.0.2 - resolution: "@types/d3-color@npm:3.0.2" - checksum: 9009aa52e41638442ca4884666e694f177b650b46df5d2495f80437659545c9f3afd598ab95c4ff6d0d13e445df4bd893a89887ca3d34239279a37215d148873 +"@types/d3-array@npm:^3.0.3": + version: 3.0.4 + resolution: "@types/d3-array@npm:3.0.4" + checksum: b0e398365fc1f638d48442e865e036d671c731b2b18f7a92e5172db1f60f5a38d4cd992693a29ad64b38e7ba981eb8c63a2aef95fbdcfbc4bf8926a9cb9ca978 languageName: node linkType: hard -"@types/d3-color@npm:^2": - version: 2.0.3 - resolution: "@types/d3-color@npm:2.0.3" - checksum: b4a963b15f4fe0e7e49b0898df3e51b46392d91c21038b7ec61aef0f13e04bd7bcfebf06c9fad9ee92317c9682a105e18942c9295a7e2715855622d4d6fc415a +"@types/d3-color@npm:*": + version: 3.1.0 + resolution: "@types/d3-color@npm:3.1.0" + checksum: b1856f17d6366559a68eaba0164f30727e9dc5eaf1b3a6c8844354da228860240423d19fa4de65bff9da26b4ead8843eab14b1566962665412e8fd82c3810554 + languageName: node + linkType: hard + +"@types/d3-ease@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/d3-ease@npm:3.0.0" + checksum: 1be7c993643b5a08332e0ee146375a3845545d8deb423db5d152e0b061524385d2345ceccf968f75f605247b940dd3f9a144335fee2e7d935cddaf187afb7095 languageName: node linkType: hard @@ -14316,7 +14947,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:*": +"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.1": version: 3.0.1 resolution: "@types/d3-interpolate@npm:3.0.1" dependencies: @@ -14325,15 +14956,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:^2.0.0": - version: 2.0.2 - resolution: "@types/d3-interpolate@npm:2.0.2" - dependencies: - "@types/d3-color": ^2 - checksum: 78c47193da3c114a7d78580c6f8d9915f11df92ce78fe08d13052cf49fab91dcdca938895a778cdc6f9820ebf16df3e0e339c17491a8c2b1140cdd2e09553084 - languageName: node - linkType: hard - "@types/d3-path@npm:*": version: 3.0.0 resolution: "@types/d3-path@npm:3.0.0" @@ -14348,19 +14970,12 @@ __metadata: languageName: node linkType: hard -"@types/d3-path@npm:^2": - version: 2.0.1 - resolution: "@types/d3-path@npm:2.0.1" - checksum: 2fe04503ec56de47e2b8482e5a55e2eaf2940444f2cea00a5fb740d52d24bddfe13e900e392c1edebf2127b11557db09aeae6f5669f49a35caac4fe1a9d43b84 - languageName: node - linkType: hard - -"@types/d3-scale@npm:^3.0.0": - version: 3.3.2 - resolution: "@types/d3-scale@npm:3.3.2" +"@types/d3-scale@npm:^4.0.2": + version: 4.0.3 + resolution: "@types/d3-scale@npm:4.0.3" dependencies: - "@types/d3-time": ^2 - checksum: 65dbf85f07a4d6ac26396075b0faa1930cfebb96dc248629d4b82c22457c89161d0f070f9a5554adccee80b959e2c6d7c1ef6b7355743afe91050d71014fe3cf + "@types/d3-time": "*" + checksum: 76684da8519ab5f2210e647f74f96ece9c6816dea4ad5d76131121703a5268cc65687a8bc9ebbf4a44039482247336d98811ecc3fbfeb7f0122fdce4bb295547 languageName: node linkType: hard @@ -14380,16 +14995,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-shape@npm:^2.0.0": - version: 2.1.3 - resolution: "@types/d3-shape@npm:2.1.3" - dependencies: - "@types/d3-path": ^2 - checksum: d0855a1e2c11a4ab23367c86ef0cc104e12bf216f2c007fa5955da7179b60b0426d0e9ddbbbdf93d4342e7dd24c7bcfc3a2bc6258744e03fc44ca460a063dcc3 - languageName: node - linkType: hard - -"@types/d3-shape@npm:^3.0.1": +"@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": version: 3.1.1 resolution: "@types/d3-shape@npm:3.1.1" dependencies: @@ -14398,10 +15004,17 @@ __metadata: languageName: node linkType: hard -"@types/d3-time@npm:^2": - version: 2.1.1 - resolution: "@types/d3-time@npm:2.1.1" - checksum: 115048d0cd312a3172ef7c03615dfbdbd8b92a93fd7b6d9ca93c49c704fcdb9575f4c57955eb54eb757b9834acaaf47fc52eae103d06246c59ae120de4559cbc +"@types/d3-time@npm:*, @types/d3-time@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/d3-time@npm:3.0.0" + checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e + languageName: node + linkType: hard + +"@types/d3-timer@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/d3-timer@npm:3.0.0" + checksum: 1ec86b3808de6ecfa93cfdf34254761069658af0cc1d9540e8353dbcba161cdf1296a0724187bd17433b2ff16563115fd20b85fc89d5e809ff28f9b1ab134b42 languageName: node linkType: hard @@ -14468,22 +15081,22 @@ __metadata: linkType: hard "@types/eslint-scope@npm:^3.7.3": - version: 3.7.3 - resolution: "@types/eslint-scope@npm:3.7.3" + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" dependencies: "@types/eslint": "*" "@types/estree": "*" - checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 languageName: node linkType: hard "@types/eslint@npm:*, @types/eslint@npm:^7.29.0 || ^8.4.1": - version: 8.4.6 - resolution: "@types/eslint@npm:8.4.6" + version: 8.21.3 + resolution: "@types/eslint@npm:8.21.3" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: bfaf27b00031b2238139003965475d023306119e467947f7a43a41e380918e365618e2ae6a6ae638697f6421a6bb1571db078695ff5e548f23618000b38acd23 + checksum: 80e0b5ca9ffb77bff19d01df08b93a99a6b44cad4c40e6450733ead6f1bc44b5514e7d28c3b0ad6304aeb01d690ee7ca89250729a9373551b7e587c6dbb41d7f languageName: node linkType: hard @@ -14522,7 +15135,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": version: 4.17.33 resolution: "@types/express-serve-static-core@npm:4.17.33" dependencies: @@ -14553,14 +15166,14 @@ __metadata: linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": - version: 4.17.16 - resolution: "@types/express@npm:4.17.16" + version: 4.17.17 + resolution: "@types/express@npm:4.17.17" dependencies: "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.31 + "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 43f3ed2cea6e5e83c7c1098c5152f644e975fd764443717ff9c812a1518416a9e7e9f824ffe852c118888cbfb994ed023cad08331f49b19ced469bb185cdd5cd + checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da languageName: node linkType: hard @@ -14588,12 +15201,12 @@ __metadata: linkType: hard "@types/glob@npm:*": - version: 7.1.3 - resolution: "@types/glob@npm:7.1.3" + version: 8.1.0 + resolution: "@types/glob@npm:8.1.0" dependencies: - "@types/minimatch": "*" + "@types/minimatch": ^5.1.2 "@types/node": "*" - checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 + checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d languageName: node linkType: hard @@ -14605,11 +15218,11 @@ __metadata: linkType: hard "@types/graceful-fs@npm:^4.1.3": - version: 4.1.5 - resolution: "@types/graceful-fs@npm:4.1.5" + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" dependencies: "@types/node": "*" - checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 languageName: node linkType: hard @@ -14631,7 +15244,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.0": +"@types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" dependencies: @@ -14649,9 +15262,9 @@ __metadata: linkType: hard "@types/http-cache-semantics@npm:*": - version: 4.0.0 - resolution: "@types/http-cache-semantics@npm:4.0.0" - checksum: c820774eb1d9d8d0c13077834e870cc1afd2500dc9d0ac1b67abc050c7c115aee4024f90fda65b50babc258de0464fc4459709e4fa12552f65094328e5a551c6 + version: 4.0.1 + resolution: "@types/http-cache-semantics@npm:4.0.1" + checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 languageName: node linkType: hard @@ -14716,9 +15329,9 @@ __metadata: linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.1 - resolution: "@types/istanbul-lib-coverage@npm:2.0.1" - checksum: eb8abb8b56fb8f645c46c482c5a438d78fc44ce2eb82a47491d552eba94fc3d81bc404996f220921c16df3eb6126ec01890f4acaebd0f71249b37e110eacdd3a + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 languageName: node linkType: hard @@ -14732,11 +15345,11 @@ __metadata: linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/istanbul-reports@npm:3.0.0" + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" dependencies: "@types/istanbul-lib-report": "*" - checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 languageName: node linkType: hard @@ -14759,12 +15372,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.0.0": - version: 29.4.0 - resolution: "@types/jest@npm:29.4.0" + version: 29.5.0 + resolution: "@types/jest@npm:29.5.0" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e + checksum: cd877e5c56d299cceb8bfdcbb1a77723c706750dd3c3bc47403bc3599b8faff590a3b009c68bb5b11bf7a8c77d1fb01de5e124329b4a08e65f1cdda28b0ecdb8 languageName: node linkType: hard @@ -14788,9 +15401,9 @@ __metadata: linkType: hard "@types/js-cookie@npm:^2.2.6": - version: 2.2.6 - resolution: "@types/js-cookie@npm:2.2.6" - checksum: 97c50ff6cd0a27409b028aad94b0c4eb5cc43623532a1bdbbcccdb200539593eff3cc7f0d874b6b9bee586167638e3a10093c811ff6603ff2a9639564c82b3b1 + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 languageName: node linkType: hard @@ -14819,13 +15432,13 @@ __metadata: linkType: hard "@types/jsdom@npm:^20.0.0": - version: 20.0.0 - resolution: "@types/jsdom@npm:20.0.0" + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" dependencies: "@types/node": "*" "@types/tough-cookie": "*" parse5: ^7.0.0 - checksum: 13e67d31347e02d46ec6a23919b3ce39d86136665922a2a6cb977e216a2f46c22d2f025d0586a64ab492ebaa5f43da669b6f173a5a8cfd3e3bb7c9d19b6cfa9e + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 languageName: node linkType: hard @@ -14846,9 +15459,9 @@ __metadata: linkType: hard "@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.32 - resolution: "@types/json-stable-stringify@npm:1.0.32" - checksum: 3091ddc8d15c6cce1a847ba1f8db21e7c2564c7b8bc6923a873801d936228f775096b517d62653fbcebedcb2a7992555dc6ed11517ef050e75525cdf1d1bce8d + version: 1.0.34 + resolution: "@types/json-stable-stringify@npm:1.0.34" + checksum: 45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e languageName: node linkType: hard @@ -14859,31 +15472,12 @@ __metadata: languageName: node linkType: hard -"@types/jsonwebtoken@npm:^8.5.0": - version: 8.5.0 - resolution: "@types/jsonwebtoken@npm:8.5.0" - dependencies: - "@types/node": "*" - checksum: e8f9ab96ec5cf76195c0d31cf555371824b673939064efec698ca99525ce46476af54debd1f66bd732e6079e134848b97163797009c4b47a767448a0c6ddaeda - languageName: node - linkType: hard - "@types/jsonwebtoken@npm:^9.0.0": - version: 9.0.0 - resolution: "@types/jsonwebtoken@npm:9.0.0" + version: 9.0.1 + resolution: "@types/jsonwebtoken@npm:9.0.1" dependencies: "@types/node": "*" - checksum: c7791354ba895759524c18ba609ea04efdc576e2b660bd6f80d5b917db8dc4b01acd4d1bc115a62d35406a82e627067973d475c4b36035dabaa27862b141ae49 - languageName: node - linkType: hard - -"@types/jss@npm:^9.5.6": - version: 9.5.8 - resolution: "@types/jss@npm:9.5.8" - dependencies: - csstype: ^2.0.0 - indefinite-observable: ^1.0.1 - checksum: 6e51707529a15f2f5ff94555ecb555d29427fd10c4f3d2d29474934292e365c2dfaa4ad30b2ab46946201cbca7f6e8df56513a22fc6ceca10a979db8338935c5 + checksum: a7f0925e9a42ad3ae970364c63c5986d40da5c83d51d3f4e624eb0f064a380376f9e3fb3f2f837390a9ab80143f5d75fd51866da30e110f6b486a3379e1c768f languageName: node linkType: hard @@ -14896,7 +15490,7 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:*": +"@types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" dependencies: @@ -14922,9 +15516,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.185 - resolution: "@types/lodash@npm:4.14.185" - checksum: f81d13da5ecab110ca9c5c7cc2bedc3c9802a6acf668576aecd1b8f4b134ed81d06c15f1e600fb08f05975098280a0d97d30cddfc2cb39ec1c6b56e971ca53b3 + version: 4.14.191 + resolution: "@types/lodash@npm:4.14.191" + checksum: ba0d5434e10690869f32d5ea49095250157cae502f10d57de0a723fd72229ce6c6a4979576f0f13e0aa9fbe3ce2457bfb9fa7d4ec3d6daba56730a51906d1491 languageName: node linkType: hard @@ -14973,7 +15567,7 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": +"@types/mdast@npm:^3.0.0": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" dependencies: @@ -14982,7 +15576,7 @@ __metadata: languageName: node linkType: hard -"@types/mdurl@npm:*, @types/mdurl@npm:^1.0.0": +"@types/mdurl@npm:*": version: 1.0.2 resolution: "@types/mdurl@npm:1.0.2" checksum: 79c7e523b377f53cf1f5a240fe23d0c6cae856667692bd21bf1d064eafe5ccc40ae39a2aa0a9a51e8c94d1307228c8f6b121e847124591a9a828c3baf65e86e2 @@ -14996,17 +15590,10 @@ __metadata: languageName: node linkType: hard -"@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd - languageName: node - linkType: hard - -"@types/minimatch@npm:*, @types/minimatch@npm:^5.0.0": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 +"@types/mime@npm:*": + version: 3.0.1 + resolution: "@types/mime@npm:3.0.1" + checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 languageName: node linkType: hard @@ -15017,6 +15604,13 @@ __metadata: languageName: node linkType: hard +"@types/minimatch@npm:^5.0.0, @types/minimatch@npm:^5.1.2": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.2 resolution: "@types/minimist@npm:1.2.2" @@ -15078,17 +15672,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17": - version: 18.11.19 - resolution: "@types/node@npm:18.11.19" - checksum: d7cd19fcfc59cbdd3f9ba0b4072cb7adc21bd575bd8eb7d7e698975e63564aaa83f03434f32b12331f84f73d0b369d9cbe2371e359d9d7f5c3361f4987f4f7da - languageName: node - linkType: hard - -"@types/node@npm:12.20.24": - version: 12.20.24 - resolution: "@types/node@npm:12.20.24" - checksum: e7a13460e2f5b0b5a32c0f3af7daf1a05201552a66d542d3cc3b1ea8b52d4730250f9eb1961d755e31cfe5d03c78340911a6242657a0a9a17d6f7e341fc9f366 +"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17, @types/node@npm:^18.11.18": + version: 18.15.3 + resolution: "@types/node@npm:18.15.3" + checksum: 31b1d92475a82c30de29aa6c0771b18a276552d191283b4423ba2d61b3f01159bf0d02576c0b7cc834b043997893800db6bb47f246083ed85aa45e79c80875d7 languageName: node linkType: hard @@ -15100,13 +15687,13 @@ __metadata: linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.33 - resolution: "@types/node@npm:14.18.33" - checksum: 4e23f95186d8ae1d38c999bc6b46fe94e790da88744b0a3bfeedcbd0d9ffe2cb0ff39e85f43014f6739e5270292c1a1f6f97a1fc606fd573a0c17fda9a1d42de + version: 14.18.38 + resolution: "@types/node@npm:14.18.38" + checksum: 4f580c5e0f124f44fa6f5d9923bf8fd98f644caabee6171c2dac48160062a91de99f2edd5db5ec59e93fe61f85dd4111df78c9d4f341f3aafca719929362303f languageName: node linkType: hard -"@types/node@npm:^15.6.1": +"@types/node@npm:^15.6.2": version: 15.14.9 resolution: "@types/node@npm:15.14.9" checksum: 49f7f0522a3af4b8389aee660e88426490cd54b86356672a1fedb49919a8797c00d090ec2dcc4a5df34edc2099d57fc2203d796c4e7fbd382f2022ccd789eee7 @@ -15114,9 +15701,9 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.18.12 - resolution: "@types/node@npm:16.18.12" - checksum: fc3271182414f8593018ef8f00b4718116a92f463f619081bd399d9460e7861e1dd7eebc7cf94c23567e418ff397babed077011711aae8d47171b5a81c5bd71d + version: 16.18.16 + resolution: "@types/node@npm:16.18.16" + checksum: 69c422450f046fbdf1904c4fdb9fbc80fda379768f6e5402ac1434fb5955b7b3d0082f02fb9bcd4979f57649ecd9a934277492d757c6ea88d080ba101c1ced48 languageName: node linkType: hard @@ -15199,13 +15786,13 @@ __metadata: linkType: hard "@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": - version: 1.4.11 - resolution: "@types/passport-oauth2@npm:1.4.11" + version: 1.4.12 + resolution: "@types/passport-oauth2@npm:1.4.12" dependencies: "@types/express": "*" "@types/oauth": "*" "@types/passport": "*" - checksum: 09d047a6c09a05c036f7db0cf8f8c09bf5878fdd15949bb1baa09a35f439929d471048fa6595f09ea4a4ea25396ce3918b362136579cf4a2b2ee29a92c0dd1ce + checksum: ff39f486529420d624c776835c54e46cc91c110b9620a96679e9a6391c330ff613f5ae5e3232317b1a7c05591652e906caf51d2d30b2bc28e50c8c3a3e5cf14d languageName: node linkType: hard @@ -15257,13 +15844,13 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.4.3 - resolution: "@types/prettier@npm:2.4.3" - checksum: b240434daabac54700c862b0bb52a83fec396e0e9c847447119ba41fd8404d79aadfa174e6306fb094b29efadac586344b7606c3a71c286b71755ab2579d54df + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3, @types/prop-types@npm:^15.7.5": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 @@ -15280,25 +15867,34 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.6 - resolution: "@types/qs@npm:6.9.6" - checksum: 01871b1cf7062717ec76fcb9b29ddae1e04fcfadc1c76d86ec2571e72f27bf09ff31b094b295be8d4ca664aeec9b8965563680b31fcab7aba1ed93afac5181cd + version: 6.9.7 + resolution: "@types/qs@npm:6.9.7" + checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba + languageName: node + linkType: hard + +"@types/ramda@npm:=0.28.23": + version: 0.28.23 + resolution: "@types/ramda@npm:0.28.23" + dependencies: + ts-toolbelt: ^6.15.1 + checksum: 61d7416c0f4f189c6524e093c7546ca2f159553e54d7933836d46aac1332611aa7b02fd8c8bfa98c0865f262fd9e99e06e3d9538deba0bab1f6153cbcf841160 languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.3 - resolution: "@types/range-parser@npm:1.2.3" - checksum: a0a4218214d2c599e2128a8965e9183d1f0b8fc614def43a2183cf80534d10fcf86357c823c7907e779df0ab048fd1fa3818b4c8f0f6f99ba150a3f99df7d03d + version: 1.2.4 + resolution: "@types/range-parser@npm:1.2.4" + checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 languageName: node linkType: hard "@types/react-dom@npm:^17": - version: 17.0.17 - resolution: "@types/react-dom@npm:17.0.17" + version: 17.0.19 + resolution: "@types/react-dom@npm:17.0.19" dependencies: "@types/react": ^17 - checksum: 23caf98aa03e968811560f92a2c8f451694253ebe16b670929b24eaf0e7fa62ba549abe9db0ac028a9d8a9086acd6ab9c6c773f163fa21224845edbc00ba6232 + checksum: 875a472d868b235435c905ded16cf92297bd2afb20a5a78f5dccd54312f6f038ccf452ea92bb41c0b39150c2f16f3ddff0265a2de756c6f63b0971dd5719578b languageName: node linkType: hard @@ -15311,15 +15907,24 @@ __metadata: languageName: node linkType: hard -"@types/react-redux@npm:^7.1.16": - version: 7.1.19 - resolution: "@types/react-redux@npm:7.1.19" +"@types/react-is@npm:^16.7.1 || ^17.0.0": + version: 17.0.3 + resolution: "@types/react-is@npm:17.0.3" + dependencies: + "@types/react": "*" + checksum: 6abb7c47d54f012272650df8a962a28bd82f219291e5ef8b4dfa7fe0bb98ae243b060bf9fbe8ceff6213141794855a006db194b490b00ffd15842ae19d0ce1f0 + languageName: node + linkType: hard + +"@types/react-redux@npm:^7.1.20": + version: 7.1.25 + resolution: "@types/react-redux@npm:7.1.25" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: 32a1b21f6a5e45cd6e78fdb4b86974ea444a35539c3c1270d66132527b2c45051f9642a3e2296616c72407dc019d0629c0183bcca64fbf3ba19443484cb70df7 + checksum: a61ec25cbf8bb3720850402d3c49493fcff4afb73ad447d161460b5d4c600c984ad48708e8564d2fd32052eaa3c3b3f655c5b300ce813429637cce9e5958329f languageName: node linkType: hard @@ -15350,21 +15955,12 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^2.0.8": - version: 2.9.2 - resolution: "@types/react-transition-group@npm:2.9.2" +"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "@types/react-transition-group@npm:4.4.5" dependencies: "@types/react": "*" - checksum: 6f30fffc221339de90bd3e999f32328618cfaedfcaa501603f5ddc5bed1c2dbaa0d51347c3a25e5f8fd3041c671aabd2b7bfbcad611a7636adcd9da4e0666fa5 - languageName: node - linkType: hard - -"@types/react-transition-group@npm:^4.2.0": - version: 4.2.4 - resolution: "@types/react-transition-group@npm:4.2.4" - dependencies: - "@types/react": "*" - checksum: a8abb3ad3c6e0575c630b591503a78ae3a94e21d1285905a49c36168e5d3de68b0886e2c6d75b751e30f2dc6e4245351cde30e4b3ff2649aec345f2088961e2c + checksum: 265f1c74061556708ffe8d15559e35c60d6c11478c9950d3735575d2c116ca69f461d85effa06d73a613eb8b73c84fd32682feb57cf7c5f9e4284021dbca25b0 languageName: node linkType: hard @@ -15387,32 +15983,32 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.52 - resolution: "@types/react@npm:17.0.52" + version: 17.0.53 + resolution: "@types/react@npm:17.0.53" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 + checksum: dacfde02c260fd98bed2eb775ed0c7ce1397be4c0844f907a50763b081a4008f81f57071889a16eb1350ddcf0927f3cf1a6541702c8ad03de3c70383ef931e3f languageName: node linkType: hard "@types/readdir-glob@npm:*": - version: 1.1.0 - resolution: "@types/readdir-glob@npm:1.1.0" + version: 1.1.1 + resolution: "@types/readdir-glob@npm:1.1.1" dependencies: "@types/node": "*" - checksum: 98cabfac6beddd3aeb3624e05d57b8dd1354431e436e9e795aaf74ddf2f1c23342d7b8df7586cc3d1374ceeee0d7975638fae97cb1739572d8a4067ebebb91d9 + checksum: cc888be86e729c1e2f799a926c091b464d58016aaee69e08b58878668ec0137e985236775a3eaac14273554bf45c7da92fe19b900370f8d02f47a32709000ba8 languageName: node linkType: hard "@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": - version: 1.8.23 - resolution: "@types/recharts@npm:1.8.23" + version: 1.8.24 + resolution: "@types/recharts@npm:1.8.24" dependencies: "@types/d3-shape": ^1 "@types/react": "*" - checksum: 0588f6245f067583f14f98637e24c117cb7f90128926f9b09fa7ed7411a6391d47198afba60201759efd588d5e520cc88d04afdc11fda1d70c62ccee52c0f02f + checksum: 1341e5472bf62a83ab98648bc5c14a9a81fba16af9255203ef12a21caa21a988fac3198d9771703394eb876d4fbefb42e818865e35ecfe0d105aee1d1164aa6e languageName: node linkType: hard @@ -15444,13 +16040,6 @@ __metadata: languageName: node linkType: hard -"@types/resize-observer-browser@npm:^0.1.6": - version: 0.1.7 - resolution: "@types/resize-observer-browser@npm:0.1.7" - checksum: 0377eaac8bb7a17b983b49a156006032380b459bfebefc54a5aa2f7f8a9786d2b60723e8837c61ef733330b478f4f26293e9edbdc8006238e4f80c878c56c988 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -15460,7 +16049,7 @@ __metadata: languageName: node linkType: hard -"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": +"@types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" dependencies: @@ -15469,7 +16058,7 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:^0.12.0": +"@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 @@ -15515,9 +16104,9 @@ __metadata: linkType: hard "@types/scheduler@npm:*": - version: 0.16.1 - resolution: "@types/scheduler@npm:0.16.1" - checksum: 2ff8034df029a6cbb3623b05fa895cac4fc504806a8e948ebe29675a1edfa5ac04faac7611016076b3ffefc2037bbe344ad1978304059b2d4c78e513ec43c7bf + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc languageName: node linkType: hard @@ -15554,21 +16143,21 @@ __metadata: linkType: hard "@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.13.10 - resolution: "@types/serve-static@npm:1.13.10" + version: 1.15.1 + resolution: "@types/serve-static@npm:1.15.1" dependencies: - "@types/mime": ^1 + "@types/mime": "*" "@types/node": "*" - checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 + checksum: 2e078bdc1e458c7dfe69e9faa83cc69194b8896cce57cb745016580543c7ab5af07fdaa8ac1765eb79524208c81017546f66056f44d1204f812d72810613de36 languageName: node linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.0 - resolution: "@types/set-cookie-parser@npm:2.4.0" + version: 2.4.2 + resolution: "@types/set-cookie-parser@npm:2.4.2" dependencies: "@types/node": "*" - checksum: dfd9f31079e44ad5922c142564e8cfc43c8ed61dafd4f22ab3862dd76971398a6063b4e8e89a047607e7a0ff0914a0e4b16a51ff2fc9b73c4196744666762685 + checksum: c31bf04eb9620829dc3c91bced74ac934ad039d20d20893fb5acac0f08769cbd4eef3bf7502a0289c7be59c3e9cfa456147b4e88bff47dd1b9efb4995ba5d5a3 languageName: node linkType: hard @@ -15596,9 +16185,9 @@ __metadata: linkType: hard "@types/sizzle@npm:*, @types/sizzle@npm:^2.3.2": - version: 2.3.2 - resolution: "@types/sizzle@npm:2.3.2" - checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d + version: 2.3.3 + resolution: "@types/sizzle@npm:2.3.3" + checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 languageName: node linkType: hard @@ -15612,15 +16201,24 @@ __metadata: linkType: hard "@types/ssh2-streams@npm:*": - version: 0.1.8 - resolution: "@types/ssh2-streams@npm:0.1.8" + version: 0.1.9 + resolution: "@types/ssh2-streams@npm:0.1.9" dependencies: "@types/node": "*" - checksum: 1df7035f66165e1719cd61c365cbeb8c3221d645bcd57519a7f0f7b1cb9ff7b37e190480f9a2a8ed95cf126cac066c0f1ca6d365101f828966903e36efb59fcc + checksum: 190f3c235bf19787cd255f366d3ac9233875750095f3c73d15e72a1e67a826aed7e7c389603c5e89cb6420b87ff6dffc566f9174e546ddb7ff8c8dc2e8b00def languageName: node linkType: hard -"@types/ssh2@npm:*, @types/ssh2@npm:^0.5.48": +"@types/ssh2@npm:*": + version: 1.11.8 + resolution: "@types/ssh2@npm:1.11.8" + dependencies: + "@types/node": ^18.11.18 + checksum: ee8b990652ee5ade2bab513e2e30443673c94cc54bf9912d63a46dd51777ab088fa2213d830d3f538c7540f5b2bf6bccb2bebd4071a6804fc4a89df5352c4ae0 + languageName: node + linkType: hard + +"@types/ssh2@npm:^0.5.48": version: 0.5.52 resolution: "@types/ssh2@npm:0.5.52" dependencies: @@ -15631,9 +16229,9 @@ __metadata: linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/stack-utils@npm:2.0.0" - checksum: b3fbae25b073116977ecb5c67d22f14567b51a7792403b0bf46e5de8f29bde3bd4ec1626afb22065495ca7f1c699c8bd66720050c94b8f8f9bcefbee79d161fd + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 languageName: node linkType: hard @@ -15647,21 +16245,21 @@ __metadata: linkType: hard "@types/styled-jsx@npm:^2.2.8": - version: 2.2.8 - resolution: "@types/styled-jsx@npm:2.2.8" + version: 2.2.9 + resolution: "@types/styled-jsx@npm:2.2.9" dependencies: "@types/react": "*" - checksum: 6f1e5d893da847595a625c0281a78350d03c0650a7abb7aedbf5a20ccb085d925185823df611f6aff45fa908904bc3736f8d8bafd7b990b1563d25d92339904f + checksum: 0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e languageName: node linkType: hard "@types/superagent@npm:*": - version: 4.1.7 - resolution: "@types/superagent@npm:4.1.7" + version: 4.1.16 + resolution: "@types/superagent@npm:4.1.16" dependencies: "@types/cookiejar": "*" "@types/node": "*" - checksum: 090a9fd148d82550a8feda89df4a9f3051ff2e253b02cf5f84e01c23f6e5225c0bf814d600167449c5bd090a02e42449dfbe8fa089fc24b7c10e397d814e37b9 + checksum: 187d1d32fdafd20b27e81728c46283160d3296ad904d56e0780769cf524105c94cc64bf5bafa170400cf5f1063d30826427de42ff0894d15b54df6d0fa31be4e languageName: node linkType: hard @@ -15712,11 +16310,12 @@ __metadata: linkType: hard "@types/terser-webpack-plugin@npm:^5.0.4": - version: 5.2.0 - resolution: "@types/terser-webpack-plugin@npm:5.2.0" + version: 5.0.4 + resolution: "@types/terser-webpack-plugin@npm:5.0.4" dependencies: - terser-webpack-plugin: "*" - checksum: 475b0f160c9f83641255f6516b69d7908b9e3e8e8ab653f3a257690249f9614f9386c0897eba6e4e35182ec0d83f57454d62fb94b38ae7c171891641350072ee + terser: ^5.3.8 + webpack: ^5.1.0 + checksum: 7b3845526d4ed7b636f7b2f8f35b5d7e45211f7a55afc85e32a66655eaf65cd193e2fec195bcdb473c0d9a5b2828798b9c23196fdc86e9cd2e9420227012f438 languageName: node linkType: hard @@ -15739,9 +16338,9 @@ __metadata: linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.0 - resolution: "@types/tough-cookie@npm:4.0.0" - checksum: 454fa8d4d64532992274ebf2ff5ea0061b0dd32a2282255a3e793f04a8b64a9c4c1f9e0f4ed83c514c852b7b604d69336c66c80de4a857cb41a81e9572981e7f + version: 4.0.2 + resolution: "@types/tough-cookie@npm:4.0.2" + checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 languageName: node linkType: hard @@ -15753,9 +16352,9 @@ __metadata: linkType: hard "@types/trusted-types@npm:*": - version: 2.0.2 - resolution: "@types/trusted-types@npm:2.0.2" - checksum: 3371eef5f1c50e1c3c07a127c1207b262ba65b83dd167a1c460fc1b135a3fb0c97b9f508efebd383f239cc5dd5b7169093686a692a501fde9c3f7208657d9b0d + version: 2.0.3 + resolution: "@types/trusted-types@npm:2.0.3" + checksum: 4794804bc4a4a173d589841b6d26cf455ff5dc4f3e704e847de7d65d215f2e7043d8757e4741ce3a823af3f08260a8d04a1a6e9c5ec9b20b7b04586956a6b005 languageName: node linkType: hard @@ -15775,6 +16374,13 @@ __metadata: languageName: node linkType: hard +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + "@types/uuid@npm:^8.0.0": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -15783,12 +16389,12 @@ __metadata: linkType: hard "@types/vinyl@npm:^2.0.4": - version: 2.0.6 - resolution: "@types/vinyl@npm:2.0.6" + version: 2.0.7 + resolution: "@types/vinyl@npm:2.0.7" dependencies: "@types/expect": ^1.20.4 "@types/node": "*" - checksum: 5012fb61e3a29e7deaac7e66b6d8cb73d87d15965c8a38cb69277c2beb851a9a8ec09d4a1b07a3151e143afc2e3a102ca368b9a0e08f2f29de9183c97f9c7d85 + checksum: 8e6e341860a2a024d5802517fb171ffc66bfbd91b0eefe8dd4376e08733e468781417ba861b9d32bb8207707cf554e3aeb60d08297c5e666a40520af95082e2d languageName: node linkType: hard @@ -15836,27 +16442,27 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 15.0.0 - resolution: "@types/yargs-parser@npm:15.0.0" - checksum: 333ab73a1f9c82c64b2fac2441558e58f062fbe7affc35bb53b8e755b62cdd32b1bbc6f4da23773887a2189bf04395e2a8c710df344df4cd578993aeefe98053 + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 languageName: node linkType: hard "@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" + version: 16.0.5 + resolution: "@types/yargs@npm:16.0.5" dependencies: "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 + checksum: 22697f7cc8aa32dcc10981a87f035e183303a58351c537c81fb450270d5c494b1d918186210e445b0eb2e4a8b34a8bda2a595f346bdb1c9ed2b63d193cb00430 languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.12 - resolution: "@types/yargs@npm:17.0.12" + version: 17.0.22 + resolution: "@types/yargs@npm:17.0.22" dependencies: "@types/yargs-parser": "*" - checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 + checksum: 0773523fda71bafdc52f13f5970039e535a353665a60ba9261149a5c9c2b908242e6e77fbb7a8c06931ec78ce889d64d09673c68ba23eb5f5742d5385d0d1982 languageName: node linkType: hard @@ -15891,17 +16497,17 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.9.0": - version: 5.53.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.53.0" + version: 5.55.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.55.0" dependencies: - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/type-utils": 5.53.0 - "@typescript-eslint/utils": 5.53.0 + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.55.0 + "@typescript-eslint/type-utils": 5.55.0 + "@typescript-eslint/utils": 5.55.0 debug: ^4.3.4 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 - regexpp: ^3.2.0 semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: @@ -15910,69 +16516,54 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 12dffe65969d8e5248c86a700fe46a737e55ecafb276933e747b4731eab6266fe55e2d43a34b8b340179fe248e127d861cd016a7614b1b9804cd0687c99616d1 + checksum: e3239ec6016eeb73b8b4d8310581978e28b8d3378140a8eb70bd8e33ffd332266020c19d493e0ccae4edfd4abd6097608718c50308fe6288f4ffeb8e4784efd9 languageName: node linkType: hard "@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.9.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.9.0" + version: 5.55.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.55.0" dependencies: - "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.9.0 - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/typescript-estree": 5.9.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + "@typescript-eslint/utils": 5.55.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 731b27840642b644e65f4ae321ed47e973ffadacd1aa24a19b02b4b298b5bcfbfa16c2d3d034e87a08c3c45f942c5b974f7619cb143eb23fb950f37418dce791 + checksum: e674ce85f40c5ba21d26fbf8c2195cc2e411823d545cac5c73856c5f707d276aa4764d10c47e6469a5f63825e77bc98a88103da32130f23da378e699bef1ea94 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.9.0": - version: 5.53.0 - resolution: "@typescript-eslint/parser@npm:5.53.0" + version: 5.55.0 + resolution: "@typescript-eslint/parser@npm:5.55.0" dependencies: - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/typescript-estree": 5.53.0 + "@typescript-eslint/scope-manager": 5.55.0 + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/typescript-estree": 5.55.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 979e5d63793a9e64998b1f956ba0f00f8a2674db3a664fafce7b2433323f5248bd776af8305e2419d73a9d94c55176fee099abc5c153b4cc52e5765c725c1edd + checksum: 48a20dc7e67960b5168b77bfb9d11d053a21d57bb83cf7b59f750191cbca5eea3b4636a8e6e75cc0aca5a84cdef91fed5440934fc2935f8c6fa71630a253a50c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/scope-manager@npm:5.53.0" +"@typescript-eslint/scope-manager@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/scope-manager@npm:5.55.0" dependencies: - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/visitor-keys": 5.53.0 - checksum: 51f31dc01e95908611f402441f58404da80a338c0237b2b82f4a7b0b2e8868c4bfe8f7cf44b2567dd56533de609156a5d4ac54bb1f9f09c7014b99428aef2543 + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/visitor-keys": 5.55.0 + checksum: f253db88f69a29e4abe2f567d0a611cc3e7fb1a911a2cc54a2f6baf16e3de4d1883b3f8e45ee61b3db9fa5543dda0fd7b608de9d28ba6173ab49bfd17ff90cad languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/scope-manager@npm:5.9.0" +"@typescript-eslint/type-utils@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/type-utils@npm:5.55.0" dependencies: - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/visitor-keys": 5.9.0 - checksum: 46e7ab0cef558e7faf1aa8d122a265e196566c0073292f5b2f9cede1f63f52860be8e4ef90251c15e0922339c15852584cb5337382035baff87f1203c0c8d1b5 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/type-utils@npm:5.53.0" - dependencies: - "@typescript-eslint/typescript-estree": 5.53.0 - "@typescript-eslint/utils": 5.53.0 + "@typescript-eslint/typescript-estree": 5.55.0 + "@typescript-eslint/utils": 5.55.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -15980,30 +16571,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 52c40967c5fabd58c2ae8bf519ef89e4feb511e4df630aeaeac8335661a79b6b3a32d30a61a5f1d8acc703f21c4d90751a5d41cda1b35d08867524da11bc2e1d + checksum: 5c60d441355b51f96b596324068c10605c74abb46748c0bbc6d8f7f2ea40acb6b4bda3b537105fa189172324c56d18bd88e7102e67f99f8c03bc05c6d0e2023d languageName: node linkType: hard -"@typescript-eslint/types@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/types@npm:5.53.0" - checksum: b0eaf23de4ab13697d4d2095838c959a3f410c30f0d19091e5ca08e62320c3cc3c72bcb631823fb6a4fbb31db0a059e386a0801244930d0a88a6a698e5f46548 +"@typescript-eslint/types@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/types@npm:5.55.0" + checksum: 7d851f09a2106514d3a9c7164d34758f30abfe554e3c7a02be75cdc7e16644e23ca32840a8f39a0321bc509927fb4d98ce91b22b21e8544ac56cef33b815a864 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/types@npm:5.9.0" - checksum: 7c4e142600aec266b41418dab1d0cee8cace980b6990692df6522de6eab6705bf515aef36180e4a38c62acb10c92fb474269ac6856a4266d6b035068cd83fad3 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.53.0" +"@typescript-eslint/typescript-estree@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.55.0" dependencies: - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/visitor-keys": 5.53.0 + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/visitor-keys": 5.55.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -16012,63 +16596,35 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6e119c8e4167c8495d728c5556a834545a9c064918dd5e7b79b0d836726f4f8e2a0297b0ac82bf2b71f1e5427552217d0b59d8fb1406fd79bd3bf91b75dca873 + checksum: d24a11aee3d01067018d99804f420aecb8af88e43bf170d5d14f6480bd378c0a81ce49a37f5d6c36e5f0f319e3fa8b099720f295f2767338be1a4f7e9a5323e1 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.9.0" - dependencies: - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/visitor-keys": 5.9.0 - debug: ^4.3.2 - globby: ^11.0.4 - is-glob: ^4.0.3 - semver: ^7.3.5 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 71e3f720e335fb08e66950d32b723484aa4d1f4a3163e82259f4be2d11091545070c2e71472be470403cb6f82bf1abe84fa89c1d0b1d47adc8550b3f70aabfb5 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.53.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": - version: 5.53.0 - resolution: "@typescript-eslint/utils@npm:5.53.0" +"@typescript-eslint/utils@npm:5.55.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": + version: 5.55.0 + resolution: "@typescript-eslint/utils@npm:5.55.0" dependencies: + "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.53.0 - "@typescript-eslint/types": 5.53.0 - "@typescript-eslint/typescript-estree": 5.53.0 + "@typescript-eslint/scope-manager": 5.55.0 + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/typescript-estree": 5.55.0 eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 18e6bac14ae853385a74123759850bca367904723e170c37416fc014673eb714afb6bb090367bff61494a8387e941b6af65ee5f4f845f7177fabb4df85e01643 + checksum: 368cfc3fb9d6af6901e739e2e41c3f7f1c1244576607445f4f59d95eccb237f73e1a75e7f0816ec9a32a0f1ec6bb4a3602a99e17e70fe184e62f7c69dcbe4b8d languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.53.0": - version: 5.53.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.53.0" +"@typescript-eslint/visitor-keys@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.55.0" dependencies: - "@typescript-eslint/types": 5.53.0 + "@typescript-eslint/types": 5.55.0 eslint-visitor-keys: ^3.3.0 - checksum: 090695883c15364c6f401e97f56b13db0f31c1114f3bd22562bd41734864d27f6a3c80de33957e9dedab2d5f94b0f4480ba3fde1d4574e74dca4593917b7b54a - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.9.0" - dependencies: - "@typescript-eslint/types": 5.9.0 - eslint-visitor-keys: ^3.0.0 - checksum: 34a595b83b0e7d4f387d6c81b272804b94a1a91478c5f856fdfdd227595bf8562bf3f5d732606d10b4522c3f2617d09d4bacd2193f757a324ea66b3144a68903 + checksum: 0b24c72dff99dd2cf41c19d20067f8ab20a38aa2e82c79c5530bec7cf651031e95c80702fc21c813c9b94e5f3d4cd210f13967b2966ef38abe548cb5f05848a3 languageName: node linkType: hard @@ -16275,55 +16831,22 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:0.5.3, @whatwg-node/fetch@npm:^0.5.0": - version: 0.5.3 - resolution: "@whatwg-node/fetch@npm:0.5.3" +"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1": + version: 0.8.3 + resolution: "@whatwg-node/fetch@npm:0.8.3" dependencies: "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.12.0 - web-streams-polyfill: ^3.2.0 - checksum: 73087779b3b0e70d0abf8b2a5d82919c29c26f8062e16db0cad413fe45c7b58c3c12cc2bcd5942aebdfdc4feee97b01cf1ff6c5d92d9507a140afdcafa410b12 - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.2.4": - version: 0.2.6 - resolution: "@whatwg-node/fetch@npm:0.2.6" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - event-target-polyfill: ^0.0.3 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.8.0 - web-streams-polyfill: ^3.2.0 - checksum: 12ee718be802860fbde2647ec0139dba598a278b0248326c0a314591b7096c84c34b16f5317273b0b11f3bbc6ff0d5d1df08983b4e9f5c3f0d779fde727f21af - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.8.0": - version: 0.8.1 - resolution: "@whatwg-node/fetch@npm:0.8.1" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - "@whatwg-node/node-fetch": ^0.3.0 + "@whatwg-node/node-fetch": ^0.3.3 busboy: ^1.6.0 urlpattern-polyfill: ^6.0.2 web-streams-polyfill: ^3.2.1 - checksum: b827ac2299676705d98d31be4b68e70741200618b38daaae0d70e587f61fae573854170e2ca219d64bbd910b96960e26b64aa9869e9194a4d162e2a751d6f7a7 + checksum: 1b12abaf8113634201d4fceba378c0e859d86a71876cf5ba17af73d7c6c18129c98e27e10959a36893472b4b2648c82d651b2dd5681ed4beacb193e18aa91685 languageName: node linkType: hard -"@whatwg-node/node-fetch@npm:^0.3.0": - version: 0.3.0 - resolution: "@whatwg-node/node-fetch@npm:0.3.0" +"@whatwg-node/node-fetch@npm:^0.3.3": + version: 0.3.3 + resolution: "@whatwg-node/node-fetch@npm:0.3.3" dependencies: "@whatwg-node/events": ^0.0.2 busboy: ^1.6.0 @@ -16332,7 +16855,7 @@ __metadata: tslib: ^2.3.1 peerDependencies: "@types/node": ^18.0.6 - checksum: 141deb3f44d1978218c64ca285120b3e2427159773056774f2251f9d5d418c8e1d6f27f4b593d031ff4124f9cd00cb4bd9fd681e4528c9f498c72356a520b69f + checksum: 4b32aec0ea6d0e1d495002e67694e44cb0885f7f488bd7fb75ad404d9fee3c09f476738c038e770a45ef8020e171e889ff7d9799f434aca4439c80c320620d6f languageName: node linkType: hard @@ -16363,13 +16886,20 @@ __metadata: languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.5, @xmldom/xmldom@npm:^0.7.6": +"@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.6, @xmldom/xmldom@npm:^0.7.9": version: 0.7.9 resolution: "@xmldom/xmldom@npm:0.7.9" checksum: 66e37b7800132f891b885b2eceeeebc53f60b69789da10276f1584256b963d79a28c7ae2071bc53a9cd842d9b03554c761b2701fe8036d6052f26bcd0ae8f2bb languageName: node linkType: hard +"@xmldom/xmldom@npm:^0.8.3": + version: 0.8.6 + resolution: "@xmldom/xmldom@npm:0.8.6" + checksum: f17ac6d99a971a6aeb831fcfc5cfa86f367664e45815046548814b2deb17ccc421fef4e0d5ba29e66179d112b552f6caa5680064f8e7bd8a389b788a60404c8e + languageName: node + linkType: hard + "@xobotyi/scrollbar-width@npm:^1.9.5": version: 1.9.5 resolution: "@xobotyi/scrollbar-width@npm:1.9.5" @@ -16399,12 +16929,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.4": - version: 3.0.0-rc.21 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.21" + version: 3.0.0-rc.40 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.40" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: c0741ef01089a7d452dfb75b8c24a82ddcc3e218dac22b794a06f2e50c7070378c460f63f63fb7ed0f62f634114e448e3d85a75ccd4db84e1526242ae9b4a7d5 + checksum: 64df0d8dad4cd43af5fcff758b0cfc47e7dc56e00eed87e3bd6ce8a9ea265c41fe758c1e01607e630bae46c9f8324ca853bced58be3d1c93492e125757ab7f30 languageName: node linkType: hard @@ -16415,6 +16945,16 @@ __metadata: languageName: node linkType: hard +"GendocuPublicApis@https://git.gendocu.com/gendocu/GendocuPublicApis.git#master": + version: 1.0.0 + resolution: "GendocuPublicApis@https://git.gendocu.com/gendocu/GendocuPublicApis.git#commit=83be829a28b0c28c85c18f8d8a2748efbfa58819" + dependencies: + "@improbable-eng/grpc-web": ^0.14.0 + google-protobuf: ^3.15.8 + checksum: eddc66c877000fb28b06ed56022b31ef81161fd8bcf766f2da3e3d4529b9e0cb8a4b43661d118336077dfd882ad2381885c4104a5e8524c315e2dc7d341661b2 + languageName: node + linkType: hard + "a-sync-waterfall@npm:^1.0.0": version: 1.0.1 resolution: "a-sync-waterfall@npm:1.0.1" @@ -16446,9 +16986,9 @@ __metadata: linkType: hard "abstract-logging@npm:^2.0.0": - version: 2.0.0 - resolution: "abstract-logging@npm:2.0.0" - checksum: 2f3e0ef758a18d98ddfd4fc01532724d6ada0945e2f679a0ad3b73fbe4b3594b1a3047dafb25bb88d3cb4031c4ea6090b25f8f5b7cfb4d2c7bcf125a56aca6df + version: 2.0.1 + resolution: "abstract-logging@npm:2.0.1" + checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e languageName: node linkType: hard @@ -16472,12 +17012,22 @@ __metadata: languageName: node linkType: hard +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + "acorn-import-assertions@npm:^1.7.6": - version: 1.7.6 - resolution: "acorn-import-assertions@npm:1.7.6" + version: 1.8.0 + resolution: "acorn-import-assertions@npm:1.8.0" peerDependencies: acorn: ^8 - checksum: bc8a1585abd70ebfb3a6b3112f5e3974fee3ac598230f916a3857f0ad4fa7e72197be532c49d1feeb83678ef264f34bee9bf1934dfb2f276d88468134a51fa9f + checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 languageName: node linkType: hard @@ -16491,13 +17041,13 @@ __metadata: linkType: hard "acorn-walk@npm:^7.1.1": - version: 7.1.1 - resolution: "acorn-walk@npm:7.1.1" - checksum: 046be0b8094b16459d94dadc550adb0cf5ace3fad02880cb4fd968e2250e988d0022f1f169c60b2fecc77bc711c46f91a6b1b7b72d6c458b008c9e821e89cfff + version: 7.2.0 + resolution: "acorn-walk@npm:7.2.0" + checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f languageName: node linkType: hard -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -16513,19 +17063,19 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": - version: 8.8.0 - resolution: "acorn@npm:8.8.0" +"acorn@npm:^8.1.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" bin: acorn: bin/acorn - checksum: 7270ca82b242eafe5687a11fea6e088c960af712683756abf0791b68855ea9cace3057bd5e998ffcef50c944810c1e0ca1da526d02b32110e13c722aa959afdc + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 languageName: node linkType: hard "address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.1.2 - resolution: "address@npm:1.1.2" - checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 + version: 1.2.2 + resolution: "address@npm:1.2.2" + checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 languageName: node linkType: hard @@ -16539,13 +17089,13 @@ __metadata: linkType: hard "agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" dependencies: debug: ^4.1.0 - depd: ^1.1.2 + depd: ^2.0.0 humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 languageName: node linkType: hard @@ -16603,7 +17153,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": +"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -16627,13 +17177,6 @@ __metadata: languageName: node linkType: hard -"alphanum-sort@npm:^1.0.2": - version: 1.0.2 - resolution: "alphanum-sort@npm:1.0.2" - checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 - languageName: node - linkType: hard - "already@npm:^3.2.0": version: 3.4.1 resolution: "already@npm:3.4.1" @@ -16690,9 +17233,9 @@ __metadata: linkType: hard "ansi-regex@npm:^4.1.0": - version: 4.1.0 - resolution: "ansi-regex@npm:4.1.0" - checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 languageName: node linkType: hard @@ -16729,9 +17272,9 @@ __metadata: linkType: hard "ansi-styles@npm:^6.0.0": - version: 6.1.0 - resolution: "ansi-styles@npm:6.1.0" - checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard @@ -16743,12 +17286,12 @@ __metadata: linkType: hard "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.2 - resolution: "anymatch@npm:3.1.2" + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" dependencies: normalize-path: ^3.0.0 picomatch: ^2.0.4 - checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard @@ -16817,22 +17360,22 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.0 - resolution: "are-we-there-yet@npm:3.0.0" + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 languageName: node linkType: hard "are-we-there-yet@npm:~1.1.2": - version: 1.1.5 - resolution: "are-we-there-yet@npm:1.1.5" + version: 1.1.7 + resolution: "are-we-there-yet@npm:1.1.7" dependencies: delegates: ^1.0.0 readable-stream: ^2.0.6 - checksum: 9a746b1dbce4122f44002b0c39fbba5b2c6f52c00e88b6ccba6fc68652323f8a1355a20e8ab94846995626d8de3bf67669a3b4a037dff0885db14607168f2b15 + checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 languageName: node linkType: hard @@ -16867,14 +17410,14 @@ __metadata: linkType: hard "args@npm:^5.0.0": - version: 5.0.1 - resolution: "args@npm:5.0.1" + version: 5.0.3 + resolution: "args@npm:5.0.3" dependencies: camelcase: 5.0.0 chalk: 2.4.2 leven: 2.1.0 mri: 1.1.4 - checksum: 51e2a05f32d15b8e292f000e6b232118df61b8f4fd446b17bb4e99df9ab47fe2c4a01924d7f967a6f08e82f9c19be277b08ed22bceff058aca849144ef8efed3 + checksum: ac39e656090f9364d7a2a42216a572dfe36d3e4d16d87ca4c1c9552a1c325dc222b642124cb96cdeeafb46662922910191f5aa12142cc4ca117b6d85454c8423 languageName: node linkType: hard @@ -16887,6 +17430,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + "array-differ@npm:^3.0.0": version: 3.0.0 resolution: "array-differ@npm:3.0.0" @@ -16921,6 +17474,13 @@ __metadata: languageName: node linkType: hard +"array-timsort@npm:^1.0.3": + version: 1.0.3 + resolution: "array-timsort@npm:1.0.3" + checksum: fd4b5b0911214bdc8b5699ed10d309685551b518b3819c611c967cff59b87aee01cf591a10e36a3f14dbff696984bd6682b845f6fdbf1217195e910f241a4f78 + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -16986,23 +17546,24 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^4.0.0": - version: 4.10.1 - resolution: "asn1.js@npm:4.10.1" +"asn1.js@npm:^5.2.0": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" dependencies: bn.js: ^4.0.0 inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 + safer-buffer: ^2.1.0 + checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a languageName: node linkType: hard "asn1@npm:^0.2.4, asn1@npm:~0.2.3": - version: 0.2.4 - resolution: "asn1@npm:0.2.4" + version: 0.2.6 + resolution: "asn1@npm:0.2.6" dependencies: safer-buffer: ~2.1.0 - checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d languageName: node linkType: hard @@ -17067,9 +17628,9 @@ __metadata: linkType: hard "async-lock@npm:^1.1.0": - version: 1.2.4 - resolution: "async-lock@npm:1.2.4" - checksum: 9b8cf65bb9ac7b58ff95539a03b73d51f64d0aea95cde1ebf787859670a8998f0a5258f118db6b54305bf6ed20cf3a2f923f4dd69a58d472fa78cca436c42342 + version: 1.4.0 + resolution: "async-lock@npm:1.4.0" + checksum: a71ef9e50dc448a8e8dd6482494210d7b6f556d4815612b1fed5662216cd756c2c8fb9c2153a9a66ea90b36ba7fb18aa568d11813aadc23feb4c5b0b188df614 languageName: node linkType: hard @@ -17083,9 +17644,9 @@ __metadata: linkType: hard "async@npm:^3.2.0, async@npm:^3.2.3": - version: 3.2.3 - resolution: "async@npm:3.2.3" - checksum: c4bee57ab2249af3dc83ca3ef9acfa8e822c0d5e5aa41bae3eaf7f673648343cd64ecd7d26091ffd357f3f044428b17b5f00098494b6cf8b6b3e9681f0636ca1 + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 languageName: node linkType: hard @@ -17118,11 +17679,11 @@ __metadata: linkType: hard "autolinker@npm:^3.11.0": - version: 3.14.1 - resolution: "autolinker@npm:3.14.1" + version: 3.16.2 + resolution: "autolinker@npm:3.16.2" dependencies: - tslib: ^1.9.3 - checksum: e8c0b07053a6d1557953325e500d6e59f4c7c5bb2ae97d0ace9229019133fc0f058ef41636bfc74b6581d98bc4a5e15631dc00cfe0993d0c41b525e2e0652e37 + tslib: ^2.3.0 + checksum: 1d5d20ef23586629ec3c341052e6bb6250399cf5e66db21540c17b2f5b1137066435fb274a2115b57464d05e75b85afad61ef7cdf6ea693ef2920a3748b7249d languageName: node linkType: hard @@ -17187,8 +17748,8 @@ __metadata: linkType: hard "aws-sdk@npm:^2.1231.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": - version: 2.1279.0 - resolution: "aws-sdk@npm:2.1279.0" + version: 2.1338.0 + resolution: "aws-sdk@npm:2.1338.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -17200,7 +17761,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.4.19 - checksum: ee8e8ee7baea9abaa0e1d08294be8ff00795b9db606101ef69a45d1465dac936187e43079fbe7a28ff4a463c8f9cd728d9bfee3e3974b0b5b88eb437dc81295b + checksum: b4b4e74ee93a98e728182220281062230b62dd64a2f2d47054ed9e14d84044de2329923af7f86a92d280af6bc1b37005394c229542b553d5a386f4874d430b79 languageName: node linkType: hard @@ -17219,9 +17780,9 @@ __metadata: linkType: hard "axe-core@npm:^4.6.2": - version: 4.6.2 - resolution: "axe-core@npm:4.6.2" - checksum: 81523eeaf101a3a129545a936d448d235ecf1f8c0daccdee224d29f63bec716fa38cf1a65c8462548b1f995624277eed790d9d9977ae40ba692c4cadf1196403 + version: 4.6.3 + resolution: "axe-core@npm:4.6.3" + checksum: d0c46be92b9707c48b88a53cd5f471b155a2bfc8bf6beffb514ecd14e30b4863e340b5fc4f496d82a3c562048088c1f3ff5b93b9b3b026cb9c3bfacfd535da10 languageName: node linkType: hard @@ -17248,6 +17809,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:=1.3.4": + version: 1.3.4 + resolution: "axios@npm:1.3.4" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c + languageName: node + linkType: hard + "axios@npm:^0.21.1": version: 0.21.4 resolution: "axios@npm:0.21.4" @@ -17295,29 +17867,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-jest@npm:29.4.3" +"babel-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-jest@npm:29.5.0" dependencies: - "@jest/transform": ^29.4.3 + "@jest/transform": ^29.5.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.4.3 + babel-preset-jest: ^29.5.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 - languageName: node - linkType: hard - -"babel-plugin-dynamic-import-node@npm:^2.3.3": - version: 2.3.3 - resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" - dependencies: - object.assign: ^4.1.0 - checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b + checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede languageName: node linkType: hard @@ -17334,51 +17897,51 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-plugin-jest-hoist@npm:29.4.3" +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.1": - version: 0.3.1 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" +"babel-plugin-polyfill-corejs2@npm:^0.3.3": + version: 0.3.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" dependencies: - "@babel/compat-data": ^7.13.11 - "@babel/helper-define-polyfill-provider": ^0.3.1 + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.3.3 semver: ^6.1.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ca873f14ccd6d2942013345a956de8165d0913556ec29756a748157140f5312f79eed487674e0ca562285880f05829b3712d72e1e4b412c2ce46bd6a50b4b975 + checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.5.2": - version: 0.5.2 - resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" +"babel-plugin-polyfill-corejs3@npm:^0.6.0": + version: 0.6.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.1 - core-js-compat: ^3.21.0 + "@babel/helper-define-polyfill-provider": ^0.3.3 + core-js-compat: ^3.25.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2f3184c73f80f00ac876a5ebcad945fd8d2ae70e5f85b7ab6cc3bc69bc74025f4f7070de7abbb2a7274c78e130bd34fc13f4c85342da28205930364a1ef0aa21 + checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.3.1": - version: 0.3.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" +"babel-plugin-polyfill-regenerator@npm:^0.4.1": + version: 0.4.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.1 + "@babel/helper-define-polyfill-provider": ^0.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f1473df7b700d6795ca41301b1e65a0aff15ce6c1463fc0ce2cf0c821114b0330920f59d4cebf52976363ee817ba29ad2758544a4661a724b08191080b9fe1da + checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c languageName: node linkType: hard @@ -17423,8 +17986,8 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.0 - resolution: "babel-preset-current-node-syntax@npm:1.0.0" + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 @@ -17440,7 +18003,7 @@ __metadata: "@babel/plugin-syntax-top-level-await": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 05c193dcf11eae66bd43621d49e346c0b94ba18a9d193a612a36cef30732ac5f62092312de76140400551dd13c457a8e79c96ebafb445cc491d993f7ccb9a9de + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 languageName: node linkType: hard @@ -17481,15 +18044,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.4.3": - version: 29.4.3 - resolution: "babel-preset-jest@npm:29.4.3" +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" dependencies: - babel-plugin-jest-hoist: ^29.4.3 + babel-plugin-jest-hoist: ^29.5.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad languageName: node linkType: hard @@ -17532,9 +18095,9 @@ __metadata: linkType: hard "bail@npm:^2.0.0": - version: 2.0.1 - resolution: "bail@npm:2.0.1" - checksum: 5e80e3d71c52f134bf51e9e89570c4e81e50e9ace0126954e4594699cafdf01136535bedf36780ef77802c88be3d3cfb0d0f83495d8d7ddf90e948e4fbaf99c3 + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 languageName: node linkType: hard @@ -17591,10 +18154,10 @@ __metadata: languageName: node linkType: hard -"before-after-hook@npm:^2.1.0, before-after-hook@npm:^2.2.0": - version: 2.2.2 - resolution: "before-after-hook@npm:2.2.2" - checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: a1a2430976d9bdab4cd89cb50d27fa86b19e2b41812bf1315923b0cba03371ebca99449809226425dd3bcef20e010db61abdaff549278e111d6480034bebae87 languageName: node linkType: hard @@ -17638,30 +18201,30 @@ __metadata: linkType: hard "big.js@npm:^6.1.1": - version: 6.2.0 - resolution: "big.js@npm:6.2.0" - checksum: 42bcbf0be703c4ae8669c969d0e108f9e1730f20e85bd779e31f7a92d28f6b3e87de96e25ef8657edc0b5dc945a0f66c184ec2654276b86f49e4e9ba025f131a + version: 6.2.1 + resolution: "big.js@npm:6.2.1" + checksum: 0b234a2fd56c52bed2798ed2020bcab6fef5e9523b99a05406ad071d1aed6ee97ada9fb8de9576092da74c68825c276e19015743b8d1baea269b60a5c666b0cd languageName: node linkType: hard "bignumber.js@npm:^9.0.0": - version: 9.0.1 - resolution: "bignumber.js@npm:9.0.1" - checksum: 6e72f6069d9db32fc8d27561164de9f811b15f9144be61f323d8b36150a239eea50c92e20ba38af2ba5e717af10b8ef12db8f9948fe2ff02bf17ede5239d15d3 + version: 9.1.1 + resolution: "bignumber.js@npm:9.1.1" + checksum: ad243b7e2f9120b112d670bb3d674128f0bd2ca1745b0a6c9df0433bd2c0252c43e6315d944c2ac07b4c639e7496b425e46842773cf89c6a2dcd4f31e5c4b11e languageName: node linkType: hard "bin-links@npm:^3.0.0": - version: 3.0.0 - resolution: "bin-links@npm:3.0.0" + version: 3.0.3 + resolution: "bin-links@npm:3.0.3" dependencies: - cmd-shim: ^4.0.1 + cmd-shim: ^5.0.0 mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^1.0.0 - read-cmd-shim: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + read-cmd-shim: ^3.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 - checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 + checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 languageName: node linkType: hard @@ -17695,10 +18258,10 @@ __metadata: languageName: node linkType: hard -"bintrees@npm:1.0.1": - version: 1.0.1 - resolution: "bintrees@npm:1.0.1" - checksum: 71d00ce450ee7ad080a3c86ae5f05fac841bdf95c0d78f3b3bbf8f754c19d7cb732f0f9213a46ed27cbec47eb124ffe2b686bef870718a4b9918c23210b55c73 +"bintrees@npm:1.0.2": + version: 1.0.2 + resolution: "bintrees@npm:1.0.2" + checksum: 56a52b7d3634e30002b1eda740d2517a22fa8e9e2eb088e919f37c030a0ed86e364ab59e472fc770fc8751308054bb1c892979d150e11d9e11ac33bcc1b5d16e languageName: node linkType: hard @@ -17727,13 +18290,20 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.1.1, bn.js@npm:^4.11.9": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard +"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + "body-parser@npm:1.20.1": version: 1.20.1 resolution: "body-parser@npm:1.20.1" @@ -17775,14 +18345,14 @@ __metadata: linkType: hard "bonjour-service@npm:^1.0.11": - version: 1.0.11 - resolution: "bonjour-service@npm:1.0.11" + version: 1.1.0 + resolution: "bonjour-service@npm:1.1.0" dependencies: array-flatten: ^2.1.2 dns-equal: ^1.0.0 fast-deep-equal: ^3.1.3 - multicast-dns: ^7.2.4 - checksum: b6093a856de9bc303551f1639945318e93782d3c40f03e38def3e2f079f478afd5385cf46538ade86f07205ac4b5f059105832b01eb9ce142fc69d27c006982f + multicast-dns: ^7.2.5 + checksum: c0cdf6f6438ef4873ffd17768a9e62300ca30ac2bc3437bcfb6c75a3efd70ad80418c38ec19af2f5fe3a9f1dee725b83ff8e0c4a473b1b9f1718a39033b34cbf languageName: node linkType: hard @@ -17842,13 +18412,6 @@ __metadata: languageName: node linkType: hard -"brcast@npm:^3.0.1": - version: 3.0.2 - resolution: "brcast@npm:3.0.2" - checksum: 7abae42088c6ffad9ff9e0fc756607a1764e299d737b3007fa49a73a38b3fda1e51362713f645db7991878ca388de94942011188450324c3debd08509315fa94 - languageName: node - linkType: hard - "breakword@npm:^1.0.5": version: 1.0.5 resolution: "breakword@npm:1.0.5" @@ -17916,28 +18479,30 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0": - version: 4.0.1 - resolution: "browserify-rsa@npm:4.0.1" +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" dependencies: - bn.js: ^4.1.0 + bn.js: ^5.0.0 randombytes: ^2.0.1 - checksum: e5d8406e65f8e9a2e038f6fa0cb30108269a1ab33c1563ddc78fb0fff1a43ea21d44bd3dcd01a783683f60dcbc4b58c63120a11f6d09939e3f84af378e6caef8 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 languageName: node linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.0.4 - resolution: "browserify-sign@npm:4.0.4" + version: 4.2.1 + resolution: "browserify-sign@npm:4.2.1" dependencies: - bn.js: ^4.1.1 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.2 - elliptic: ^6.0.0 - inherits: ^2.0.1 - parse-asn1: ^5.0.0 - checksum: b1e6f6383f6abbbd5e0f4eb0161cd211cb79af636dd14b5f038db7f3a309b3e026e7e8d7428e3f072a9baace57051a2f45cff311f3b26a901e8be921c3dab847 + bn.js: ^5.1.1 + browserify-rsa: ^4.0.1 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + elliptic: ^6.5.3 + inherits: ^2.0.4 + parse-asn1: ^5.1.5 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 languageName: node linkType: hard @@ -17950,17 +18515,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.0, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.21.2, browserslist@npm:^4.21.3": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5": + version: 4.21.5 + resolution: "browserslist@npm:4.21.5" dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 + caniuse-lite: ^1.0.30001449 + electron-to-chromium: ^1.4.284 + node-releases: ^2.0.8 + update-browserslist-db: ^1.0.10 bin: browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 languageName: node linkType: hard @@ -18056,10 +18621,17 @@ __metadata: languageName: node linkType: hard -"builtin-modules@npm:^3.0.0": - version: 3.2.0 - resolution: "builtin-modules@npm:3.2.0" - checksum: 0265aa1ba78e1a16f4e18668d815cb43fb364e6a6b8aa9189c6f44c7b894a551a43b323c40206959d2d4b2568c1f2805607ad6c88adc306a776ce6904cca6715 +"buildcheck@npm:0.0.3": + version: 0.0.3 + resolution: "buildcheck@npm:0.0.3" + checksum: baf30605c56e80c2ca0502e40e18f2ebc7075bb4a861c941c0b36cd468b27957ed11a62248003ce99b9e5f91a7dfa859b30aad4fa50f0090c77a6f596ba20e6d + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d languageName: node linkType: hard @@ -18134,8 +18706,8 @@ __metadata: linkType: hard "cacache@npm:^16.1.0": - version: 16.1.1 - resolution: "cacache@npm:16.1.1" + version: 16.1.3 + resolution: "cacache@npm:16.1.3" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -18154,15 +18726,15 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 languageName: node linkType: hard "cacheable-lookup@npm:^5.0.3": - version: 5.0.3 - resolution: "cacheable-lookup@npm:5.0.3" - checksum: ad5a6d5cd1630ab03b63741b610f3ed71593879b3de9ba43e6767129b2cbb8303fe24af4ec808584531a85c5605a614902cfdc41f5b6200d8c5f029d6b90c430 + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d languageName: node linkType: hard @@ -18199,13 +18771,13 @@ __metadata: linkType: hard "call-me-maybe@npm:^1.0.1": - version: 1.0.1 - resolution: "call-me-maybe@npm:1.0.1" - checksum: d19e9d6ac2c6a83fb1215718b64c5e233f688ebebb603bdfe4af59cde952df1f2b648530fab555bf290ea910d69d7d9665ebc916e871e0e194f47c2e48e4886b + version: 1.0.2 + resolution: "call-me-maybe@npm:1.0.2" + checksum: 42ff2d0bed5b207e3f0122589162eaaa47ba618f79ad2382fe0ba14d9e49fbf901099a6227440acc5946f86a4953e8aa2d242b330b0a5de4d090bb18f8935cae languageName: node linkType: hard -"callsites@npm:^3.0.0": +"callsites@npm:^3.0.0, callsites@npm:^3.1.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 @@ -18274,9 +18846,9 @@ __metadata: linkType: hard "camelize@npm:^1.0.0": - version: 1.0.0 - resolution: "camelize@npm:1.0.0" - checksum: 769f8d10071f57b974d9a51dc02f589dd7fb07ea6a7ecde1a57b52ae68657ba61fe85c60d50661b76c7dbb76b6474fbfd3356aee33cf5f025cd7fd6fb2811b73 + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 languageName: node linkType: hard @@ -18292,10 +18864,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001407 - resolution: "caniuse-lite@npm:1.0.30001407" - checksum: e1c449d22f120a708accc956c1780f1da01af6c226cb6a324e531dc9f26f53075bff98e6c9cfce806157cdeede459aa8de03a3407b05f71d292a57b2910018b1 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001449": + version: 1.0.30001468 + resolution: "caniuse-lite@npm:1.0.30001468" + checksum: 39f23ce5af90fee37004bee334cd809a20f8aa46ef08244f75e33d2e32b53cfebee205018769a2712937fa05ea5a1c0249175771ffee561acd1e8e05c54f9a67 languageName: node linkType: hard @@ -18339,9 +18911,9 @@ __metadata: linkType: hard "ccount@npm:^2.0.0": - version: 2.0.0 - resolution: "ccount@npm:2.0.0" - checksum: b238baa1415f259264a8b5fa552929ae1dc46cb46bd94a79deb29d7a814cc4cc36500b24184c38a9f0332d19c6acbb386d5bb5f4f03396140be92edd7294db1c + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 languageName: node linkType: hard @@ -18431,13 +19003,6 @@ __metadata: languageName: node linkType: hard -"change-emitter@npm:^0.1.2": - version: 0.1.6 - resolution: "change-emitter@npm:0.1.6" - checksum: 0ed494ba9901ca56ea6f942668fd294465c334a9a0981dca96da5aea5e387c0023a630d7c658c1b532d203db54c928ddca2564e434b4a8b7f6d39155d09db255 - languageName: node - linkType: hard - "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -18461,13 +19026,6 @@ __metadata: languageName: node linkType: hard -"character-entities-legacy@npm:^2.0.0": - version: 2.0.0 - resolution: "character-entities-legacy@npm:2.0.0" - checksum: c8941cc75d2a82f36adadc7eaa0116da13ba7600ef2c689c1932ed7b58380e84e2d7237c8795a30017623d3d889c9840aa3327076754af4a329f3030b4cc431e - languageName: node - linkType: hard - "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -18476,9 +19034,9 @@ __metadata: linkType: hard "character-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "character-entities@npm:2.0.0" - checksum: bacbcacab87fcd61a4f226d9079eb1a582092d1fca581e72a6997d8b0d498225a75413e4401e5fb310f1e8be7bfa8e1485a96f9f12de31178c637c7195fcc78e + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def languageName: node linkType: hard @@ -18489,13 +19047,6 @@ __metadata: languageName: node linkType: hard -"character-reference-invalid@npm:^2.0.0": - version: 2.0.0 - resolution: "character-reference-invalid@npm:2.0.0" - checksum: 0d33a2eb4a7e7b57ed171175faefb0d53434e92203bb9a3e66051cf55de299efe263f39e8c2611733cde100e9229193c1a186148570ba336d5ab0cf5993d6ed5 - languageName: node - linkType: hard - "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -18511,9 +19062,9 @@ __metadata: linkType: hard "check-types@npm:^11.1.1": - version: 11.1.2 - resolution: "check-types@npm:11.1.2" - checksum: 6c339a5dfe326e34a5275016c7f9464665405cd79007c057852acd677d265ddfe36236ad5567bd1e601ea88fa78bf1f882b6bc3dc7c5616c26f6b54b2c0ef4fc + version: 11.2.2 + resolution: "check-types@npm:11.2.2" + checksum: 61ed60d59e3397c8cf694f20edf73d0061cd6a905754efdec2ccdceafbd390cb09717bab855f9eba921d36278f84c86fe20f7e731a384e9803bc469c09153831 languageName: node linkType: hard @@ -18551,11 +19102,9 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.2 - resolution: "chrome-trace-event@npm:1.0.2" - dependencies: - tslib: ^1.9.0 - checksum: a104606fd07e6191848fa15d4031ac41c1715d025074574bdbb27d998a20d75d860a2060a5aca840bfbf97ec2ef6b72df9b387ed4109a8fc6eb5c362477c9294 + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 languageName: node linkType: hard @@ -18567,9 +19116,9 @@ __metadata: linkType: hard "ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": - version: 3.3.2 - resolution: "ci-info@npm:3.3.2" - checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 + version: 3.8.0 + resolution: "ci-info@npm:3.8.0" + checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 languageName: node linkType: hard @@ -18600,18 +19149,18 @@ __metadata: linkType: hard "classnames@npm:*, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": - version: 2.3.1 - resolution: "classnames@npm:2.3.1" - checksum: 14db8889d56c267a591f08b0834989fe542d47fac659af5a539e110cc4266694e8de86e4e3bbd271157dbd831361310a8293e0167141e80b0f03a0f175c80960 + version: 2.3.2 + resolution: "classnames@npm:2.3.2" + checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e languageName: node linkType: hard "clean-css@npm:^5.2.2": - version: 5.2.2 - resolution: "clean-css@npm:5.2.2" + version: 5.3.2 + resolution: "clean-css@npm:5.3.2" dependencies: source-map: ~0.6.0 - checksum: 10855820829b8b6ea94e462313fdc177b297aca5c7870a969591549d6a766824f912b5e58773bd345b2a7effae863ab492258b5a77a40029fba6d11d861cbee3 + checksum: 8787b281acc9878f309b5f835d410085deedfd4e126472666773040a6a8a72f472a1d24185947d23b87b1c419bf2c5ed429395d5c5ff8279c98b05d8011e9758 languageName: node linkType: hard @@ -18638,6 +19187,16 @@ __metadata: languageName: node linkType: hard +"clear-module@npm:^4.1.2": + version: 4.1.2 + resolution: "clear-module@npm:4.1.2" + dependencies: + parent-module: ^2.0.0 + resolve-from: ^5.0.0 + checksum: 4931f0c461f5d7b9b79f62c2d1bc31c37f7f1d33b4e95eef7080a83955c0374f4c180f5a96cc4d63bbefc64a9aa5d12b155641109e8e489dfa50fd5820e5101f + languageName: node + linkType: hard + "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -18648,31 +19207,31 @@ __metadata: linkType: hard "cli-spinners@npm:^2.5.0": - version: 2.5.0 - resolution: "cli-spinners@npm:2.5.0" - checksum: 9cd7c3e22f9243c2b8436bd405d4c7aa5c7b432112fed0c9b7e1d773f8d12fb30e15083ed45474b28d5e8de490d4299dc8a213c327931a25cc998a44b4a2d747 + version: 2.7.0 + resolution: "cli-spinners@npm:2.7.0" + checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f languageName: node linkType: hard "cli-table3@npm:~0.6.1": - version: 0.6.1 - resolution: "cli-table3@npm:0.6.1" + version: 0.6.3 + resolution: "cli-table3@npm:0.6.3" dependencies: - colors: 1.4.0 + "@colors/colors": 1.5.0 string-width: ^4.2.0 dependenciesMeta: - colors: + "@colors/colors": optional: true - checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 + checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c languageName: node linkType: hard "cli-table@npm:^0.3.1": - version: 0.3.6 - resolution: "cli-table@npm:0.3.6" + version: 0.3.11 + resolution: "cli-table@npm:0.3.11" dependencies: colors: 1.0.3 - checksum: b0cd08578c810240920438cc2b3ffb4b4f5106b29f3362707f1d8cfc0c0440ad2afb70b96e30ce37f72f0ffe1e844ae7341dde4df17d51ad345eb186a5903af2 + checksum: 59fb61f992ac9bc8610ed98c72bf7f5d396c5afb42926b6747b46b0f8bb98a0dfa097998e77542ac334c1eb7c18dbf4f104d5783493273c5ec4c34084aa7c663 languageName: node linkType: hard @@ -18703,17 +19262,6 @@ __metadata: languageName: node linkType: hard -"clipboard@npm:^2.0.4": - version: 2.0.11 - resolution: "clipboard@npm:2.0.11" - dependencies: - good-listener: ^1.2.2 - select: ^1.1.2 - tiny-emitter: ^2.0.0 - checksum: 413055a6038e43898e0e895216b58ed54fbf386f091cb00188875ef35b186cefbd258acdf4cb4b0ac87cbc00de936f41b45dde9fe1fd1a57f7babb28363b8748 - languageName: node - linkType: hard - "cliui@npm:^3.2.0": version: 3.2.0 resolution: "cliui@npm:3.2.0" @@ -18747,6 +19295,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + "clone-buffer@npm:^1.0.0": version: 1.0.0 resolution: "clone-buffer@npm:1.0.0" @@ -18766,11 +19325,11 @@ __metadata: linkType: hard "clone-response@npm:^1.0.2": - version: 1.0.2 - resolution: "clone-response@npm:1.0.2" + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" dependencies: mimic-response: ^1.0.0 - checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e languageName: node linkType: hard @@ -18806,26 +19365,26 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2, clsx@npm:^1.0.4": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 +"clsx@npm:^1.0.2, clsx@npm:^1.0.4, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 languageName: node linkType: hard "cluster-key-slot@npm:^1.1.0": - version: 1.1.0 - resolution: "cluster-key-slot@npm:1.1.0" - checksum: fc953c75209b1ef9088081bab4e40a0b2586491c974ab93460569c014515ca5a2e31c043f185285e177007162fc353d07836d98f570c171dbe055775430e495b + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 languageName: node linkType: hard -"cmd-shim@npm:^4.0.1": - version: 4.1.0 - resolution: "cmd-shim@npm:4.1.0" +"cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" dependencies: mkdirp-infer-owner: ^2.0.0 - checksum: d25bb57a8accab681bcfc632e085573b9395cdc60aed8d0ce479f988f9ced16720c89732aef81020140e43fd223b6573c22402e5a1c0cbd0149443104df88d68 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb languageName: node linkType: hard @@ -18871,15 +19430,15 @@ __metadata: linkType: hard "codemirror@npm:^5.65.3": - version: 5.65.3 - resolution: "codemirror@npm:5.65.3" - checksum: 89bc7f99c15a021bfd3671a943e58589cd5108f08738882d79458a4f432a05ff1d50bb664e7d0c02c639ec98241c9840f1fd9de5f458a7b0e15628892839aef0 + version: 5.65.12 + resolution: "codemirror@npm:5.65.12" + checksum: 6fca4434ef781b0c393c0c24766c53a9a21e7bc5b48b22414032aa458574be5e6ec5d4d95e8d179769937c6c39a54564af8aebbf7f9dc289165bbcd0ae765be7 languageName: node linkType: hard "codemirror@npm:^6.0.0": - version: 6.0.0 - resolution: "codemirror@npm:6.0.0" + version: 6.0.1 + resolution: "codemirror@npm:6.0.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -18888,7 +19447,7 @@ __metadata: "@codemirror/search": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 - checksum: 42fb2b5ac5d4b8616a733de5efd7913764c1d13dcc27f732af5ed5e98f657a53ab5549437b53d73ed89d004423141ee65612a5e54c451538ef6d75afed4cd3e2 + checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef languageName: node linkType: hard @@ -18905,9 +19464,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.0 - resolution: "collect-v8-coverage@npm:1.0.0" - checksum: 99d6059eb0e04bf792e27824d43d1139ede28914b7f55ddedd9c43594926221579fa6925ecc7e2f47dec14f5199e5ea3afbfc1da9a32ad542f859022d57f9d80 + version: 1.0.1 + resolution: "collect-v8-coverage@npm:1.0.1" + checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 languageName: node linkType: hard @@ -18918,7 +19477,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -18950,17 +19509,17 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.5.2, color-string@npm:^1.9.0": - version: 1.9.0 - resolution: "color-string@npm:1.9.0" +"color-string@npm:^1.6.0, color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 - checksum: 93c6678b847f8cfa47d19677fd19e1d4b19d7a33f100644400357c298266080b5bca64e5f874fa8ac8cc0aa0606ad44f7a838b4e6fd05e6affea190a68555bb4 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 languageName: node linkType: hard -"color-support@npm:^1.1.2": +"color-support@npm:^1.1.2, color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: @@ -18969,13 +19528,13 @@ __metadata: languageName: node linkType: hard -"color@npm:3.0.x": - version: 3.0.0 - resolution: "color@npm:3.0.0" +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" dependencies: - color-convert: ^1.9.1 - color-string: ^1.5.2 - checksum: 273fe5d4c2a322dbc0e184ef6c891cbefefa11af7c6a8ed6001ff6986af747038cf3258bd4f4b715415f287c556efc8d1f0368bc02240877610ae1d427887537 + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 languageName: node linkType: hard @@ -18990,9 +19549,9 @@ __metadata: linkType: hard "colord@npm:^2.9.1": - version: 2.9.1 - resolution: "colord@npm:2.9.1" - checksum: c47ff86c6ffc28ac55812c64fe35563809ccf860687506e4127137dcd27595b49610b85dcf3551b39a1c19af6a1a41ed41a42043ef6e795f787f29e4e49b4014 + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 languageName: node linkType: hard @@ -19010,13 +19569,6 @@ __metadata: languageName: node linkType: hard -"colors@npm:1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec - languageName: node - linkType: hard - "colors@npm:~1.2.1": version: 1.2.5 resolution: "colors@npm:1.2.5" @@ -19025,12 +19577,12 @@ __metadata: linkType: hard "colorspace@npm:1.1.x": - version: 1.1.2 - resolution: "colorspace@npm:1.1.2" + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" dependencies: - color: 3.0.x + color: ^3.1.3 text-hex: 1.0.x - checksum: a959ec1669176aa72185067b7d04dae1cef2698456e1a452a035ce8adcac95673fbb1547e3240903355bcbaa67e031cca0b8b4f7d42c256b3dd94dcead8e1405 + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 languageName: node linkType: hard @@ -19051,9 +19603,9 @@ __metadata: linkType: hard "comma-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "comma-separated-tokens@npm:2.0.2" - checksum: 8fa68ff2605233571536a802a7c712b0c766e0c5088e067be72740054e84d040865eea945c984924ae84932bcc3e25a99f71601220b438e875b5f42b87277767 + version: 2.0.3 + resolution: "comma-separated-tokens@npm:2.0.3" + checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d languageName: node linkType: hard @@ -19085,7 +19637,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.7.1": +"commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -19113,13 +19665,26 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.1.0, commander@npm:^9.5.0": +"commander@npm:^9.1.0, commander@npm:^9.4.1, commander@npm:^9.5.0": version: 9.5.0 resolution: "commander@npm:9.5.0" checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade languageName: node linkType: hard +"comment-json@npm:^4.2.3": + version: 4.2.3 + resolution: "comment-json@npm:4.2.3" + dependencies: + array-timsort: ^1.0.3 + core-util-is: ^1.0.3 + esprima: ^4.0.1 + has-own-prop: ^2.0.0 + repeat-string: ^1.6.1 + checksum: 7f8d26266b0d49de9661f6365cbcc373fee4f4d0f422a203dfb17ad8f3d84c5be5ded444874935a197cd03cff297c53fe48910256cb4171cb2e52a3e6b9d317c + languageName: node + linkType: hard + "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -19148,9 +19713,9 @@ __metadata: languageName: node linkType: hard -"commonmark@npm:^0.29.0": - version: 0.29.3 - resolution: "commonmark@npm:0.29.3" +"commonmark@npm:0.30.0": + version: 0.30.0 + resolution: "commonmark@npm:0.30.0" dependencies: entities: ~2.0 mdurl: ~1.0.1 @@ -19158,7 +19723,7 @@ __metadata: string.prototype.repeat: ^0.2.0 bin: commonmark: bin/commonmark - checksum: 892b603aeffea6a04770ce24979fc4024d2d92ca6d5146353398faab15be980af6802f3d7b35357400b870e752a9f80b766fed5c09ca063a2951c8c26013876c + checksum: 39f05d6d0f471aa345487d45199809233f29f857630780fde23661356f1f31970f67328934895d3062e01524674785981837c3b6f4303b63d8c9bff8fa99ec83 languageName: node linkType: hard @@ -19177,14 +19742,14 @@ __metadata: linkType: hard "compress-commons@npm:^4.1.0": - version: 4.1.0 - resolution: "compress-commons@npm:4.1.0" + version: 4.1.1 + resolution: "compress-commons@npm:4.1.1" dependencies: buffer-crc32: ^0.2.13 - crc32-stream: ^4.0.1 + crc32-stream: ^4.0.2 normalize-path: ^3.0.0 readable-stream: ^3.6.0 - checksum: 3348bea7a1cce04b430f6ec3125eebbc0e23bd8dd14d30ec2fb113d3733f95ae6b12d5b33ad794e7ceab70f57e38a6c2642d96a64bc83e490a3ddae8db469949 + checksum: 0176483211a7304a4a8aa52dbcc149a4c9181ac8a04bfbcc3d1a379174bf5fa56c3b15cec19e5ae3d31f1b1ce35ebb275b792b867000c77bac7162ce4e0ca268 languageName: node linkType: hard @@ -19301,6 +19866,20 @@ __metadata: languageName: node linkType: hard +"configstore@npm:^5.0.1": + version: 5.0.1 + resolution: "configstore@npm:5.0.1" + dependencies: + dot-prop: ^5.2.0 + graceful-fs: ^4.1.2 + make-dir: ^3.0.0 + unique-string: ^2.0.0 + write-file-atomic: ^3.0.0 + xdg-basedir: ^4.0.0 + checksum: 60ef65d493b63f96e14b11ba7ec072fdbf3d40110a94fb7199d1c287761bdea5c5244e76b2596325f30c1b652213aa75de96ea20afd4a5f82065e61ea090988e + languageName: node + linkType: hard + "connect-history-api-fallback@npm:^2.0.0": version: 2.0.0 resolution: "connect-history-api-fallback@npm:2.0.0" @@ -19380,11 +19959,9 @@ __metadata: linkType: hard "convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard @@ -19433,7 +20010,7 @@ __metadata: languageName: node linkType: hard -"cookiejar@npm:^2.1.3": +"cookiejar@npm:^2.1.4": version: 2.1.4 resolution: "cookiejar@npm:2.1.4" checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b @@ -19441,35 +20018,27 @@ __metadata: linkType: hard "copy-to-clipboard@npm:^3.2.0, copy-to-clipboard@npm:^3.3.1": - version: 3.3.1 - resolution: "copy-to-clipboard@npm:3.3.1" + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" dependencies: toggle-selection: ^1.0.6 - checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 + checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf languageName: node linkType: hard -"core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": - version: 3.23.5 - resolution: "core-js-compat@npm:3.23.5" +"core-js-compat@npm:^3.25.1": + version: 3.29.1 + resolution: "core-js-compat@npm:3.29.1" dependencies: - browserslist: ^4.21.2 - semver: 7.0.0 - checksum: c2398a39239a782ba1b9531a80b25f8d9fb8d98de8bf980f32140e9be3d2852afb797517afdf3a15f9319bcd25d594b3d3d2a500dce7c338532532565c9e83cb + browserslist: ^4.21.5 + checksum: 7260f6bbaa98836cda09a3b61aa721149d3ae95040302fb3b27eb153ae9bbddc8dee5249e72004cdc9552532029de4d50a5b2b066c37414421d2929d6091b18f languageName: node linkType: hard -"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.6.5": - version: 3.25.5 - resolution: "core-js-pure@npm:3.25.5" - checksum: e48799a8ab28f00ef3db18377142ff2c578574ab2b18ebddde6cbf12823e0181a57c80e3caa6046ce2a2e439d603a252be767583ddc54248e3d1060bc5012127 - languageName: node - linkType: hard - -"core-js@npm:^1.0.0": - version: 1.2.7 - resolution: "core-js@npm:1.2.7" - checksum: 0b76371bfa98708351cde580f9287e2360d2209920e738ae950ae74ad08639a2e063541020bf666c28778956fc356ed9fe56d962129c88a87a6a4a0612526c75 +"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5": + version: 3.29.1 + resolution: "core-js-pure@npm:3.29.1" + checksum: 2ed91f79c13f23c1b70c31edf4224aca99a9ac3db38c79127798c294a36faac0ea0b21070218621741057cf84b3dadff595475580c1fac3a43e02cae575dc27b languageName: node linkType: hard @@ -19487,13 +20056,20 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": +"core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard +"core-util-is@npm:^1.0.3, core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + "cors@npm:^2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" @@ -19530,61 +20106,59 @@ __metadata: linkType: hard "cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": - version: 7.0.1 - resolution: "cosmiconfig@npm:7.0.1" + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" dependencies: "@types/parse-json": ^4.0.0 import-fresh: ^3.2.1 parse-json: ^5.0.0 path-type: ^4.0.0 yaml: ^1.10.0 - checksum: 4be63e7117955fd88333d7460e4c466a90f556df6ef34efd59034d2463484e339666c41f02b523d574a797ec61f4a91918c5b89a316db2ea2f834e0d2d09465b + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f languageName: node linkType: hard -"cpu-features@npm:0.0.2": - version: 0.0.2 - resolution: "cpu-features@npm:0.0.2" +"cpu-features@npm:~0.0.4": + version: 0.0.4 + resolution: "cpu-features@npm:0.0.4" dependencies: - nan: ^2.14.1 + buildcheck: 0.0.3 + nan: ^2.15.0 node-gyp: latest - checksum: 15177f9a2d465e4d84390f902c977b34f237dadb29fd8553853b13d906ffe5f15be9f091c72db4f34c71412d5ff4e0e4edf04caebc875b02d1d7ecfce2963299 + checksum: a20d58e41e63182b34753dfe23bd1d967944ec13d84b70849b5d334fb4a558b7e71e7f955ed86c8e75dd65b5c5b882f1c494174d342cb6d8a062d77f79d39596 languageName: node linkType: hard "crc-32@npm:^1.2.0": - version: 1.2.0 - resolution: "crc-32@npm:1.2.0" - dependencies: - exit-on-epipe: ~1.0.1 - printj: ~1.1.0 + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" bin: - crc32: ./bin/crc32.njs - checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e + crc32: bin/crc32.njs + checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 languageName: node linkType: hard -"crc32-stream@npm:^4.0.1": - version: 4.0.1 - resolution: "crc32-stream@npm:4.0.1" +"crc32-stream@npm:^4.0.2": + version: 4.0.2 + resolution: "crc32-stream@npm:4.0.2" dependencies: crc-32: ^1.2.0 readable-stream: ^3.4.0 - checksum: 39c2e0d5d7a3388e85ccf27ef0b30475f98902d34e7a048decc1665ff67f98f17f850059b28942fdf5582cb836eaa5184453ec35a6ea2442ce3bc10c8f1ee8a4 + checksum: 1099559283b86e8a55390228b57ff4d57a74cac6aa8086aa4730f84317c9f93e914aeece115352f2d706a9df7ed75327ffacd86cfe23f040aef821231b528e76 languageName: node linkType: hard "create-ecdh@npm:^4.0.0": - version: 4.0.3 - resolution: "create-ecdh@npm:4.0.3" + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" dependencies: bn.js: ^4.1.0 - elliptic: ^6.0.0 - checksum: 0678955daf937c188c69b2a601ebcbe4ab02ca3c1aa04f62d5fb5511430d0141802207eabf9aa100351920ea89bfcbe53ba8bd4c013a1a3453fd807549a5ede2 + elliptic: ^6.5.3 + checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -19597,7 +20171,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.2, create-hmac@npm:^1.1.4": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -19655,7 +20229,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": +"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -19718,6 +20292,136 @@ __metadata: languageName: node linkType: hard +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"cspell-dictionary@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-dictionary@npm:6.30.2" + dependencies: + "@cspell/cspell-pipe": 6.30.2 + "@cspell/cspell-types": 6.30.2 + cspell-trie-lib: 6.30.2 + fast-equals: ^4.0.3 + gensequence: ^5.0.2 + checksum: 76f8d9aa731ff6fcdb62e71d529826484dcbfda6ce1beed459ae4967a719b2e163e89fca15f152ae0b3f43300f12ae1eec6758aebd533712a54507c97bfa7cf5 + languageName: node + linkType: hard + +"cspell-gitignore@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-gitignore@npm:6.30.2" + dependencies: + cspell-glob: 6.30.2 + find-up: ^5.0.0 + bin: + cspell-gitignore: bin.mjs + checksum: 7b732a26841ba7a73b8d871ebf97a248d1eb371c2ecf2c8c89f417cf7c2fb2d46e75c67d7a96ccdb1b9649f175647c78a0dc0c456b74f61595d2b25f7af19641 + languageName: node + linkType: hard + +"cspell-glob@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-glob@npm:6.30.2" + dependencies: + micromatch: ^4.0.5 + checksum: ae4934d7f8a63a168416d7697183840b5492bafda95a0abb476df900b671b4c75ee1d86c769665ff72c6b17b431c907fe109e26c7a1bc58f56d0028ea5bd963d + languageName: node + linkType: hard + +"cspell-grammar@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-grammar@npm:6.30.2" + dependencies: + "@cspell/cspell-pipe": 6.30.2 + "@cspell/cspell-types": 6.30.2 + bin: + cspell-grammar: bin.mjs + checksum: d5c4f11d915beda4236ad54c0954d3df5d0224c84cc19e5104a1a6b1cdfb41ed88fb6a7b8c4b3f5bb1159129c73a007d41fa92ffe4a0e3333ae53ec187b2bcb0 + languageName: node + linkType: hard + +"cspell-io@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-io@npm:6.30.2" + dependencies: + "@cspell/cspell-service-bus": 6.30.2 + node-fetch: ^2.6.9 + checksum: 71ed9eeddb3064f7fe160a0036c20d64e6d94567726175fc92fc2b80576066b2b39f7aecf5649c4bf6d23e4527602c23512f8054567fc0ed7e6e274f27b05793 + languageName: node + linkType: hard + +"cspell-lib@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-lib@npm:6.30.2" + dependencies: + "@cspell/cspell-bundled-dicts": 6.30.2 + "@cspell/cspell-pipe": 6.30.2 + "@cspell/cspell-types": 6.30.2 + "@cspell/strong-weak-map": 6.30.2 + clear-module: ^4.1.2 + comment-json: ^4.2.3 + configstore: ^5.0.1 + cosmiconfig: 8.0.0 + cspell-dictionary: 6.30.2 + cspell-glob: 6.30.2 + cspell-grammar: 6.30.2 + cspell-io: 6.30.2 + cspell-trie-lib: 6.30.2 + fast-equals: ^4.0.3 + find-up: ^5.0.0 + gensequence: ^5.0.2 + import-fresh: ^3.3.0 + resolve-from: ^5.0.0 + resolve-global: ^1.0.0 + vscode-languageserver-textdocument: ^1.0.8 + vscode-uri: ^3.0.7 + checksum: 2a5ffb328da2ed630f8027a972309c283f46a7778a0f1d090c564dff92b8ddb49c9e4636f9c1535df624d918802f792f30138673cfbac6de98bfba818f16b47a + languageName: node + linkType: hard + +"cspell-trie-lib@npm:6.30.2": + version: 6.30.2 + resolution: "cspell-trie-lib@npm:6.30.2" + dependencies: + "@cspell/cspell-pipe": 6.30.2 + "@cspell/cspell-types": 6.30.2 + gensequence: ^5.0.2 + checksum: e24ea590ed86ba6a7ef09fa048403eb10ca9e231f795d39c2ac5962319deeafd85ab645af7313388a5ee8ef5fc83ce23ff3f3cce11b2f4de1930fe31925d7cb8 + languageName: node + linkType: hard + +"cspell@npm:^6.2.3": + version: 6.30.2 + resolution: "cspell@npm:6.30.2" + dependencies: + "@cspell/cspell-pipe": 6.30.2 + "@cspell/dynamic-import": 6.30.2 + chalk: ^4.1.2 + commander: ^10.0.0 + cspell-gitignore: 6.30.2 + cspell-glob: 6.30.2 + cspell-io: 6.30.2 + cspell-lib: 6.30.2 + fast-glob: ^3.2.12 + fast-json-stable-stringify: ^2.1.0 + file-entry-cache: ^6.0.1 + get-stdin: ^8.0.0 + imurmurhash: ^0.1.4 + semver: ^7.3.8 + strip-ansi: ^6.0.1 + vscode-uri: ^3.0.7 + bin: + cspell: bin.js + cspell-esm: bin.mjs + checksum: e2065036e04526c2894f24d41901d8f368ad121a178df1ba8401c2889156688bc841381f1bad470180c83a8592f40e9dc66e00ce475976e45f63bb7be1d0189e + languageName: node + linkType: hard + "css-box-model@npm:^1.2.0": version: 1.2.1 resolution: "css-box-model@npm:1.2.1" @@ -19745,24 +20449,21 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.0.3": - version: 6.1.3 - resolution: "css-declaration-sorter@npm:6.1.3" - dependencies: - timsort: ^0.3.0 +"css-declaration-sorter@npm:^6.3.1": + version: 6.3.1 + resolution: "css-declaration-sorter@npm:6.3.1" peerDependencies: postcss: ^8.0.9 - checksum: 6fdacdce48e1351a8fd73472b7dfaae573ce7d4f5bba8385afc9c765d01055920b851d288228ecb0d535d163b22f8d7941e095b9da995956cd3309e41d1bffa2 + checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c languageName: node linkType: hard -"css-in-js-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "css-in-js-utils@npm:2.0.1" +"css-in-js-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "css-in-js-utils@npm:3.1.0" dependencies: - hyphenate-style-name: ^1.0.2 - isobject: ^3.0.1 - checksum: c9964c4708216954c468b69bbee2d971fd759ada4f40637b8ca4d3f79caba4818d0532a4f190ac560227c08742ad063ffec7a30afddc4d96b66a18c3a008f0d8 + hyphenate-style-name: ^1.0.3 + checksum: 066318e918c04a5e5bce46b38fe81052ea6ac051bcc6d3c369a1d59ceb1546cb2b6086901ab5d22be084122ee3732169996a3dfb04d3406eaee205af77aec61b languageName: node linkType: hard @@ -19785,26 +20486,26 @@ __metadata: linkType: hard "css-select@npm:^4.1.3": - version: 4.1.3 - resolution: "css-select@npm:4.1.3" + version: 4.3.0 + resolution: "css-select@npm:4.3.0" dependencies: boolbase: ^1.0.0 - css-what: ^5.0.0 - domhandler: ^4.2.0 - domutils: ^2.6.0 - nth-check: ^2.0.0 - checksum: 40928f1aa6c71faf36430e7f26bcbb8ab51d07b98b754caacb71906400a195df5e6c7020a94f2982f02e52027b9bd57c99419220cf7020968c3415f14e4be5f8 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 languageName: node linkType: hard "css-to-react-native@npm:^3.0.0": - version: 3.0.0 - resolution: "css-to-react-native@npm:3.0.0" + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" dependencies: camelize: ^1.0.0 css-color-keywords: ^1.0.0 postcss-value-parser: ^4.0.2 - checksum: 98a2e9d4fbe9cabc8b744dfdd5ec108396ce497a7b860912a95b299bd52517461281810fcb707965a021a8be39adca9587184a26fb4e926211391a1557aca3c1 + checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce languageName: node linkType: hard @@ -19825,15 +20526,6 @@ __metadata: languageName: node linkType: hard -"css-vendor@npm:^0.3.8": - version: 0.3.8 - resolution: "css-vendor@npm:0.3.8" - dependencies: - is-in-browser: ^1.0.2 - checksum: 0a2e0cd0d4adbfdb6236950e7f9697b8a9b294eb2ae7c95996a95d273d2a63316ce793cb4654ae048aa3c129327124d2a29aada9935a0c284f9cc341c2768c8a - languageName: node - linkType: hard - "css-vendor@npm:^2.0.8": version: 2.0.8 resolution: "css-vendor@npm:2.0.8" @@ -19844,10 +20536,10 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^5.0.0": - version: 5.1.0 - resolution: "css-what@npm:5.1.0" - checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 +"css-what@npm:^6.0.1": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe languageName: node linkType: hard @@ -19867,65 +20559,64 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^5.1.7": - version: 5.1.7 - resolution: "cssnano-preset-default@npm:5.1.7" +"cssnano-preset-default@npm:^5.2.14": + version: 5.2.14 + resolution: "cssnano-preset-default@npm:5.2.14" dependencies: - css-declaration-sorter: ^6.0.3 - cssnano-utils: ^2.0.1 - postcss-calc: ^8.0.0 - postcss-colormin: ^5.2.1 - postcss-convert-values: ^5.0.2 - postcss-discard-comments: ^5.0.1 - postcss-discard-duplicates: ^5.0.1 - postcss-discard-empty: ^5.0.1 - postcss-discard-overridden: ^5.0.1 - postcss-merge-longhand: ^5.0.4 - postcss-merge-rules: ^5.0.3 - postcss-minify-font-values: ^5.0.1 - postcss-minify-gradients: ^5.0.3 - postcss-minify-params: ^5.0.2 - postcss-minify-selectors: ^5.1.0 - postcss-normalize-charset: ^5.0.1 - postcss-normalize-display-values: ^5.0.1 - postcss-normalize-positions: ^5.0.1 - postcss-normalize-repeat-style: ^5.0.1 - postcss-normalize-string: ^5.0.1 - postcss-normalize-timing-functions: ^5.0.1 - postcss-normalize-unicode: ^5.0.1 - postcss-normalize-url: ^5.0.3 - postcss-normalize-whitespace: ^5.0.1 - postcss-ordered-values: ^5.0.2 - postcss-reduce-initial: ^5.0.1 - postcss-reduce-transforms: ^5.0.1 - postcss-svgo: ^5.0.3 - postcss-unique-selectors: ^5.0.2 + css-declaration-sorter: ^6.3.1 + cssnano-utils: ^3.1.0 + postcss-calc: ^8.2.3 + postcss-colormin: ^5.3.1 + postcss-convert-values: ^5.1.3 + postcss-discard-comments: ^5.1.2 + postcss-discard-duplicates: ^5.1.0 + postcss-discard-empty: ^5.1.1 + postcss-discard-overridden: ^5.1.0 + postcss-merge-longhand: ^5.1.7 + postcss-merge-rules: ^5.1.4 + postcss-minify-font-values: ^5.1.0 + postcss-minify-gradients: ^5.1.1 + postcss-minify-params: ^5.1.4 + postcss-minify-selectors: ^5.2.1 + postcss-normalize-charset: ^5.1.0 + postcss-normalize-display-values: ^5.1.0 + postcss-normalize-positions: ^5.1.1 + postcss-normalize-repeat-style: ^5.1.1 + postcss-normalize-string: ^5.1.0 + postcss-normalize-timing-functions: ^5.1.0 + postcss-normalize-unicode: ^5.1.1 + postcss-normalize-url: ^5.1.0 + postcss-normalize-whitespace: ^5.1.1 + postcss-ordered-values: ^5.1.3 + postcss-reduce-initial: ^5.1.2 + postcss-reduce-transforms: ^5.1.0 + postcss-svgo: ^5.1.0 + postcss-unique-selectors: ^5.1.1 peerDependencies: postcss: ^8.2.15 - checksum: 179b9a113d5e7fc887eb5ce4841ec83834e95afc85a28c767b34a8736fe0fe098a5963c225b18a1b553d566c7a74908951a0ceed97f2fbf5cdfafcce10db37ff + checksum: d3bbbe3d50c6174afb28d0bdb65b511fdab33952ec84810aef58b87189f3891c34aaa8b6a6101acd5314f8acded839b43513e39a75f91a698ddc985a1b1d9e95 languageName: node linkType: hard -"cssnano-utils@npm:^2.0.1": - version: 2.0.1 - resolution: "cssnano-utils@npm:2.0.1" +"cssnano-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "cssnano-utils@npm:3.1.0" peerDependencies: postcss: ^8.2.15 - checksum: e27f7648fdb999667ba607fd8d56e28d4dbf4bf458c625fc84f460f70fa0fcd491991f309ca27cc0609a24fb3af49b3d0b9b205921e0edd7de57ca27048652e3 + checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 languageName: node linkType: hard "cssnano@npm:^5.0.1": - version: 5.0.11 - resolution: "cssnano@npm:5.0.11" + version: 5.1.15 + resolution: "cssnano@npm:5.1.15" dependencies: - cssnano-preset-default: ^5.1.7 - is-resolvable: ^1.1.0 + cssnano-preset-default: ^5.2.14 lilconfig: ^2.0.3 yaml: ^1.10.2 peerDependencies: postcss: ^8.2.15 - checksum: 9b7d6a4a796175e73a019ec94e112dbf1fb66173716e099116fa8b33568fb1875d7cc1bf728033f4c2861c65d92b66be15618127182dd1f9872387d2d55fddcd + checksum: ca9e1922178617c66c2f1548824b2c7af2ecf69cc3a187fc96bf8d29251c2e84d9e4966c69cf64a2a6a057a37dff7d6d057bc8a2a0957e6ea382e452ae9d0bbb languageName: node linkType: hard @@ -19968,17 +20659,17 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.0.0, csstype@npm:^2.5.2, csstype@npm:^2.6.7": +"csstype@npm:^2.5.2": version: 2.6.21 resolution: "csstype@npm:2.6.21" checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6": - version: 3.0.7 - resolution: "csstype@npm:3.0.7" - checksum: 2f30c993be570c6d0de334b979a718370ee9bca9569c90340f13e05e542146c55b22e87372b858c061f9f8ded494da7a4715957882f9356cf9993ba11ab6f09c +"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1": + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d languageName: node linkType: hard @@ -20003,7 +20694,7 @@ __metadata: languageName: node linkType: hard -"csv@npm:^5.5.0": +"csv@npm:^5.5.3": version: 5.5.3 resolution: "csv@npm:5.5.3" dependencies: @@ -20067,19 +20758,12 @@ __metadata: languageName: node linkType: hard -"d3-array@npm:2, d3-array@npm:^2.3.0": - version: 2.12.1 - resolution: "d3-array@npm:2.12.1" +"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": + version: 3.2.2 + resolution: "d3-array@npm:3.2.2" dependencies: - internmap: ^1.0.0 - checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb - languageName: node - linkType: hard - -"d3-color@npm:1 - 2": - version: 2.0.0 - resolution: "d3-color@npm:2.0.0" - checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc + internmap: 1 - 2 + checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1 languageName: node linkType: hard @@ -20107,7 +20791,7 @@ __metadata: languageName: node linkType: hard -"d3-ease@npm:1 - 3": +"d3-ease@npm:1 - 3, d3-ease@npm:^3.0.1": version: 3.0.1 resolution: "d3-ease@npm:3.0.1" checksum: 06e2ee5326d1e3545eab4e2c0f84046a123dcd3b612e68858219aa034da1160333d9ce3da20a1d3486d98cb5c2a06f7d233eee1bc19ce42d1533458bd85dedcd @@ -20125,14 +20809,14 @@ __metadata: languageName: node linkType: hard -"d3-format@npm:1 - 2": - version: 2.0.0 - resolution: "d3-format@npm:2.0.0" - checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 +"d3-format@npm:1 - 3": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 languageName: node linkType: hard -"d3-interpolate@npm:1 - 3": +"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: @@ -20141,22 +20825,6 @@ __metadata: languageName: node linkType: hard -"d3-interpolate@npm:1.2.0 - 2, d3-interpolate@npm:^2.0.0": - version: 2.0.1 - resolution: "d3-interpolate@npm:2.0.1" - dependencies: - d3-color: 1 - 2 - checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c - languageName: node - linkType: hard - -"d3-path@npm:1 - 2": - version: 2.0.0 - resolution: "d3-path@npm:2.0.0" - checksum: e39e91dfb9abf9637962caede1f4ea4877f4b9e1c914868bdfc355688e9a637ba51bed0fb6180934eb596e50a4d0d1f001b5f2e98a4a3d23cc42558acfbd1f2c - languageName: node - linkType: hard - "d3-path@npm:^3.1.0": version: 3.1.0 resolution: "d3-path@npm:3.1.0" @@ -20171,16 +20839,16 @@ __metadata: languageName: node linkType: hard -"d3-scale@npm:^3.0.0": - version: 3.3.0 - resolution: "d3-scale@npm:3.3.0" +"d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" dependencies: - d3-array: ^2.3.0 - d3-format: 1 - 2 - d3-interpolate: 1.2.0 - 2 - d3-time: ^2.1.1 - d3-time-format: 2 - 3 - checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2 + d3-array: 2.10.0 - 3 + d3-format: 1 - 3 + d3-interpolate: 1.2.0 - 3 + d3-time: 2.1.1 - 3 + d3-time-format: 2 - 4 + checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e languageName: node linkType: hard @@ -20191,16 +20859,7 @@ __metadata: languageName: node linkType: hard -"d3-shape@npm:^2.0.0": - version: 2.1.0 - resolution: "d3-shape@npm:2.1.0" - dependencies: - d3-path: 1 - 2 - checksum: 4a82a83fbb15aadee3eb6661226a34bcd793cdbcd7aa5bf980a4724efc93eb94acc6c499f0ebedc9c3144c57c0f033867d137f41e86459acbd5d7181cb27b49c - languageName: node - linkType: hard - -"d3-shape@npm:^3.0.0": +"d3-shape@npm:^3.0.0, d3-shape@npm:^3.1.0": version: 3.2.0 resolution: "d3-shape@npm:3.2.0" dependencies: @@ -20209,25 +20868,25 @@ __metadata: languageName: node linkType: hard -"d3-time-format@npm:2 - 3": - version: 3.0.0 - resolution: "d3-time-format@npm:3.0.0" +"d3-time-format@npm:2 - 4": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" dependencies: - d3-time: 1 - 2 - checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db + d3-time: 1 - 3 + checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 languageName: node linkType: hard -"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": - version: 2.1.1 - resolution: "d3-time@npm:2.1.1" +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.0.0": + version: 3.1.0 + resolution: "d3-time@npm:3.1.0" dependencies: - d3-array: 2 - checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6 + d3-array: 2 - 3 + checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 languageName: node linkType: hard -"d3-timer@npm:1 - 3": +"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": version: 3.0.1 resolution: "d3-timer@npm:3.0.1" checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 @@ -20310,13 +20969,6 @@ __metadata: languageName: node linkType: hard -"dataloader@npm:2.1.0": - version: 2.1.0 - resolution: "dataloader@npm:2.1.0" - checksum: bbd43496c41697766f8611f60ed3bae437b450985499140b9603a2447c10d45975d3a0661caaebaa9750bc1bc9fd154676a314423294916c8b8ca1a59a08d139 - languageName: node - linkType: hard - "dataloader@npm:2.2.2, dataloader@npm:^2.0.0, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -20339,20 +20991,20 @@ __metadata: linkType: hard "dateformat@npm:^4.5.0": - version: 4.5.1 - resolution: "dateformat@npm:4.5.1" - checksum: 2c80b0fed4977db338aa70fbdd605a50c06ec36f4ef8d8fd36193a08c4910da1172eec919a74ed93abfc134fc71dca8707877d4fd149c07f0d1c919d598283e3 + version: 4.6.3 + resolution: "dateformat@npm:4.6.3" + checksum: c3aa0617c0a5b30595122bc8d1bee6276a9221e4d392087b41cbbdf175d9662ae0e50d0d6dcdf45caeac5153c4b5b0844265f8cd2b2245451e3da19e39e3b65d languageName: node linkType: hard "dayjs@npm:^1.10.4": - version: 1.10.4 - resolution: "dayjs@npm:1.10.4" - checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938 + version: 1.11.7 + resolution: "dayjs@npm:1.11.7" + checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb languageName: node linkType: hard -"debounce@npm:^1.1.0, debounce@npm:^1.2.0": +"debounce@npm:^1.2.0": version: 1.2.1 resolution: "debounce@npm:1.2.1" checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e @@ -20397,12 +21049,12 @@ __metadata: linkType: hard "decamelize-keys@npm:^1.1.0": - version: 1.1.0 - resolution: "decamelize-keys@npm:1.1.0" + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" dependencies: decamelize: ^1.1.0 map-obj: ^1.0.0 - checksum: 8bc5d32e035a072f5dffc1f1f3d26ca7ab1fb44a9cade34c97ab6cd1e62c81a87e718101e96de07d78cecda20a3fdb955df958e46671ccad01bb8dcf0de2e298 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 languageName: node linkType: hard @@ -20414,29 +21066,29 @@ __metadata: linkType: hard "decimal.js-light@npm:^2.4.1": - version: 2.5.0 - resolution: "decimal.js-light@npm:2.5.0" - checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 + version: 2.5.1 + resolution: "decimal.js-light@npm:2.5.1" + checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 languageName: node linkType: hard -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.3.1": - version: 10.4.1 - resolution: "decimal.js@npm:10.4.1" - checksum: 5da6dc74af5b73d954741b24d404ef6da07841794d9e51412a2708ec384dd7b4bced3365fb178f4cd119b7ef45f0b34344014a4dc0494c8374c5e746df3cb410 +"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae languageName: node linkType: hard "decode-named-character-reference@npm:^1.0.0": - version: 1.0.1 - resolution: "decode-named-character-reference@npm:1.0.1" + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" dependencies: character-entities: ^2.0.0 - checksum: 4f67b088213497f7e19faffc1d2bf470bd3ceffd01b3be17857d4bce455e03728b33d3770761745916b0a230ecd917a1cba3c61156f0bd13958dc4fada19580a + checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0": +"decode-uri-component@npm:^0.2.2": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 @@ -20501,23 +21153,16 @@ __metadata: linkType: hard "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.3 - resolution: "deep-is@npm:0.1.3" - checksum: c15b04c3848a89880c94e25b077c19b47d9a30dd99048e70e5f95d943e7b246bee1da0c1376b56b01bc045be2cae7d9b1c856e68e47e9805634327de7c6cb6d5 + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 languageName: node linkType: hard -"deepmerge@npm:^3.0.0": - version: 3.3.0 - resolution: "deepmerge@npm:3.3.0" - checksum: 4322195389e0170a0443c07b36add19b90249802c4b47b96265fdc5f5d8beddf491d5e50cbc5bfd65f85ccf76598173083863c202f5463b3b667aca8be75d5ac - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2, deepmerge@npm:~4.2.2": - version: 4.2.2 - resolution: "deepmerge@npm:4.2.2" - checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b +"deepmerge@npm:^4.2.2, deepmerge@npm:~4.3.0": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard @@ -20531,18 +21176,18 @@ __metadata: linkType: hard "defaults@npm:^1.0.3": - version: 1.0.3 - resolution: "defaults@npm:1.0.3" + version: 1.0.4 + resolution: "defaults@npm:1.0.4" dependencies: clone: ^1.0.2 - checksum: 96e2112da6553d376afd5265ea7cbdb2a3b45535965d71ab8bb1da10c8126d168fdd5268799625324b368356d21ba2a7b3d4ec50961f11a47b7feb9de3d4413e + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a languageName: node linkType: hard "defer-to-connect@npm:^2.0.0": - version: 2.0.0 - resolution: "defer-to-connect@npm:2.0.0" - checksum: 635a01644ea6b52268a9b15c3196ec3a4cb01f874ff09d3ec7858c4aac0ea12ac554aa8831b7ac8ae88c4761e1653f8ea05cf5eebd1236b7bedfde34db52813c + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard @@ -20554,12 +21199,12 @@ __metadata: linkType: hard "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": - version: 1.1.4 - resolution: "define-properties@npm:1.1.4" + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" dependencies: has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 languageName: node linkType: hard @@ -20593,13 +21238,6 @@ __metadata: languageName: node linkType: hard -"delegate@npm:^3.1.2": - version: 3.2.0 - resolution: "delegate@npm:3.2.0" - checksum: d943058fe05897228b158cbd1bab05164df28c8f54127873231d6b03b0a5acc1b3ee1f98ac70ccc9b79cd84aa47118a7de111fee2923753491583905069da27d - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -20614,14 +21252,14 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard -"depd@npm:^1.1.2, depd@npm:~1.1.2": +"depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 @@ -20697,9 +21335,9 @@ __metadata: linkType: hard "detect-node@npm:^2.0.4": - version: 2.0.4 - resolution: "detect-node@npm:2.0.4" - checksum: c06ae40fefbad8cb8cbb6ca819c93568b2a809e747bfc9c71f3524b027f5e988163b0ac0517fd65288b375360b30bc4822172eb05d211f99003d73cf8ec22911 + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e languageName: node linkType: hard @@ -20805,23 +21443,23 @@ __metadata: linkType: hard "docker-compose@npm:^0.23.17": - version: 0.23.17 - resolution: "docker-compose@npm:0.23.17" + version: 0.23.19 + resolution: "docker-compose@npm:0.23.19" dependencies: yaml: ^1.10.2 - checksum: c308bf067cabe178d245b3e499119937b1d2a5effdc9fac6227e04be4308a0250ca7bb1471789b3d0492ea2ce83f74e40b7517a9a5cb540a21355a64e4ad5d3c + checksum: 1704825954ec8645e4b099cc2641531955eef5a8a9729c885fab7067ae4d7935c663252e51b49878397e51cd5a3efcf2f13c8460e252aa39d14a0722c0bacfe5 languageName: node linkType: hard "docker-modem@npm:^3.0.0": - version: 3.0.3 - resolution: "docker-modem@npm:3.0.3" + version: 3.0.8 + resolution: "docker-modem@npm:3.0.8" dependencies: debug: ^4.1.1 readable-stream: ^3.5.0 split-ca: ^1.0.1 - ssh2: ^1.4.0 - checksum: 4ad495d17a7bbb29f48e3bf8ab74508848a3ca62c2dffc399fc0b9b2d1caccb1be54cc53001d5e0d56069e6cb4a91da4b017240733080b6648a66b40345e1f96 + ssh2: ^1.11.0 + checksum: e3675c9b1ad800be8fb1cb9c5621fbef20a75bfedcd6e01b69808eadd7f0165681e4e30d1700897b788a67dbf4769964fcccd19c3d66f6d2499bb7aede6b34df languageName: node linkType: hard @@ -20855,9 +21493,9 @@ __metadata: linkType: hard "dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": - version: 0.5.13 - resolution: "dom-accessibility-api@npm:0.5.13" - checksum: a5a5f14c01e466d424750aaac9225f1dc43cf16d101a1c40e01a554abce63c48084707002c39b805f2ce212273c179dd6d2258175997cd06d5f79851bf52dd40 + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 languageName: node linkType: hard @@ -20870,7 +21508,7 @@ __metadata: languageName: node linkType: hard -"dom-helpers@npm:^3.2.1, dom-helpers@npm:^3.4.0": +"dom-helpers@npm:^3.4.0": version: 3.4.0 resolution: "dom-helpers@npm:3.4.0" dependencies: @@ -20880,23 +21518,23 @@ __metadata: linkType: hard "dom-helpers@npm:^5.0.1": - version: 5.1.4 - resolution: "dom-helpers@npm:5.1.4" + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" dependencies: "@babel/runtime": ^7.8.7 - csstype: ^2.6.7 - checksum: e516325d662f57db7724e6fe26ae5b36b6974f74ae2513998f408bf056670c05ed010bb3be866ac454110249a9e88aaa6451e63e4efa87f834041ef8303ace68 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c languageName: node linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.2.0 - resolution: "dom-serializer@npm:1.2.0" + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" dependencies: domelementtype: ^2.0.1 - domhandler: ^4.0.0 + domhandler: ^4.2.0 entities: ^2.0.0 - checksum: 231212b30947eb7d89f8b9d89ec82af60a634ff5fd4c3a2e42989567742d308d0aae21e82328c17df4b453deb13e11b047ce0d610581766dd25734afda23bef0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 languageName: node linkType: hard @@ -20943,12 +21581,12 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": - version: 4.3.0 - resolution: "domhandler@npm:4.3.0" +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" dependencies: domelementtype: ^2.2.0 - checksum: d2a2dbf40dd99abf936b65ad83c6b530afdb3605a87cad37a11b5d9220e68423ebef1b86c89e0f6d93ffaf315cc327cf1a988652e7a9a95cce539e3984f4c64d + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa languageName: node linkType: hard @@ -20969,13 +21607,13 @@ __metadata: linkType: hard "dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": - version: 2.4.3 - resolution: "dompurify@npm:2.4.3" - checksum: b440981f2a38cada2085759cc3d1e2f94571afc34343d011a8a6aa1ad91ae6abf651adbfa4994b0e2283f0ce81f7891cdb04b67d0b234c8d190cb70e9691f026 + version: 2.4.5 + resolution: "dompurify@npm:2.4.5" + checksum: d6d3c3b320f15cdb5b26aa1902c3275a3ab2c3705a9df4420bb94691d7c4df67959ec7b91e486c308320791b0ee000456f042734c45d76721e61c2768eac706e languageName: node linkType: hard -"domutils@npm:^2.5.2, domutils@npm:^2.6.0": +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -21007,10 +21645,19 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^5.2.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + "dotenv@npm:^16.0.0": - version: 16.0.0 - resolution: "dotenv@npm:16.0.0" - checksum: 664cebb51f0a9a1d1b930f51f0271e72e26d62feaecc9dc03df39453dd494b4e724809ca480fb3ec3213382b1ed3f791aaeb83569a137f9329ce58efd4853dbf + version: 16.0.3 + resolution: "dotenv@npm:16.0.3" + checksum: afcf03f373d7a6d62c7e9afea6328e62851d627a4e73f2e12d0a8deae1cd375892004f3021883f8aec85932cd2834b091f568ced92b4774625b321db83b827f8 languageName: node linkType: hard @@ -21021,7 +21668,7 @@ __metadata: languageName: node linkType: hard -"dset@npm:3.1.2": +"dset@npm:^3.1.2": version: 3.1.2 resolution: "dset@npm:3.1.2" checksum: 4f8066f517aa0a70af688c66e9a0a5590f0aada76f6edc7ba9ddb309e27d3a6d65c0a2e31ab2a84005d4c791e5327773cdde59b8ab169050330a0dc283663e87 @@ -21036,14 +21683,14 @@ __metadata: linkType: hard "duplexify@npm:^4.0.0": - version: 4.1.1 - resolution: "duplexify@npm:4.1.1" + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 stream-shift: ^1.0.0 - checksum: 1cf800f1dc1647d6e0272b811421d4ce78b7d9b12dd85c7ecd78b9e4bfba374d309ac9e3440c66461fc62adb69db49aebf49da15962c98a84d8fd33c7e9c5c5a + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad languageName: node linkType: hard @@ -21127,14 +21774,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.6": - version: 3.1.7 - resolution: "ejs@npm:3.1.7" +"ejs@npm:^3.1.8": + version: 3.1.9 + resolution: "ejs@npm:3.1.9" dependencies: jake: ^10.8.5 bin: ejs: bin/cli.js - checksum: fe40764af39955ce8f8b116716fc8b911959946698edb49ecab85df597746c07aa65d5b74ead28a1e2ffa75b0f92d9bedd752f1c29437da6137b3518271e988c + checksum: af6f10eb815885ff8a8cfacc42c6b6cf87daf97a4884f87a30e0c3271fedd85d76a3a297d9c33a70e735b97ee632887f85e32854b9cdd3a2d97edf931519a35f languageName: node linkType: hard @@ -21154,14 +21801,14 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.251": - version: 1.4.255 - resolution: "electron-to-chromium@npm:1.4.255" - checksum: 9fd4e0b4a05b072e211b5a1ad2e20b099d7cd54a47b6cbf700dc9ef2020291b5b2d179af0dd0fc71be74b3c765a71ad14f7ff20afb637c0b58e7abc26ff3b68e +"electron-to-chromium@npm:^1.4.284": + version: 1.4.333 + resolution: "electron-to-chromium@npm:1.4.333" + checksum: 028f6618f18addf619a5a5eeca01c07fa3052ef4912b98e03e19c419eb92b6ed69bdb9c2bb499761186fdc60f9e955fa34a4b96e50b03d98a4a0bcb01aef8afd languageName: node linkType: hard -"elliptic@npm:^6.0.0": +"elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -21218,7 +21865,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11, encoding@npm:^0.1.12, encoding@npm:^0.1.13": +"encoding@npm:^0.1.12, encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -21237,12 +21884,12 @@ __metadata: linkType: hard "enhanced-resolve@npm:^5.10.0": - version: 5.10.0 - resolution: "enhanced-resolve@npm:5.10.0" + version: 5.12.0 + resolution: "enhanced-resolve@npm:5.12.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: 0bb9830704db271610f900e8d79d70a740ea16f251263362b0c91af545576d09fe50103496606c1300a05e588372d6f9780a9bc2e30ce8ef9b827ec8f44687ff + checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 languageName: node linkType: hard @@ -21291,9 +21938,9 @@ __metadata: linkType: hard "env-paths@npm:^2.2.0": - version: 2.2.0 - resolution: "env-paths@npm:2.2.0" - checksum: ba2aea38301aafd69086be1f8cb453b92946e4840cb0de9d1c88a67e6f43a6174dcddb60b218ec36db8720b12de46b0d93c2f97ad9bbec6a267b479ab37debb6 + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard @@ -21321,11 +21968,11 @@ __metadata: linkType: hard "error-stack-parser@npm:^2.0.6": - version: 2.0.6 - resolution: "error-stack-parser@npm:2.0.6" + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" dependencies: - stackframe: ^1.1.1 - checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12 + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 languageName: node linkType: hard @@ -21336,51 +21983,62 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.4": - version: 1.20.4 - resolution: "es-abstract@npm:1.20.4" +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": + version: 1.21.2 + resolution: "es-abstract@npm:1.21.2" dependencies: + array-buffer-byte-length: ^1.0.0 + available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.3 + get-intrinsic: ^1.2.0 get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 has: ^1.0.3 has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 is-callable: ^1.2.7 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 + is-typed-array: ^1.1.10 is-weakref: ^1.0.2 - object-inspect: ^1.12.2 + object-inspect: ^1.12.3 object-keys: ^1.1.1 object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 safe-regex-test: ^1.0.0 - string.prototype.trimend: ^1.0.5 - string.prototype.trimstart: ^1.0.5 + string.prototype.trim: ^1.2.7 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + typed-array-length: ^1.0.4 unbox-primitive: ^1.0.2 - checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 + which-typed-array: ^1.1.9 + checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a languageName: node linkType: hard "es-get-iterator@npm:^1.1.2": - version: 1.1.2 - resolution: "es-get-iterator@npm:1.1.2" + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.1.0 - has-symbols: ^1.0.1 - is-arguments: ^1.1.0 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 is-map: ^2.0.2 is-set: ^2.0.2 - is-string: ^1.0.5 + is-string: ^1.0.7 isarray: ^2.0.5 - checksum: f75e66acb6a45686fa08b3ade9c9421a70d36a0c43ed4363e67f4d7aab2226cb73dd977cb48abbaf75721b946d3cd810682fcf310c7ad0867802fbf929b17dcf + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d languageName: node linkType: hard @@ -21391,6 +22049,17 @@ __metadata: languageName: node linkType: hard +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -21418,104 +22087,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-android-64@npm:0.15.18" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"esbuild-android-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-android-arm64@npm:0.15.18" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-darwin-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-darwin-64@npm:0.15.18" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"esbuild-darwin-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-darwin-arm64@npm:0.15.18" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-freebsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-freebsd-64@npm:0.15.18" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-freebsd-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-freebsd-arm64@npm:0.15.18" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-32@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-32@npm:0.15.18" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-linux-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-64@npm:0.15.18" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"esbuild-linux-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-arm64@npm:0.15.18" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-arm@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-arm@npm:0.15.18" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"esbuild-linux-mips64le@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-mips64le@npm:0.15.18" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"esbuild-linux-ppc64le@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-ppc64le@npm:0.15.18" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"esbuild-linux-riscv64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-riscv64@npm:0.15.18" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"esbuild-linux-s390x@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-linux-s390x@npm:0.15.18" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "esbuild-loader@npm:^2.18.0": version: 2.21.0 resolution: "esbuild-loader@npm:2.21.0" @@ -21532,48 +22103,6 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-netbsd-64@npm:0.15.18" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-openbsd-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-openbsd-64@npm:0.15.18" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-sunos-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-sunos-64@npm:0.15.18" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-32@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-32@npm:0.15.18" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-windows-64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-64@npm:0.15.18" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-arm64@npm:0.15.18": - version: 0.15.18 - resolution: "esbuild-windows-arm64@npm:0.15.18" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "esbuild@npm:^0.16.17": version: 0.16.17 resolution: "esbuild@npm:0.16.17" @@ -21651,7 +22180,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.17.0": +"esbuild@npm:^0.17.0, esbuild@npm:~0.17.6": version: 0.17.12 resolution: "esbuild@npm:0.17.12" dependencies: @@ -21728,83 +22257,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:~0.15.10": - version: 0.15.18 - resolution: "esbuild@npm:0.15.18" - dependencies: - "@esbuild/android-arm": 0.15.18 - "@esbuild/linux-loong64": 0.15.18 - esbuild-android-64: 0.15.18 - esbuild-android-arm64: 0.15.18 - esbuild-darwin-64: 0.15.18 - esbuild-darwin-arm64: 0.15.18 - esbuild-freebsd-64: 0.15.18 - esbuild-freebsd-arm64: 0.15.18 - esbuild-linux-32: 0.15.18 - esbuild-linux-64: 0.15.18 - esbuild-linux-arm: 0.15.18 - esbuild-linux-arm64: 0.15.18 - esbuild-linux-mips64le: 0.15.18 - esbuild-linux-ppc64le: 0.15.18 - esbuild-linux-riscv64: 0.15.18 - esbuild-linux-s390x: 0.15.18 - esbuild-netbsd-64: 0.15.18 - esbuild-openbsd-64: 0.15.18 - esbuild-sunos-64: 0.15.18 - esbuild-windows-32: 0.15.18 - esbuild-windows-64: 0.15.18 - esbuild-windows-arm64: 0.15.18 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/linux-loong64": - optional: true - esbuild-android-64: - optional: true - esbuild-android-arm64: - optional: true - esbuild-darwin-64: - optional: true - esbuild-darwin-arm64: - optional: true - esbuild-freebsd-64: - optional: true - esbuild-freebsd-arm64: - optional: true - esbuild-linux-32: - optional: true - esbuild-linux-64: - optional: true - esbuild-linux-arm: - optional: true - esbuild-linux-arm64: - optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: - optional: true - bin: - esbuild: bin/esbuild - checksum: ec12682b2cb2d4f0669d0e555028b87a9284ca7f6a1b26e35e69a8697165b35cc682ad598abc70f0bbcfdc12ca84ef888caf5ceee389237862e8f8c17da85f89 - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -22103,25 +22555,7 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-visitor-keys@npm:2.0.0" - checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0": +"eslint-visitor-keys@npm:^3.3.0": version: 3.3.0 resolution: "eslint-visitor-keys@npm:3.3.0" checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 @@ -22145,10 +22579,13 @@ __metadata: linkType: hard "eslint@npm:^8.33.0, eslint@npm:^8.6.0": - version: 8.33.0 - resolution: "eslint@npm:8.33.0" + version: 8.36.0 + resolution: "eslint@npm:8.36.0" dependencies: - "@eslint/eslintrc": ^1.4.1 + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.4.0 + "@eslint/eslintrc": ^2.0.1 + "@eslint/js": 8.36.0 "@humanwhocodes/config-array": ^0.11.8 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -22159,10 +22596,9 @@ __metadata: doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 eslint-visitor-keys: ^3.3.0 - espree: ^9.4.0 - esquery: ^1.4.0 + espree: ^9.5.0 + esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 @@ -22183,13 +22619,12 @@ __metadata: minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.1 - regexpp: ^3.2.0 strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 727e63ab8b7acf281442323c5971f6afdd5b656fbcebc4476cf54e35af51b2f180617433fc5e1952f0449ca3f43a905527f9407ea4b8a7ea7562fc9c3f278d4c + checksum: e9a961fc3b3de5cff5a1cb2c92eeffaa7e155a715489e30b3e1e76f186bd1255e0481e09564f2094733c0b1dbd3453499fb72ae7c043c83156e11e6d965b2304 languageName: node linkType: hard @@ -22200,14 +22635,14 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.0.0, espree@npm:^9.4.0": - version: 9.4.0 - resolution: "espree@npm:9.4.0" +"espree@npm:^9.0.0, espree@npm:^9.5.0": + version: 9.5.0 + resolution: "espree@npm:9.5.0" dependencies: acorn: ^8.8.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.3.0 - checksum: 2e3020dde67892d2ba3632413b44d0dc31d92c29ce72267d7ec24216a562f0a6494d3696e2fa39a3ec8c0e0088d773947ab2925fbb716801a11eb8dd313ac89c + checksum: a7f110aefb6407e0d3237aa635ab3cea87106ae63748dd23c67031afccc640d04c4209fca2daf16e2233c82efb505faead0fb84097478fd9cc6e8f8dd80bf99d languageName: node linkType: hard @@ -22221,12 +22656,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -22310,13 +22745,6 @@ __metadata: languageName: node linkType: hard -"event-target-polyfill@npm:^0.0.3": - version: 0.0.3 - resolution: "event-target-polyfill@npm:0.0.3" - checksum: 42efefcc46aa4170547b35399337762a579fa27c9fe8b3e791aec470df3126e0bb4cb49b9f17901956eb65a137ef0e35c3a32c9f047b32c64cf56fa9ecc76d06 - languageName: node - linkType: hard - "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" @@ -22324,13 +22752,20 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:6.4.7, eventemitter2@npm:^6.4.4": +"eventemitter2@npm:6.4.7": version: 6.4.7 resolution: "eventemitter2@npm:6.4.7" checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 languageName: node linkType: hard +"eventemitter2@npm:^6.4.4": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: be59577c1e1c35509c7ba0e2624335c35bbcfd9485b8a977384c6cc6759341ea1a98d3cb9dbaa5cea4fff9b687e504504e3f9c2cc1674cf3bd8a43a7c74ea3eb + languageName: node + linkType: hard + "eventemitter3@npm:^3.1.0": version: 3.1.2 resolution: "eventemitter3@npm:3.1.2" @@ -22595,8 +23030,8 @@ __metadata: linkType: hard "execa@npm:^7.0.0": - version: 7.0.0 - resolution: "execa@npm:7.0.0" + version: 7.1.1 + resolution: "execa@npm:7.1.1" dependencies: cross-spawn: ^7.0.3 get-stream: ^6.0.1 @@ -22607,7 +23042,7 @@ __metadata: onetime: ^6.0.0 signal-exit: ^3.0.7 strip-final-newline: ^3.0.0 - checksum: be7c7b6d1e5473f628e46888b0cf8279da483c1a6000dd494a2059cc26591ded57ba46be1c9bdde1ec895e7eb8b18911174aba425cd971d41d140a9405da9a02 + checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 languageName: node linkType: hard @@ -22620,13 +23055,6 @@ __metadata: languageName: node linkType: hard -"exit-on-epipe@npm:~1.0.1": - version: 1.0.1 - resolution: "exit-on-epipe@npm:1.0.1" - checksum: e8ab4940416d19f311b3c9226e3725c6c4c6026fe682266ecc0ff33a455d585fe3e4ee757857c7bf1d0491b478cb232b8e395dfb438e65ac87317eda47304c32 - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -22654,16 +23082,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.4.3": - version: 29.4.3 - resolution: "expect@npm:29.4.3" +"expect@npm:^29.0.0, expect@npm:^29.5.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" dependencies: - "@jest/expect-utils": ^29.4.3 + "@jest/expect-utils": ^29.5.0 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 - checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 languageName: node linkType: hard @@ -22824,9 +23252,9 @@ __metadata: linkType: hard "extsprintf@npm:^1.2.0": - version: 1.4.0 - resolution: "extsprintf@npm:1.4.0" - checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 languageName: node linkType: hard @@ -22844,10 +23272,10 @@ __metadata: languageName: node linkType: hard -"fast-equals@npm:^2.0.0": - version: 2.0.4 - resolution: "fast-equals@npm:2.0.4" - checksum: 1aac8a2e16b33e5e402bb5cd46be65f1ca331903c2c44e3bd75324e8472ee04f0acdbc6889e45fc28f9707ca3964f2a86789b32305d4d8b85dc97f61e446ef4b +"fast-equals@npm:^4.0.3": + version: 4.0.3 + resolution: "fast-equals@npm:4.0.3" + checksum: 3d5935b757f9f2993e59b5164a7a9eeda0de149760495375cde14a4ed725186a7e6c1c0d58f7d42d2f91deb97f3fce1e0aad5591916ef0984278199a85c87c87 languageName: node linkType: hard @@ -22892,6 +23320,13 @@ __metadata: languageName: node linkType: hard +"fast-loops@npm:^1.1.3": + version: 1.1.3 + resolution: "fast-loops@npm:1.1.3" + checksum: b674378ba2ed8364ca1a00768636e88b22201c8d010fa62a8588a4cace04f90bac46714c13cf638be82b03438d2fe813600da32291fb47297a1bd7fa6cef0cee + languageName: node + linkType: hard + "fast-querystring@npm:^1.1.1": version: 1.1.1 resolution: "fast-querystring@npm:1.1.1" @@ -22923,9 +23358,9 @@ __metadata: linkType: hard "fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3": - version: 1.0.3 - resolution: "fast-text-encoding@npm:1.0.3" - checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 + version: 1.0.6 + resolution: "fast-text-encoding@npm:1.0.6" + checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 languageName: node linkType: hard @@ -22957,11 +23392,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.6.1 - resolution: "fastq@npm:1.6.1" + version: 1.15.0 + resolution: "fastq@npm:1.15.0" dependencies: reusify: ^1.0.4 - checksum: e9940b30758a6a6bb3595d965accb4c86b85c7b594c3387788c480a83ac5e43d933eccb6b41f510d0c944aa17af340f432b4efe791f0d0bbe0e3e06dfdcda610 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a languageName: node linkType: hard @@ -22975,20 +23410,20 @@ __metadata: linkType: hard "faye-websocket@npm:^0.11.3": - version: 0.11.3 - resolution: "faye-websocket@npm:0.11.3" + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" dependencies: websocket-driver: ">=0.5.1" - checksum: d7b2d68546812ea24e3079bd1e08bf1d79cd6d6137bfcea565d1cb1f6a5fc8fc29b689df2c1aff8b8b291d60fc808e1b27aa2896b86ba77ded10f1d9734c8e9f + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa languageName: node linkType: hard "fb-watchman@npm:^2.0.0": - version: 2.0.1 - resolution: "fb-watchman@npm:2.0.1" + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" dependencies: bser: 2.1.1 - checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 languageName: node linkType: hard @@ -22999,33 +23434,18 @@ __metadata: languageName: node linkType: hard -"fbjs@npm:^0.8.1": - version: 0.8.18 - resolution: "fbjs@npm:0.8.18" - dependencies: - core-js: ^1.0.0 - isomorphic-fetch: ^2.1.1 - loose-envify: ^1.0.0 - object-assign: ^4.1.0 - promise: ^7.1.1 - setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 668731b946a765908c9cbe51d5160f973abb78004b3d122587c3e930e3e1ddcc0ce2b17f2a8637dc9d733e149aa580f8d3035a35cc2d3bc78b78f1b19aab90e2 - languageName: node - linkType: hard - "fbjs@npm:^3.0.0": - version: 3.0.0 - resolution: "fbjs@npm:3.0.0" + version: 3.0.4 + resolution: "fbjs@npm:3.0.4" dependencies: - cross-fetch: ^3.0.4 + cross-fetch: ^3.1.5 fbjs-css-vars: ^1.0.0 loose-envify: ^1.0.0 object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.18 - checksum: 85ec57d8dbeddd7c82bf8f111a3c7de1abc1f4d7c603d6ccbcc1ec8dce35ff5b7a113dd34acbf7930093e5533c37a2298a92d342077f967bef34dc7cf2f3f07e + ua-parser-js: ^0.7.30 + checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 languageName: node linkType: hard @@ -23039,9 +23459,9 @@ __metadata: linkType: hard "fecha@npm:^4.2.0": - version: 4.2.0 - resolution: "fecha@npm:4.2.0" - checksum: 4eb4235959161446f6ec1a24e34eba7362187d2c96d9dd86ea4290e345d1efd2175ccb01bbef9ee852c6790aa7af2539d08361b0499ebc9bf23b4791f5666cd0 + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 languageName: node linkType: hard @@ -23082,18 +23502,18 @@ __metadata: linkType: hard "filelist@npm:^1.0.1": - version: 1.0.3 - resolution: "filelist@npm:1.0.3" + version: 1.0.4 + resolution: "filelist@npm:1.0.4" dependencies: minimatch: ^5.0.1 - checksum: c78048691a31b91d54908ce2eac4731bf108613c7b2e4d1a05a6cbe6739bd067e4c1a3baa4f7d07b7143b8c374c0c0d59864b5c8d9168ec8e2a85f84fb7170ad + checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 languageName: node linkType: hard "filesize@npm:^8.0.6": - version: 8.0.6 - resolution: "filesize@npm:8.0.6" - checksum: a16d7bd88c943ff55185559eabd4e9779d531b281a39a4a884659fd6f58bd29c20337ad7d58dc5492477df484bb9579a7ca6ad77e57a25908a51f8224790aaa3 + version: 8.0.7 + resolution: "filesize@npm:8.0.7" + checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 languageName: node linkType: hard @@ -23256,16 +23676,16 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.1.1 - resolution: "flatted@npm:3.1.1" - checksum: 508935e3366d95444131f0aaa801a4301f24ea5bcb900d12764e7335b46b910730cc1b5bcfcfb8eccb7c8db261ba0671c6a7ca30d10870ff7a7756dc7e731a7a + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 languageName: node linkType: hard "flow-parser@npm:0.*": - version: 0.152.0 - resolution: "flow-parser@npm:0.152.0" - checksum: 648558d3e51b6bc3ac8c2ecffc0d37511c2658ecae14b8b869a316621d08a5807253a80d4d5b3268c087cd1f5cfd9db879d4a00710d02891d1567febbdd5e15a + version: 0.202.0 + resolution: "flow-parser@npm:0.202.0" + checksum: 9212d7cfe002a3ef05d170f022e58b362a1e5633177836d0a9123bcfbaa41a2e7026fff27549aadbb752488d4a05da49809676584da55362f791095795479ec3 languageName: node linkType: hard @@ -23276,7 +23696,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -23296,9 +23716,9 @@ __metadata: linkType: hard "foreach@npm:^2.0.4": - version: 2.0.5 - resolution: "foreach@npm:2.0.5" - checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e languageName: node linkType: hard @@ -23310,8 +23730,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.0 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" + version: 6.5.3 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -23336,7 +23756,7 @@ __metadata: optional: true vue-template-compiler: optional: true - checksum: 95d145ab7936445f3a9bfa4116ef73537f97196cfaa3f5b24473dff36d034e839d3b0e034a23beefc9619eceb7a9866816bfd55afd1968e955eb3b3f8cfc35ed + checksum: 9732a49bfeed8fc23e6e8a59795fa7c238edeba91040a9b520db54b4d316dda27f9f1893d360e296fd0ad8930627d364417d28a8c7007fba60cc730ebfce4956 languageName: node linkType: hard @@ -23367,10 +23787,10 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:^1.4.3, form-data-encoder@npm:^1.7.1": - version: 1.7.1 - resolution: "form-data-encoder@npm:1.7.1" - checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 +"form-data-encoder@npm:^1.4.3": + version: 1.7.2 + resolution: "form-data-encoder@npm:1.7.2" + checksum: aeebd87a1cb009e13cbb5e4e4008e6202ed5f6551eb6d9582ba8a062005178907b90f4887899d3c993de879159b6c0c940af8196725b428b4248cec5af3acf5f languageName: node linkType: hard @@ -23386,13 +23806,13 @@ __metadata: linkType: hard "form-data@npm:^3.0.0": - version: 3.0.0 - resolution: "form-data@npm:3.0.0" + version: 3.0.1 + resolution: "form-data@npm:3.0.1" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: 60ec3fe7e23154949ab6fef31baedf5afbfb8d6441ea8d19b211b43a5d0448be2918c9bba6218cade56a7cbd43f670d6e75f41f626f8d397d56bf8c60f4a829d + checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d languageName: node linkType: hard @@ -23425,17 +23845,17 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.0.0, formdata-node@npm:^4.3.1": - version: 4.3.2 - resolution: "formdata-node@npm:4.3.2" +"formdata-node@npm:^4.0.0": + version: 4.4.1 + resolution: "formdata-node@npm:4.4.1" dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.1 - checksum: e1d7aae7d579775b813ddc8ea4511fee613552715e81b36afb188d3a65b3d4df2ef69017106079ba52d9ab1e3367fea0206862d8ae64c02008ababdb341d2c3d + web-streams-polyfill: 4.0.0-beta.3 + checksum: d91d4f667cfed74827fc281594102c0dabddd03c9f8b426fc97123eedbf73f5060ee43205d89284d6854e2fc5827e030cd352ef68b93beda8decc2d72128c576 languageName: node linkType: hard -"formidable@npm:^2.0.1": +"formidable@npm:^2.1.2": version: 2.1.2 resolution: "formidable@npm:2.1.2" dependencies: @@ -23557,7 +23977,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:1.0.3": +"fs-monkey@npm:^1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -23640,20 +24060,19 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^4.0.0": - version: 4.0.0 - resolution: "gauge@npm:4.0.0" +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" dependencies: - ansi-regex: ^5.0.1 aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 has-unicode: ^2.0.1 - signal-exit: ^3.0.0 + signal-exit: ^3.0.7 string-width: ^4.2.3 strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 637b34c84f518defa89319dbef68211a24e9302182ad2a619e3be1be5b7dcf2a962c8359e889294af667440f4722e7e6e61671859e00bd8ec280a136ded89b25 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d languageName: node linkType: hard @@ -23674,34 +24093,24 @@ __metadata: linkType: hard "gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": - version: 5.0.1 - resolution: "gaxios@npm:5.0.1" + version: 5.1.0 + resolution: "gaxios@npm:5.1.0" dependencies: extend: ^3.0.2 https-proxy-agent: ^5.0.0 is-stream: ^2.0.0 node-fetch: ^2.6.7 - checksum: 65464122a5be72084d07947536d18a0dcebd115b28cbcd19da8a98763a67c8c8fde995bf2f358251397c939df9d2ff84f54628a94f634a98a16c7b7553cdb4a5 + checksum: c3bf9eff0055f9af734380a765afb237ca199b6dedccd888417075c923c94311dcf5217fcb2b908c1121412668959d99c5ef5328827155e51deae6ce579c4473 languageName: node linkType: hard "gcp-metadata@npm:^5.0.0": - version: 5.0.0 - resolution: "gcp-metadata@npm:5.0.0" + version: 5.2.0 + resolution: "gcp-metadata@npm:5.2.0" dependencies: gaxios: ^5.0.0 json-bigint: ^1.0.0 - checksum: b75635e564a39ef0a6ebbff0daa97cea37382c3d6f0d7a6a0406e03a275de804a74e3f3d410d5313a6c9dd3496023e96bc81474917fa8369974398eb069d9645 - languageName: node - linkType: hard - -"gendocu-public-apis@npm:^1.0.0": - version: 1.0.0 - resolution: "gendocu-public-apis@npm:1.0.0" - dependencies: - "@improbable-eng/grpc-web": ^0.14.0 - google-protobuf: ^3.15.8 - checksum: ee1548d1285f9d2dc7ef04c959e620516322314c8aa2f2bfedd25345a6211abf51cdca4d54cca18de8f31a90f2b86ab171ae41f7c2f39dfdd0ac7163f875f719 + checksum: 4e7ed589c814bb79cbf052b0eda1d5e219fbee030f4772eca27ec1e6e1faa85ba0ef3b17ea5c3fd51a54fc5429c924b4edbb260ac147701f211fb9807b893544 languageName: node linkType: hard @@ -23714,12 +24123,19 @@ __metadata: languageName: node linkType: hard -"generic-names@npm:^2.0.1": - version: 2.0.1 - resolution: "generic-names@npm:2.0.1" +"generic-names@npm:^4.0.0": + version: 4.0.0 + resolution: "generic-names@npm:4.0.0" dependencies: - loader-utils: ^1.1.0 - checksum: 5f2d6837dcddf4d7139f7c7ee4ff6ed82564123ae363aadc7a1c1c9967724da1e10d92c904b76b6ff58912465cf63cf47d87f3b400286845f289f54d5092e78f + loader-utils: ^3.2.0 + checksum: 8dabd2505164191501b75f2861b5e1194458a344ae2a7c9776bdd72d1f50b248dff737bcdf118fff677275edb3632f2d10662e6ac122dd7b245c5baa8d303270 + languageName: node + linkType: hard + +"gensequence@npm:^5.0.2": + version: 5.0.2 + resolution: "gensequence@npm:5.0.2" + checksum: b94af8d6591bbf5bc568813f31efbc5bfca010d83bce2a6c82dcf4211f56be8e13df956b239fecb1d7492bf02218e3d36dbc47e6f872df256312a507ae9ccd25 languageName: node linkType: hard @@ -23744,14 +24160,14 @@ __metadata: languageName: node linkType: hard -"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" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": + version: 1.2.0 + resolution: "get-intrinsic@npm:1.2.0" dependencies: function-bind: ^1.1.1 has: ^1.0.3 has-symbols: ^1.0.3 - checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a + checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d languageName: node linkType: hard @@ -23777,11 +24193,11 @@ __metadata: linkType: hard "get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": - version: 5.1.0 - resolution: "get-stream@npm:5.1.0" + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" dependencies: pump: ^3.0.0 - checksum: 371e1fb3f3b009edffd379810ed52a1f0a0a621dbb3778bd844e3b002065af0790bfddde845b4a0f05f71da5d99441465f5586281497321b151a8bdd102c885a + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 languageName: node linkType: hard @@ -23953,12 +24369,21 @@ __metadata: languageName: node linkType: hard +"global-dirs@npm:^0.1.1": + version: 0.1.1 + resolution: "global-dirs@npm:0.1.1" + dependencies: + ini: ^1.3.4 + checksum: 10624f5a8ddb8634c22804c6b24f93fb591c3639a6bc78e3584e01a238fc6f7b7965824184e57d63f6df36980b6c191484ad7bc6c35a1599b8f1d64be64c2a4a + languageName: node + linkType: hard + "global-dirs@npm:^3.0.0": - version: 3.0.0 - resolution: "global-dirs@npm:3.0.0" + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" dependencies: ini: 2.0.0 - checksum: 953c17cf14bf6ee0e2100ae82a0d779934eed8a3ec5c94a7a4f37c5b3b592c31ea015fb9a15cf32484de13c79f4a814f3015152f3e1d65976cfbe47c1bfe4a88 + checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 languageName: node linkType: hard @@ -23990,20 +24415,20 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.19.0 - resolution: "globals@npm:13.19.0" + version: 13.20.0 + resolution: "globals@npm:13.20.0" dependencies: type-fest: ^0.20.2 - checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e + checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a languageName: node linkType: hard -"globalthis@npm:^1.0.1": - version: 1.0.2 - resolution: "globalthis@npm:1.0.2" +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" dependencies: define-properties: ^1.1.3 - checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -24034,15 +24459,6 @@ __metadata: languageName: node linkType: hard -"good-listener@npm:^1.2.2": - version: 1.2.2 - resolution: "good-listener@npm:1.2.2" - dependencies: - delegate: ^3.1.2 - checksum: f39fb82c4e41524f56104cfd2d7aef1a88e72f3f75139115fbdf98cc7d844e0c1b39218b2e83438c6188727bf904ed78c7f0f2feff67b32833bc3af7f0202b33 - languageName: node - linkType: hard - "google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": version: 8.7.0 resolution: "google-auth-library@npm:8.7.0" @@ -24061,8 +24477,8 @@ __metadata: linkType: hard "google-gax@npm:^3.5.2, google-gax@npm:^3.5.7": - version: 3.5.7 - resolution: "google-gax@npm:3.5.7" + version: 3.5.8 + resolution: "google-gax@npm:3.5.8" dependencies: "@grpc/grpc-js": ~1.8.0 "@grpc/proto-loader": ^0.7.0 @@ -24082,25 +24498,25 @@ __metadata: bin: compileProtos: build/tools/compileProtos.js minifyProtoJson: build/tools/minify.js - checksum: 1f3c647fc1ddc00a6a017be0f83b89691997358720763db13a69a94c7a74f6d31a49b0fd56f7bab18689914c784328901b118bdf150d742719995c705d0fa65d + checksum: e1d75b255f6fd08e93b0da23aa74f1b235fce76daf71b0e951a0de6ed77c1ad686f86adaa00e6100a92df0b23b2fc88d8c133604ad0022086560d4b9b661a189 languageName: node linkType: hard "google-p12-pem@npm:^4.0.0": - version: 4.0.0 - resolution: "google-p12-pem@npm:4.0.0" + version: 4.0.1 + resolution: "google-p12-pem@npm:4.0.1" dependencies: node-forge: ^1.3.1 bin: gp12-pem: build/src/bin/gp12-pem.js - checksum: f41a88d339e9fe633dc915bc0f3335c0196fa318f994dcd5dfaa0f3f7aa2d99f6122e2c80bd0f4bb22f2b61ff645b7cc782a74e12ceaf6c9ad9e08cdeb4d615e + checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd languageName: node linkType: hard -"google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.19.1": - version: 3.20.1 - resolution: "google-protobuf@npm:3.20.1" - checksum: a440fbc329bb441b253bc421b01540918f4b66921c47a3bc57d154d2677dc917cb1a29126ff35ddc4d8872d1b5843ef1ece60b6dff506ba64a9f5807962d3f61 +"google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.21.2": + version: 3.21.2 + resolution: "google-protobuf@npm:3.21.2" + checksum: 3caa2e1e2654714cc1a201ac5e5faabcaa48f5fba3d8ff9b64ca66fe19e4e0506b94053f32eddc77bf3a7a47ac1660315c6744185c1e2bb27654fd76fe91b988 languageName: node linkType: hard @@ -24114,8 +24530,8 @@ __metadata: linkType: hard "got@npm:^11.8.3": - version: 11.8.5 - resolution: "got@npm:11.8.5" + version: 11.8.6 + resolution: "got@npm:11.8.6" dependencies: "@sindresorhus/is": ^4.0.0 "@szmarczak/http-timer": ^4.0.5 @@ -24128,14 +24544,14 @@ __metadata: lowercase-keys: ^2.0.0 p-cancelable: ^2.0.0 responselike: ^2.0.0 - checksum: 2de8a1bbda4e9b6b2b72b2d2100bc055a59adc1740529e631f61feb44a8b9a1f9f8590941ed9da9df0090b6d6d0ed8ffee94cd9ac086ec3409b392b33440f7d2 + checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d languageName: node linkType: hard "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard @@ -24198,16 +24614,16 @@ __metadata: linkType: hard "graphql-language-service@npm:^5.0.6": - version: 5.0.6 - resolution: "graphql-language-service@npm:5.0.6" + version: 5.1.2 + resolution: "graphql-language-service@npm:5.1.2" dependencies: nullthrows: ^1.0.0 - vscode-languageserver-types: ^3.15.1 + vscode-languageserver-types: ^3.17.1 peerDependencies: graphql: ^15.5.0 || ^16.0.0 bin: graphql: dist/temp-bin.js - checksum: a7155ba934aa428278cce0f460fa3b8b12020a26a0355e60738974617a66d9b2f1bb7d41cbd72a1620a29e61f10ca438cbf72cbf2405b8f653edddfc69fec02a + checksum: 23551077017db9f57f17e73472145931db48b091d44ceeaa789bd69845b2ed48b1e9b8604319564b755788e6870eca93732a597bcd70ffcaf273f7970dfc7e68 languageName: node linkType: hard @@ -24226,8 +24642,8 @@ __metadata: linkType: hard "graphql-request@npm:^5.0.0": - version: 5.1.0 - resolution: "graphql-request@npm:5.1.0" + version: 5.2.0 + resolution: "graphql-request@npm:5.2.0" dependencies: "@graphql-typed-document-node/core": ^3.1.1 cross-fetch: ^3.1.5 @@ -24235,7 +24651,7 @@ __metadata: form-data: ^3.0.0 peerDependencies: graphql: 14 - 16 - checksum: 8b65d5c1b0cad8996a843b52305b2712ffbf842c700487d4cee1ed719f22baacaacfddafb65572bcddd67d57fd1d2d389dee2430ffba4b34c3ab542d079446c7 + checksum: a8aa37816378898e6fc8c4db04a1c114c98f98d90718cf1680bd96b22724bd43b1210619f9b0d328b5c1acb4f7b76d2227a2537cd5ab059bb54cf0debecb33bf languageName: node linkType: hard @@ -24260,36 +24676,23 @@ __metadata: linkType: hard "graphql-voyager@npm:^1.0.0-rc.31": - version: 1.0.0-rc.31 - resolution: "graphql-voyager@npm:1.0.0-rc.31" + version: 1.0.0 + resolution: "graphql-voyager@npm:1.0.0" dependencies: - "@f/animate": ^1.0.1 - "@material-ui/core": ^3.9.3 - classnames: ^2.2.6 - clipboard: ^2.0.4 - commonmark: ^0.29.0 - lodash: ^4.17.10 - prop-types: ^15.7.2 - svg-pan-zoom: ^3.6.0 - viz.js: 2.1.2 + "@mui/material": ^5.8.1 + commonmark: 0.30.0 + cspell: ^6.2.3 + lodash: 4.17.21 + svg-pan-zoom: ^3.6.1 peerDependencies: - graphql: ">=14.0.0" - react: ">=15.4.2" - react-dom: ">=15.4.2" - checksum: 80e826eeb42d286540447723ea35a463a3a155287914a45e24b69f31617d8ca74c0c43bdaa64123bf4ed046e68f7e31feca7661c06288551040f3e5b96c48fed + graphql: ">=16.5.0" + react: ">=18.0.0" + react-dom: ">=18.0.0" + checksum: 57f2ed4a8066adf50ea6c630be5ab10935c7e56c6b1e4163243a15034205c1ec563c203eac107d01be2b9c28354458512ad93b41c96dea30f94d08dd556393b9 languageName: node linkType: hard -"graphql-ws@npm:5.11.2": - version: 5.11.2 - resolution: "graphql-ws@npm:5.11.2" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 2c94b06c1919217dc15a0556474673de7aabcc7179a2982a87ded51856c105e4f4ee6d54a6c135a0a7f55d85a5997a6a15cff514959258885814adec6a61ff00 - languageName: node - linkType: hard - -"graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": +"graphql-ws@npm:5.12.0, graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": version: 5.12.0 resolution: "graphql-ws@npm:5.12.0" peerDependencies: @@ -24313,13 +24716,13 @@ __metadata: linkType: hard "grpc-docs@npm:^1.0.6, grpc-docs@npm:^1.1.2": - version: 1.1.3 - resolution: "grpc-docs@npm:1.1.3" + version: 1.1.4 + resolution: "grpc-docs@npm:1.1.4" dependencies: "@improbable-eng/grpc-web": ^0.15.0 "@types/minimatch": ^3.0.5 - gendocu-public-apis: ^1.0.0 - google-protobuf: ^3.19.1 + GendocuPublicApis: "https://git.gendocu.com/gendocu/GendocuPublicApis.git#master" + google-protobuf: ^3.21.2 grpc-docs: ^1.0.6 js-yaml: ^4.1.0 minimatch: ^3.0.4 @@ -24332,18 +24735,18 @@ __metadata: styled-components: ^5.3.3 peerDependencies: react: ^16.0.0 - checksum: 1bcd3179ce276e8fd34229acc6d3f1024908b7e6734e36ddcc4852c6db0100b900093355652577ab476c9927167cff92b05e560713995803154d4dbd4459f973 + checksum: 55b088011205fe82ced6af763136bb2494eb059445c5776bf29922439b814fa8983774a68910c47898cef5be82bea60801c2f96305e76170cff1df3f890b8d18 languageName: node linkType: hard "gtoken@npm:^6.1.0": - version: 6.1.1 - resolution: "gtoken@npm:6.1.1" + version: 6.1.2 + resolution: "gtoken@npm:6.1.2" dependencies: gaxios: ^5.0.1 google-p12-pem: ^4.0.0 jws: ^4.0.0 - checksum: f063ed3f418f5a9c33fbe599b09f56a55b18f6c8d2913f11cc2fc5025d53b96fd6ab1b4deb2c7631167d6b89d0939e4ea77f94767fcf338862ffda8911250980 + checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf languageName: node linkType: hard @@ -24357,9 +24760,9 @@ __metadata: linkType: hard "handle-thing@npm:^2.0.0": - version: 2.0.0 - resolution: "handle-thing@npm:2.0.0" - checksum: bb6a33ec17a36a9fca92c8f98b0208dca4b5659253d77a2db7d31a0bad467d01f94e59444e226b6d35877226516176f069501c01d847047e1abcbe303363070f + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c languageName: node linkType: hard @@ -24389,12 +24792,12 @@ __metadata: linkType: hard "har-validator@npm:~5.1.3": - version: 5.1.3 - resolution: "har-validator@npm:5.1.3" + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" dependencies: - ajv: ^6.5.5 + ajv: ^6.12.3 har-schema: ^2.0.0 - checksum: 5903ddf55f4403bb102a86dc2da073593716c7aa422863c244cb406b69e006551553c904e30ed5d123788675ae827f977b3b366211dc730b33a2b619f926199f + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 languageName: node linkType: hard @@ -24406,9 +24809,9 @@ __metadata: linkType: hard "harmony-reflect@npm:^1.4.6": - version: 1.6.1 - resolution: "harmony-reflect@npm:1.6.1" - checksum: 4cb91f86d262650d62c3ac713a2284ef0784a5c8be347188f97747db68d0e6d9801f09a3f12bacec59d5ec9d010cba64b8acb4c2c4827e172ef2ab215cdfef9d + version: 1.6.2 + resolution: "harmony-reflect@npm:1.6.2" + checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c languageName: node linkType: hard @@ -24433,6 +24836,13 @@ __metadata: languageName: node linkType: hard +"has-own-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "has-own-prop@npm:2.0.0" + checksum: ca6336e85ead2295c9603880cbc199e2d3ff7eaea0e9035d68fbc79892e9cf681abc62c0909520f112c671dad9961be2173b21dff951358cc98425c560e789e0 + languageName: node + linkType: hard + "has-property-descriptors@npm:^1.0.0": version: 1.0.0 resolution: "has-property-descriptors@npm:1.0.0" @@ -24442,7 +24852,14 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -24475,12 +24892,13 @@ __metadata: linkType: hard "hash-base@npm:^3.0.0": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc languageName: node linkType: hard @@ -24502,16 +24920,16 @@ __metadata: linkType: hard "hast-util-parse-selector@npm:^2.0.0": - version: 2.2.4 - resolution: "hast-util-parse-selector@npm:2.2.4" - checksum: 06e8b534626517929856877df116d95b46d384cc159595270c1e5b3af7404f20843065a1c675d60944445f7356c5c876ed10d5e2d66654b62fe06ecc8b423d45 + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 languageName: node linkType: hard "hast-util-whitespace@npm:^2.0.0": - version: 2.0.0 - resolution: "hast-util-whitespace@npm:2.0.0" - checksum: abeb5386075bfb0facfce89eed0e13d2cb27a0910cec8fd234b48821a1538387a73fa7f458842e8c404148dc69434acbc10488d75b02817e460652c2c894c024 + version: 2.0.1 + resolution: "hast-util-whitespace@npm:2.0.1" + checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 languageName: node linkType: hard @@ -24548,9 +24966,9 @@ __metadata: linkType: hard "headers-polyfill@npm:^3.1.0": - version: 3.1.0 - resolution: "headers-polyfill@npm:3.1.0" - checksum: a95257065684653b7185efbb9a380c547ea832002991b5adf0d90cd222073da2701be9dc2849d1970ecf15e8c35b383984358566afe6e76ca8ff1dbd7cdce3af + version: 3.1.2 + resolution: "headers-polyfill@npm:3.1.2" + checksum: 510ca9637ef652404dbd432e680418f8d418ba18094ef2f64c3d8de955ebf6e68d553c7f0aeaa5fc937d130b139c1e2d7c2066cd4cf0f740a4627924eaaee9db languageName: node linkType: hard @@ -24595,14 +25013,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^2.3.1": - version: 2.5.5 - resolution: "hoist-non-react-statics@npm:2.5.5" - checksum: ee2d05e5c7e1398ad84a15b0327f66bd78f38a8e0015e852f954b36434e32eb7e942d5357505020a3a1147f247b165bf1e69d72393e3accab67cafdafeb86230 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.2.1, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -24679,16 +25090,16 @@ __metadata: linkType: hard "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.2 - resolution: "html-entities@npm:2.3.2" - checksum: 522d8d202df301ff51b517a379e642023ed5c81ea9fb5674ffad88cff386165733d00b6089d5c2fcc644e44777d6072017b6216d8fa40f271d3610420d00a886 + version: 2.3.3 + resolution: "html-entities@npm:2.3.3" + checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 languageName: node linkType: hard "html-escaper@npm:^2.0.0": - version: 2.0.1 - resolution: "html-escaper@npm:2.0.1" - checksum: 5f76c4f12a155fc19dbcad7da11fe833623a84b7d120d9a96fb5c720f9fe1e3e68c1916e9c333fe383f5cdeeeb382cbcb4c22fc345a00863eba48f3a027c4878 + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 languageName: node linkType: hard @@ -24788,9 +25199,9 @@ __metadata: linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.3 - resolution: "http-parser-js@npm:0.5.3" - checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d languageName: node linkType: hard @@ -24868,12 +25279,12 @@ __metadata: linkType: hard "http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.0-beta.5.2 - resolution: "http2-wrapper@npm:1.0.0-beta.5.2" + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" dependencies: quick-lru: ^5.1.1 resolve-alpn: ^1.0.0 - checksum: c2b572ded523dbf52d8107f61791b527f85e9ce03e811f452e7e3c9e59925ebd1e757c60f8b46a549778675546e8ace189091a1764eb4601db46aa51292b84d0 + checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e languageName: node linkType: hard @@ -24916,9 +25327,9 @@ __metadata: linkType: hard "human-signals@npm:^4.3.0": - version: 4.3.0 - resolution: "human-signals@npm:4.3.0" - checksum: 662b976b1063a8afb8fd7fa50bde6975997e17ea6ceba2aad54aacf1dc239a2cd7d14d27b3ceca0c6288627f4b45c56c2c89618455ff52cd9377c02d6328cd7c + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 languageName: node linkType: hard @@ -24947,10 +25358,10 @@ __metadata: languageName: node linkType: hard -"hyphenate-style-name@npm:^1.0.2, hyphenate-style-name@npm:^1.0.3": - version: 1.0.3 - resolution: "hyphenate-style-name@npm:1.0.3" - checksum: e333f610e7cb32210861ff8c55f99582cdc39e4737903936a7eb61702c98f8db45f33d54f9d230221fabc4d321b2ab8382b8af50d24a1eba21916f2edddd7b85 +"hyphenate-style-name@npm:^1.0.3": + version: 1.0.4 + resolution: "hyphenate-style-name@npm:1.0.4" + checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 languageName: node linkType: hard @@ -25080,13 +25491,13 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.2.1 - resolution: "import-fresh@npm:3.2.1" +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: caef42418a087c3951fb676943a7f21ba8971aa07f9b622dff4af7edcef4160e1b172dccd85a88d7eb109cf41406a4592f70259e6b3b33aeafd042bb61f81d96 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard @@ -25114,14 +25525,21 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.0.2 - resolution: "import-local@npm:3.0.2" + version: 3.1.0 + resolution: "import-local@npm:3.1.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.2.2": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 3a5910a6f914b5f06b307d7d1c25710bc56f12e21e923d5b2180dd0d53c6c2d51e7b55df26f168b63f5670babcaca9422b7a9429e877bbb8c1997d79bd65882b languageName: node linkType: hard @@ -25132,24 +25550,6 @@ __metadata: languageName: node linkType: hard -"indefinite-observable@npm:^1.0.1": - version: 1.0.2 - resolution: "indefinite-observable@npm:1.0.2" - dependencies: - symbol-observable: 1.2.0 - checksum: 69a337967f48fca18989f9d68ad98c7220ed9b499bf00330ff72669a9583cb7f8e82f801da10720f720edf1313f427c77ce793350bdc413c952cec8ce112fc12 - languageName: node - linkType: hard - -"indefinite-observable@npm:^2.0.1": - version: 2.0.1 - resolution: "indefinite-observable@npm:2.0.1" - dependencies: - symbol-observable: 1.2.0 - checksum: b4305c999b7596901f8798e569b8faa030361dfb77f8b720e229558a29f544826f7e8987c55cc2a84c37ff2723594a965b96a40a6c71daae92b918f3eb393077 - languageName: node - linkType: hard - "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -25209,7 +25609,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.5, ini@npm:~1.3.0": +"ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -25224,11 +25624,12 @@ __metadata: linkType: hard "inline-style-prefixer@npm:^6.0.0": - version: 6.0.0 - resolution: "inline-style-prefixer@npm:6.0.0" + version: 6.0.4 + resolution: "inline-style-prefixer@npm:6.0.4" dependencies: - css-in-js-utils: ^2.0.0 - checksum: 1331a6184bed03d145e3b9a98363fc7a245590ea1a495df7376a99386737893d4318f8ecf873e2be8431cff1de91512b7a4b9e36326933d5647db0088b63ef4f + css-in-js-utils: ^3.1.0 + fast-loops: ^1.1.3 + checksum: caf7a75d18acbedc7e3b8bfac17563082becd2df6b65accad964a6afdf490329b42315c37fe65ba0177cc10fd32809eb40d62aba23a0118c74d87d4fc58defa2 languageName: node linkType: hard @@ -25277,21 +25678,21 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3": - version: 1.0.3 - resolution: "internal-slot@npm:1.0.3" +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" dependencies: - get-intrinsic: ^1.1.0 + get-intrinsic: ^1.2.0 has: ^1.0.3 side-channel: ^1.0.4 - checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a languageName: node linkType: hard -"internmap@npm:^1.0.0": - version: 1.0.1 - resolution: "internmap@npm:1.0.1" - checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 +"internmap@npm:1 - 2": + version: 2.0.3 + resolution: "internmap@npm:2.0.3" + checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 languageName: node linkType: hard @@ -25359,10 +25760,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard @@ -25380,13 +25781,6 @@ __metadata: languageName: node linkType: hard -"is-absolute-url@npm:^3.0.3": - version: 3.0.3 - resolution: "is-absolute-url@npm:3.0.3" - checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 - languageName: node - linkType: hard - "is-absolute@npm:^1.0.0": version: 1.0.0 resolution: "is-absolute@npm:1.0.0" @@ -25404,13 +25798,6 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:^2.0.0": - version: 2.0.0 - resolution: "is-alphabetical@npm:2.0.0" - checksum: 7193b3ffaa1b7657b71a4e25aea51f4bd750e589d7e1cc2e349edb942b0145873923477a689b248fe553602e0a3793bc012a13763c56dbc0241d14f3b98d8dc9 - languageName: node - linkType: hard - "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -25421,17 +25808,7 @@ __metadata: languageName: node linkType: hard -"is-alphanumerical@npm:^2.0.0": - version: 2.0.0 - resolution: "is-alphanumerical@npm:2.0.0" - dependencies: - is-alphabetical: ^2.0.0 - is-decimal: ^2.0.0 - checksum: 50a5003efd6824aba9f69bae8b37c76c2c7b76f0c6251dcc9a54408437364f5ae70da7f010e24a056c4bf19e20b0116d95f248be1089528a8b6696e28c1f0b0b - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.0, is-arguments@npm:^1.1.1": +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -25441,14 +25818,14 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1": - version: 3.0.1 - resolution: "is-array-buffer@npm:3.0.1" +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 + get-intrinsic: ^1.2.0 is-typed-array: ^1.1.10 - checksum: f26ab87448e698285daf707e52a533920449f7abf63714140ffab9d5571aa5a71ac2fa2677e8b793ad0d5d3e40078d4d2c8a0ab39c957e3cfc6513bb6c9dfdc9 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 languageName: node linkType: hard @@ -25495,18 +25872,18 @@ __metadata: linkType: hard "is-buffer@npm:^2.0.0": - version: 2.0.4 - resolution: "is-buffer@npm:2.0.4" - checksum: b1616ff40c1644e219d6038819044608e31edcc60eb287e5f214391222dea889a68c659f0654865ce34b6c4dcfa2c8cae0174343a0f6ae3f2150f7856326cb80 + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 languageName: node linkType: hard "is-builtin-module@npm:^3.1.0": - version: 3.1.0 - resolution: "is-builtin-module@npm:3.1.0" + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" dependencies: - builtin-modules: ^3.0.0 - checksum: f1e5dd2cd5f252d4d799b20a0c8c4f7e9c399c4d141749af76ca0121058d4062c3015d026f1b1409dd3d2a4ddfb9b15cf6eb9c370fed53fea8652ce35b5e95cb + builtin-modules: ^3.3.0 + checksum: e8f0ffc19a98240bda9c7ada84d846486365af88d14616e737d280d378695c8c448a621dcafc8332dbf0fcd0a17b0763b845400709963fa9151ddffece90ae88 languageName: node linkType: hard @@ -25564,13 +25941,6 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^2.0.0": - version: 2.0.0 - resolution: "is-decimal@npm:2.0.0" - checksum: 274ff0ef14e5694a2f698d65225680fb9b0c9a9da36afd320a9b5224aec1182679792ec6684fe15e3576ad3de91a2e1f6662e0e0e2f7bda6a50c026cd8030959 - languageName: node - linkType: hard - "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -25618,9 +25988,11 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.7": - version: 1.0.8 - resolution: "is-generator-function@npm:1.0.8" - checksum: ff6a510416885616fa57a2a1e043224a386ed37451c3686cc1ed38a63acd59b240f09b5d937aa86dedc3a7fb91ae6c0ce6477149d4b6f9be608a870e038b38bd + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b languageName: node linkType: hard @@ -25640,13 +26012,6 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^2.0.0": - version: 2.0.0 - resolution: "is-hexadecimal@npm:2.0.0" - checksum: 62d03640345e13a3edcccbd5c80e47088c7163e54ab6e945f77fd5bf2b1e8571fb7fd4c2d6eff9f2720a6db81cb13377f0acd0b245344b69dc85be5239b8a6f6 - languageName: node - linkType: hard - "is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": version: 1.1.3 resolution: "is-in-browser@npm:1.1.3" @@ -25731,6 +26096,13 @@ __metadata: languageName: node linkType: hard +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + "is-path-cwd@npm:^3.0.0": version: 3.0.0 resolution: "is-path-cwd@npm:3.0.0" @@ -25767,9 +26139,9 @@ __metadata: linkType: hard "is-plain-obj@npm:^4.0.0": - version: 4.0.0 - resolution: "is-plain-obj@npm:4.0.0" - checksum: a6bb55a90636345a64c6153b74d85a9b6440f9975f4dcc57eed596c280b7ba228c71c406355a3147ed0488330d2743d5756e052c9492b1aa4f7dcd281f08c4b6 + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce languageName: node linkType: hard @@ -25803,13 +26175,6 @@ __metadata: languageName: node linkType: hard -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 - languageName: node - linkType: hard - "is-promise@npm:^4.0.0": version: 4.0.0 resolution: "is-promise@npm:4.0.0" @@ -25852,13 +26217,6 @@ __metadata: languageName: node linkType: hard -"is-resolvable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-resolvable@npm:1.1.0" - checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 - languageName: node - linkType: hard - "is-root@npm:^2.1.0": version: 2.1.0 resolution: "is-root@npm:2.1.0" @@ -25907,13 +26265,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^1.0.1": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae - languageName: node - linkType: hard - "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -25955,7 +26306,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.10 resolution: "is-typed-array@npm:1.1.10" dependencies: @@ -25968,7 +26319,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:~1.0.0": +"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -26070,7 +26421,7 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8, isbinaryfile@npm:^4.0.8 <5": +"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8 <5": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 @@ -26109,16 +26460,6 @@ __metadata: languageName: node linkType: hard -"isomorphic-fetch@npm:^2.1.1": - version: 2.2.1 - resolution: "isomorphic-fetch@npm:2.2.1" - dependencies: - node-fetch: ^1.0.1 - whatwg-fetch: ">=0.10.0" - checksum: bb5daa7c3785d6742f4379a81e55b549a469503f7c9bf9411b48592e86632cf5e8fe8ea878dba185c0f33eb7c510c23abdeb55aebfdf5d3c70f031ced68c5424 - languageName: node - linkType: hard - "isomorphic-fetch@npm:^3.0.0": version: 3.0.0 resolution: "isomorphic-fetch@npm:3.0.0" @@ -26139,8 +26480,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.8.0": - version: 1.22.0 - resolution: "isomorphic-git@npm:1.22.0" + version: 1.23.0 + resolution: "isomorphic-git@npm:1.23.0" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -26155,7 +26496,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: 59f1bf6a6f3e3fad2d43ffa992c20fea41c41e041e11422caea2da252e6cb712e6c18bb2878ed5c7e6b37336d4dc967fb54f7335d28a365c062b7c23e4ba07a9 + checksum: a733c1183855a90edd6d82cfdccd467886045fa98af211a50df7cbb2d3088e122542b9eef0f79ebe9d5e127a81c62dfa0ff561d906f0c9d4e5eb7a0c1f13f56f languageName: node linkType: hard @@ -26183,15 +26524,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.1.0 - resolution: "istanbul-lib-instrument@npm:5.1.0" + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 - checksum: 8b82e733c69fe9f94d2e21f3e5760c9bedb110329aa75df4bd40df95f1cac3bf38767e43f35b125cc547ceca7376b72ce7d95cc5238b7e9088345c7b589233d3 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 languageName: node linkType: hard @@ -26207,23 +26548,23 @@ __metadata: linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.0 - resolution: "istanbul-lib-source-maps@npm:4.0.0" + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 languageName: node linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.4 - resolution: "istanbul-reports@npm:3.1.4" + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard @@ -26264,57 +26605,58 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-changed-files@npm:29.4.3" +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 languageName: node linkType: hard -"jest-circus@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-circus@npm:29.4.3" +"jest-circus@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-circus@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/expect": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-runtime: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 + jest-each: ^29.5.0 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 p-limit: ^3.1.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 + checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 languageName: node linkType: hard -"jest-cli@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-cli@npm:29.4.3" +"jest-cli@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-cli@npm:29.5.0" dependencies: - "@jest/core": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/core": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-config: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -26324,34 +26666,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 + checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba languageName: node linkType: hard -"jest-config@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-config@npm:29.4.3" +"jest-config@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-config@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.4.3 - "@jest/types": ^29.4.3 - babel-jest: ^29.4.3 + "@jest/test-sequencer": ^29.5.0 + "@jest/types": ^29.5.0 + babel-jest: ^29.5.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.4.3 - jest-environment-node: ^29.4.3 + jest-circus: ^29.5.0 + jest-environment-node: ^29.5.0 jest-get-type: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-runner: ^29.4.3 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-resolve: ^29.5.0 + jest-runner: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26362,7 +26704,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 + checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c languageName: node linkType: hard @@ -26387,15 +26729,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-diff@npm:29.4.3" +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" dependencies: chalk: ^4.0.0 diff-sequences: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 languageName: node linkType: hard @@ -26408,51 +26750,51 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-each@npm:29.4.3" +"jest-each@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-each@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 - jest-util: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d + jest-util: ^29.5.0 + pretty-format: ^29.5.0 + checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 languageName: node linkType: hard "jest-environment-jsdom@npm:^29.0.2": - version: 29.4.3 - resolution: "jest-environment-jsdom@npm:29.4.3" + version: 29.5.0 + resolution: "jest-environment-jsdom@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/fake-timers": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.4.3 - jest-util: ^29.4.3 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 3fb29bb4b472e05a38fdb235aa936ad469dfa2f6c1cab97fe3d1a7c585351976d05c7bbbd715b9747f070a225dcf10a9166df1461e0fb838ea7a377a8e64bed4 + checksum: 3df7fc85275711f20b483ac8cd8c04500704ed0f69791eb55c574b38f5a39470f03d775cf20c1025bc1884916ac0573aa2fa4db1bb74225bc7fdd95ba97ad0da languageName: node linkType: hard -"jest-environment-node@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-environment-node@npm:29.4.3" +"jest-environment-node@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-environment-node@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/fake-timers": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^29.4.3 - jest-util: ^29.4.3 - checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 languageName: node linkType: hard @@ -26470,11 +26812,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-haste-map@npm:29.4.3" +"jest-haste-map@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-haste-map@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -26482,24 +26824,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.4.3 - jest-util: ^29.4.3 - jest-worker: ^29.4.3 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 + checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 languageName: node linkType: hard -"jest-leak-detector@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-leak-detector@npm:29.4.3" +"jest-leak-detector@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-leak-detector@npm:29.5.0" dependencies: jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 + pretty-format: ^29.5.0 + checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 languageName: node linkType: hard @@ -26515,15 +26857,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-matcher-utils@npm:29.4.3" +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" dependencies: chalk: ^4.0.0 - jest-diff: ^29.4.3 + jest-diff: ^29.5.0 jest-get-type: ^29.4.3 - pretty-format: ^29.4.3 - checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 languageName: node linkType: hard @@ -26544,43 +26886,43 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-message-util@npm:29.4.3" +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf languageName: node linkType: hard -"jest-mock@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-mock@npm:29.4.3" +"jest-mock@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-mock@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-util: ^29.4.3 - checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 + jest-util: ^29.5.0 + checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c languageName: node linkType: hard "jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" peerDependencies: jest-resolve: "*" peerDependenciesMeta: jest-resolve: optional: true - checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 languageName: node linkType: hard @@ -26591,95 +26933,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-resolve-dependencies@npm:29.4.3" +"jest-resolve-dependencies@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve-dependencies@npm:29.5.0" dependencies: jest-regex-util: ^29.4.3 - jest-snapshot: ^29.4.3 - checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 + jest-snapshot: ^29.5.0 + checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf languageName: node linkType: hard -"jest-resolve@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-resolve@npm:29.4.3" +"jest-resolve@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve@npm:29.5.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 + jest-haste-map: ^29.5.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.4.3 - jest-validate: ^29.4.3 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc + checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f languageName: node linkType: hard -"jest-runner@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-runner@npm:29.4.3" +"jest-runner@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runner@npm:29.5.0" dependencies: - "@jest/console": ^29.4.3 - "@jest/environment": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/console": ^29.5.0 + "@jest/environment": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.4.3 - jest-environment-node: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-leak-detector: ^29.4.3 - jest-message-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-runtime: ^29.4.3 - jest-util: ^29.4.3 - jest-watcher: ^29.4.3 - jest-worker: ^29.4.3 + jest-environment-node: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-leak-detector: ^29.5.0 + jest-message-util: ^29.5.0 + jest-resolve: ^29.5.0 + jest-runtime: ^29.5.0 + jest-util: ^29.5.0 + jest-watcher: ^29.5.0 + jest-worker: ^29.5.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 + checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-runtime@npm:29.4.3" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runtime@npm:29.5.0" dependencies: - "@jest/environment": ^29.4.3 - "@jest/fake-timers": ^29.4.3 - "@jest/globals": ^29.4.3 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/globals": ^29.5.0 "@jest/source-map": ^29.4.3 - "@jest/test-result": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.4.3 - jest-message-util: ^29.4.3 - jest-mock: ^29.4.3 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 jest-regex-util: ^29.4.3 - jest-resolve: ^29.4.3 - jest-snapshot: ^29.4.3 - jest-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 + checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d languageName: node linkType: hard -"jest-snapshot@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-snapshot@npm:29.4.3" +"jest-snapshot@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-snapshot@npm:29.5.0" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -26687,25 +27029,24 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.4.3 - "@jest/transform": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/expect-utils": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.4.3 + expect: ^29.5.0 graceful-fs: ^4.2.9 - jest-diff: ^29.4.3 + jest-diff: ^29.5.0 jest-get-type: ^29.4.3 - jest-haste-map: ^29.4.3 - jest-matcher-utils: ^29.4.3 - jest-message-util: ^29.4.3 - jest-util: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 natural-compare: ^1.4.0 - pretty-format: ^29.4.3 + pretty-format: ^29.5.0 semver: ^7.3.5 - checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 + checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b languageName: node linkType: hard @@ -26723,47 +27064,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-util@npm:29.4.3" +"jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 languageName: node linkType: hard -"jest-validate@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-validate@npm:29.4.3" +"jest-validate@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-validate@npm:29.5.0" dependencies: - "@jest/types": ^29.4.3 + "@jest/types": ^29.5.0 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.4.3 - checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 + pretty-format: ^29.5.0 + checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 languageName: node linkType: hard -"jest-watcher@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-watcher@npm:29.4.3" +"jest-watcher@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-watcher@npm:29.5.0" dependencies: - "@jest/test-result": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.4.3 + jest-util: ^29.5.0 string-length: ^4.0.1 - checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc + checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 languageName: node linkType: hard @@ -26788,36 +27129,36 @@ __metadata: linkType: hard "jest-worker@npm:^28.0.2": - version: 28.1.1 - resolution: "jest-worker@npm:28.1.1" + version: 28.1.3 + resolution: "jest-worker@npm:28.1.3" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 28519c43b4007e60a3756d27f1e7884192ee9161b6a9587383a64b6535f820cc4868e351a67775e0feada41465f48ccf323a8db34ae87e15a512ddac5d1424b2 + checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca languageName: node linkType: hard -"jest-worker@npm:^29.4.3": - version: 29.4.3 - resolution: "jest-worker@npm:29.4.3" +"jest-worker@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" dependencies: "@types/node": "*" - jest-util: ^29.4.3 + jest-util: ^29.5.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 languageName: node linkType: hard "jest@npm:^29.0.2": - version: 29.4.3 - resolution: "jest@npm:29.4.3" + version: 29.5.0 + resolution: "jest@npm:29.5.0" dependencies: - "@jest/core": ^29.4.3 - "@jest/types": ^29.4.3 + "@jest/core": ^29.5.0 + "@jest/types": ^29.5.0 import-local: ^3.0.2 - jest-cli: ^29.4.3 + jest-cli: ^29.5.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -26825,7 +27166,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f + checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 languageName: node linkType: hard @@ -26839,11 +27180,11 @@ __metadata: linkType: hard "jiti@npm:^1.17.1": - version: 1.17.2 - resolution: "jiti@npm:1.17.2" + version: 1.18.2 + resolution: "jiti@npm:1.18.2" bin: jiti: bin/jiti.js - checksum: 51941fea3622d1ff80d914ec6ec95ae463ede598a4a2317f1e8ff018823212eba6b9ea1c638c97c18f681870b1c2b9f49fbb13021b7c2415c46c8a3b1910f1e3 + checksum: 46c41cd82d01c6efdee3fc0ae9b3e86ed37457192d6366f19157d863d64961b07982ab04e9d5879576a1af99cc4d132b0b73b336094f86a5ce9fb1029ec2d29f languageName: node linkType: hard @@ -26869,29 +27210,29 @@ __metadata: linkType: hard "joi@npm:^17.7.0": - version: 17.7.0 - resolution: "joi@npm:17.7.0" + version: 17.9.0 + resolution: "joi@npm:17.9.0" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 - "@sideway/formula": ^3.0.0 + "@sideway/formula": ^3.0.1 "@sideway/pinpoint": ^2.0.0 - checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c + checksum: d6d0f62df122f5aa11ea9d5bbedd92713b1a9b6ec3f82e1087432e0fd127b44fbbe7232d2803d3aae2f9db5a75968eeb480799a2eb4b571c5bb9278e22a26b56 languageName: node linkType: hard -"jose@npm:^4.10.0, jose@npm:^4.6.0": - version: 4.12.0 - resolution: "jose@npm:4.12.0" - checksum: 09e67611768127ab54b6b507401de4b1f87e1e285cf2c2fc917e931e001b7e584c90081b421f483f13a6eec4fc44936e4a5f4b8ae2d59928061e886e35d33fa2 +"jose@npm:^4.10.0, jose@npm:^4.11.4, jose@npm:^4.6.0": + version: 4.13.1 + resolution: "jose@npm:4.13.1" + checksum: 89be959573beee69bd443493887d78799fd42340b45afa2c6681beda30314bcdfa5575f6977203c199e4c3e0ec2fc18d3c94745e7f0d59db51dedfae0efee63d languageName: node linkType: hard "joycon@npm:^3.0.1": - version: 3.1.0 - resolution: "joycon@npm:3.1.0" - checksum: f21f17b46142f14c92cc99f5a157ebf224717a284c45e870452be5c5ebc3bb7e07e66692fc9da3a40f6b08106ac986dc9eae2f77977db62416fe47a99b0de0ac + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 languageName: node linkType: hard @@ -26924,9 +27265,9 @@ __metadata: linkType: hard "js-sdsl@npm:^4.1.4": - version: 4.1.4 - resolution: "js-sdsl@npm:4.1.4" - checksum: 1977cea4ab18e0e03e28bdf0371d8b443fad65ca0988e0faa216406faf6bb943714fe8f7cc7a5bfe5f35ba3d94ddae399f4d10200f547f2c3320688b0670d726 + version: 4.3.0 + resolution: "js-sdsl@npm:4.3.0" + checksum: ce908257cf6909e213af580af3a691a736f5ee8b16315454768f917a682a4ea0c11bde1b241bbfaecedc0eb67b72101b2c2df2ffaed32aed5d539fca816f054e languageName: node linkType: hard @@ -27106,16 +27447,16 @@ __metadata: linkType: hard "jsdom@npm:^20.0.0": - version: 20.0.0 - resolution: "jsdom@npm:20.0.0" + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" dependencies: abab: ^2.0.6 - acorn: ^8.7.1 - acorn-globals: ^6.0.0 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 cssom: ^0.5.0 cssstyle: ^2.3.0 data-urls: ^3.0.2 - decimal.js: ^10.3.1 + decimal.js: ^10.4.2 domexception: ^4.0.0 escodegen: ^2.0.0 form-data: ^4.0.0 @@ -27123,25 +27464,24 @@ __metadata: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.1 is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: ^7.0.0 + nwsapi: ^2.2.2 + parse5: ^7.1.1 saxes: ^6.0.0 symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^3.0.0 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 webidl-conversions: ^7.0.0 whatwg-encoding: ^2.0.0 whatwg-mimetype: ^3.0.0 whatwg-url: ^11.0.0 - ws: ^8.8.0 + ws: ^8.11.0 xml-name-validator: ^4.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: f69b40679d8cfaee2353615445aaff08b823c53dc7778ede6592d02ed12b3e9fb4e8db2b6d033551b67e08424a3adb2b79d231caa7dcda2d16019c20c705c11f + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 languageName: node linkType: hard @@ -27281,11 +27621,11 @@ __metadata: linkType: hard "json-stable-stringify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify@npm:1.0.1" + version: 1.0.2 + resolution: "json-stable-stringify@npm:1.0.2" dependencies: - jsonify: ~0.0.0 - checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 + jsonify: ^0.0.1 + checksum: ec10863493fb728481ed7576551382768a173d5b884758db530def00523b862083a3fd70fee24b39e2f47f5f502e22f9a1489dd66da3535b63bf6241dbfca800 languageName: node linkType: hard @@ -27330,7 +27670,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1": +"json5@npm:^1.0.1, json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" dependencies: @@ -27341,7 +27681,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1": +"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.2": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -27382,10 +27722,10 @@ __metadata: languageName: node linkType: hard -"jsonify@npm:~0.0.0": - version: 0.0.0 - resolution: "jsonify@npm:0.0.0" - checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 languageName: node linkType: hard @@ -27460,154 +27800,81 @@ __metadata: languageName: node linkType: hard -"jss-camel-case@npm:^6.0.0": - version: 6.1.0 - resolution: "jss-camel-case@npm:6.1.0" - dependencies: - hyphenate-style-name: ^1.0.2 - peerDependencies: - jss: ^9.7.0 - checksum: f20ad892cddc30241b5127d648233b513ce57b2a6ed2f710cd995510f8d06e1418cd8f6e8e50dc6bd60b2e8a35159bfdeb40143938e0f2cdc19fd39279953789 - languageName: node - linkType: hard - -"jss-default-unit@npm:^8.0.2": - version: 8.0.2 - resolution: "jss-default-unit@npm:8.0.2" - peerDependencies: - jss: ^9.4.0 - checksum: 5277c5ccc3d56f5c137d6d65f0fc36d15eb22ef08b5949e887ee75e9f4f25197e25f2a99706b70a2828cee010fd8ed7484fb1bb2086fe327f2b24b1bdcc22abb - languageName: node - linkType: hard - -"jss-global@npm:^3.0.0": - version: 3.0.0 - resolution: "jss-global@npm:3.0.0" - peerDependencies: - jss: ^9.0.0 - checksum: e3fa80d8251ba5f183d9b0b4416d64e8f5d285cfdb595cc600daf1a1366b67bca573939bb71d98b6596bf4d6f2c95711cf53a358af3d63cd7945dbb434c6547b - languageName: node - linkType: hard - -"jss-nested@npm:^6.0.1": - version: 6.0.1 - resolution: "jss-nested@npm:6.0.1" - dependencies: - warning: ^3.0.0 - peerDependencies: - jss: ^9.0.0 - checksum: 437bdacc559be0b4b5bc1faa2bc77b5c6cf14733fefbf73a34bb7335786b9f08e4e79b3d73cf83b386959adcd8fa9d725877912e96d9a0921ed38baa1a69b8d9 - languageName: node - linkType: hard - "jss-plugin-camel-case@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-camel-case@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-camel-case@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.6.0 - checksum: 75c23826deef63c3603cfb47331d1eaf9feeafd097bd115a076f2ee9fb696855d3f18b3f41455a046120fddf0ea11985259c1b8b8a37b3556f4de1a1c83affd5 + jss: 10.10.0 + checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 languageName: node linkType: hard "jss-plugin-default-unit@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-default-unit@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-default-unit@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7ae36fadf4f206a16e49c40806ef92ba1f0e60395488ab8ad4df96796b408013b38ea5ed975155ecd7833a42a96c8d5cb1e90aef011279816633e60f807ec330 + jss: 10.10.0 + checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa languageName: node linkType: hard "jss-plugin-global@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-global@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-global@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7aab58408c77071c571dd2c2132edad8d40b683513a8de534f0ec7f63926fd9d9fcf6bdda82103eb541452a723b992f061720f8e5cf2014acb7f6bbbde111f56 + jss: 10.10.0 + checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 languageName: node linkType: hard "jss-plugin-nested@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-nested@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-nested@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 + jss: 10.10.0 tiny-warning: ^1.0.2 - checksum: 38095127e8b5ddb0a33ccaf61a4d89dc1b0f78e6d06d079a47a14bca4aed4e885f1957d83f11c5da08b4249b2c629e8bc62b2996f1674ca1302575a7b2b11171 + checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de languageName: node linkType: hard "jss-plugin-props-sort@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-props-sort@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-props-sort@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 2917ff301e667f75efa15df865a860a50d4319d415d1169c213e66b464edc2b37b6f428be2d974ccdde7c8d61c50123f18e788143a96eacc2a1c42ad250ae375 + jss: 10.10.0 + checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba languageName: node linkType: hard "jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-rule-value-function@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-rule-value-function@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 + jss: 10.10.0 tiny-warning: ^1.0.2 - checksum: 709e1ce0afdc39a52cb78e371fef626f933e99992790b15771d85056176bdf69365d62cfed6ce95434752cc1a1e7e05a6f2548e4cd5999808d50a28174315be3 + checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee languageName: node linkType: hard "jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" + version: 10.10.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.6.0 - checksum: 9db048022ee2fb79a223a9f1be5976e131715057e3c0200cfcead9b9f8625023942534afa261e3c967cee6ad716bfd7d4a2f356556178f60f4eddcf83bcd8856 + jss: 10.10.0 + checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff languageName: node linkType: hard -"jss-props-sort@npm:^6.0.0": - version: 6.0.0 - resolution: "jss-props-sort@npm:6.0.0" - peerDependencies: - jss: ^9.0.0 - checksum: 82a04f625a2f2b3a71b2fcb00b1ed0478137c83dc47c323d24c7ea88d08c9ea295b061f99cf264db133fef3435366d6da594724f7713e0415dc50b4eff2aeb53 - languageName: node - linkType: hard - -"jss-vendor-prefixer@npm:^7.0.0": - version: 7.0.0 - resolution: "jss-vendor-prefixer@npm:7.0.0" - dependencies: - css-vendor: ^0.3.8 - peerDependencies: - jss: ^9.0.0 - checksum: 8ec3608711833e79da7ccfffd8177e752f16093589fa28d3a24ec19e6588fbc6a07cc5cacf59ef4c111ab1d0fb72e07b88cb3444eb8c0c6ed4cc8107da984633 - languageName: node - linkType: hard - -"jss@npm:10.6.0": - version: 10.6.0 - resolution: "jss@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - csstype: ^3.0.2 - indefinite-observable: ^2.0.1 - is-in-browser: ^1.1.3 - tiny-warning: ^1.0.2 - checksum: 529edd871ddf059beef55ee0f974ad8436fbcf050d6538e6d2d7edab53ce2c09983d2f863e42a1473dd0e42a0447e9912bce6706bb0e539226d92cdaad128d46 - languageName: node - linkType: hard - -"jss@npm:^10.5.1, jss@npm:~10.10.0": +"jss@npm:10.10.0, jss@npm:^10.5.1, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" dependencies: @@ -27619,17 +27886,6 @@ __metadata: languageName: node linkType: hard -"jss@npm:^9.8.7": - version: 9.8.7 - resolution: "jss@npm:9.8.7" - dependencies: - is-in-browser: ^1.1.3 - symbol-observable: ^1.1.0 - warning: ^3.0.0 - checksum: ebb264cc893fb8c17a0277875947f8f72e01f5be991bf7f61a39abb861e1276e75ee402fdd2be9ce827af839a1a08bd81ad86a4e108d57fd7d7ebb2361837a53 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -27640,17 +27896,17 @@ __metadata: languageName: node linkType: hard -"just-diff-apply@npm:^4.0.1": - version: 4.0.1 - resolution: "just-diff-apply@npm:4.0.1" - checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa languageName: node linkType: hard "just-diff@npm:^5.0.1": - version: 5.0.1 - resolution: "just-diff@npm:5.0.1" - checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 + version: 5.2.0 + resolution: "just-diff@npm:5.2.0" + checksum: 5527fb6d28a446185250fba501ad857370c049bac7aa5a34c9ec82a45e1380af1a96137be7df2f87252d9f75ef67be41d4c0267d481ed0235b2ceb3ee1f5f75d languageName: node linkType: hard @@ -27758,7 +28014,7 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3, kleur@npm:^4.1.4": +"kleur@npm:^4.0.3, kleur@npm:^4.1.5": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 @@ -27819,9 +28075,9 @@ __metadata: linkType: hard "language-subtag-registry@npm:~0.3.2": - version: 0.3.21 - resolution: "language-subtag-registry@npm:0.3.21" - checksum: 5f794525a5bfcefeea155a681af1c03365b60e115b688952a53c6e0b9532b09163f57f1fcb69d6150e0e805ec0350644a4cb35da98f4902562915be9f89572a1 + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a languageName: node linkType: hard @@ -27834,6 +28090,16 @@ __metadata: languageName: node linkType: hard +"launch-editor@npm:^2.6.0": + version: 2.6.0 + resolution: "launch-editor@npm:2.6.0" + dependencies: + picocolors: ^1.0.0 + shell-quote: ^1.7.3 + checksum: 48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d + languageName: node + linkType: hard + "lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -27842,11 +28108,11 @@ __metadata: linkType: hard "lazystream@npm:^1.0.0": - version: 1.0.0 - resolution: "lazystream@npm:1.0.0" + version: 1.0.1 + resolution: "lazystream@npm:1.0.1" dependencies: readable-stream: ^2.0.5 - checksum: 6cb9352a697bad74471671b299997edc736b400bb405dc409acfc9ffe584bb6f86898c4ace86b2f145ae32fe42ef60bd68749acb62c2ff3fa6bded721193f79c + checksum: 822c54c6b87701a6491c70d4fabc4cafcf0f87d6b656af168ee7bb3c45de9128a801cb612e6eeeefc64d298a7524a698dd49b13b0121ae50c2ae305f0dcc5310 languageName: node linkType: hard @@ -27947,7 +28213,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3": +"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 @@ -27981,11 +28247,11 @@ __metadata: linkType: hard "linkify-it@npm:^3.0.1": - version: 3.0.2 - resolution: "linkify-it@npm:3.0.2" + version: 3.0.3 + resolution: "linkify-it@npm:3.0.3" dependencies: uc.micro: ^1.0.1 - checksum: 08e14854ec3c29e3578311b1cd95e469952a27f191633189a23890628939fc45c6d84fa4495abb9f7f06e60f73a31b8881d834214864d46db914a09ffc7889ae + checksum: 31367a4bb70c5bbc9703246236b504b0a8e049bcd4e0de4291fa50f0ebdebf235b5eb54db6493cb0b1319357c6eeafc4324c9f4aa34b0b943d9f2e11a1268fbc languageName: node linkType: hard @@ -28055,8 +28321,8 @@ __metadata: linkType: hard "listr2@npm:^5.0.7": - version: 5.0.7 - resolution: "listr2@npm:5.0.7" + version: 5.0.8 + resolution: "listr2@npm:5.0.8" dependencies: cli-truncate: ^2.1.0 colorette: ^2.0.19 @@ -28071,7 +28337,7 @@ __metadata: peerDependenciesMeta: enquirer: optional: true - checksum: 5c2cb6ba3f7a5cfd548f89405febe73dc937acb6060227198c05da0ed5d5285a8107c61fcc4e33884e3bbdd447411aff7580af396bd22b6a11047ceab4950fab + checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c languageName: node linkType: hard @@ -28101,9 +28367,9 @@ __metadata: linkType: hard "loader-runner@npm:^4.2.0": - version: 4.2.0 - resolution: "loader-runner@npm:4.2.0" - checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 languageName: node linkType: hard @@ -28130,9 +28396,9 @@ __metadata: linkType: hard "loader-utils@npm:^3.2.0": - version: 3.2.0 - resolution: "loader-utils@npm:3.2.0" - checksum: c7b9a8dc4b3bc19e9ef563c48e3a18ea9f8bb2da1ad38a12e4b88358cfba5f148a7baf12d78fe78ffcb718ce1e062ab31fcf5c148459f1247a672a4213471e80 + version: 3.2.1 + resolution: "loader-utils@npm:3.2.1" + checksum: 4e3ea054cdc8be1ab1f1238f49f42fdf0483039eff920fb1d442039f3f0ad4ebd11fb8e584ccdf2cb7e3c56b3d40c1832416e6408a55651b843da288960cc792 languageName: node linkType: hard @@ -28367,7 +28633,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -28411,9 +28677,9 @@ __metadata: linkType: hard "loglevel@npm:^1.6.8": - version: 1.8.0 - resolution: "loglevel@npm:1.8.0" - checksum: 41aeea17de24aba8dba68084a31fe9189648bce4f39c1277e021bb276c3c53a75b0d337395919cf271068ad40ecefabad0e4fdeb4a8f11908beee532b898f4a7 + version: 1.8.1 + resolution: "loglevel@npm:1.8.1" + checksum: a1a62db40291aaeaef2f612334c49e531bff71cc1d01a2acab689ab80d59e092f852ab164a5aedc1a752fdc46b7b162cb097d8a9eb2cf0b299511106c29af61d languageName: node linkType: hard @@ -28425,16 +28691,16 @@ __metadata: linkType: hard "long@npm:^5.0.0": - version: 5.2.0 - resolution: "long@npm:5.2.0" - checksum: 37aa4e67b9c3eebc6d9d675adcc9d06f06059ca268922a71273de389746bf07f0ff282f9e604d17fdf84c4149099b44e936ea2b621a6c4759a216621afa97efd + version: 5.2.1 + resolution: "long@npm:5.2.1" + checksum: 9264da12d1b7df67e5aa6da4498144293caf1ad12e7f092efe4e9a2d32c53f0bbf7334f7cef997080a2a3af061142558ab366efa71698d98b1cdb883477445a7 languageName: node linkType: hard "longest-streak@npm:^3.0.0": - version: 3.0.0 - resolution: "longest-streak@npm:3.0.0" - checksum: 02de69d43c25dc0bd7f617052201ec0746f6060acefd1dd10e579d89ec996177702c92e3b526f0c88a1823988c62cd537b17cac65693f49d8af076f1ac016364 + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 languageName: node linkType: hard @@ -28484,7 +28750,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.3": +"lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" dependencies: @@ -28534,27 +28800,27 @@ __metadata: linkType: hard "luxon@npm:^3.0.0, luxon@npm:^3.2.1": - version: 3.2.1 - resolution: "luxon@npm:3.2.1" - checksum: 3fa3def2c5f5d3032b4c46220c4da8aeb467ac979888fc9d2557adcd22195f93516b4ad5909a75862bec8dc6ddc0953b0f38e6d2f4a8ab8450ddc531a83cf20d + version: 3.3.0 + resolution: "luxon@npm:3.3.0" + checksum: 50cf17a0dc155c3dcacbeae8c0b7e80db425e0ba97b9cbdf12a7fc142d841ff1ab1560919f033af46240ed44e2f70c49f76e3422524c7fc8bb8d81ca47c66187 languageName: node linkType: hard "lz-string@npm:^1.4.4": - version: 1.4.4 - resolution: "lz-string@npm:1.4.4" + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" bin: lz-string: bin/bin.js - checksum: 54e31238a61a84d8f664d9860a9fba7310c5b97a52c444f80543069bc084815eff40b8d4474ae1d93992fdf6c252dca37cf27f6adbeb4dbc3df2f3ac773d0e61 + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d languageName: node linkType: hard "magic-string@npm:^0.25.7": - version: 0.25.7 - resolution: "magic-string@npm:0.25.7" + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" dependencies: - sourcemap-codec: ^1.4.4 - checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 + sourcemap-codec: ^1.4.8 + checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a languageName: node linkType: hard @@ -28688,12 +28954,12 @@ __metadata: linkType: hard "markdown-it-anchor@npm:^8.4.1": - version: 8.6.4 - resolution: "markdown-it-anchor@npm:8.6.4" + version: 8.6.7 + resolution: "markdown-it-anchor@npm:8.6.7" peerDependencies: "@types/markdown-it": "*" markdown-it: "*" - checksum: bde310d0202450a228662921df9d9c2e95b3c5762512e8eed1d472fcc812fb20e6b4e98480cda88c8b56b0baf34ac70d6bf8404309c5a2321ebe62da43cd6fe6 + checksum: 828236768ac7f61ed5591393c1b1bfc5dbf2b6d0c58a3deec606c61dddaa12658a34450cbef37ab50a04453e618ce1efd47d86e4e52595024334898fd306225b languageName: node linkType: hard @@ -28713,9 +28979,9 @@ __metadata: linkType: hard "markdown-table@npm:^3.0.0": - version: 3.0.1 - resolution: "markdown-table@npm:3.0.1" - checksum: 5376078ab652ba68cf855b33d338b3472d28b9f8c254dc0530261f55490261e861742a8e6625239cbbed08f899cbf0de7d2d1d5de48d3e7c6afd5f0876730227 + version: 3.0.3 + resolution: "markdown-table@npm:3.0.3" + checksum: 8fcd3d9018311120fbb97115987f8b1665a603f3134c93fbecc5d1463380c8036f789e2a62c19432058829e594fff8db9ff81c88f83690b2f8ed6c074f8d9e10 languageName: node linkType: hard @@ -28787,33 +29053,35 @@ __metadata: linkType: hard "mdast-util-definitions@npm:^5.0.0": - version: 5.1.0 - resolution: "mdast-util-definitions@npm:5.1.0" + version: 5.1.2 + resolution: "mdast-util-definitions@npm:5.1.2" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - unist-util-visit: ^3.0.0 - checksum: a5237dc5925d965ec5f4c237b8d2fbc4728c18402f4f0cea0c947fb6241d7f2c7264b8bd5000363800388003d1474d57f5d5d29e0605a504bd186e59ddf8906a + unist-util-visit: ^4.0.0 + checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae languageName: node linkType: hard "mdast-util-find-and-replace@npm:^2.0.0": - version: 2.1.0 - resolution: "mdast-util-find-and-replace@npm:2.1.0" + version: 2.2.2 + resolution: "mdast-util-find-and-replace@npm:2.2.2" dependencies: + "@types/mdast": ^3.0.0 escape-string-regexp: ^5.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^4.0.0 - checksum: 2df955899edb71fdd9f09a639572b281ec6e9be1533469cdbd7f1f16232a576adbd423f914182684f9516897143a5a797c45182848c0f83807d2c30a582a3c03 + unist-util-visit-parents: ^5.0.0 + checksum: b4ce463c43fe6e1c38a53a89703f755c84ab5437f49bff9a0ac751279733332ca11c85ed0262aa6c17481f77b555d26ca6d64e70d6814f5b8d12d34a3e53a60b languageName: node linkType: hard "mdast-util-from-markdown@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-from-markdown@npm:1.0.2" + version: 1.3.0 + resolution: "mdast-util-from-markdown@npm:1.3.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 mdast-util-to-string: ^3.1.0 micromark: ^3.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 @@ -28821,116 +29089,130 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - parse-entities: ^3.0.0 unist-util-stringify-position: ^3.0.0 - checksum: 6127a541ac09f41bd988388f40ac7952b9a1a2b0309de79341ffe2a3c0e6875a827831c13a3dd4af81cbedf873f7d28e4a01d4be529a02adf177956f56363e13 + uvu: ^0.5.0 + checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f languageName: node linkType: hard "mdast-util-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-gfm-autolink-literal@npm:1.0.2" + version: 1.0.3 + resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" dependencies: "@types/mdast": ^3.0.0 ccount: ^2.0.0 mdast-util-find-and-replace: ^2.0.0 micromark-util-character: ^1.0.0 - checksum: 75e12f21ec24552ba33725f69a06cd703e5586d2296ca9d180927b2293c036e1bd39108adba83e8cbbefcc45ffd8821fb561b4c107684ed87bd9e5e286ba03bd + checksum: 1748a8727cfc533bac0c287d6e72d571d165bfa77ae0418be4828177a3ec73c02c3f2ee534d87eb75cbaffa00c0866853bbcc60ae2255babb8210f7636ec2ce2 languageName: node linkType: hard "mdast-util-gfm-footnote@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-footnote@npm:1.0.0" + version: 1.0.2 + resolution: "mdast-util-gfm-footnote@npm:1.0.2" dependencies: "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 micromark-util-normalize-identifier: ^1.0.0 - unist-util-visit: ^4.0.0 - checksum: 45af2e4fee5cf425f285ac4252871630eda6e0b284babc3458495521fdeff26fcbd9b310618900ca80338c299635413c16600934a4ed5c483f8e0f4f6c812223 + checksum: 2d77505f9377ed7e14472ef5e6b8366c3fec2cf5f936bb36f9fbe5b97ccb7cce0464d9313c236fa86fb844206fd585db05707e4fcfb755e4fc1864194845f1f6 languageName: node linkType: hard "mdast-util-gfm-strikethrough@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-strikethrough@npm:1.0.0" + version: 1.0.3 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" dependencies: - "@types/mdast": ^3.0.3 - mdast-util-to-markdown: ^1.0.0 - checksum: 4e57d6957673493860ea602031861b0a3bb1daf204d07a2ec521b8238beba6e6d9f700f53503afd6ce9aad81d8edafeba7c307761090a3db05094ffbdad421f4 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 17003340ff1bba643ec4a59fd4370fc6a32885cab2d9750a508afa7225ea71449fb05acaef60faa89c6378b8bcfbd86a9d94b05f3c6651ff27a60e3ddefc2549 languageName: node linkType: hard "mdast-util-gfm-table@npm:^1.0.0": - version: 1.0.1 - resolution: "mdast-util-gfm-table@npm:1.0.1" + version: 1.0.7 + resolution: "mdast-util-gfm-table@npm:1.0.7" dependencies: + "@types/mdast": ^3.0.0 markdown-table: ^3.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 5b1fd47402c914d12f54fe588d7cb658e396ca63c3b2bc3ee771386bc671ba729ca7018ce2e5e8abdaf021ce4f72f49348c82226ee3d54ebe0620174ade70caa + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 8b8c401bb4162e53f072a2dff8efbca880fd78d55af30601c791315ab6722cb2918176e8585792469a0c530cebb9df9b4e7fede75fdc4d83df2839e238836692 languageName: node linkType: hard "mdast-util-gfm-task-list-item@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-task-list-item@npm:1.0.0" + version: 1.0.2 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" dependencies: - "@types/mdast": ^3.0.3 - mdast-util-to-markdown: ^1.0.0 - checksum: 7771c08a9cc03f58fff59d00af9ddc3aab6f64d85192186c344df4937a03809acd38189f1c8a05860026b9149a6953959e80a291a770d89d88eae92ef49ad463 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: c9b86037d6953b84f11fb2fc3aa23d5b8e14ca0dfcb0eb2fb289200e172bb9d5647bfceb4f86606dc6d935e8d58f6a458c04d3e55e87ff8513c7d4ade976200b languageName: node linkType: hard "mdast-util-gfm@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm@npm:2.0.0" + version: 2.0.2 + resolution: "mdast-util-gfm@npm:2.0.2" dependencies: + mdast-util-from-markdown: ^1.0.0 mdast-util-gfm-autolink-literal: ^1.0.0 mdast-util-gfm-footnote: ^1.0.0 mdast-util-gfm-strikethrough: ^1.0.0 mdast-util-gfm-table: ^1.0.0 mdast-util-gfm-task-list-item: ^1.0.0 - checksum: 70c35ee810b15895adef654ccb7d12bf633eb03105e56a0d0acca693d5f81c9819073262f9ab98fb1c7059eabbc0c658a05dd60c48ed9e1e8d5d7ea0d91e5c00 + mdast-util-to-markdown: ^1.0.0 + checksum: 7078cb985255208bcbce94a121906417d38353c6b1a9acbe56ee8888010d3500608b5d51c16b0999ac63ca58848fb13012d55f26930ff6c6f3450f053d56514e + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + unist-util-is: ^5.0.0 + checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 languageName: node linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.1.1 - resolution: "mdast-util-to-hast@npm:12.1.1" + version: 12.3.0 + resolution: "mdast-util-to-hast@npm:12.3.0" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 - "@types/mdurl": ^1.0.0 mdast-util-definitions: ^5.0.0 - mdurl: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - unist-builder: ^3.0.0 + micromark-util-sanitize-uri: ^1.1.0 + trim-lines: ^3.0.0 unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: 4c5a73e0463493d5ab2c033d42f8daead24d0808969bf21c3a720786784a347cedc1d3ae26b37737dbe3ea0839bc130bf7e20f3bc02e2387e6e7b0a5f94bafe4 + checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb languageName: node linkType: hard -"mdast-util-to-markdown@npm:^1.0.0": - version: 1.2.3 - resolution: "mdast-util-to-markdown@npm:1.2.3" +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 longest-streak: ^3.0.0 + mdast-util-phrasing: ^3.0.0 mdast-util-to-string: ^3.0.0 micromark-util-decode-string: ^1.0.0 unist-util-visit: ^4.0.0 zwitch: ^2.0.0 - checksum: 2a904f8af5dfe75650eda59e7f1b728c0dfb54fb37698274e78e99383b692aaba9d1a75092150960224b844b3a78cbdf813b31b2101d267159b7a43d56f58f3e + checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 languageName: node linkType: hard "mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": - version: 3.1.0 - resolution: "mdast-util-to-string@npm:3.1.0" - checksum: f42ddd4e22f2215a75715b92ea6e3149c4ba356e7781d7b94fc86ded1c79cec3f986afeecef3a4a80068c9b224a6520099783a12146b957de24f020a3e47dd29 + version: 3.1.1 + resolution: "mdast-util-to-string@npm:3.1.1" + dependencies: + "@types/mdast": ^3.0.0 + checksum: 5e9375e1757ebf2950e122ef3538e4257ed2b6f43ab1d3e9c45db5dd5d5b5d14fd041490afcde00934f1cdb4b99877597ae04eb810d313ec7b38c6009058dddd languageName: node linkType: hard @@ -28941,7 +29223,7 @@ __metadata: languageName: node linkType: hard -"mdurl@npm:^1.0.0, mdurl@npm:^1.0.1, mdurl@npm:~1.0.1": +"mdurl@npm:^1.0.1, mdurl@npm:~1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b @@ -28956,16 +29238,16 @@ __metadata: linkType: hard "mem-fs-editor@npm:^8.1.2 || ^9.0.0": - version: 9.3.0 - resolution: "mem-fs-editor@npm:9.3.0" + version: 9.7.0 + resolution: "mem-fs-editor@npm:9.7.0" dependencies: binaryextensions: ^4.16.0 commondir: ^1.0.1 deep-extend: ^0.6.0 - ejs: ^3.1.6 - globby: ^11.0.3 - isbinaryfile: ^4.0.8 - minimatch: ^3.0.4 + ejs: ^3.1.8 + globby: ^11.1.0 + isbinaryfile: ^5.0.0 + minimatch: ^7.2.0 multimatch: ^5.0.0 normalize-path: ^3.0.0 textextensions: ^5.13.0 @@ -28974,28 +29256,28 @@ __metadata: peerDependenciesMeta: mem-fs: optional: true - checksum: ec61cbded585b61efaf5b04a6d9eb8e96bb2ce7baeeae98443e2ec7e0cb22a060af98f5fb4edd5d8fcfbd05eff0396b0b5d6929d3add4f65eed7616ef94a272a + checksum: 25d566b0a0b841ea347f91196f4486386622070655907dab5cc63c0fd49c0ef9f752a1c3e6384b43e9dbd0518086d4a316d1fbed1f0a002b68f291167d1b9520 languageName: node linkType: hard "mem-fs@npm:^1.2.0 || ^2.0.0": - version: 2.2.1 - resolution: "mem-fs@npm:2.2.1" + version: 2.3.0 + resolution: "mem-fs@npm:2.3.0" dependencies: - "@types/node": ^15.6.1 + "@types/node": ^15.6.2 "@types/vinyl": ^2.0.4 vinyl: ^2.0.1 vinyl-file: ^3.0.0 - checksum: e44fb4acf8391a847b9e9494115b27300eda77aa7c6caea533786f43d385253515b0c0ff4f00906744b2bd31010df923cc448bb6efb9593f41df5d40b0e69046 + checksum: 375c6b81da35b6a73ce98b209f8795fb25d6f8ef6a60b67aa4f9cf32e16078484c1e704e0008b0fc095675af9679dc74a9891cab51cc34433939ae13c706a59c languageName: node linkType: hard -"memfs@npm:^3.1.2, memfs@npm:^3.4.1": - version: 3.4.1 - resolution: "memfs@npm:3.4.1" +"memfs@npm:^3.1.2, memfs@npm:^3.4.1, memfs@npm:^3.4.3": + version: 3.4.13 + resolution: "memfs@npm:3.4.13" dependencies: - fs-monkey: 1.0.3 - checksum: 6d2f49d447d1be24ff9c747618933784eeb059189bc6a0d77b7a51c7daf06e2d3a74674a2e2ff1520e2c312bf91e719ed37144cf05087379b3ba0aef0b6aa062 + fs-monkey: ^1.0.3 + checksum: 3f9717d6f060919d53f211acb6096a0ea2f566a8cbcc4ef7e1f2561e31e33dc456053fdf951c90a49c8ec55402de7f01b006b81683ab7bd4bdbbd8c9b9cdae5f languageName: node linkType: hard @@ -29053,7 +29335,7 @@ __metadata: languageName: node linkType: hard -"meros@npm:1.2.1, meros@npm:^1.1.4": +"meros@npm:^1.1.4, meros@npm:^1.2.1": version: 1.2.1 resolution: "meros@npm:1.2.1" peerDependencies: @@ -29111,20 +29393,21 @@ __metadata: linkType: hard "micromark-extension-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.0" + version: 1.0.3 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" dependencies: micromark-util-character: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 8cefa45928ba2fdb6c572c6912214aa533e762ec4287fb5d47b6e2f92eb6a907c80e24e134b44b2b8ab9cac2a94d930c9c1f74a56a152a5daab23486e0a6a13f + uvu: ^0.5.0 + checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 languageName: node linkType: hard "micromark-extension-gfm-footnote@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-footnote@npm:1.0.3" + version: 1.0.4 + resolution: "micromark-extension-gfm-footnote@npm:1.0.4" dependencies: micromark-core-commonmark: ^1.0.0 micromark-factory-space: ^1.0.0 @@ -29132,54 +29415,58 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 uvu: ^0.5.0 - checksum: 81aaf12d23ed73df405639d94896b9840ba8854c2490ae0b33b7f05b39635a71dfde27a98bce278092293bc5e4b268b7092fd2596ceb6c1c5ba45143e4e8fbf2 + checksum: 8daa203f5cf753338d5ecdbaae6b3ab6319d34b6013b90ea6860bed299418cecf86e69e48dabe42562e334760c738c77c5acdb47e75ae26f5f01f02f3bf0952d languageName: node linkType: hard "micromark-extension-gfm-strikethrough@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-gfm-strikethrough@npm:1.0.1" + version: 1.0.4 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.4" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-classify-character: ^1.0.0 micromark-util-resolve-all: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 720aa4e47ac4701faf5640be40a97a249b880d5f8f2787106a0d12bd11dd8ab9e29a513af738743be07d42a02734e024184114b719435160e012c4ba9f7464bd + uvu: ^0.5.0 + checksum: f43d316b85fe93df1711cdcdc99a5320b941239349234bd262fc708cb67ad47bdfb41d1a7ebe2a5829816b0e9d3107380a5c1e558cb536a75354cbe4857823ba languageName: node linkType: hard "micromark-extension-gfm-table@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-table@npm:1.0.0" + version: 1.0.5 + resolution: "micromark-extension-gfm-table@npm:1.0.5" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 0c489daa32b9fc812b3f52f051fe38dab91e52f59791050b422f4ee141936747a14ad26a05d834b2e398f4c0a22b34a3106d914b1e2accf6dc5b3b16ccf35680 + uvu: ^0.5.0 + checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef languageName: node linkType: hard "micromark-extension-gfm-tagfilter@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-tagfilter@npm:1.0.0" + version: 1.0.1 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.1" dependencies: micromark-util-types: ^1.0.0 - checksum: 8a5988f46a7ce39c15e45ead46a7890dd3a9903c6c50f6d6f4e5a7b95c04042654728a7921f1224001f274059c9fefd3c65e63eff67a1299e19d94fff83e0457 + checksum: 63e8d68f25871722900a67a8001d5da21f19ea707f3566fc7d0b2eb1f6d52476848bb6a41576cf22470565124af9497c5aae842355faa4c14ec19cb1847e71ec languageName: node linkType: hard "micromark-extension-gfm-task-list-item@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-task-list-item@npm:1.0.0" + version: 1.0.3 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.3" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: a8bc41ce4c5599cde45804737381ca5136b43c64c05034e396e476958232916d3bc23e585d3f71c59f03666c568bced41f177a76497267259b813ab4987dd3a5 + uvu: ^0.5.0 + checksum: d320b0c5301f87e211c06a2330d1ee0fee6da14f0d6d44d5211055b465dadff34390cd6b258a5e0ca376fcda3364fef9a12fe6e26a0c858231fa3b98ddbf7785 languageName: node linkType: hard @@ -29211,13 +29498,14 @@ __metadata: linkType: hard "micromark-factory-label@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-label@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-factory-label@npm:1.0.2" dependencies: micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 37f34d8e42e3a606a636419ffe0f99fd7f6054778365aac56d1cc11585d1cd46000dbf938319abb2ea5e245803679d3cfa46afb5aecf2702bfd963113481f14c + uvu: ^0.5.0 + checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 languageName: node linkType: hard @@ -29232,14 +29520,15 @@ __metadata: linkType: hard "micromark-factory-title@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-title@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-factory-title@npm:1.0.2" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: d9bf0779c49f013fea5fc5daadcee91e1703c81c1b5091337e806c24f1ea224d69f534d174aba2eccff7826620af71bb3db83b1caf14cbb89bea53f4e8e38bc3 + uvu: ^0.5.0 + checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 languageName: node linkType: hard @@ -29305,27 +29594,28 @@ __metadata: linkType: hard "micromark-util-decode-string@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-decode-string@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-util-decode-string@npm:1.0.2" dependencies: + decode-named-character-reference: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 - parse-entities: ^3.0.0 - checksum: 9c7e6e3950e675f39058935e065e8774a1ef26a0d386eb45abd96fb8c0312c8a72464c672f41a3c7668974ac2a7cb2ad23b84eee3775b0bd4c47947d9fc64888 + micromark-util-symbol: ^1.0.0 + checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a languageName: node linkType: hard "micromark-util-encode@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-encode@npm:1.0.0" - checksum: 16985a6b355721307553d1893da364e83144ef068f84978071a9b4b3d884b65c3138f8330fb039aac10f75766b4906e03c5e62baafb1bf5e731f959878277712 + version: 1.0.1 + resolution: "micromark-util-encode@npm:1.0.1" + checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a languageName: node linkType: hard "micromark-util-html-tag-name@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-html-tag-name@npm:1.0.0" - checksum: ed07ce9b9bb30cc4ea57f733089b3a253a6132c0608ccfc105eadb32f1f80bbd2347bf8a74f897fe039d7805a59f602fd4dd15f6adc7926d40b3646da2888d0f + version: 1.1.0 + resolution: "micromark-util-html-tag-name@npm:1.1.0" + checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c languageName: node linkType: hard @@ -29347,48 +29637,50 @@ __metadata: languageName: node linkType: hard -"micromark-util-sanitize-uri@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-sanitize-uri@npm:1.0.0" +"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": + version: 1.1.0 + resolution: "micromark-util-sanitize-uri@npm:1.1.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-encode: ^1.0.0 micromark-util-symbol: ^1.0.0 - checksum: 77448ec3a5d18f0ac975ea47591fbf0d5bd5568f9a0d033d9e318f90656031f037c5ff9137e93faf289480eaea70a5382e2571ebf9edcb1c1cd2a5187b6b3160 + checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b languageName: node linkType: hard "micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-subtokenize@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-util-subtokenize@npm:1.0.2" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 58272616564c0c91b8c38e4c3e4516489d90eba3a82ff8dc946e7af0fb8b7828618d1e260c090cdcde5ca4c2d2b772e8506535e6af154653db974485ce4f3fa0 + uvu: ^0.5.0 + checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 languageName: node linkType: hard "micromark-util-symbol@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-symbol@npm:1.0.0" - checksum: 704e30468efcfd52cefc077981e3502620c9cbef8b2395ec4d556893ac4ab76531c1be1c4edd78c8d71526d4e4b404e3bad131cf6832dc19366f3ab3f81cd815 + version: 1.0.1 + resolution: "micromark-util-symbol@npm:1.0.1" + checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d languageName: node linkType: hard "micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.0.1 - resolution: "micromark-util-types@npm:1.0.1" - checksum: 5da351efe8e7e6e341a6a0d6396846a484a5ee1406eddb7da1541f22f29035c1574e481bc159e15fe032c42afcf85e699f37257b89d7f43872d7b89efd1682a0 + version: 1.0.2 + resolution: "micromark-util-types@npm:1.0.2" + checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df languageName: node linkType: hard "micromark@npm:^3.0.0": - version: 3.0.5 - resolution: "micromark@npm:3.0.5" + version: 3.1.0 + resolution: "micromark@npm:3.1.0" dependencies: "@types/debug": ^4.0.0 debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 micromark-core-commonmark: ^1.0.1 micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 @@ -29402,8 +29694,8 @@ __metadata: micromark-util-subtokenize: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.1 - parse-entities: ^3.0.0 - checksum: 613208b6e7e967e7da0c773950d25acc7154e9bfedfe66a4946c77f34d95ef1c7c08cc9a31142cdf4d84ccbfab310fece15f74dae1f1f70348390266ede26ebf + uvu: ^0.5.0 + checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 languageName: node linkType: hard @@ -29531,13 +29823,22 @@ __metadata: linkType: hard "mini-css-extract-plugin@npm:^2.4.2": - version: 2.7.2 - resolution: "mini-css-extract-plugin@npm:2.7.2" + version: 2.7.5 + resolution: "mini-css-extract-plugin@npm:2.7.5" dependencies: schema-utils: ^4.0.0 peerDependencies: webpack: ^5.0.0 - checksum: cd65611d6dc452f230c6ebba8a47bc5f5146b813b13b0b402c6f4a69f6451242eeea781152bebd31cad8ca7c7e95dac91e7e464087f18fb65b2d1097b58cf4ae + checksum: afc37cdfb765e8826a1babbab3cd8a99ffc4eaeabb6c013a6b3c80801e44ebc37d930b98c6f66168bb8cd545fcb2e8fc2630d72b4501a1bb8add1547c2534a53 + languageName: node + linkType: hard + +"minim@npm:=0.23.8": + version: 0.23.8 + resolution: "minim@npm:0.23.8" + dependencies: + lodash: ^4.15.0 + checksum: 98e19a431189cee4dfad766e19948fb65b3607780bda2dc3f76b7bb35f9a468f372fb1b4c4b2ebfe348191e09f2b981579967b29cf02038798efe4eab326ffca languageName: node linkType: hard @@ -29573,12 +29874,30 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": - version: 5.1.2 - resolution: "minimatch@npm:5.1.2" +"minimatch@npm:=7.3.0": + version: 7.3.0 + resolution: "minimatch@npm:7.3.0" dependencies: brace-expansion: ^2.0.1 - checksum: 32ffda25b9fb8270a1c1beafdb7489dc0e411af553495136509a945691f63c9b6b000eeeaaf8bffe3efa609c1d6d3bc0f5a106f6c3443b5c05da649100ded964 + checksum: c4d9af992958339d5fc593c9ce496f4b9615597e57cdd663e57bd3a745ebd208c2bba19c3290c25ed8dcf259586fa1f68e4e1acf304f8694927b84c5381167d0 + languageName: node + linkType: hard + +"minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: ^2.0.1 + checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + languageName: node + linkType: hard + +"minimatch@npm:^7.2.0": + version: 7.4.2 + resolution: "minimatch@npm:7.4.2" + dependencies: + brace-expansion: ^2.0.1 + checksum: 9e341b04e69d5ab03e4206dcb61c8a158e3b8709628bf5e1a4eaa9f3b72c0ba925e24ad959b1f6ce6835caa5a927131d5087fae6836b69e7d99d7d5e63ef0bd8 languageName: node linkType: hard @@ -29634,8 +29953,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.0 - resolution: "minipass-fetch@npm:2.1.0" + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -29644,7 +29963,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 languageName: node linkType: hard @@ -29686,20 +30005,18 @@ __metadata: linkType: hard "minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": - version: 3.3.5 - resolution: "minipass@npm:3.3.5" + version: 3.3.6 + resolution: "minipass@npm:3.3.6" dependencies: yallist: ^4.0.0 - checksum: f89f02bcaa0e0e4bb4c44ec796008e69fbca62db0aba6ead1bc57d25bdaefdf42102130f4f9ecb7d9c6b6cd35ff7b0c7b97d001d3435da8e629fb68af3aea57e + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 languageName: node linkType: hard "minipass@npm:^4.0.0": - version: 4.0.0 - resolution: "minipass@npm:4.0.0" - dependencies: - yallist: ^4.0.0 - checksum: 7a609afbf394abfcf9c48e6c90226f471676c8f2a67f07f6838871afb03215ede431d1433feffe1b855455bcb13ef0eb89162841b9796109d6fed8d89790f381 + version: 4.2.5 + resolution: "minipass@npm:4.2.5" + checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f languageName: node linkType: hard @@ -29714,9 +30031,9 @@ __metadata: linkType: hard "mixme@npm:^0.5.1": - version: 0.5.4 - resolution: "mixme@npm:0.5.4" - checksum: cec5f6127c92455bc86d592f0a0628e188c7ccf3909bd106703a1d939f0e2f451ddaac6da0d77c5f14d53dd2d58f64f5b2f8ff55a68ec68be95a73d290e4d430 + version: 0.5.9 + resolution: "mixme@npm:0.5.9" + checksum: ec0e96b2fa099a051fe14477577e3da13f158690c64114a50ecd039694ca2cca1cb7c71a8755aaee8a3ef7229ef33408df822faa4d1d6123b52295eecf50620f languageName: node linkType: hard @@ -29853,8 +30170,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1": - version: 1.0.1 - resolution: "msw@npm:1.0.1" + version: 1.1.1 + resolution: "msw@npm:1.1.1" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -29876,25 +30193,25 @@ __metadata: type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: - typescript: ">= 4.4.x <= 4.9.x" + typescript: ">= 4.4.x <= 5.0.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: e5d6cbe67067ca46f42aaa33011f53a4e5a873abcf81c52a6996536b3c41a88f522821d3a4cf589658252581506afddb58fd8c3dfd79a5cbf06e26e14f9570b6 + checksum: d99c13911a2f3bc3b07a38ed60e0ec19883bc89e3f77a2d7609ce580eb4f50883e2b15ef140927fc0424e661ef1c455eea8fcd614202f2eaef66f53b794356f7 languageName: node linkType: hard -"multicast-dns@npm:^7.2.4": - version: 7.2.4 - resolution: "multicast-dns@npm:7.2.4" +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" dependencies: dns-packet: ^5.2.2 thunky: ^1.0.2 bin: multicast-dns: cli.js - checksum: 45a78628a8f26479c4018122d689a8b22aff034699a1913dac0b9891e4111162b3222c85bba642d624270a90e51129607f1e41aa701e0108cc974246bc9fe828 + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb languageName: node linkType: hard @@ -29946,15 +30263,15 @@ __metadata: linkType: hard "named-placeholders@npm:^1.1.2": - version: 1.1.2 - resolution: "named-placeholders@npm:1.1.2" + version: 1.1.3 + resolution: "named-placeholders@npm:1.1.3" dependencies: - lru-cache: ^4.1.3 - checksum: c9317d1b479d6733b3baedfde209c6c866cf387c2d625837f93355fdb6a9055b1e8180b883fe00bcb20edb3ba4dd21128ec2f1ed8cb884385cef7698cbcadcc4 + lru-cache: ^7.14.1 + checksum: 7834adc91e92ae1b9c4413384e3ccd297de5168bb44017ff0536705ddc4db421723bd964607849265feb3f6ded390f84cf138e5925f22f7c13324f87a803dc73 languageName: node linkType: hard -"nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.17.0": +"nan@npm:^2.14.0, nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.16.0, nan@npm:^2.17.0": version: 2.17.0 resolution: "nan@npm:2.17.0" dependencies: @@ -29964,8 +30281,8 @@ __metadata: linkType: hard "nano-css@npm:^5.3.1": - version: 5.3.1 - resolution: "nano-css@npm:5.3.1" + version: 5.3.5 + resolution: "nano-css@npm:5.3.5" dependencies: css-tree: ^1.1.2 csstype: ^3.0.6 @@ -29978,7 +30295,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 45517871e8c15a00769bfc9eb5e466d9c193b0a7423050eb77eb21003a1ccfd13863f01bf68490be830de019f4a0ae945d5b91eb23c5898d341ac8968ba3f18b + checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 languageName: node linkType: hard @@ -30056,15 +30373,15 @@ __metadata: linkType: hard "nise@npm:^5.1.2": - version: 5.1.2 - resolution: "nise@npm:5.1.2" + version: 5.1.4 + resolution: "nise@npm:5.1.4" dependencies: "@sinonjs/commons": ^2.0.0 - "@sinonjs/fake-timers": ^7.0.4 + "@sinonjs/fake-timers": ^10.0.2 "@sinonjs/text-encoding": ^0.7.1 just-extend: ^4.0.2 path-to-regexp: ^1.7.0 - checksum: 688c557333dcbc5b41f4f1f1b0ea32fb0f8b424541a8958140bc61074980362c954b2aeb027c282de26b9ddcb4b230656f68ac4206777499e405dd7e716ec1f8 + checksum: bc57c10eaec28a6a7ddfb2e1e9b21d5e1fe22710e514f8858ae477cf9c7e9c891475674d5241519193403db43d16c3675f4207bc094a7a27b7e4f56584a78c1b languageName: node linkType: hard @@ -30078,12 +30395,21 @@ __metadata: languageName: node linkType: hard +"node-abi@npm:^2.21.0": + version: 2.30.1 + resolution: "node-abi@npm:2.30.1" + dependencies: + semver: ^5.4.1 + checksum: 3f4b0c912ce4befcd7ceab4493ba90b51d60dfcc90f567c93f731d897ef8691add601cb64c181683b800f21d479d68f9a6e15d8ab8acd16a5706333b9e30a881 + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": - version: 3.8.0 - resolution: "node-abi@npm:3.8.0" + version: 3.33.0 + resolution: "node-abi@npm:3.33.0" dependencies: semver: ^7.3.5 - checksum: 3644dd51f4f189358ef56055407501aa698632d67448585b38c46c81a482a0c3bfb06da513ac4060a12ce5f607f208ba9d9c8280f1c38329670b709bd735fcae + checksum: 59e5e00d9a15225087b6dd55b7d4f99686a6d64a8bdbe2c9aa98f4f74554873a7225d3dc975fa32718e7695eed8abcfeaae58b03db118a01392f6d25b0469b52 languageName: node linkType: hard @@ -30151,17 +30477,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^1.0.1": - version: 1.7.3 - resolution: "node-fetch@npm:1.7.3" - dependencies: - encoding: ^0.1.11 - is-stream: ^1.0.1 - checksum: 3bb0528c05d541316ebe52770d71ee25a6dce334df4231fd55df41a644143e07f068637488c18a5b0c43f05041dbd3346752f9e19b50df50569a802484544d5b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.6.9 resolution: "node-fetch@npm:2.6.9" dependencies: @@ -30213,7 +30529,7 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.1.0": +"node-gyp@npm:^9.1.0, node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" dependencies: @@ -30233,26 +30549,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:latest": - version: 9.1.0 - resolution: "node-gyp@npm:9.1.0" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^5.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 - languageName: node - linkType: hard - "node-int64@npm:^0.4.0": version: 0.4.0 resolution: "node-int64@npm:0.4.0" @@ -30291,10 +30587,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.6": - version: 2.0.6 - resolution: "node-releases@npm:2.0.6" - checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf +"node-releases@npm:^2.0.8": + version: 2.0.10 + resolution: "node-releases@npm:2.0.10" + checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc languageName: node linkType: hard @@ -30379,13 +30675,6 @@ __metadata: languageName: node linkType: hard -"normalize-scroll-left@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-scroll-left@npm:0.1.2" - checksum: 817d5a659ba6f14f458cd03a5a0f98ec2a9d7e6c63c160f2db164827b87bb77c0237752890a18d11054fe628907493c5f4d8914907585ec9fbba3de26d2a6815 - languageName: node - linkType: hard - "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -30420,7 +30709,7 @@ __metadata: languageName: node linkType: hard -"npm-normalize-package-bin@npm:^1.0.0, npm-normalize-package-bin@npm:^1.0.1": +"npm-normalize-package-bin@npm:^1.0.1": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 @@ -30517,7 +30806,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.1.2": +"npmlog@npm:^4.0.1": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -30542,23 +30831,23 @@ __metadata: linkType: hard "npmlog@npm:^6.0.0": - version: 6.0.1 - resolution: "npmlog@npm:6.0.1" + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" dependencies: are-we-there-yet: ^3.0.0 console-control-strings: ^1.1.0 - gauge: ^4.0.0 + gauge: ^4.0.3 set-blocking: ^2.0.0 - checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a languageName: node linkType: hard -"nth-check@npm:^2.0.0": - version: 2.0.1 - resolution: "nth-check@npm:2.0.1" +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" dependencies: boolbase: ^1.0.0 - checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 languageName: node linkType: hard @@ -30594,10 +30883,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 +"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 languageName: node linkType: hard @@ -30636,7 +30925,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.2, object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db @@ -30660,7 +30949,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -30732,18 +31021,18 @@ __metadata: linkType: hard "octokit@npm:^2.0.0, octokit@npm:^2.0.4": - version: 2.0.7 - resolution: "octokit@npm:2.0.7" + version: 2.0.14 + resolution: "octokit@npm:2.0.14" dependencies: - "@octokit/app": ^13.0.5 + "@octokit/app": ^13.1.1 "@octokit/core": ^4.0.4 "@octokit/oauth-app": ^4.0.6 - "@octokit/plugin-paginate-rest": ^4.0.0 - "@octokit/plugin-rest-endpoint-methods": ^6.0.0 - "@octokit/plugin-retry": ^3.0.9 - "@octokit/plugin-throttling": ^4.0.1 - "@octokit/types": ^7.0.0 - checksum: 26eeba2b3d0614db4147980f6a9acb2a595f3ea6d78e9db5ef485b2c1b4606724e8a0b4c342a9f264903242ada5c329ee82eccb3fd8df822dff1944aa5bf20db + "@octokit/plugin-paginate-rest": ^6.0.0 + "@octokit/plugin-rest-endpoint-methods": ^7.0.0 + "@octokit/plugin-retry": ^4.0.3 + "@octokit/plugin-throttling": ^5.0.0 + "@octokit/types": ^9.0.0 + checksum: 549ada6e075b810fe0fb0ce0314eccbaeacb2161805b25fb38c5730eff0494773ca7209cf19eae9848161bf73327d0c2f2ff307a7e15607e3a27e39298208e59 languageName: node linkType: hard @@ -30826,23 +31115,23 @@ __metadata: linkType: hard "open@npm:^8.0.0, open@npm:^8.0.9, open@npm:^8.4.0": - version: 8.4.0 - resolution: "open@npm:8.4.0" + version: 8.4.2 + resolution: "open@npm:8.4.2" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 - checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 languageName: node linkType: hard "openapi-sampler@npm:^1.2.1": - version: 1.2.1 - resolution: "openapi-sampler@npm:1.2.1" + version: 1.3.1 + resolution: "openapi-sampler@npm:1.3.1" dependencies: "@types/json-schema": ^7.0.7 json-pointer: 0.6.2 - checksum: 831abc601eb3e43539b0716b938f4e78f2ddfdc164bc47590422be435e46fd2b1a82fb5e954978460fc5a0cef14bb232ff07fc2561ab34bdcd45b67beb6d0e58 + checksum: 65712bfb455345ffb1db603ce7964db56b5eca0aa11267d424ab7515750a502341ed0d22baa7bafd96edd4e6037bcc0da82eebcd6b5ce7afa3605a8bffadeff9 languageName: node linkType: hard @@ -30965,9 +31254,9 @@ __metadata: linkType: hard "p-cancelable@npm:^2.0.0": - version: 2.0.0 - resolution: "p-cancelable@npm:2.0.0" - checksum: dbe887e06ec72a918b3f3d41819aa57b5c4248ddf7162477727046bd2775d6e3e52390521198625599198e9bb5d592f3b0064e96fc0940cdf4e01233e2296664 + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf languageName: node linkType: hard @@ -31084,12 +31373,12 @@ __metadata: linkType: hard "p-retry@npm:^4.5.0": - version: 4.5.0 - resolution: "p-retry@npm:4.5.0" + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" dependencies: - "@types/retry": ^0.12.0 - retry: ^0.12.0 - checksum: 129cbf070401b4b5fea7c959a85a62d26ac29593bcb59e34ce1544a0cace3674cd1f66c370ba8ec95184cf5745546ea2d5e31b75395cf40a4e34358684867b67 + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e languageName: node linkType: hard @@ -31163,9 +31452,9 @@ __metadata: linkType: hard "papi@npm:^1.1.0": - version: 1.1.0 - resolution: "papi@npm:1.1.0" - checksum: f7c566fa10c27ff1820e76bf83035dab7db4f62a84e4ed1bdd1117bd6a1d796a2b4340fa8df34d19997e33be9306de0147065eeaafc1622964aa94b3073d50c4 + version: 1.1.2 + resolution: "papi@npm:1.1.2" + checksum: e1d1296478b184b4f0024b3e52149ecd486f32f2d81f1d59e910f7ae5c68276f81270a4e215c2611a939e0d994da17383d87a304e771f64ef7a9083f0d5456cb languageName: node linkType: hard @@ -31188,28 +31477,36 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0": - version: 5.1.5 - resolution: "parse-asn1@npm:5.1.5" +"parent-module@npm:^2.0.0": + version: 2.0.0 + resolution: "parent-module@npm:2.0.0" dependencies: - asn1.js: ^4.0.0 + callsites: ^3.1.0 + checksum: f131f13d687a938556a01033561fb1b274b39921eb4425c7a691f0d91dcfbe9b19759c2b8d425a3ee7c8a46874e57fa418a690643880c3c7c56827aba12f78dd + languageName: node + linkType: hard + +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": + version: 5.1.6 + resolution: "parse-asn1@npm:5.1.6" + dependencies: + asn1.js: ^5.2.0 browserify-aes: ^1.0.0 - create-hash: ^1.1.0 evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: e3bf40ce4953ec66754fd692bafdd99d9f00a6bb05822361f47222f959ddf5d1f9928088cda3892433f81eee6394ac1d1d9dd4dbd5d5cdc567b644a2cf860a0a + checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 languageName: node linkType: hard "parse-conflict-json@npm:^2.0.1": - version: 2.0.1 - resolution: "parse-conflict-json@npm:2.0.1" + version: 2.0.2 + resolution: "parse-conflict-json@npm:2.0.2" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 - just-diff-apply: ^4.0.1 - checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba + just-diff-apply: ^5.2.0 + checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 languageName: node linkType: hard @@ -31227,20 +31524,6 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^3.0.0": - version: 3.0.0 - resolution: "parse-entities@npm:3.0.0" - dependencies: - character-entities: ^2.0.0 - character-entities-legacy: ^2.0.0 - character-reference-invalid: ^2.0.0 - is-alphanumerical: ^2.0.0 - is-decimal: ^2.0.0 - is-hexadecimal: ^2.0.0 - checksum: 78a1039ace8822f641465a52660b84c3018a2e6345ee0534a2f9f8aa064a11cc9dba7523fa24103ce12b617b8e7b378f244a5d070a834b29feb97baf63c657ed - languageName: node - linkType: hard - "parse-filepath@npm:^1.0.2": version: 1.0.2 resolution: "parse-filepath@npm:1.0.2" @@ -31298,12 +31581,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0": - version: 7.1.1 - resolution: "parse5@npm:7.1.1" +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" dependencies: entities: ^4.4.0 - checksum: 8f72fbfa6df83a3f29f58e1818f7bd46b47ff3e26d79c74e10b8fc7ef7ee76163f205113f1b2f6a5b8dc4e31e726f490444f04890cead6e974dbcbe8172b1321 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 languageName: node linkType: hard @@ -31383,13 +31666,13 @@ __metadata: linkType: hard "passport-oauth1@npm:1.x.x": - version: 1.1.0 - resolution: "passport-oauth1@npm:1.1.0" + version: 1.3.0 + resolution: "passport-oauth1@npm:1.3.0" dependencies: oauth: 0.9.x passport-strategy: 1.x.x utils-merge: 1.x.x - checksum: 49ce8b8d17846bfdb6b1e659b7757eb2c0f239539b1901533bc00b7bdaa4c40662db804698364a60d61c284eae69d5f5d312bc04f2b8fc70ea1897a40f107fde + checksum: 69a0538221f11509aa405de0cadf510e635a6723e1e7e6179db34b4d21d82db8eff8a1e95a6e9eaeca3233e8e1fa5dce87999cd3ec32387238a73a552f95ca16 languageName: node linkType: hard @@ -31474,14 +31757,14 @@ __metadata: linkType: hard "patch-package@npm:^6.5.0": - version: 6.5.0 - resolution: "patch-package@npm:6.5.0" + version: 6.5.1 + resolution: "patch-package@npm:6.5.1" dependencies: "@yarnpkg/lockfile": ^1.1.0 chalk: ^4.1.2 cross-spawn: ^6.0.5 find-yarn-workspace-root: ^2.0.0 - fs-extra: ^7.0.1 + fs-extra: ^9.0.0 is-ci: ^2.0.0 klaw-sync: ^6.0.0 minimist: ^1.2.6 @@ -31493,7 +31776,7 @@ __metadata: yaml: ^1.10.2 bin: patch-package: index.js - checksum: d300e87617e3fb990d1f78fd5be205b5a5e65dfdf197b1e7f76f3b3dfe1551a03d276cb5ee6b82ab4d57e78f54ddc22bde803eec1b0896560262b276d0b2c4ab + checksum: 8530ffa30f11136b527c6eddf6da48fa12856ee510a47edb1f9cdf8a025636adb82968f5fae778b5e04ce8c87915ebdf5911422b54add59a5a42e372a8f30eb2 languageName: node linkType: hard @@ -31522,9 +31805,9 @@ __metadata: linkType: hard "path-equal@npm:^1.1.2": - version: 1.2.2 - resolution: "path-equal@npm:1.2.2" - checksum: 948930eb6bbb5ddcc724f7a4339e2a98fe35269b5f46d88f85c588ed4713e7ec1c71da1629608606c6687216ba3afae710a77cfb5146b735a84d6199f06f247d + version: 1.2.5 + resolution: "path-equal@npm:1.2.5" + checksum: 2bef7bcb98c7ae371c52c1562b2fc515bfd03bc1a5571df9a8591038db8d742ba2d1ff39aa5130853e6afb69e773ccba5095f54d2e6d17422ca03ef9047992d7 languageName: node linkType: hard @@ -31640,9 +31923,9 @@ __metadata: linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.2.0 - resolution: "path-to-regexp@npm:6.2.0" - checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc + version: 6.2.1 + resolution: "path-to-regexp@npm:6.2.1" + checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 languageName: node linkType: hard @@ -31681,22 +31964,22 @@ __metadata: linkType: hard "pbkdf2@npm:^3.0.3": - version: 3.0.17 - resolution: "pbkdf2@npm:3.0.17" + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 9c9062b4bf300bfc03214a8665ab1c8ede227fca1d5bd8b8d0a9d317a941ff64c80b19810288a8cc0f774d603dce249d4b734e62b68dfc784be4ad1e6c0a81f5 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 languageName: node linkType: hard -"peek-readable@npm:^4.0.1": - version: 4.0.1 - resolution: "peek-readable@npm:4.0.1" - checksum: aed788748585fe2dc55ac8a1ea4dd75b9f30c71a790bbd53f785aab757e6b765a6b6a4b19343242f24fdfc416a81d5ec40635ead75379b94af5b0e9d647d087d +"peek-readable@npm:^4.1.0": + version: 4.1.0 + resolution: "peek-readable@npm:4.1.0" + checksum: 02c673f9bc816f8e4e74a054c097225ad38d457d745b775e2b96faf404a54473b2f62f5bcd496f5ebc28696708bcc5e95bed409856f4bef5ed62eae9b4ac0dab languageName: node linkType: hard @@ -31778,11 +32061,11 @@ __metadata: linkType: hard "pgpass@npm:1.x": - version: 1.0.2 - resolution: "pgpass@npm:1.0.2" + version: 1.0.5 + resolution: "pgpass@npm:1.0.5" dependencies: - split: ^1.0.0 - checksum: 377bf4c3e489ff28a93ae3b1cf3f99a8f9b85153ae9c587345a07e40c1b036e81bd414e5d0bdb204a43f45390e728bbb314c71e067d7b0dda39c3b7097df09a0 + split2: ^4.1.0 + checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 languageName: node linkType: hard @@ -31910,7 +32193,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.0, pirates@npm:^4.0.1, pirates@npm:^4.0.4": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -31990,169 +32273,169 @@ __metadata: languageName: node linkType: hard -"popper.js@npm:^1.14.1": - version: 1.16.1 - resolution: "popper.js@npm:1.16.1" - checksum: c56ae5001ec50a77ee297a8061a0221d99d25c7348d2e6bcd3e45a0d0f32a1fd81bca29d46cb0d4bdf13efb77685bd6a0ce93f9eb3c608311a461f945fffedbe - languageName: node - linkType: hard - -"postcss-calc@npm:^8.0.0": - version: 8.0.0 - resolution: "postcss-calc@npm:8.0.0" +"postcss-calc@npm:^8.2.3": + version: 8.2.4 + resolution: "postcss-calc@npm:8.2.4" dependencies: - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.0.2 + postcss-selector-parser: ^6.0.9 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.2 - checksum: d945c49f317d6e8f220bce33075f2eec8e26052158a5a694186c11a26d23098b0300a3d44f666fda2feaa3ec93a636282881ee50b9e32776e08e5338e4a8c887 + checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb languageName: node linkType: hard -"postcss-colormin@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-colormin@npm:5.2.1" +"postcss-colormin@npm:^5.3.1": + version: 5.3.1 + resolution: "postcss-colormin@npm:5.3.1" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.21.4 caniuse-api: ^3.0.0 colord: ^2.9.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: c5337ae9477a6ad787a5bd366a6a418da65fd6212e4dade2ba14c5975faec5b16b69533fc0e5130f34b42a81bc2d1db17436b60f204ef7935cfc555187731579 + checksum: e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024 languageName: node linkType: hard -"postcss-convert-values@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-convert-values@npm:5.0.2" +"postcss-convert-values@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-convert-values@npm:5.1.3" dependencies: - postcss-value-parser: ^4.1.0 + browserslist: ^4.21.4 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 02a31f72b3365345db8aa1d83b084c96975d99a6494359378069431fd810e78ebf3bd96d03a598255daa8f6e2cd63722f119ddec9d24f66b6974b57819feb034 + checksum: df48cdaffabf9737f9cfdc58a3dc2841cf282506a7a944f6c70236cff295d3a69f63de6e0935eeb8a9d3f504324e5b4e240abc29e21df9e35a02585d3060aeb5 languageName: node linkType: hard -"postcss-discard-comments@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-comments@npm:5.0.1" +"postcss-discard-comments@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-discard-comments@npm:5.1.2" peerDependencies: postcss: ^8.2.15 - checksum: c561952bbffa799cfc96216098d7ccc14b1dc776f0a8038c52eafe89fbec02701a234f35f7244aa06d58127103e7dd5f0bfd1db18a53c1438fef5c0a9b2dbddf + checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a languageName: node linkType: hard -"postcss-discard-duplicates@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-duplicates@npm:5.0.1" +"postcss-discard-duplicates@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-duplicates@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: becb68fd5ccd632fe51413a6ab4fd5c8aa3aae9d12947238014c2fb7816a2e0eb9a5454ee7207cac19f4a093c799be6053f13bf4048e97e20d88d5af4a0656bc + checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 languageName: node linkType: hard -"postcss-discard-empty@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-empty@npm:5.0.1" +"postcss-discard-empty@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-discard-empty@npm:5.1.1" peerDependencies: postcss: ^8.2.15 - checksum: 2465ddabb18774c4996c18b8370498cf71597a23c45518ea75e7b73cd8f003b0be52ea9f27f28e24bba408d08ec5152e019cc595611bb097748993c1788d9f4f + checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 languageName: node linkType: hard -"postcss-discard-overridden@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-overridden@npm:5.0.1" +"postcss-discard-overridden@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-overridden@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: 7da9a4bda963145c45b0b51ddf7684e37072569d6f5d22f6cab9f37ea953426274f52eeec87391cd2bd1dd561a6a26cbd1f39debb124ccd8b665b760eda849b4 + checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 languageName: node linkType: hard "postcss-load-config@npm:^3.0.0": - version: 3.0.1 - resolution: "postcss-load-config@npm:3.0.1" + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" dependencies: - cosmiconfig: ^7.0.0 - import-cwd: ^3.0.0 - checksum: f30ee3945d2534c1ab2f69181924318325bcbfacfcb3e3a48db3b9f7ffd5812ea27515a27c4f8dba127fdb41b1ca28c3d401c72ea6ed7e85decd04c66bd14c07 + lilconfig: ^2.0.5 + yaml: ^1.10.2 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 languageName: node linkType: hard -"postcss-merge-longhand@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-merge-longhand@npm:5.0.4" +"postcss-merge-longhand@npm:^5.1.7": + version: 5.1.7 + resolution: "postcss-merge-longhand@npm:5.1.7" dependencies: - postcss-value-parser: ^4.1.0 - stylehacks: ^5.0.1 + postcss-value-parser: ^4.2.0 + stylehacks: ^5.1.1 peerDependencies: postcss: ^8.2.15 - checksum: 6c5ff2ae0e9def05a59cbb432b5cbbdb968816b83c4e38fdf14fa596ef21e36442f61b53984d56dca6165d91e74eadc720270b2887a4a1ef5e25ee171b7d7ea0 + checksum: 81c3fc809f001b9b71a940148e242bdd6e2d77713d1bfffa15eb25c1f06f6648d5e57cb21645746d020a2a55ff31e1740d2b27900442913a9d53d8a01fb37e1b languageName: node linkType: hard -"postcss-merge-rules@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-merge-rules@npm:5.0.3" +"postcss-merge-rules@npm:^5.1.4": + version: 5.1.4 + resolution: "postcss-merge-rules@npm:5.1.4" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.21.4 caniuse-api: ^3.0.0 - cssnano-utils: ^2.0.1 + cssnano-utils: ^3.1.0 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 2e701693c6086cc88ac9e4d30a64471bd8da2e33b7e788b7bcbb4e91ecf87bbddc73529a1308a77953e0a2969f57f22714028547b8469db364b3d0d26b39eae2 + checksum: 8ab6a569babe6cb412d6612adee74f053cea7edb91fa013398515ab36754b1fec830d68782ed8cdfb44cffdc6b78c79eab157bff650f428aa4460d3f3857447e languageName: node linkType: hard -"postcss-minify-font-values@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-minify-font-values@npm:5.0.1" +"postcss-minify-font-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-font-values@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 56aeb2cad5b3c4ca736b7fd7fa331d82281fbecc47e0e275a6a1203b436dbaa9f0772f668c3265dbf7ea2026c68d77c752cf9abe65bd3c65a53e696ae277e6e6 + checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece languageName: node linkType: hard -"postcss-minify-gradients@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-minify-gradients@npm:5.0.3" +"postcss-minify-gradients@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-minify-gradients@npm:5.1.1" dependencies: colord: ^2.9.1 - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 9ba5f28baeff45da8a5e759a748d5c26792e955d2cc061975c54f07d18f81518595353ddcd53dc5587342856425eefe909886b0a47bca392a9c9fcff297aab9e + checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 languageName: node linkType: hard -"postcss-minify-params@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-minify-params@npm:5.0.2" +"postcss-minify-params@npm:^5.1.4": + version: 5.1.4 + resolution: "postcss-minify-params@npm:5.1.4" dependencies: - alphanum-sort: ^1.0.2 - browserslist: ^4.16.6 - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + browserslist: ^4.21.4 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 234e833e0d187106dd949a8973662168ba27e2a036ae4af979921375328ee77673ba5def616426ab9554f9224af8e3c73822193af5cbbdf98aadc0e39775724b + checksum: bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5 languageName: node linkType: hard -"postcss-minify-selectors@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-selectors@npm:5.1.0" +"postcss-minify-selectors@npm:^5.2.1": + version: 5.2.1 + resolution: "postcss-minify-selectors@npm:5.2.1" dependencies: - alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: bf938e70a77b54d68709ec5e9a500b932e177b2278b5c405c3b59fb6f8315f2013e7b327ba76105949bf3c9ba6d6bef80ced4077cababb8e0015d87b4a086b50 + checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 languageName: node linkType: hard @@ -32201,10 +32484,10 @@ __metadata: linkType: hard "postcss-modules@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules@npm:4.0.0" + version: 4.3.1 + resolution: "postcss-modules@npm:4.3.1" dependencies: - generic-names: ^2.0.1 + generic-names: ^4.0.0 icss-replace-symbols: ^1.1.0 lodash.camelcase: ^4.3.0 postcss-modules-extract-imports: ^3.0.0 @@ -32214,180 +32497,174 @@ __metadata: string-hash: ^1.1.1 peerDependencies: postcss: ^8.0.0 - checksum: 8f50c241718955b94807b1066a843fc8c9a356bd28db7f9c30ddcc7dcf0b6a61d7e41c6b41ed5d6d7cfc341891f150fc69d57387910256588bbbe5bfd4ff74d6 + checksum: fa592183bb3d96c4aaf535e3b9b3bcfc54274cbb5b337616543c24ec68cd56675e9fd8aabf994e627513af628d090e43d2f1f4928ff6cdd4b9d3b1ba3fce4d42 languageName: node linkType: hard -"postcss-normalize-charset@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-charset@npm:5.0.1" +"postcss-normalize-charset@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-charset@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: b74720bf0487809143a30e1965ff756698650abdd072f4fe81f0a32ce41e84c140f107b39ad0babf4d319aa620d1d4e01d1f89dc7c7b3f55fd3b27f243ee26e1 + checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 languageName: node linkType: hard -"postcss-normalize-display-values@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-display-values@npm:5.0.1" +"postcss-normalize-display-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-display-values@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: ee84d379abd3fefcb23c09789a5f9d384a7f275d56e51b6ea149bf7a1cf512381bff0c3f00d938d0f91ab7c7fe00b19ace280cc3f84a100cd3cd8a604c4c7406 + checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 languageName: node linkType: hard -"postcss-normalize-positions@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-positions@npm:5.0.1" +"postcss-normalize-positions@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-positions@npm:5.1.1" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 71a97ff851b78cdce8cc1ef21f91d40ddb2aca55d1bdc56056df27037efd9c208290f863ce0adf58a3060f8bb6eb3d66b4cf6d9a1e3ccbb03ba4eb0a0d1b6da4 + checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-repeat-style@npm:5.0.1" +"postcss-normalize-repeat-style@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-repeat-style@npm:5.1.1" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 24f21dd8eee0f5ef9119e71ba57174f675d16fe9a8f368656d64a4e5f2d69cb41ae42f70b814e5ef40f93857ff759205642f78781ff8854f473b7d726e93bc99 + checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 languageName: node linkType: hard -"postcss-normalize-string@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-string@npm:5.0.1" +"postcss-normalize-string@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-string@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 4b42d41a05780517647b9a55888d314bfdfda2042f7a84050555e64da5eccade966fdca645c4ef66503fa95d642e89f2950e5b556b2a38a1a8f3120a24816c73 + checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-timing-functions@npm:5.0.1" +"postcss-normalize-timing-functions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-timing-functions@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: fa58de8f9f6f8d4b507f9f029b18a0903a69a3b5088a2a1306e22163d81ca041d0f179888f5696516a9f75e188df904b0e082ec522b497a46ad1bfc24b06f348 + checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa languageName: node linkType: hard -"postcss-normalize-unicode@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-unicode@npm:5.0.1" +"postcss-normalize-unicode@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-unicode@npm:5.1.1" dependencies: - browserslist: ^4.16.0 - postcss-value-parser: ^4.1.0 + browserslist: ^4.21.4 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: d5a0e0c107639847709c1e9badf09267ee7c67206ac4c19df4f9479308866f0592773ff4063e58d48a6a1d638637a0f7b187ec429ddd3385bab32a06e2d020fd + checksum: 4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c languageName: node linkType: hard -"postcss-normalize-url@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-normalize-url@npm:5.0.3" +"postcss-normalize-url@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-url@npm:5.1.0" dependencies: - is-absolute-url: ^3.0.3 normalize-url: ^6.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 34dfc8d1d71f0cf073d3f3edfc94a5381d659275103240c15bb3d4f424e70ceec431dc663c7403e1b813d98f45fb5174f7f0c3fe9fb6b00cdbd62f3ac2f0032c + checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-whitespace@npm:5.0.1" +"postcss-normalize-whitespace@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-whitespace@npm:5.1.1" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: cefb27d2443d4a8fc34aa2a0aebd470d7d5a58d9adcf39f5e2a80455f4ab37b171a24f58dc47b3111232c1adbb1c8702f80c0ecac1cfcef03e48e00dac6a4a58 + checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 languageName: node linkType: hard -"postcss-ordered-values@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-ordered-values@npm:5.0.2" +"postcss-ordered-values@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-ordered-values@npm:5.1.3" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 80b1cab96e3e9caf23de9b5436b36d7dc1efdd7ff9ee7b02c5ddc88c3564ec5adfa08e66f64c3b335beeb74a8c690a89e1594be14f2d5b708deb2c259de69619 + checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 languageName: node linkType: hard -"postcss-reduce-initial@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-reduce-initial@npm:5.0.1" +"postcss-reduce-initial@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-reduce-initial@npm:5.1.2" dependencies: - browserslist: ^4.16.0 + browserslist: ^4.21.4 caniuse-api: ^3.0.0 peerDependencies: postcss: ^8.2.15 - checksum: c33306694ebd98e8a9402bf9eef1b1724e351e884d0c10f4c77ee34e8f603442d45c20862794ee05793b29d5c10f23b0e3f5697f02600b568911d48be41d421a + checksum: 55db697f85231a81f1969d54c894e4773912d9ddb914f9b03d2e73abc4030f2e3bef4d7465756d0c1acfcc2c2d69974bfb50a972ab27546a7d68b5a4fc90282b languageName: node linkType: hard -"postcss-reduce-transforms@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-reduce-transforms@npm:5.0.1" +"postcss-reduce-transforms@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-transforms@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 89e033ba1fe92057e6196237d5ae6f30b7ca86a98d91a01aa1853baea36ea6c092d29d354d3281000a618445a780c30277868b10d517015317fdc8b97739d34e + checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5": - version: 6.0.6 - resolution: "postcss-selector-parser@npm:6.0.6" +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde languageName: node linkType: hard -"postcss-svgo@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-svgo@npm:5.0.3" +"postcss-svgo@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-svgo@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 svgo: ^2.7.0 peerDependencies: postcss: ^8.2.15 - checksum: 7da0bfd6ecae300f1d82432d987ed3a4034a1502c4c458a0cf7284e172e8e86aa5098a89d9c23ee6b1360695c969f0f61ed776dd8098e26ee2a0b132ff1a7a5d + checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd languageName: node linkType: hard -"postcss-unique-selectors@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-unique-selectors@npm:5.0.2" +"postcss-unique-selectors@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-unique-selectors@npm:5.1.1" dependencies: - alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: ad0f7a8a4f1ed958544c1ede62a1c4b0978e01627a6ef0642f7b044d0f9fdb331318a91f8312f418a773b0f2df06c50896cfaf7e5dd3d0142bd1e5ba75dc9eb7 + checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 languageName: node linkType: hard @@ -32431,9 +32708,9 @@ __metadata: linkType: hard "postgres-date@npm:~1.0.4": - version: 1.0.5 - resolution: "postgres-date@npm:1.0.5" - checksum: 67e5b65daf5080394ef9cd12e15dd9e9720a54dcefa5e1f0dbd85512b761c1b837858cac7763c1c29f398a7a39854de9815d13479eab032317313ed50280ebb3 + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed languageName: node linkType: hard @@ -32446,6 +32723,29 @@ __metadata: languageName: node linkType: hard +"prebuild-install@npm:^6.0.1": + version: 6.1.4 + resolution: "prebuild-install@npm:6.1.4" + dependencies: + detect-libc: ^1.0.3 + expand-template: ^2.0.3 + github-from-package: 0.0.0 + minimist: ^1.2.3 + mkdirp-classic: ^0.5.3 + napi-build-utils: ^1.0.1 + node-abi: ^2.21.0 + npmlog: ^4.0.1 + pump: ^3.0.0 + rc: ^1.2.7 + simple-get: ^3.0.3 + tar-fs: ^2.0.0 + tunnel-agent: ^0.6.0 + bin: + prebuild-install: bin.js + checksum: de4313eda821305912af922700a2db04bb8e77fe8aa9c2788550f1000c026cbefc82da468ec0c0a37764c5417bd8169dbd540928535fb38d00bb9bbd673dd217 + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.0, prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -32550,27 +32850,25 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": - version: 29.4.3 - resolution: "pretty-format@npm:29.4.3" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" dependencies: "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 languageName: node linkType: hard -"printj@npm:~1.1.0": - version: 1.1.2 - resolution: "printj@npm:1.1.2" - bin: - printj: ./bin/printj.njs - checksum: 1c0c66844545415e339356ad62009cdc467819817b1e0341aba428087a1414d46b84089edb4e77ef24705829f8aae6349724b9c7bd89d8690302b2de7a89b315 +"prismjs@npm:^1.27.0": + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 languageName: node linkType: hard -"prismjs@npm:^1.27.0, prismjs@npm:~1.27.0": +"prismjs@npm:~1.27.0": version: 1.27.0 resolution: "prismjs@npm:1.27.0" checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc @@ -32591,7 +32889,7 @@ __metadata: languageName: node linkType: hard -"process@npm:^0.11.10": +"process@npm:=0.11.10, process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -32671,7 +32969,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -32692,9 +32990,9 @@ __metadata: linkType: hard "property-expr@npm:^2.0.4": - version: 2.0.4 - resolution: "property-expr@npm:2.0.4" - checksum: 7ac142e189f0feef685f327f582efe13bfbc24a0b6e2328afdb38520bc140caa5f91dfa9529f2539b4468d85dc83a593e1ef0e0f7401b525368bb634b323bf54 + version: 2.0.5 + resolution: "property-expr@npm:2.0.5" + checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 languageName: node linkType: hard @@ -32708,18 +33006,18 @@ __metadata: linkType: hard "property-information@npm:^6.0.0": - version: 6.0.1 - resolution: "property-information@npm:6.0.1" - checksum: 9a147208ae3bb98629012d384cd8184f5021d60aee9f67d0459605e0c94e2f24db9e263d2b67c333e79981cd7349172a524638681d6e167ddf1c7f06cb2ff2c6 + version: 6.2.0 + resolution: "property-information@npm:6.2.0" + checksum: 23afce07ba821cbe7d926e63cdd680991961c82be4bbb6c0b17c47f48894359c1be6e51cd74485fc10a9d3fd361b475388e1e39311ed2b53127718f72aab1955 languageName: node linkType: hard "proto3-json-serializer@npm:^1.0.0": - version: 1.0.0 - resolution: "proto3-json-serializer@npm:1.0.0" + version: 1.1.0 + resolution: "proto3-json-serializer@npm:1.1.0" dependencies: - protobufjs: ^6.11.2 - checksum: 47ac3b7c48eb177aba3e59431704c5db24d670827bd47ef7488e3529ab85e0de4833ed22615945fa72597dd382aa505b8dd427c917c4c50d31e7570d8af21294 + protobufjs: ^7.0.0 + checksum: a68f7102746a21e2fe6d7afdf89f47b94084a1165ca3062e284922ecca12f20a3ec911bc5f3fdb63fc0cfc9a0cff2b4396befb988c66061ae686d17ff0b6a9fd languageName: node linkType: hard @@ -32766,30 +33064,6 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^6.11.2": - version: 6.11.3 - resolution: "protobufjs@npm:6.11.3" - dependencies: - "@protobufjs/aspromise": ^1.1.2 - "@protobufjs/base64": ^1.1.2 - "@protobufjs/codegen": ^2.0.4 - "@protobufjs/eventemitter": ^1.1.0 - "@protobufjs/fetch": ^1.1.0 - "@protobufjs/float": ^1.0.2 - "@protobufjs/inquire": ^1.1.0 - "@protobufjs/path": ^1.1.2 - "@protobufjs/pool": ^1.1.0 - "@protobufjs/utf8": ^1.1.0 - "@types/long": ^4.0.1 - "@types/node": ">=13.7.0" - long: ^4.0.0 - bin: - pbjs: bin/pbjs - pbts: bin/pbts - checksum: 4a6ce1964167e4c45c53fd8a312d7646415c777dd31b4ba346719947b88e61654912326101f927da387d6b6473ab52a7ea4f54d6f15d63b31130ce28e2e15070 - languageName: node - linkType: hard - "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -32814,7 +33088,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.1.0": +"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -32840,9 +33114,9 @@ __metadata: linkType: hard "psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard @@ -32892,9 +33166,9 @@ __metadata: linkType: hard "punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 languageName: node linkType: hard @@ -32917,6 +33191,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.0.1 + resolution: "pure-rand@npm:6.0.1" + checksum: 4bb565399993b815658a72e359f574ce4f04827a42a905105d61163ae86f456d91595a0e4241e7bce04328fae0638ae70ac0428d93ecb55971c465bd084f8648 + languageName: node + linkType: hard + "pvtsutils@npm:^1.3.2": version: 1.3.2 resolution: "pvtsutils@npm:1.3.2" @@ -32933,7 +33214,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0, qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": +"qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -32942,6 +33223,24 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": + version: 6.11.1 + resolution: "qs@npm:6.11.1" + dependencies: + side-channel: ^1.0.4 + checksum: 82ee78ef12a16f3372fae5b64f76f8aedecb000feea882bbff1af146c147f6eb66b08f9c3f34d7e076f28563586956318b9b2ca41141846cdd6d5ad6f241d52f + languageName: node + linkType: hard + +"qs@npm:~6.10.3": + version: 6.10.4 + resolution: "qs@npm:6.10.4" + dependencies: + side-channel: ^1.0.4 + checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -32950,14 +33249,14 @@ __metadata: linkType: hard "query-string@npm:^7.0.0": - version: 7.0.0 - resolution: "query-string@npm:7.0.0" + version: 7.1.3 + resolution: "query-string@npm:7.1.3" dependencies: - decode-uri-component: ^0.2.0 + decode-uri-component: ^0.2.2 filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: 6e3c4376ff01f49bf2300b36e37291e2d3be8df4fe1839d048dd89d4166b92ecd67525c88ca66b61cbc5612ca29fa4e40002d25a74f59b99f7022045b9e7abd2 + checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 languageName: node linkType: hard @@ -32982,6 +33281,13 @@ __metadata: languageName: node linkType: hard +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + "quick-format-unescaped@npm:^3.0.3": version: 3.0.3 resolution: "quick-format-unescaped@npm:3.0.3" @@ -33004,13 +33310,22 @@ __metadata: linkType: hard "raf-schd@npm:^4.0.2": - version: 4.0.2 - resolution: "raf-schd@npm:4.0.2" - checksum: 9af6e00e36b2844371c61da071cf1fa0d6093dc20eadc654fbb3d940a713df61f037c2e24287eebe8201a41b6acc910b865a4e24010b3a09aba7f4a9616b975a + version: 4.0.3 + resolution: "raf-schd@npm:4.0.3" + checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 languageName: node linkType: hard -"ramda@npm:^0.28.0": +"ramda-adjunct@npm:=3.4.0": + version: 3.4.0 + resolution: "ramda-adjunct@npm:3.4.0" + peerDependencies: + ramda: ">= 0.28.0 <= 0.28.0" + checksum: 05d4daa44a28879dafc75adba6d0b660f8fc0280c03ad62c51ba779d93b11fdaa28a039b28f7ea4a8ca42fdb0a2a750b793fa073125bcc74799630e58cd4770f + languageName: node + linkType: hard + +"ramda@npm:=0.28.0, ramda@npm:^0.28.0": version: 0.28.0 resolution: "ramda@npm:0.28.0" checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 @@ -33106,16 +33421,15 @@ __metadata: linkType: hard "rc-util@npm:^5.16.1": - version: 5.16.1 - resolution: "rc-util@npm:5.16.1" + version: 5.29.2 + resolution: "rc-util@npm:5.29.2" dependencies: - "@babel/runtime": ^7.12.5 + "@babel/runtime": ^7.18.3 react-is: ^16.12.0 - shallowequal: ^1.1.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: f2a6fd262d91d0b2ee1d84853c5ab212c9138b535ce5df8fa807fad4d8772539cbf0fee8cf7044ce9d47d8847950dfa5ae2f884c40eda9b0e9879050e4d549ec + checksum: 68c6bcf2bd2d34ff0d3b6f8a8007e309c498a9714b19d9b84fdf523bd2f6838ab392326381ed4c9854f632cc5cc74157bfbf487829a7a01c954bca18b603947d languageName: node linkType: hard @@ -33134,20 +33448,20 @@ __metadata: linkType: hard "react-beautiful-dnd@npm:^13.0.0": - version: 13.0.0 - resolution: "react-beautiful-dnd@npm:13.0.0" + version: 13.1.1 + resolution: "react-beautiful-dnd@npm:13.1.1" dependencies: - "@babel/runtime": ^7.8.4 + "@babel/runtime": ^7.9.2 css-box-model: ^1.2.0 memoize-one: ^5.1.1 raf-schd: ^4.0.2 - react-redux: ^7.1.1 + react-redux: ^7.2.0 redux: ^4.0.4 use-memo-one: ^1.1.1 peerDependencies: - react: ^16.8.5 - react-dom: ^16.8.5 - checksum: ccf98ce502b5a290daa304d24a1b3ea0e54d43627cda0cdc8eeb65bb84c99e3928098f13e2b09452d02e94974800adaa0a269756500716f19b40ba0bcf9b597b + react: ^16.8.5 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 + checksum: 5f90f7c0ab77a14dfcd496cbd94bbde457612f380c6fc815f3bba7b52effd75132948fcaa661a902a184bb1e6ae5896dcf5b0c77c4ddf809a2c65288f3eed5a7 languageName: node linkType: hard @@ -33244,13 +33558,13 @@ __metadata: linkType: hard "react-error-boundary@npm:^3.1.0": - version: 3.1.3 - resolution: "react-error-boundary@npm:3.1.3" + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: react: ">=16.13.1" - checksum: 0a05af404aa054c54d7bc65a1814810093bf136c3ad4b3576a51d8509ee8fc302adfb66405da501fc01e839db557dd0d994b487e651897e36293907bb61458cf + checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b languageName: node linkType: hard @@ -33261,23 +33575,10 @@ __metadata: languageName: node linkType: hard -"react-event-listener@npm:^0.6.2": - version: 0.6.6 - resolution: "react-event-listener@npm:0.6.6" - dependencies: - "@babel/runtime": ^7.2.0 - prop-types: ^15.6.0 - warning: ^4.0.1 - peerDependencies: - react: ^16.3.0 - checksum: 0287e0ae8cbf0a4c03889ffc2b745f5494b3edea0f4667357d709f5646dd78c7289ce305b6f473ec6ac5789f8a937c86b7e543d0249f0bf787bccdb1eab7ecd0 - languageName: node - linkType: hard - "react-fast-compare@npm:^3.1.1": - version: 3.2.0 - resolution: "react-fast-compare@npm:3.2.0" - checksum: 8ef272c825ae329f61633ce4ce7f15aa5b84e5214d88bc0823880236e03e985a13195befa2c7a4eda7db3b017dc7985729152d88445823f652403cf36c2b86aa + version: 3.2.1 + resolution: "react-fast-compare@npm:3.2.1" + checksum: 209b4dc3a9cc79c074a26ec020459efd8be279accaca612db2edb8ada2a28849ea51cf3d246fc0fafb344949b93a63a43798b6c1787559b0a128571883fe6859 languageName: node linkType: hard @@ -33306,11 +33607,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.32.2 - resolution: "react-hook-form@npm:7.32.2" + version: 7.43.7 + resolution: "react-hook-form@npm:7.43.7" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: abe8ba146c313d206f99a01260457bc72af03b2c73d7bd4be5af11598140ec45ef1ef37bac64b80c4dbc298d6aa21af4caa259a133f305a04ddf583faa18e7d0 + checksum: c1679fc5119f3f910f30424b846f9a05ecbc9cce1c7408e4e8eb907aa5a4366d5228a7b41d818868c85017f2be4e1854a1536ba5c1cddf2c27818bd045df9589 languageName: node linkType: hard @@ -33345,14 +33646,14 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.6.3, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": +"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard -"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1": +"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 @@ -33366,7 +33667,7 @@ __metadata: languageName: node linkType: hard -"react-lifecycles-compat@npm:^3.0.2, react-lifecycles-compat@npm:^3.0.4": +"react-lifecycles-compat@npm:^3.0.4": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f @@ -33399,24 +33700,56 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.1.1, react-redux@npm:^7.2.4": - version: 7.2.5 - resolution: "react-redux@npm:7.2.5" +"react-redux@npm:^7.2.0": + version: 7.2.9 + resolution: "react-redux@npm:7.2.9" dependencies: - "@babel/runtime": ^7.12.1 - "@types/react-redux": ^7.1.16 + "@babel/runtime": ^7.15.4 + "@types/react-redux": ^7.1.20 hoist-non-react-statics: ^3.3.2 loose-envify: ^1.4.0 prop-types: ^15.7.2 - react-is: ^16.13.1 + react-is: ^17.0.2 peerDependencies: - react: ^16.8.3 || ^17 + react: ^16.8.3 || ^17 || ^18 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 04ac4a4178067cbcfc05506dfea9f7e01730093a5752f050567f7ae4a38c03c96da9d8fed051f8ab1ecede5ea8a15ee41c5f6c5eeb7f04f37e4d13e431ec7830 + checksum: 369a2bdcf87915659af9e5c55abfd9f52a84e43e0d12dcc108ed17dbe6933558b7b7fc12caa9c10c1a10a8be7df89454b6c96989d8573fedec1a772c94a1f145 + languageName: node + linkType: hard + +"react-redux@npm:^8.0.5": + version: 8.0.5 + resolution: "react-redux@npm:8.0.5" + dependencies: + "@babel/runtime": ^7.12.1 + "@types/hoist-non-react-statics": ^3.3.1 + "@types/use-sync-external-store": ^0.0.3 + hoist-non-react-statics: ^3.3.2 + react-is: ^18.0.0 + use-sync-external-store: ^1.0.0 + peerDependencies: + "@types/react": ^16.8 || ^17.0 || ^18.0 + "@types/react-dom": ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: ">=0.59" + redux: ^4 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + checksum: a108f4f7ead6ac005e656d46051474a2bbdb31ede481bbbb3d8d779c1a35e1940b8655577cc5021313411864d305f67fc719aa48d6e5ed8288cf9cbe8b7042e4 languageName: node linkType: hard @@ -33427,17 +33760,15 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:^6.6.3": - version: 6.7.8 - resolution: "react-resize-detector@npm:6.7.8" +"react-resize-detector@npm:^8.0.4": + version: 8.0.4 + resolution: "react-resize-detector@npm:8.0.4" dependencies: - "@types/resize-observer-browser": ^0.1.6 lodash: ^4.17.21 - resize-observer-polyfill: ^1.5.1 peerDependencies: - react: ^16.0.0 || ^17.0.0 - react-dom: ^16.0.0 || ^17.0.0 - checksum: dc8acbe216f70a60466d55d4f47c1468fecf074544a1e07234461b36eefed2b222f6e550c91e7ae02983e2842308d2a48ba8383029efb5d27ac749c48e3a09ae + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: f53a99cc5413844a6fc2a713b0b1094d23947897c14ab64481938632f4e77fadded52d91a6619055abf6240c7cacd6cc7dd492ea866639b302f81df680709d45 languageName: node linkType: hard @@ -33467,20 +33798,7 @@ __metadata: languageName: node linkType: hard -"react-router-dom-stable@npm:react-router-dom@^6.3.0": - version: 6.8.1 - resolution: "react-router-dom@npm:6.8.1" - dependencies: - "@remix-run/router": 1.3.2 - react-router: 6.8.1 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: fb1a9f5c7e4c83536ee7e6493f3c13f6abda66da69f9191fb8b087ab188ecc18a3a32575813a280cbeca67bcb8b0dcb6dbcef7ed599e03f38a44d694f4abcf14 - languageName: node - linkType: hard - -"react-router-dom@npm:^6.3.0": +"react-router-dom-stable@npm:react-router-dom@^6.3.0, react-router-dom@npm:^6.3.0": version: 6.9.0 resolution: "react-router-dom@npm:6.9.0" dependencies: @@ -33493,18 +33811,7 @@ __metadata: languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.8.1": - version: 6.8.1 - resolution: "react-router@npm:6.8.1" - dependencies: - "@remix-run/router": 1.3.2 - peerDependencies: - react: ">=16.8" - checksum: 8e7cc7a516adeb6060911861af99d9b512893c15ec732cbf8574872919be4f3fe439ffa8c0876d1bcbced880d081bfeda3c01cb505b5a243565d10500ee0ac36 - languageName: node - linkType: hard - -"react-router@npm:6.9.0": +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.9.0": version: 6.9.0 resolution: "react-router@npm:6.9.0" dependencies: @@ -33516,25 +33823,25 @@ __metadata: linkType: hard "react-side-effect@npm:^2.1.0": - version: 2.1.0 - resolution: "react-side-effect@npm:2.1.0" + version: 2.1.2 + resolution: "react-side-effect@npm:2.1.2" peerDependencies: - react: ^16.3.0 - checksum: 9bd58e63d6b38246f5a7f2e11aeaa57e52edf117eb3fc1304acee1b4de96d4b0a73cebf4cc874445edddb8196b72d015c60714e4b03152323fac8a70cdcecde6 + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 languageName: node linkType: hard -"react-smooth@npm:^2.0.0": - version: 2.0.1 - resolution: "react-smooth@npm:2.0.1" +"react-smooth@npm:^2.0.2": + version: 2.0.2 + resolution: "react-smooth@npm:2.0.2" dependencies: - fast-equals: ^2.0.0 + fast-equals: ^4.0.3 react-transition-group: 2.9.0 peerDependencies: prop-types: ^15.6.0 react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 65678491cbd506573f2dba82778ebf8259714d68dd227e0ee7c0e204bcbc7839cf97401620b4223814066581f1dce0493f97162a03dc2a68058b5a7ad2b41085 + checksum: 6b0a40a17314657ac6a187a3ad01fcdaa61d498979b6a07c424e20832110c99b4394c33209a0b39b897c13d113d8cb044e7a691b4965386a11b15bbfbacfba25 languageName: node linkType: hard @@ -33591,7 +33898,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:2.9.0, react-transition-group@npm:^2.2.1": +"react-transition-group@npm:2.9.0": version: 2.9.0 resolution: "react-transition-group@npm:2.9.0" dependencies: @@ -33606,9 +33913,9 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": - version: 4.4.1 - resolution: "react-transition-group@npm:4.4.1" +"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0, react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" dependencies: "@babel/runtime": ^7.5.5 dom-helpers: ^5.0.1 @@ -33617,7 +33924,7 @@ __metadata: peerDependencies: react: ">=16.6.0" react-dom: ">=16.6.0" - checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 languageName: node linkType: hard @@ -33689,14 +33996,14 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:^2.0.0": - version: 2.0.0 - resolution: "read-cmd-shim@npm:2.0.0" - checksum: 024f0a092d3630ad344af63eb0539bce90978883dd06a93e7bfbb26913168ab034473eae4a85685ea76a982eb31b0e8e16dee9c1138dabb3a925e7c4757952bc +"read-cmd-shim@npm:^3.0.0": + version: 3.0.1 + resolution: "read-cmd-shim@npm:3.0.1" + checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 languageName: node linkType: hard -"read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2": +"read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" dependencies: @@ -33763,19 +34070,19 @@ __metadata: linkType: hard "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard "readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -33784,7 +34091,7 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard @@ -33798,11 +34105,11 @@ __metadata: linkType: hard "readdir-glob@npm:^1.0.0": - version: 1.1.1 - resolution: "readdir-glob@npm:1.1.1" + version: 1.1.2 + resolution: "readdir-glob@npm:1.1.2" dependencies: - minimatch: ^3.0.4 - checksum: 8dc4ff606aa9ac8f6ac628dfad918aed6514c8b427922928f2ef380a1be106d5b6f1d106af34607955ad504f89f39d83a9b42c5316ed8b96b5f75391e33a6afc + minimatch: ^5.1.0 + checksum: 1e5f701d3c94af5653e1736dfef99e991869c6e1c87bf08835d8c641f767e73ae25b829d3d1f8504fab8cad49b70b718ef960d3afee5be45cd779ccaeb264ed4 languageName: node linkType: hard @@ -33828,14 +34135,14 @@ __metadata: linkType: hard "recast@npm:^0.20.3": - version: 0.20.4 - resolution: "recast@npm:0.20.4" + version: 0.20.5 + resolution: "recast@npm:0.20.5" dependencies: ast-types: 0.14.2 esprima: ~4.0.0 source-map: ~0.6.1 tslib: ^2.0.1 - checksum: d858095cbd89908e401c5f51734c410a3a80b7dfcc099fe2e4b1ec4cf8b6f046d24830628edad5047cc3ff3cbed9828dc90271a81f5a243a4722d0a8078e6d57 + checksum: 14c35115cd9965950724cb2968f069a247fa79ce890643ab6dc3795c705b363f7b92a45238e9f765387c306763be9955f72047bb9d15b5d60b0a55f9e7912d5a languageName: node linkType: hard @@ -33861,27 +34168,23 @@ __metadata: linkType: hard "recharts@npm:^2.0.0, recharts@npm:^2.1.5": - version: 2.1.9 - resolution: "recharts@npm:2.1.9" + version: 2.5.0 + resolution: "recharts@npm:2.5.0" dependencies: - "@types/d3-interpolate": ^2.0.0 - "@types/d3-scale": ^3.0.0 - "@types/d3-shape": ^2.0.0 classnames: ^2.2.5 - d3-interpolate: ^2.0.0 - d3-scale: ^3.0.0 - d3-shape: ^2.0.0 eventemitter3: ^4.0.1 lodash: ^4.17.19 react-is: ^16.10.2 - react-resize-detector: ^6.6.3 - react-smooth: ^2.0.0 + react-resize-detector: ^8.0.4 + react-smooth: ^2.0.2 recharts-scale: ^0.4.4 reduce-css-calc: ^2.1.8 + victory-vendor: ^36.6.8 peerDependencies: - react: ^16.0.0 || ^17.0.0 - react-dom: ^16.0.0 || ^17.0.0 - checksum: 5751ba78b08c9bf43b381750e302716df7ebc838a26bc8695892b1dd8293f858256d5b949defbb2d07395e7cf8873484b397ea804a60743e366e3211309c7433 + prop-types: ^15.6.0 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: a40d1788589926fa8a5844868a338aae75a2077a2bc2ac57fc5d61ad21fb62660aed6f00ae8d8a94948b9143255c1760db0d386ecb257ed8290dd7f164b5bd5f languageName: node linkType: hard @@ -33903,22 +34206,6 @@ __metadata: languageName: node linkType: hard -"recompose@npm:0.28.0 - 0.30.0": - version: 0.30.0 - resolution: "recompose@npm:0.30.0" - dependencies: - "@babel/runtime": ^7.0.0 - change-emitter: ^0.1.2 - fbjs: ^0.8.1 - hoist-non-react-statics: ^2.3.1 - react-lifecycles-compat: ^3.0.2 - symbol-observable: ^1.0.4 - peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16.0.0 - checksum: 18e58252336d0628b22db1e38407d32e836648e6d5c9453ba37c9f8030138b3429ee3952b053a13b60311f8b60893b207a761466bb293083542db0cf317b7a41 - languageName: node - linkType: hard - "recursive-readdir@npm:^2.2.2": version: 2.2.3 resolution: "recursive-readdir@npm:2.2.3" @@ -33974,11 +34261,11 @@ __metadata: linkType: hard "redux@npm:^4.0.0, redux@npm:^4.0.4, redux@npm:^4.1.2": - version: 4.1.2 - resolution: "redux@npm:4.1.2" + version: 4.2.1 + resolution: "redux@npm:4.2.1" dependencies: "@babel/runtime": ^7.9.2 - checksum: 6a839cee5bd580c5298d968e9e2302150e961318253819bcd97f9d945a5a409559eacddf6026f4118bb68b681c593d90e8a2c5bbf278f014aff9bf0d2d8fa084 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd languageName: node linkType: hard @@ -34000,12 +34287,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.0.1": - version: 10.0.1 - resolution: "regenerate-unicode-properties@npm:10.0.1" +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" dependencies: regenerate: ^1.4.2 - checksum: 1b638b7087d8143e5be3e20e2cda197ea0440fa0bc2cc49646b2f50c5a2b1acdc54b21e4215805a5a2dd487c686b2291accd5ad00619534098d2667e76247754 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 languageName: node linkType: hard @@ -34030,19 +34317,19 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.4": +"regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 languageName: node linkType: hard -"regenerator-transform@npm:^0.15.0": - version: 0.15.0 - resolution: "regenerator-transform@npm:0.15.0" +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" dependencies: "@babel/runtime": ^7.8.4 - checksum: 86e54849ab1167618d28bb56d214c52a983daf29b0d115c976d79840511420049b6b42c9ebdf187defa8e7129bdd74b6dd266420d0d3868c9fa7f793b5d15d49 + checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 languageName: node linkType: hard @@ -34057,42 +34344,28 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.2.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 - languageName: node - linkType: hard - -"regexpu-core@npm:^5.1.0": - version: 5.1.0 - resolution: "regexpu-core@npm:5.1.0" +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" dependencies: + "@babel/regjsgen": ^0.8.0 regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.0.1 - regjsgen: ^0.6.0 - regjsparser: ^0.8.2 + regenerate-unicode-properties: ^10.1.0 + regjsparser: ^0.9.1 unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.0.0 - checksum: 7b4eb8d182d9d10537a220a93138df5bc7eaf4ed53e36b95e8427d33ed8a2b081468f1a15d3e5fcee66517e1df7f5ca180b999e046d060badd97150f2ffe87b2 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 languageName: node linkType: hard -"regjsgen@npm:^0.6.0": - version: 0.6.0 - resolution: "regjsgen@npm:0.6.0" - checksum: c5158ebd735e75074e41292ade1ff05d85566d205426cc61501e360c450a63baced8512ee3ae238e5c0a0e42969563c7875b08fa69d6f0402daf36bcb3e4d348 - languageName: node - linkType: hard - -"regjsparser@npm:^0.8.2": - version: 0.8.4 - resolution: "regjsparser@npm:0.8.4" +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: d069b932491761cda127ce11f6bd2729c3b1b394a35200ec33f1199e937423db28ceb86cf33f0a97c76ecd7c0f8db996476579eaf0d80a1f74c1934f4ca8b27a + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc languageName: node linkType: hard @@ -34134,13 +34407,13 @@ __metadata: linkType: hard "remark-parse@npm:^10.0.0": - version: 10.0.0 - resolution: "remark-parse@npm:10.0.0" + version: 10.0.1 + resolution: "remark-parse@npm:10.0.1" dependencies: "@types/mdast": ^3.0.0 mdast-util-from-markdown: ^1.0.0 unified: ^10.0.0 - checksum: cebd0d8f95b7b0b827277773ddafd05d295a450a2a712f085ccedad2572678712785869b7a0dea53c215f124c22dad5b5247c29d461729933565ed7b5f262e6d + checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 languageName: node linkType: hard @@ -34202,7 +34475,7 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.5.2": +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 @@ -34302,18 +34575,18 @@ __metadata: linkType: hard "requizzle@npm:^0.2.3": - version: 0.2.3 - resolution: "requizzle@npm:0.2.3" + version: 0.2.4 + resolution: "requizzle@npm:0.2.4" dependencies: - lodash: ^4.17.14 - checksum: b1b27c6ad16a2621d4cdb57cd44f01d302974df60f84f94b4d9d313dfe1d375e5b1a12f46010929fe508e83c40696a2105d38c1d1906c228500ac72b23a0d0c6 + lodash: ^4.17.21 + checksum: fceaa448b235f9ed111aa58360129225a3cec1a897a23293dc08d2a00f001756c042a62df0a9d4d1e2669ace52dec960aea73437f407b30c51bfba2e9da208b7 languageName: node linkType: hard "reselect@npm:^4.1.5": - version: 4.1.5 - resolution: "reselect@npm:4.1.5" - checksum: 54c13c1e795b2ea70cba8384138aebe78adda00cbea303cc94b64da0a70d74c896cc9a03115ae38b8bff990e7a60dcd6452ab68cbec01b0b38c1afda70714cf0 + version: 4.1.7 + resolution: "reselect@npm:4.1.7" + checksum: 738d8e2b8f0dca154ad29de6a209c9fbca2d70ae6788fd85df87f2c74b95a65bbf2d16d43a9e2faff39de34d17a29d706ba08a6b2ee5660c09589edbd19af7e1 languageName: node linkType: hard @@ -34325,9 +34598,9 @@ __metadata: linkType: hard "resolve-alpn@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-alpn@npm:1.0.0" - checksum: 146b739f14fad759bc137e7642b4859a7d7a290b61e00db37a468f159932ccefe610006604e6aa7ba2a2991cbd627246f0c74717e8942b7c805c346da35c3f3f + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 languageName: node linkType: hard @@ -34354,10 +34627,19 @@ __metadata: languageName: node linkType: hard +"resolve-global@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-global@npm:1.0.0" + dependencies: + global-dirs: ^0.1.1 + checksum: c4e11d33e84bde7516b824503ffbe4b6cce863d5ce485680fd3db997b7c64da1df98321b1fd0703b58be8bc9bc83bc96bd83043f96194386b45eb47229efb6b6 + languageName: node + linkType: hard + "resolve.exports@npm:^2.0.0": - version: 2.0.0 - resolution: "resolve.exports@npm:2.0.0" - checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 + version: 2.0.1 + resolution: "resolve.exports@npm:2.0.1" + checksum: 03be177026b4fe8dc1b2ffb421bce9cbf7fe3446e9f0c958df9fc8e144864b3eeea19fe788e057fd8be6b5655e65ce245b4f379258c1336e2e8f9205cbd4a9b4 languageName: node linkType: hard @@ -34387,15 +34669,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:~1.17.0": - version: 1.17.0 - resolution: "resolve@npm:1.17.0" - dependencies: - path-parse: ^1.0.6 - checksum: 9ceaf83b3429f2d7ff5d0281b8d8f18a1f05b6ca86efea7633e76b8f76547f33800799dfdd24434942dec4fbd9e651ed3aef577d9a6b5ec87ad89c1060e24759 - languageName: node - linkType: hard - "resolve@npm:~1.19.0": version: 1.19.0 resolution: "resolve@npm:1.19.0" @@ -34432,15 +34705,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@~1.17.0#~builtin": - version: 1.17.0 - resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin::version=1.17.0&hash=07638b" - dependencies: - path-parse: ^1.0.6 - checksum: 6fd799f282ddf078c4bc20ce863e3af01fa8cb218f0658d9162c57161a2dbafe092b13015b9a4c58d0e1e801cf7aa7a4f13115fea9db98c3f9a0c43e429bad6f - languageName: node - linkType: hard - "resolve@patch:resolve@~1.19.0#~builtin": version: 1.19.0 resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin::version=1.19.0&hash=07638b" @@ -34459,11 +34723,11 @@ __metadata: linkType: hard "responselike@npm:^2.0.0": - version: 2.0.0 - resolution: "responselike@npm:2.0.0" + version: 2.0.1 + resolution: "responselike@npm:2.0.1" dependencies: lowercase-keys: ^2.0.0 - checksum: 6a4d32c37d4e88678ae0a9d69fcc90aafa15b1a3eab455bd65c06af3c6c4976afc47d07a0e5a60d277ab041a465f43bf0a581e0d7ab33786e7a7741573f2e487 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a languageName: node linkType: hard @@ -34485,16 +34749,16 @@ __metadata: linkType: hard "retry-request@npm:^5.0.0": - version: 5.0.0 - resolution: "retry-request@npm:5.0.0" + version: 5.0.2 + resolution: "retry-request@npm:5.0.2" dependencies: debug: ^4.1.1 extend: ^3.0.2 - checksum: f1c6eba3a380e994f2693d1734320e1291de16c11d25b3c4ac2f636b60dff02d8b6a977388a60c5a7d269a3ce5f9a72eb65734e0a614ce91e927fba549ed390e + checksum: d6c95d27f4468aa5557605d811cfaa5862be0eaff9fc5f18a338a7c17a7972fbec5b6142abb6b1e494b4c02df875fec2f1c3a281bf79900d33607d8536277ffe languageName: node linkType: hard -"retry@npm:0.13.1": +"retry@npm:0.13.1, retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b @@ -34516,9 +34780,9 @@ __metadata: linkType: hard "rfc4648@npm:^1.3.0": - version: 1.4.0 - resolution: "rfc4648@npm:1.4.0" - checksum: 4bcbc88d0625197d733b4927d470385a0894e2f0eb58e26e85d94a31d26d0d7b3640f947066d991698062b0d6232195fccef60cc54c1222b7d017114cf00c767 + version: 1.5.2 + resolution: "rfc4648@npm:1.5.2" + checksum: bc3d9c4fbfdbbb363c640f9cb56fc01d2e1ca64305b2b6409aaf59cb85c1adecb2545c03deee8889cce2685e15fb7dd47581665c288e4f45068ffece2642f2e8 languageName: node linkType: hard @@ -34701,8 +34965,8 @@ __metadata: linkType: hard "rollup@npm:^2.60.2": - version: 2.77.3 - resolution: "rollup@npm:2.77.3" + version: 2.79.1 + resolution: "rollup@npm:2.79.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -34710,7 +34974,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c + checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6 languageName: node linkType: hard @@ -34753,27 +35017,27 @@ __metadata: linkType: soft "rtl-css-js@npm:^1.14.0": - version: 1.14.0 - resolution: "rtl-css-js@npm:1.14.0" + version: 1.16.1 + resolution: "rtl-css-js@npm:1.16.1" dependencies: "@babel/runtime": ^7.1.2 - checksum: 46e7f52058d7ac2dc7a6271f6858ce2e05f64be4d6a3eae712b52bf29c4de97fda8e30490c425bed620db87cc0b8a3ab4a457489ab0dba0868724bac27e6f893 + checksum: 7d9ab942098eee565784ccf957f6b7dfa78ea1eec7c6bffedc6641575d274189e90752537c7bdba1f43ae6534648144f467fd6d581527455ba626a4300e62c7a languageName: node linkType: hard "run-async@npm:^2.4.0": - version: 2.4.0 - resolution: "run-async@npm:2.4.0" - dependencies: - is-promise: ^2.1.0 - checksum: 268b64e78c4f0dbeaabfdfdc809930a6ed97b7235c191fc337629fac3d38f04d7b838eb942f6bb5645dbb5bd9019d573cfe0f74e187f95ed042657bb4e4aa70d + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 languageName: node linkType: hard "run-parallel@npm:^1.1.9": - version: 1.1.9 - resolution: "run-parallel@npm:1.1.9" - checksum: 8bbeda89c2c1dbfeaa0cdb9f17e93a011ac58ef77339ef1e61a62208b67c8e7b661891df677bb7c5be84b8792e27061177368d500b3c731bb019b0c71e667591 + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d languageName: node linkType: hard @@ -34827,7 +35091,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -34862,9 +35126,9 @@ __metadata: linkType: hard "safe-stable-stringify@npm:^2.2.0, safe-stable-stringify@npm:^2.3.1": - version: 2.3.1 - resolution: "safe-stable-stringify@npm:2.3.1" - checksum: a0a0bad0294c3e2a9d1bf3cf2b1096dfb83c162d09a5e4891e488cce082120bd69161d2a92aae7fc48255290f17700decae9c89a07fe139794e61b5c8b411377 + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 languageName: node linkType: hard @@ -34969,9 +35233,9 @@ __metadata: linkType: hard "screenfull@npm:^5.1.0": - version: 5.1.0 - resolution: "screenfull@npm:5.1.0" - checksum: e8ab486ba2310055aeabd84d8f76f1c9e729669942a4b1bdd675131333076ac9ee6655fb41c2507de3be93865e120cf3641e5ff636090f9e2458170827e650c7 + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a languageName: node linkType: hard @@ -34983,9 +35247,9 @@ __metadata: linkType: hard "secure-json-parse@npm:^2.4.0": - version: 2.4.0 - resolution: "secure-json-parse@npm:2.4.0" - checksum: efaafcaa08a4646ca829b29168474f57fb289a0ca7a1d77b66b55a0292785bc6eb9143b21cfc50b37dd12a823c25b12aa1771f18314ed5a616a1f8f12a318533 + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: d9d7d5a01fc6db6115744ba23cf9e67ecfe8c524d771537c062ee05ad5c11b64c730bc58c7f33f60bd6877f96b86f0ceb9ea29644e4040cb757f6912d4dd6737 languageName: node linkType: hard @@ -34996,13 +35260,6 @@ __metadata: languageName: node linkType: hard -"select@npm:^1.1.2": - version: 1.1.2 - resolution: "select@npm:1.1.2" - checksum: 4346151e94f226ea6131e44e68e6d837f3fdee64831b756dd657cc0b02f4cb5107f867cb34a1d1216ab7737d0bf0645d44546afb030bbd8d64e891f5e4c4814e - languageName: node - linkType: hard - "selfsigned@npm:^2.0.0, selfsigned@npm:^2.1.1": version: 2.1.1 resolution: "selfsigned@npm:2.1.1" @@ -35035,15 +35292,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.0.0, semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 - languageName: node - linkType: hard - "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -35064,6 +35312,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -35181,9 +35438,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.4.8 - resolution: "set-cookie-parser@npm:2.4.8" - checksum: e15b5df9a56ab06d4895286033a6aff7b318ad024310df058b5821b3539cc06f716ef529618cac0dd78df40e37830de715f388c0f97f84062dd9be2326efcd0c + version: 2.6.0 + resolution: "set-cookie-parser@npm:2.6.0" + checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 languageName: node linkType: hard @@ -35303,9 +35560,9 @@ __metadata: linkType: hard "shell-quote@npm:^1.7.3": - version: 1.7.3 - resolution: "shell-quote@npm:1.7.3" - checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34 + version: 1.8.0 + resolution: "shell-quote@npm:1.8.0" + checksum: 6ef7c5e308b9c77eedded882653a132214fa98b4a1512bb507588cf6cd2fc78bfee73e945d0c3211af028a1eabe09c6a19b96edd8977dc149810797e93809749 languageName: node linkType: hard @@ -35322,6 +35579,16 @@ __metadata: languageName: node linkType: hard +"short-unique-id@npm:=4.4.4": + version: 4.4.4 + resolution: "short-unique-id@npm:4.4.4" + bin: + short-unique-id: bin/short-unique-id + suid: bin/short-unique-id + checksum: 3507f2e97326e49180dd4edbf41dd762a76c591df3fd5b7c1e7592bfb0c2f5724d63e626cc6f581c717d3111374811ca1d77a728ac07b0b9041b2355700124d4 + languageName: node + linkType: hard + "shx@npm:^0.3.2": version: 0.3.4 resolution: "shx@npm:0.3.4" @@ -35398,11 +35665,11 @@ __metadata: linkType: hard "simple-update-notifier@npm:^1.0.7": - version: 1.0.7 - resolution: "simple-update-notifier@npm:1.0.7" + version: 1.1.0 + resolution: "simple-update-notifier@npm:1.1.0" dependencies: semver: ~7.0.0 - checksum: aaadc1f158ad5101b363d1c7aed1f30fc1cac59a760aa31702633e0e6fe423348f07d0e78185aef0aad29130a7b7f0f188c21c7bc7353f897a0ea3682e051a70 + checksum: 1012e9b6c504e559a948078177b3eedbb9d7e4d15878e2bda56314d08db609ca5da485be4ac9f838759faae8057935ee0246fcdf63f1233c86bd9fecb2a5544b languageName: node linkType: hard @@ -35532,13 +35799,13 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^6.0.0": - version: 6.1.1 - resolution: "socks-proxy-agent@npm:6.1.1" + version: 6.2.1 + resolution: "socks-proxy-agent@npm:6.2.1" dependencies: agent-base: ^6.0.2 - debug: ^4.3.1 - socks: ^2.6.1 - checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 languageName: node linkType: hard @@ -35553,13 +35820,13 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.6.1, socks@npm:^2.6.2": - version: 2.6.2 - resolution: "socks@npm:2.6.2" +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" dependencies: - ip: ^1.1.5 + ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 languageName: node linkType: hard @@ -35622,13 +35889,13 @@ __metadata: linkType: hard "source-map@npm:^0.7.3": - version: 0.7.3 - resolution: "source-map@npm:0.7.3" - checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.4, sourcemap-codec@npm:^1.4.8": +"sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -35643,16 +35910,16 @@ __metadata: linkType: hard "space-separated-tokens@npm:^2.0.0": - version: 2.0.1 - resolution: "space-separated-tokens@npm:2.0.1" - checksum: 66e30a6382d6e3ab0a6573d510235a198202071d4ebfef8c198f10433166f0cdced4dbf0946cad3c4b2ecc336896a11f98b2ec93047e140fe7aef6fd3a21365b + version: 2.0.2 + resolution: "space-separated-tokens@npm:2.0.2" + checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 languageName: node linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2-1 - resolution: "spawn-command@npm:0.0.2-1" - checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b languageName: node linkType: hard @@ -35667,12 +35934,12 @@ __metadata: linkType: hard "spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" dependencies: spdx-expression-parse: ^3.0.0 spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 languageName: node linkType: hard @@ -35694,9 +35961,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.12 - resolution: "spdx-license-ids@npm:3.0.12" - checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 languageName: node linkType: hard @@ -35750,6 +36017,13 @@ __metadata: languageName: node linkType: hard +"split2@npm:^4.1.0": + version: 4.1.0 + resolution: "split2@npm:4.1.0" + checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 + languageName: node + linkType: hard + "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -35759,15 +36033,6 @@ __metadata: languageName: node linkType: hard -"split@npm:^1.0.0": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: 2 - checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a - languageName: node - linkType: hard - "sponge-case@npm:^1.0.1": version: 1.0.1 resolution: "sponge-case@npm:1.0.1" @@ -35792,9 +36057,9 @@ __metadata: linkType: hard "sqlstring@npm:^2.3.2": - version: 2.3.2 - resolution: "sqlstring@npm:2.3.2" - checksum: 6d17a604dcf724046ff0f0dec562164fc217968e7a962e6ed6cca6ae8d8cd7b264c595627fe74d485200274ad8913f88d4fb9e75469d0305b1a647492b7168e0 + version: 2.3.3 + resolution: "sqlstring@npm:2.3.3" + checksum: 1e7e2d51c38a0cf7372e875408ca100b6e0c9a941ab7773975ea41fb36e5528e404dc787689be855780cf6d0a829ff71027964ae3a05a7446e91dce26672fda7 languageName: node linkType: hard @@ -35808,26 +36073,26 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.4.0": - version: 1.5.0 - resolution: "ssh2@npm:1.5.0" +"ssh2@npm:^1.11.0, ssh2@npm:^1.4.0": + version: 1.11.0 + resolution: "ssh2@npm:1.11.0" dependencies: asn1: ^0.2.4 bcrypt-pbkdf: ^1.0.2 - cpu-features: 0.0.2 - nan: ^2.15.0 + cpu-features: ~0.0.4 + nan: ^2.16.0 dependenciesMeta: cpu-features: optional: true nan: optional: true - checksum: 6a2252c12d9587eeb31c499d1d13bb14a255d08243762e1a92b2db76add8912b2c8c25103c79b92e156d598c1e2781c5523b58aa9e85aee06fea365e4cc188bb + checksum: e40cb9f171741a807c170dc555078aa8c49dc93dd36fc9c8be026fce1cfd31f0d37078d9b60a0f2cfb11d0e007ed5407376b72f8a0ef9f2cb89574632bbfb824 languageName: node linkType: hard "sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": - version: 1.16.1 - resolution: "sshpk@npm:1.16.1" + version: 1.17.0 + resolution: "sshpk@npm:1.17.0" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -35842,7 +36107,7 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 + checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 languageName: node linkType: hard @@ -35872,11 +36137,11 @@ __metadata: linkType: hard "stack-generator@npm:^2.0.5": - version: 2.0.5 - resolution: "stack-generator@npm:2.0.5" + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" dependencies: - stackframe: ^1.1.1 - checksum: a85c45a6f166319b31e9298da1e05b778b768553c2126eeeccfa5c4402fc810de1c541ec0b92db63238d68b3e08f4f57544adc27255e52f25f8edcabcc9caf63 + stackframe: ^1.3.4 + checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 languageName: node linkType: hard @@ -35888,28 +36153,28 @@ __metadata: linkType: hard "stack-utils@npm:^2.0.3": - version: 2.0.5 - resolution: "stack-utils@npm:2.0.5" + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" dependencies: escape-string-regexp: ^2.0.0 - checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 languageName: node linkType: hard -"stackframe@npm:^1.1.1": - version: 1.1.1 - resolution: "stackframe@npm:1.1.1" - checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d languageName: node linkType: hard "stacktrace-gps@npm:^3.0.4": - version: 3.0.4 - resolution: "stacktrace-gps@npm:3.0.4" + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" dependencies: source-map: 0.5.6 - stackframe: ^1.1.1 - checksum: b98cb77632d38e6cbc243da4c47ca5f4bef918985c233bb4cfe8bfdc60fde92b53ce0630b16cf24d81560f1442e2ff92ccf6e2fe19031c90fb775d8e86037d9b + stackframe: ^1.3.4 + checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c languageName: node linkType: hard @@ -35924,6 +36189,13 @@ __metadata: languageName: node linkType: hard +"stampit@npm:=4.3.2": + version: 4.3.2 + resolution: "stampit@npm:4.3.2" + checksum: 731dfe564b98371293bb5e7cb76bb195336dd3589af4e448d1478ac6c99091fd302fd7f41a255daa4b0ec2c1f14ea4f0cc0a2f05cd3d786b29ba531850ad7f62 + languageName: node + linkType: hard + "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -35965,6 +36237,15 @@ __metadata: languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + "stoppable@npm:^1.1.0": version: 1.1.0 resolution: "stoppable@npm:1.1.0" @@ -36054,18 +36335,18 @@ __metadata: linkType: hard "strict-event-emitter@npm:^0.2.4": - version: 0.2.7 - resolution: "strict-event-emitter@npm:0.2.7" + version: 0.2.8 + resolution: "strict-event-emitter@npm:0.2.8" dependencies: events: ^3.3.0 - checksum: 111691e7d3fce0810586ccd8e8234af883ad3b121ef69091c7e260c32299d1ba085a95238ad09b43478bc5e9e80370f2fcb8114716e343be6f44bfc08fab4142 + checksum: 6ac06fe72a6ee6ae64d20f1dd42838ea67342f1b5f32b03b3050d73ee6ecee44b4d5c4ed2965a7154b47991e215f373d4e789e2b2be2769cd80e356126c2ca53 languageName: node linkType: hard "strict-event-emitter@npm:^0.4.3": - version: 0.4.3 - resolution: "strict-event-emitter@npm:0.4.3" - checksum: ee335aba8a43bc6749d3337d78b9f6dbe8358d34b6eb38e7075dadf7f1cae621d96588663dda22dce17e6e7c7e281ddac79ca47421da8250bb4bf53b979508a5 + version: 0.4.6 + resolution: "strict-event-emitter@npm:0.4.6" + checksum: 4f4f2909613e7811de789991c06bfb770d6d6987e2ec5c66fa7485d0f07cc4e7e32eba0dcf26cee6d86af6c92946d7f4acdfaff57d0c4114df2cfa1bf0e3c091 languageName: node linkType: hard @@ -36098,12 +36379,12 @@ __metadata: linkType: hard "string-length@npm:^4.0.1": - version: 4.0.1 - resolution: "string-length@npm:4.0.1" + version: 4.0.2 + resolution: "string-length@npm:4.0.2" dependencies: char-regex: ^1.0.2 strip-ansi: ^6.0.0 - checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 languageName: node linkType: hard @@ -36163,25 +36444,36 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.5": - version: 1.0.5 - resolution: "string.prototype.trimend@npm:1.0.5" +"string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: d44f543833112f57224e79182debadc9f4f3bf9d48a0414d6f0cbd2a86f2b3e8c0ca1f95c3f8e5b32ae83e91554d79d932fc746b411895f03f93d89ed3dfb6bc + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.5": - version: 1.0.5 - resolution: "string.prototype.trimstart@npm:1.0.5" +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 languageName: node linkType: hard @@ -36326,12 +36618,12 @@ __metadata: linkType: hard "strtok3@npm:^6.2.4": - version: 6.2.4 - resolution: "strtok3@npm:6.2.4" + version: 6.3.0 + resolution: "strtok3@npm:6.3.0" dependencies: "@tokenizer/token": ^0.3.0 - peek-readable: ^4.0.1 - checksum: 327b48a79d464542e9ae922c1af3aacc6e6673be31442ab82648ee4afa8cf67f23b426d3e6e77a496ff6e0c9ddc009d9242a224ee05186a100325b633759d0ec + peek-readable: ^4.1.0 + checksum: 90732cff3f325aef7c47c511f609b593e0873ec77b5081810071cde941344e6a0ee3ccb0cae1a9f5b4e12c81a2546fd6b322fabcdfbd1dd08362c2ce5291334a languageName: node linkType: hard @@ -36359,9 +36651,9 @@ __metadata: linkType: hard "style-mod@npm:^4.0.0": - version: 4.0.0 - resolution: "style-mod@npm:4.0.0" - checksum: c19f73d660a94244f0715180a6141bf75d05e5b156cc956ba11970b83cd303c3f7edafe5fb61a3192da6186cc008bdcdd803a979070f9b64e13046463644043c + version: 4.0.2 + resolution: "style-mod@npm:4.0.2" + checksum: 4bac8877e039c61481fc729981378791979c3ebb2f827a54240e95ccca5bca92a6d660566cacb87a8d7cc1ffb26bcd5eafa10c697e131adb5ca9541f3a9cbff6 languageName: node linkType: hard @@ -36375,8 +36667,8 @@ __metadata: linkType: hard "styled-components@npm:^5.3.3": - version: 5.3.5 - resolution: "styled-components@npm:5.3.5" + version: 5.3.9 + resolution: "styled-components@npm:5.3.9" dependencies: "@babel/helper-module-imports": ^7.0.0 "@babel/traverse": ^7.4.5 @@ -36392,26 +36684,26 @@ __metadata: react: ">= 16.8.0" react-dom: ">= 16.8.0" react-is: ">= 16.8.0" - checksum: 05a664dfe423c2906959a0f3f47f9b1ad630e493eb2e06deea0dc0906af33ba5ca17277b98948a6c9642e73894d6533391aebf45576489f5afe920c974e9f8eb + checksum: 404311cc7028259218674d3f9f39bdda2342fc02f2ebbba8f057ef560b2ad205c5bd63b82deed4d0bf217ac7eb960d0e1127510b0b606e32cbd5a48c10373ce8 languageName: node linkType: hard -"stylehacks@npm:^5.0.1": - version: 5.0.1 - resolution: "stylehacks@npm:5.0.1" +"stylehacks@npm:^5.1.1": + version: 5.1.1 + resolution: "stylehacks@npm:5.1.1" dependencies: - browserslist: ^4.16.0 + browserslist: ^4.21.4 postcss-selector-parser: ^6.0.4 peerDependencies: postcss: ^8.2.15 - checksum: 777dbed3987e04f713b9d74e08f66ab4c23c76cabb07c666c0ae9a06e58e8961063e17b5c7b9c23421b75e9caa9fb78084688e509624e57b19c92c174fbd964d + checksum: 11175366ef52de65bf06cefba0ddc9db286dc3a1451fd2989e74c6ea47091a02329a4bf6ce10b1a36950056927b6bbbe47c5ab3a1f4c7032df932d010fbde5a2 languageName: node linkType: hard -"stylis@npm:^4.0.6": - version: 4.0.7 - resolution: "stylis@npm:4.0.7" - checksum: 4f9fdc4b131b54cdc5988aaf23e796fcf77927c9d2f3147f6b23b8f3a9568eb38ce91b338b9d1b50a50391da32969c34ff68ff971c453fc3a5af89941c60ab06 +"stylis@npm:4.1.3, stylis@npm:^4.0.6": + version: 4.1.3 + resolution: "stylis@npm:4.1.3" + checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6 languageName: node linkType: hard @@ -36431,8 +36723,8 @@ __metadata: linkType: hard "sucrase@npm:^3.20.2": - version: 3.29.0 - resolution: "sucrase@npm:3.29.0" + version: 3.30.0 + resolution: "sucrase@npm:3.30.0" dependencies: commander: ^4.0.0 glob: 7.1.6 @@ -36443,36 +36735,35 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: fc8f04c34f29c0e9ca63109815df138182d62663dbe9565fcd94161b77a88a639f40c46559d0bb84d7acf9346ce23ea102476fd9168ec279330c7faecefb81eb + checksum: 9d53ee132f8063573c9f336c2dbc00a1f91fb976a4ad4dca29a15a898d361e6d4a06ada086c6881fe63389d96392cbd761d790a8175a6ecb184eaa337d58f363 languageName: node linkType: hard -"superagent@npm:^8.0.0": - version: 8.0.0 - resolution: "superagent@npm:8.0.0" +"superagent@npm:^8.0.5": + version: 8.0.9 + resolution: "superagent@npm:8.0.9" dependencies: component-emitter: ^1.3.0 - cookiejar: ^2.1.3 + cookiejar: ^2.1.4 debug: ^4.3.4 fast-safe-stringify: ^2.1.1 form-data: ^4.0.0 - formidable: ^2.0.1 + formidable: ^2.1.2 methods: ^1.1.2 mime: 2.6.0 - qs: ^6.10.3 - readable-stream: ^3.6.0 - semver: ^7.3.7 - checksum: 14343e59327eafd85fa230acb876017079d5efcecc72a56566abc0f965220bb460af2e070dddecd9e2856410b2d2b318d81d9cc1d342aa5922da93c29a295dd7 + qs: ^6.11.0 + semver: ^7.3.8 + checksum: 5d00cdc7ceb5570663da80604965750e6b1b8d7d7442b7791e285c62bcd8d578a8ead0242a2426432b59a255fb42eb3a196d636157538a1392e7b6c5f1624810 languageName: node linkType: hard "supertest@npm:^6.1.3, supertest@npm:^6.1.6, supertest@npm:^6.2.4": - version: 6.2.4 - resolution: "supertest@npm:6.2.4" + version: 6.3.3 + resolution: "supertest@npm:6.3.3" dependencies: methods: ^1.1.2 - superagent: ^8.0.0 - checksum: f2ddc4f3ba467a5c4036dd4aad41351e4b60eb13c39ecf5233ccd2ebb425504073b2b7036c973a70c7047f5c6bc1b9fef096b7bbff114d357cbe80654441db23 + superagent: ^8.0.5 + checksum: 38239e517f7ba62b7a139a79c5c48d55f8d67b5ff4b6e51d5b07732ca8bbc4a28ffa1b10916fbb403dd013a054dbf028edc5850057d9a43aecbff439d494673e languageName: node linkType: hard @@ -36510,7 +36801,7 @@ __metadata: languageName: node linkType: hard -"svg-pan-zoom@npm:^3.6.0": +"svg-pan-zoom@npm:^3.6.1": version: 3.6.1 resolution: "svg-pan-zoom@npm:3.6.1" checksum: 500b99378d321315e1668067ef6a73af3f61f9adfab75a575b21d2d216cb446def61d60ad12265203463cca9bef56b090f00e48118fa9b7f0ffa1c691e4c1621 @@ -36541,14 +36832,18 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.18.5": - version: 3.18.5 - resolution: "swagger-client@npm:3.18.5" +"swagger-client@npm:^3.19.1": + version: 3.19.2 + resolution: "swagger-client@npm:3.19.2" dependencies: - "@babel/runtime-corejs3": ^7.11.2 + "@babel/runtime-corejs3": ^7.20.13 + "@swagger-api/apidom-core": =0.69.0 + "@swagger-api/apidom-json-pointer": =0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": =0.69.0 + "@swagger-api/apidom-reference": =0.69.0 cookie: ~0.5.0 cross-fetch: ^3.1.5 - deepmerge: ~4.2.2 + deepmerge: ~4.3.0 fast-json-patch: ^3.0.0-1 form-data-encoder: ^1.4.3 formdata-node: ^4.0.0 @@ -36558,16 +36853,16 @@ __metadata: qs: ^6.10.2 traverse: ~0.6.6 url: ~0.11.0 - checksum: 804260814abffbb97266b23be20ef8503cf21143684fb81f134ce4f7e0287e6b47b403f0fc0d9e2121bedb1309af6d50f76701ee4bf3390365558d82f4b40786 + checksum: 9613387191b6e72afbe1e551d70646b7c74a136160d2a69ac3220cf23007175c500d3035b0c9ebf1ef0b49769a65d54cf343eb3b0c0d260c5797338776c872ba languageName: node linkType: hard "swagger-ui-react@npm:^4.11.1": - version: 4.15.5 - resolution: "swagger-ui-react@npm:4.15.5" + version: 4.18.1 + resolution: "swagger-ui-react@npm:4.18.1" dependencies: "@babel/runtime-corejs3": ^7.18.9 - "@braintree/sanitize-url": =6.0.0 + "@braintree/sanitize-url": =6.0.2 base64-js: ^1.5.1 classnames: ^2.3.1 css.escape: 1.5.1 @@ -36587,7 +36882,7 @@ __metadata: react-immutable-proptypes: 2.2.0 react-immutable-pure-component: ^2.2.0 react-inspector: ^6.0.1 - react-redux: ^7.2.4 + react-redux: ^8.0.5 react-syntax-highlighter: ^15.5.0 redux: ^4.1.2 redux-immutable: ^4.0.0 @@ -36595,7 +36890,7 @@ __metadata: reselect: ^4.1.5 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.18.5 + swagger-client: ^3.19.1 url-parse: ^1.5.8 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -36603,7 +36898,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 22a72947da865ebfa9269f66b42c2b50105b6285bcb6546f8f356cf73961f76e397b7d79003641c9569bfb2163ea98e2f3f73a27b5b66843d308786c37362e1c + checksum: 183e15d7ccab2ef9197b3695029b66fe1e0556c48bab10f63150feabc304492ae87529a1f1b3e0ee689d19f8b3645a168dff0f3edf421737ac7e8a2d320d26c4 languageName: node linkType: hard @@ -36637,7 +36932,7 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:1.2.0, symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": +"symbol-observable@npm:^1.0.4": version: 1.2.0 resolution: "symbol-observable@npm:1.2.0" checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 @@ -36731,11 +37026,11 @@ __metadata: linkType: hard "tdigest@npm:^0.1.1": - version: 0.1.1 - resolution: "tdigest@npm:0.1.1" + version: 0.1.2 + resolution: "tdigest@npm:0.1.2" dependencies: - bintrees: 1.0.1 - checksum: 4d05fd70fb0aa70aa101d01557722b7ef9a91b2ebf8dfc274ca9852220397a74e4ed6e59c55335b4b1dd0ac5e1b65d25b8d32ae01278fc3b783c40f6d84303e2 + bintrees: 1.0.2 + checksum: 44de8246752b6f8c2924685f969fd3d94c36949f22b0907e99bef2b2220726dd8467f4730ea96b06040b9aa2587c0866049640039d1b956952dfa962bc2075a3 languageName: node linkType: hard @@ -36782,15 +37077,15 @@ __metadata: linkType: soft "teeny-request@npm:^8.0.0": - version: 8.0.0 - resolution: "teeny-request@npm:8.0.0" + version: 8.0.3 + resolution: "teeny-request@npm:8.0.3" dependencies: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 node-fetch: ^2.6.1 stream-events: ^1.0.5 - uuid: ^8.0.0 - checksum: a867fb58406308e3ee8415f6b6612471a78af136971575bb51eb3ecf4b76d2ea363936da5eb68bbc28ef3d3af59e24dcf0803f1e80c8eb658c73cc9a53881c52 + uuid: ^9.0.0 + checksum: 6682a14df3708068db147c91af5f2b2e097e2e53c03dddaef40f6f974297f2da9e6112c615af9fbc84a1685c6846b8a9e485771d1a350aa25e9ff5fcf63dd821 languageName: node linkType: hard @@ -36810,7 +37105,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3": +"terser-webpack-plugin@npm:^5.1.3": version: 5.3.7 resolution: "terser-webpack-plugin@npm:5.3.7" dependencies: @@ -36832,7 +37127,7 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.5": +"terser@npm:^5.10.0, terser@npm:^5.16.5, terser@npm:^5.3.8": version: 5.16.6 resolution: "terser@npm:5.16.6" dependencies: @@ -36899,9 +37194,9 @@ __metadata: linkType: hard "textextensions@npm:^5.12.0, textextensions@npm:^5.13.0": - version: 5.14.0 - resolution: "textextensions@npm:5.14.0" - checksum: 1f610ccf2a2c1445fb7156c23b5c8defd608c74e8047df18abd4b9ee44c74d29b453ba104d14c53c91f9026670f7c923114cd12200ee5ec458cc518fd0798c74 + version: 5.15.0 + resolution: "textextensions@npm:5.15.0" + checksum: aa172e941e81b44e0d35fa217f758a0d8ba0342dac31539914225a2382b5792ef58bff3ec9009b9c85b0c0605f5a79a906bd97827a2e591d647137fcdbf867d3 languageName: node linkType: hard @@ -36968,32 +37263,18 @@ __metadata: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.11 - resolution: "timers-browserify@npm:2.0.11" + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" dependencies: setimmediate: ^1.0.4 - checksum: 2a2ecbfd0c2380078d4a1e63e4eeb46884156d8fca0efe34d6fd8c615d68ef1a7785888629157ab0e5720e3c0d7f57bf1766b2ad037feb9aea07cbff1623092c - languageName: node - linkType: hard - -"timsort@npm:^0.3.0": - version: 0.3.0 - resolution: "timsort@npm:0.3.0" - checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a - languageName: node - linkType: hard - -"tiny-emitter@npm:^2.0.0": - version: 2.1.0 - resolution: "tiny-emitter@npm:2.1.0" - checksum: fbcfb5145751a0e3b109507a828eb6d6d4501352ab7bb33eccef46e22e9d9ad3953158870a6966a59e57ab7c3f9cfac7cab8521db4de6a5e757012f4677df2dd + checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 languageName: node linkType: hard "tiny-invariant@npm:^1.0.6": - version: 1.1.0 - resolution: "tiny-invariant@npm:1.1.0" - checksum: 27d29bbb9e1d1d86e25766711c28ad91af6d67c87d561167077ac7fbce5212b97bbfe875e70bc369808e075748c825864c9b61f0e9f8652275ec86bcf4dcc924 + version: 1.3.1 + resolution: "tiny-invariant@npm:1.3.1" + checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c languageName: node linkType: hard @@ -37021,11 +37302,11 @@ __metadata: linkType: hard "tmp-promise@npm:^3.0.2": - version: 3.0.2 - resolution: "tmp-promise@npm:3.0.2" + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" dependencies: tmp: ^0.2.0 - checksum: 2d8457c9512e896633f64fab33e5e3fd273c4d8fca33cfc74a04a104a0b921d15ed3e832c4f2a50108635ac88264afef85abddbe5ad8480e15f55fc7f8e76969 + checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c languageName: node linkType: hard @@ -37092,12 +37373,12 @@ __metadata: linkType: hard "token-types@npm:^4.1.1": - version: 4.1.1 - resolution: "token-types@npm:4.1.1" + version: 4.2.1 + resolution: "token-types@npm:4.2.1" dependencies: "@tokenizer/token": ^0.3.0 ieee754: ^1.2.1 - checksum: 8fe4e84611f6c575439b24003650064a2abe8f7c848cdf84dfa233792e4081226e538d567825954d536eadee3a17d902db62ce652b2b1191b772caf1c7d0e312 + checksum: cce256766b33e0f08ceffefa2198fb4961a417866d00780e58625999ab5c0699821407053e64eadc41b00bbb6c0d0c4d02fbd2199940d8a3ccb71e1b148ab9a2 languageName: node linkType: hard @@ -37137,14 +37418,15 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" +"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": + version: 4.1.2 + resolution: "tough-cookie@npm:4.1.2" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a languageName: node linkType: hard @@ -37184,9 +37466,9 @@ __metadata: linkType: hard "traverse@npm:^0.6.6, traverse@npm:~0.6.6": - version: 0.6.6 - resolution: "traverse@npm:0.6.6" - checksum: e2afa72f11efa9ba31ed763d2d9d2aa244612f22015d16c0ea3ba5f6ca8bf071de87f8108b721885cce06ea4a36ef4605d9228c67e431d9015ea4685cb364420 + version: 0.6.7 + resolution: "traverse@npm:0.6.7" + checksum: 21018085ab72f717991597e12e2b52446962ed59df591502e4d7e1a709bc0a989f7c3d451aa7d882666ad0634f1546d696c5edecda1f2fc228777df7bb529a1e languageName: node linkType: hard @@ -37199,6 +37481,37 @@ __metadata: languageName: node linkType: hard +"tree-sitter-json@npm:=0.20.0": + version: 0.20.0 + resolution: "tree-sitter-json@npm:0.20.0" + dependencies: + nan: ^2.14.1 + node-gyp: latest + checksum: 820e27b644e3ec62d8753976572660fbc314b0ffb10178384ae0d187187797c3d87223bec6b034e602445e4095484a28fb89ca67653a1d4f41fa13dd6adad0d2 + languageName: node + linkType: hard + +"tree-sitter-yaml@npm:=0.5.0": + version: 0.5.0 + resolution: "tree-sitter-yaml@npm:0.5.0" + dependencies: + nan: ^2.14.0 + node-gyp: latest + checksum: 7962aea3784dd67098daff4ae984145189eb49b8f981f5a9e72bac97b77859a75030580d199712d671cdced5326599192b3549a428e162e9858a3bbb4cb2fff6 + languageName: node + linkType: hard + +"tree-sitter@npm:=0.20.1": + version: 0.20.1 + resolution: "tree-sitter@npm:0.20.1" + dependencies: + nan: ^2.14.0 + node-gyp: latest + prebuild-install: ^6.0.1 + checksum: a33bf01f9dc558aa0075c9634d06743ed9b7fbf273d2acfbe96daf83f48aec46be7dc42d80d2423c36593d36d3bf189d3fa023d6ce389e20ff9527fae118b215 + languageName: node + linkType: hard + "treeverse@npm:^1.0.4": version: 1.0.4 resolution: "treeverse@npm:1.0.4" @@ -37206,6 +37519,13 @@ __metadata: languageName: node linkType: hard +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -37221,9 +37541,9 @@ __metadata: linkType: hard "trough@npm:^2.0.0": - version: 2.0.2 - resolution: "trough@npm:2.0.2" - checksum: e0c18f3fb4c26e84d7864528f49a3f43a8fef8245d6ffe1fced90a867ea88be9838948fd98cf838da448700f5e4ec909576a469719db5e9833f5b58fed26dfa0 + version: 2.1.0 + resolution: "trough@npm:2.1.0" + checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 languageName: node linkType: hard @@ -37258,9 +37578,9 @@ __metadata: linkType: hard "ts-log@npm:^2.2.3": - version: 2.2.3 - resolution: "ts-log@npm:2.2.3" - checksum: 8aa34a2724d7915ddc6de8d0c27eb48f67206b52c42656f1ea2a7ffb080fa664db5fb22b42bd3c72b5b95cc6eb4612196b7d1e28f4bc146191ebc2a9683af548 + version: 2.2.5 + resolution: "ts-log@npm:2.2.5" + checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d languageName: node linkType: hard @@ -37312,15 +37632,22 @@ __metadata: languageName: node linkType: hard +"ts-toolbelt@npm:^6.15.1": + version: 6.15.5 + resolution: "ts-toolbelt@npm:6.15.5" + checksum: 24ad00cfd9ce735c76c873a9b1347eac475b94e39ebbdf100c9019dce88dd5f4babed52884cf82bb456a38c28edd0099ab6f704b84b2e5e034852b618472c1f3 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": - version: 3.14.1 - resolution: "tsconfig-paths@npm:3.14.1" + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.1 + json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 languageName: node linkType: hard @@ -37338,7 +37665,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd @@ -37352,13 +37679,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:~2.4.0": - version: 2.4.1 - resolution: "tslib@npm:2.4.1" - checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca - languageName: node - linkType: hard - "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -37378,19 +37698,19 @@ __metadata: linkType: hard "tty-table@npm:^4.1.5": - version: 4.1.6 - resolution: "tty-table@npm:4.1.6" + version: 4.2.1 + resolution: "tty-table@npm:4.2.1" dependencies: chalk: ^4.1.2 - csv: ^5.5.0 - kleur: ^4.1.4 + csv: ^5.5.3 + kleur: ^4.1.5 smartwrap: ^2.0.2 - strip-ansi: ^6.0.0 + strip-ansi: ^6.0.1 wcwidth: ^1.0.1 - yargs: ^17.1.1 + yargs: ^17.7.1 bin: tty-table: adapters/terminal-adapter.js - checksum: 0f689b7d79ad6b9e608299e667a493309901fe802f1c4d66627a90cacb6fe11e0521e1a2dc5a75f793750ecdd849e98292d4874e5e6e988edd928b67045eb847 + checksum: e058c0bd553c515d2ed908eb5f6a220a412e160168ef5c87847c62dacf78a7de9ccb548d7f6cd5edbcce2301c389ac2858c10aa330dccea2764809beb63d1d7b languageName: node linkType: hard @@ -37501,14 +37821,34 @@ __metadata: languageName: node linkType: hard +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + "typed-rest-client@npm:^1.8.4": - version: 1.8.4 - resolution: "typed-rest-client@npm:1.8.4" + version: 1.8.9 + resolution: "typed-rest-client@npm:1.8.9" dependencies: qs: ^6.9.1 tunnel: 0.0.6 underscore: ^1.12.1 - checksum: 238e2139724310fed39756ae734fbc811e803abaa7598720ad6cc5ab7f160d415d8107551422b186f6b2e08c5761c0e7b66ca47d60b2ccd952bb5e20d3b92f3c + checksum: 615c95872d9b4d4caa7eb44d639d9044fc41602a16c3855b87deae9e97d6df168c9501a40a1fe003ced4984335684b3dfdadcf24ac0b50657f4cd9026df40e1c + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 languageName: node linkType: hard @@ -37577,10 +37917,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.18, ua-parser-js@npm:^0.7.30": - version: 0.7.33 - resolution: "ua-parser-js@npm:0.7.33" - checksum: 1510e9ec26fcaf0d8c6ae8f1078a8230e8816f083e1b5f453ea19d06b8ef2b8a596601c92148fd41899e8b3e5f83fa69c42332bd5729b931a721040339831696 +"ua-parser-js@npm:^0.7.30": + version: 0.7.34 + resolution: "ua-parser-js@npm:0.7.34" + checksum: ddb7b8b590af49f37eaac37579ac98274f59fff3990610f45e33893aa62ce5b8fc265459cb78b9c9fa3fbbbaad5b2d7939303f18cbd7e8c25c96e57009443c42 languageName: node linkType: hard @@ -37592,11 +37932,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4, uglify-js@npm:^3.7.7": - version: 3.17.0 - resolution: "uglify-js@npm:3.17.0" + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" bin: uglifyjs: bin/uglifyjs - checksum: 20d1fcac05e74db949a9579a36f9a1af88430e590bc9c22410b76686035c55cef65247ca1935d2f6440c78928227684219c8b1ddfcd858213049cb2890821392 + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 languageName: node linkType: hard @@ -37609,13 +37949,20 @@ __metadata: languageName: node linkType: hard -"uid2@npm:0.0.3, uid2@npm:0.0.x": +"uid2@npm:0.0.3": version: 0.0.3 resolution: "uid2@npm:0.0.3" checksum: c8f64acfa94aa42d90c1a61ba9df0162f0db0d28c211e21cf5792b3d70b7ad9fd75d19c7cadcce81896ea111335e57e65891a3b6d0a1343a9adf45abf3d4c47d languageName: node linkType: hard +"uid2@npm:0.0.x": + version: 0.0.4 + resolution: "uid2@npm:0.0.4" + checksum: e92325ce2e3b7be504b19e835dbb5a8b0495031f364b08ca46745468ed0ae0f202a4fdaf99a1a2715844156efc3ab410456ae24a0f7c0ae4b0a2e9f2784edfd9 + languageName: node + linkType: hard + "uid2@npm:^1.0.0": version: 1.0.0 resolution: "uid2@npm:1.0.0" @@ -37666,15 +38013,6 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.12.0, undici@npm:^5.8.0": - version: 5.19.1 - resolution: "undici@npm:5.19.1" - dependencies: - busboy: ^1.6.0 - checksum: 57ee94ee74d944faa41dbcb2faf4e0c90069708d3aaae860185884e51376b5d457728352a8396d69a3c9cb752b62ff99a19a664c5aacb7ee61cc488af499a01c - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -37692,23 +38030,23 @@ __metadata: languageName: node linkType: hard -"unicode-match-property-value-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" - checksum: 8fe6a09d9085a625cabcead5d95bdbc1a2d5d481712856092ce0347231e81a60b93a68f1b69e82b3076a07e415a72c708044efa2aa40ae23e2e7b5c99ed4a9ea +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 languageName: node linkType: hard "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" - checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b languageName: node linkType: hard "unified@npm:^10.0.0": - version: 10.1.0 - resolution: "unified@npm:10.1.0" + version: 10.1.2 + resolution: "unified@npm:10.1.2" dependencies: "@types/unist": ^2.0.0 bail: ^2.0.0 @@ -37717,7 +38055,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^5.0.0 - checksum: b7e1d8dcf61d139ff57df1d393b177098a7fa53bddd47dd8c44cdfe983557d653719fd0ba3668a0be89a4a6189907327d56c2d13b21361e3d07b74f51b0d98ef + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 languageName: node linkType: hard @@ -37730,6 +38068,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -37739,84 +38086,76 @@ __metadata: languageName: node linkType: hard -"unist-builder@npm:^3.0.0": +"unique-slug@npm:^3.0.0": version: 3.0.0 - resolution: "unist-builder@npm:3.0.0" + resolution: "unique-slug@npm:3.0.0" dependencies: - "@types/unist": ^2.0.0 - checksum: 80459ee3c2ece90bbc4f4b4faeed524d144c1a09ee07ff3e9004648d9b71a652e80a3b3ef60311a1e92f6ab915caf27c6f08062b5f8c84fa725bc0d7c5759e84 + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e languageName: node linkType: hard "unist-util-generated@npm:^2.0.0": - version: 2.0.0 - resolution: "unist-util-generated@npm:2.0.0" - checksum: 3a806793fa24a75190c217740ce706340d6cb0d51eff677134253d628f8e4355ebd8a243fe8045c583463f6bebfd50f902d653161da87c1359fcd1a14b99c8e0 + version: 2.0.1 + resolution: "unist-util-generated@npm:2.0.1" + checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 languageName: node linkType: hard "unist-util-is@npm:^5.0.0": - version: 5.1.1 - resolution: "unist-util-is@npm:5.1.1" - checksum: e8743a19a304d8a8f5684f3e5ddb5546f2655847b42123687277d76566a2aba89beb7b4a8a9e9ebc4d904cd1cecc285356d7923d973a43cfc19a1e10ff6bdee4 + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 languageName: node linkType: hard "unist-util-position@npm:^4.0.0": - version: 4.0.1 - resolution: "unist-util-position@npm:4.0.1" - checksum: 0fad25db3906eda7a4f6b769e094f124ab99c528db2f3d140d85abd9133e0e89dde2e4b593c69830d58921b089323067bbc6c4832529352d879b32b7297a3aa3 + version: 4.0.4 + resolution: "unist-util-position@npm:4.0.4" + dependencies: + "@types/unist": ^2.0.0 + checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 languageName: node linkType: hard "unist-util-stringify-position@npm:^3.0.0": - version: 3.0.0 - resolution: "unist-util-stringify-position@npm:3.0.0" + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" dependencies: "@types/unist": ^2.0.0 - checksum: 460d5e16065942da7acd2578e92f4b8421c5af1f3f15ebc858db90865be69a5454dd6638d73f855cc82b1fa9e6e941a258f97b3f5f3be4f2766b0e6f6c45a031 + checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 languageName: node linkType: hard -"unist-util-visit-parents@npm:^4.0.0": - version: 4.1.1 - resolution: "unist-util-visit-parents@npm:4.1.1" +"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - checksum: 49d78984a6dd858a989f849d2b4330c8a04d1ee99c0e9920a5e37668cf847dab95db77a3bf0c8aaeb3e66abeae12e2d454949ec401614efef377d8f82d215662 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.0.0": - version: 5.1.0 - resolution: "unist-util-visit-parents@npm:5.1.0" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 7c413dbb3dfcb679109fa8f0965d9abf117c3c53fa7b8823f68cac0ea53adbe98c1ce954d36c034e086c966b48b1d44d42c85f7bf6b42a032f728ac338929513 - languageName: node - linkType: hard - -"unist-util-visit@npm:^3.0.0": - version: 3.1.0 - resolution: "unist-util-visit@npm:3.1.0" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^4.0.0 - checksum: c37dbc0c5509f85f3abdf46d927b3dd11e6c419159771b1f1a5ce446d36ac993d04b087e28bc6173a172e0fbe9d77e997f120029b2b449766ebe55b6f6e0cc2c + checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa languageName: node linkType: hard "unist-util-visit@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-visit@npm:4.1.0" + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.0.0 - checksum: 3521abee2ed4535092aac073d05f46255475c89781b8e9d8c951a473d91b5d6e4d5912ae4a68a4c1cf17a42ed0108cb93103c7f5c736977529969997451363fb + unist-util-visit-parents: ^5.1.1 + checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee languageName: node linkType: hard @@ -37837,13 +38176,20 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0, universalify@npm:^0.1.2": +"universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -37867,6 +38213,13 @@ __metadata: languageName: node linkType: hard +"unraw@npm:=2.0.1": + version: 2.0.1 + resolution: "unraw@npm:2.0.1" + checksum: af9a9d2f6e420cb4f52fe2f1f5982e6b0be95da640d6ae8d6d9ff631d864771793cb9fe7e2a16ef1ce631b94065f4438e7bd7f1701076fc69296edc4e704d42f + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -37874,9 +38227,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.9 - resolution: "update-browserslist-db@npm:1.0.9" +"update-browserslist-db@npm:^1.0.10": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -37884,7 +38237,7 @@ __metadata: browserslist: ">= 4.21.0" bin: browserslist-lint: cli.js - checksum: f625899b236f6a4d7f62b56be1b8da230c5563d1fef84d3ef148f2e1a3f11a5a4b3be4fd7e3703e51274c116194017775b10afb4de09eb2c0d09d36b90f1f578 + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 languageName: node linkType: hard @@ -37907,15 +38260,15 @@ __metadata: linkType: hard "uri-js@npm:^4.2.2": - version: 4.2.2 - resolution: "uri-js@npm:4.2.2" + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" dependencies: punycode: ^2.1.0 - checksum: 5a91c55d8ae6d9a1ff9dc1b0774888a99aae7cc6e9056c57b709275c0f6753b05cd1a9f2728a1479244b93a9f57ab37c60d277a48d9f2d032d6ae65837bf9bc7 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 languageName: node linkType: hard -"url-parse@npm:^1.5.8": +"url-parse@npm:^1.5.3, url-parse@npm:^1.5.8": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -37926,9 +38279,9 @@ __metadata: linkType: hard "url-value-parser@npm:^2.0.0": - version: 2.0.3 - resolution: "url-value-parser@npm:2.0.3" - checksum: f13a2693b633896329956372a58a1c0f6666d72b87c85dff05564a132c1a5d2a698ca3097a481bf06afc1f5007c08ec67499136736c25c38f3ee84e877d72732 + version: 2.2.0 + resolution: "url-value-parser@npm:2.2.0" + checksum: d5fd52b3526bb5db20384c6ab95ff8f8d1f37daaadfb2a8d8c70f60810997a60d80dbff35de681850356d2117c948ca9cb9c5d903d75fb63f021c890d63440c6 languageName: node linkType: hard @@ -37984,11 +38337,11 @@ __metadata: linkType: hard "use-memo-one@npm:^1.1.1": - version: 1.1.1 - resolution: "use-memo-one@npm:1.1.1" + version: 1.1.3 + resolution: "use-memo-one@npm:1.1.3" peerDependencies: - react: ^16.8.0 - checksum: 39ede232b8c95e6e1ff4f9d9b3f45826b6c1a51a8baae562f49867c569929323ec1e100186aa5111b84f6650bcf273746faf2739091cbe13d6c2e8d3306cc254 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac languageName: node linkType: hard @@ -38004,7 +38357,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.2.0": +"use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: @@ -38083,7 +38436,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2": +"uuid@npm:^3.3.2, uuid@npm:^3.4.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -38102,8 +38455,8 @@ __metadata: linkType: hard "uvu@npm:^0.5.0": - version: 0.5.3 - resolution: "uvu@npm:0.5.3" + version: 0.5.6 + resolution: "uvu@npm:0.5.6" dependencies: dequal: ^2.0.0 diff: ^5.0.0 @@ -38111,7 +38464,7 @@ __metadata: sade: ^1.7.3 bin: uvu: bin.js - checksum: 0cf8e9e6ec79199dacc64fe0e9f82b5bf1d2308f3c54ec1aba5d1ca0a4beff4f173cae0f87bc52d35121565fd232b969fbf52cca3707e20517e62645e19b898e + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 languageName: node linkType: hard @@ -38123,13 +38476,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.0.1 - resolution: "v8-to-istanbul@npm:9.0.1" + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 languageName: node linkType: hard @@ -38200,16 +38553,9 @@ __metadata: linkType: hard "validator@npm:^13.7.0": - version: 13.7.0 - resolution: "validator@npm:13.7.0" - checksum: 2b83283de1222ca549a7ef57f46e8d49c6669213348db78b7045bce36a3b5843ff1e9f709ebf74574e06223461ee1f264f8cc9a26a0060a79a27de079d8286ef - languageName: node - linkType: hard - -"value-or-promise@npm:1.0.11": - version: 1.0.11 - resolution: "value-or-promise@npm:1.0.11" - checksum: 13f8f2ef620118c73b4d1beee8ce6045d7182bbf15090ecfbcafb677ec43698506a5e9ace6bea5ea35c32bc612c9b1f824bb59b6581cdfb5c919052745c277d5 + version: 13.9.0 + resolution: "validator@npm:13.9.0" + checksum: e2c936f041f61faa42bafd17c6faddf939498666cd82e88d733621c286893730b008959f4cb12ab3e236148a4f3805c30b85e3dcf5e0efd8b0cbcd36c02bfc0c languageName: node linkType: hard @@ -38228,15 +38574,15 @@ __metadata: linkType: hard "vasync@npm:^2.2.0": - version: 2.2.0 - resolution: "vasync@npm:2.2.0" + version: 2.2.1 + resolution: "vasync@npm:2.2.1" dependencies: verror: 1.10.0 - checksum: dcfafe19a6d3e51b6cc30e98f8e25dec5b4b71bb699eafa5e1840275337f8345753a86a036428442abae7c2cb4ff8f352cd64e245f8c7aaeac89efc512081e91 + checksum: dca14090436f1b30d4887737af47bc8333795a6d45e520e583ca2c4476d841bf68606cbc79071cfd980e3e42e630736d66a598b9100a505663442ae2e7c2f92f languageName: node linkType: hard -"verror@npm:1.10.0, verror@npm:^1.8.1": +"verror@npm:1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: @@ -38247,25 +38593,58 @@ __metadata: languageName: node linkType: hard +"verror@npm:^1.8.1": + version: 1.10.1 + resolution: "verror@npm:1.10.1" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: 690a8d6ad5a4001672290e9719e3107c86269bc45fe19f844758eecf502e59f8aa9631b19b839f6d3dea562334884d22d1eb95ae7c863032075a9212c889e116 + languageName: node + linkType: hard + "vfile-message@npm:^3.0.0": - version: 3.0.2 - resolution: "vfile-message@npm:3.0.2" + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: 02d50c6652a38c96dbb8cbcc1e8d5b083799a3bf99ba1cf85332e2129e9b569582201fca03839a4205161fe578ebbb31d9bdc52b2cff352051546c99bdd97df3 + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 languageName: node linkType: hard "vfile@npm:^5.0.0": - version: 5.1.0 - resolution: "vfile@npm:5.1.0" + version: 5.3.7 + resolution: "vfile@npm:5.3.7" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 unist-util-stringify-position: ^3.0.0 vfile-message: ^3.0.0 - checksum: f626578bfdff42bd38c4117ad1f43d2c4bebe2df9ca1a861ece542f4f42dfa415405cb96c4a01759fee1bdcf778281c936467497c71a0d097c73367e8c11f30a + checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 + languageName: node + linkType: hard + +"victory-vendor@npm:^36.6.8": + version: 36.6.8 + resolution: "victory-vendor@npm:36.6.8" + dependencies: + "@types/d3-array": ^3.0.3 + "@types/d3-ease": ^3.0.0 + "@types/d3-interpolate": ^3.0.1 + "@types/d3-scale": ^4.0.2 + "@types/d3-shape": ^3.1.0 + "@types/d3-time": ^3.0.0 + "@types/d3-timer": ^3.0.0 + d3-array: ^3.1.6 + d3-ease: ^3.0.1 + d3-interpolate: ^3.0.1 + d3-scale: ^4.0.2 + d3-shape: ^3.1.0 + d3-time: ^3.0.0 + d3-timer: ^3.0.1 + checksum: 6411f7c19a776cef3919946d429293cfe33c93a6e4dcfdfa2ba1edecad3a28ed2cd6b0d117169b8917ab6a7679e2bade5e7bfc1fed3fc8b464b842f21dac5f49 languageName: node linkType: hard @@ -38296,13 +38675,6 @@ __metadata: languageName: node linkType: hard -"viz.js@npm:2.1.2": - version: 2.1.2 - resolution: "viz.js@npm:2.1.2" - checksum: 299e5a8519a472e0e98197c5f39c0ca6f3f6c4642b6ae007ed888fea998d82455c7ae0118d09cb888bfd2c46ebe3b03d7ce321a4eef1c822a5f5719d3a6ef3bb - languageName: node - linkType: hard - "vm-browserify@npm:^1.0.1": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" @@ -38322,10 +38694,24 @@ __metadata: languageName: node linkType: hard -"vscode-languageserver-types@npm:^3.15.1": - version: 3.15.1 - resolution: "vscode-languageserver-types@npm:3.15.1" - checksum: 28c1cb0d5b7ad7c719015a6eb5f774c000fe68c41bbd4a3fd0cbe6d862f27eec075d6bfb14c9d86c22d0e8711c2df8194295bf1e7d6ac0c359cab348c5e14887 +"vscode-languageserver-textdocument@npm:^1.0.8": + version: 1.0.9 + resolution: "vscode-languageserver-textdocument@npm:1.0.9" + checksum: 36b76f725098d3e0d97885c05c51fca47388d9b62e936f6c8824c44a4fac7a96e1406538538a0f46ef1fdb9f1053ddc1cacb5e7b168cecb36d3c018942ec6f52 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:^3.17.1": + version: 3.17.3 + resolution: "vscode-languageserver-types@npm:3.17.3" + checksum: fbc8221297261f659a6482875ff2a419dc9d55965dc53745797da569ff9f819cd832e6f2699017baadd946548bbfe212e3f6971f3d960f12dc0ee9c629dacc07 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.7": + version: 3.0.7 + resolution: "vscode-uri@npm:3.0.7" + checksum: c899a0334f9f6ba53021328e083f6307978c09b94407d7e5fe86fcd8fcb8f1da0cb344123a335e55769055007a46d51aff83f9ee1dfc0296ee54b78f34ef0e4f languageName: node linkType: hard @@ -38339,9 +38725,9 @@ __metadata: linkType: hard "w3c-keyname@npm:^2.2.4": - version: 2.2.4 - resolution: "w3c-keyname@npm:2.2.4" - checksum: 890180452bdd7d25f05deb97b3c0839911264432a7c5dd8dc4c9d9b6384237a66d66b7c2a145440b607826d5aa61cd90098cfffcf50b50c0e4c2259b0d208038 + version: 2.2.6 + resolution: "w3c-keyname@npm:2.2.6" + checksum: 59a31d23ca9953c01c99ed6695fee5b6ea36eb2412d76a21fe4302ab33a3f5cd96c006a763940b6115c3d042c16d3564eeee1156832217d028af0518098b3a42 languageName: node linkType: hard @@ -38354,12 +38740,12 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^3.0.0": - version: 3.0.0 - resolution: "w3c-xmlserializer@npm:3.0.0" +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" dependencies: xml-name-validator: ^4.0.0 - checksum: 0af8589942eeb11c9fe29eb31a1a09f3d5dd136aea53a9848dfbabff79ac0dd26fe13eb54d330d5555fe27bb50b28dca0715e09f9cc2bfa7670ccc8b7f919ca2 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 languageName: node linkType: hard @@ -38401,24 +38787,6 @@ __metadata: languageName: node linkType: hard -"warning@npm:^3.0.0": - version: 3.0.0 - resolution: "warning@npm:3.0.0" - dependencies: - loose-envify: ^1.0.0 - checksum: c9f99a12803aab81b29858e7dc3415bf98b41baee3a4c3acdeb680d98c47b6e17490f1087dccc54432deed5711a5ce0ebcda2b27e9b5eb054c32ae50acb4419c - languageName: node - linkType: hard - -"warning@npm:^4.0.1": - version: 4.0.3 - resolution: "warning@npm:4.0.3" - dependencies: - loose-envify: ^1.0.0 - checksum: 4f2cb6a9575e4faf71ddad9ad1ae7a00d0a75d24521c193fa464f30e6b04027bd97aa5d9546b0e13d3a150ab402eda216d59c1d0f2d6ca60124d96cd40dfa35c - languageName: node - linkType: hard - "watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -38460,30 +38828,37 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:4.0.0-beta.1": - version: 4.0.0-beta.1 - resolution: "web-streams-polyfill@npm:4.0.0-beta.1" - checksum: 94c21d3aba1c26e5942bb210ffd60c6990cbc750d34bdf548ed93ed845f0a6eac89cdae1dd0195afaba15fbcf4aaca9e397ee40fa4d1f2c191d04d43717bd065 +"web-streams-polyfill@npm:4.0.0-beta.3": + version: 4.0.0-beta.3 + resolution: "web-streams-polyfill@npm:4.0.0-beta.3" + checksum: dfec1fbf52b9140e4183a941e380487b6c3d5d3838dd1259be81506c1c9f2abfcf5aeb670aeeecfd9dff4271a6d8fef931b193c7bedfb42542a3b05ff36c0d16 languageName: node linkType: hard -"web-streams-polyfill@npm:^3.2.0, web-streams-polyfill@npm:^3.2.1": +"web-streams-polyfill@npm:^3.2.1": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 languageName: node linkType: hard +"web-tree-sitter@npm:=0.20.7": + version: 0.20.7 + resolution: "web-tree-sitter@npm:0.20.7" + checksum: f2949a679bbca5ecb225ab26a67ff99e6e3907fa905c6bd62bfe6d2cfa216347f8cc481efcd32f181cb6b964bc03c42f9611e16da0825bff43de389b17ff9f7f + languageName: node + linkType: hard + "webcrypto-core@npm:^1.7.4": - version: 1.7.5 - resolution: "webcrypto-core@npm:1.7.5" + version: 1.7.6 + resolution: "webcrypto-core@npm:1.7.6" dependencies: "@peculiar/asn1-schema": ^2.1.6 "@peculiar/json-schema": ^1.1.12 asn1js: ^3.0.1 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: f6e529ca5c1175b8ccead3547f60efa7a1f8e247aaeab3bd4f096eb9fda11cfc8e6b6fb574bbc5696f608958c491a27e9682c89204412f73fb430e5fcbe9ebac + checksum: 0503c92cd1fc8861383872774963104bf3d7ddf0a35cadd841862f0488e4613bdf23499d06b31938a4f2cf333bfde8dacc24e349c5e943e44246f3fcb623c7d0 languageName: node linkType: hard @@ -38516,23 +38891,23 @@ __metadata: linkType: hard "webpack-dev-middleware@npm:^5.3.1": - version: 5.3.1 - resolution: "webpack-dev-middleware@npm:5.3.1" + version: 5.3.3 + resolution: "webpack-dev-middleware@npm:5.3.3" dependencies: colorette: ^2.0.10 - memfs: ^3.4.1 + memfs: ^3.4.3 mime-types: ^2.1.31 range-parser: ^1.2.1 schema-utils: ^4.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 32e36b5893dde4107e5bb758afdc7fc61fd238a62635cb2964ed6b61e363793275a40870479daeae3fa3b87678c1311f44ba7492f6ebf30fe9360f2aab30bae1 + checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 languageName: node linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.11.1 - resolution: "webpack-dev-server@npm:4.11.1" + version: 4.13.1 + resolution: "webpack-dev-server@npm:4.13.1" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -38553,6 +38928,7 @@ __metadata: html-entities: ^2.3.2 http-proxy-middleware: ^2.0.3 ipaddr.js: ^2.0.1 + launch-editor: ^2.6.0 open: ^8.0.9 p-retry: ^4.5.0 rimraf: ^3.0.2 @@ -38562,15 +38938,17 @@ __metadata: sockjs: ^0.3.24 spdy: ^4.0.2 webpack-dev-middleware: ^5.3.1 - ws: ^8.4.2 + ws: ^8.13.0 peerDependencies: webpack: ^4.37.0 || ^5.0.0 peerDependenciesMeta: + webpack: + optional: true webpack-cli: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: b7601a39ee0f413988259e29a36835b0a68522cfaa161de5b7ec99b3399acdd99d44189add4aaf4a5191258bb130f9cf3e68919324a1955c7557f5fe6ab0d96c + checksum: f70611544b7d964a31eb3d934d7c2b376b97e6927a89e03b2e21cfa5812bb639625cd18fd350de1604ba6c455b324135523a894032f28c69d90d90682e4f3b7d languageName: node linkType: hard @@ -38598,7 +38976,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.1.0, webpack@npm:^5.70.0": version: 5.76.2 resolution: "webpack@npm:5.76.2" dependencies: @@ -38671,7 +39049,7 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.4.1": +"whatwg-fetch@npm:^3.4.1": version: 3.6.2 resolution: "whatwg-fetch@npm:3.6.2" checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed @@ -38808,7 +39186,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2": +"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: @@ -38920,6 +39298,18 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^3.0.0": + version: 3.0.3 + resolution: "write-file-atomic@npm:3.0.3" + dependencies: + imurmurhash: ^0.1.4 + is-typedarray: ^1.0.0 + signal-exit: ^3.0.2 + typedarray-to-buffer: ^3.1.5 + checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 + languageName: node + linkType: hard + "write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" @@ -38930,18 +39320,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.11.0": - version: 8.11.0 - resolution: "ws@npm:8.11.0" +"ws@npm:8.12.1": + version: 8.12.1 + resolution: "ws@npm:8.12.1" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + checksum: 97301c1c4d838fc81bd413f370f75c12aabe44527b31323b761eab3043a9ecb7e32ffd668548382c9a6a5ad3a1c3a9249608e8338e6b939f2f9540f1e21970b5 languageName: node linkType: hard @@ -38975,9 +39365,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.4.2, ws@npm:^8.8.0": - version: 8.12.0 - resolution: "ws@npm:8.12.0" +"ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -38986,7 +39376,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c languageName: node linkType: hard @@ -38997,6 +39387,13 @@ __metadata: languageName: node linkType: hard +"xdg-basedir@npm:^4.0.0": + version: 4.0.0 + resolution: "xdg-basedir@npm:4.0.0" + checksum: 0073d5b59a37224ed3a5ac0dd2ec1d36f09c49f0afd769008a6e9cd3cd666bd6317bd1c7ce2eab47e1de285a286bad11a9b038196413cd753b79770361855f3c + languageName: node + linkType: hard + "xml-but-prettier@npm:^1.0.1": version: 1.0.1 resolution: "xml-but-prettier@npm:1.0.1" @@ -39007,12 +39404,12 @@ __metadata: linkType: hard "xml-crypto@npm:^2.1.3": - version: 2.1.3 - resolution: "xml-crypto@npm:2.1.3" + version: 2.1.5 + resolution: "xml-crypto@npm:2.1.5" dependencies: - "@xmldom/xmldom": ^0.7.0 + "@xmldom/xmldom": ^0.7.9 xpath: 0.0.32 - checksum: 04273568b4ed3d1422b7e93ae7c5e8e14180e9d377038a5767ef6af4d1da2ec766f3a476f4cf0140ecedb93036dac63e563f60d9bb249c5a344d77c93c07ff87 + checksum: 387ed6aa812f9ea7fb33385bd3e934042152ee9a97870f28ebfa5c7931eee23a7a2d36ca35916fbe5eadd65163ce9483db661cf3f569c9177773e8efa1acfa37 languageName: node linkType: hard @@ -39197,7 +39594,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.0": +"yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c @@ -39248,18 +39645,18 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1": - version: 17.5.1 - resolution: "yargs@npm:17.5.1" +"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.7.1": + version: 17.7.1 + resolution: "yargs@npm:17.7.1" dependencies: - cliui: ^7.0.2 + cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.3 y18n: ^5.0.5 - yargs-parser: ^21.0.0 - checksum: 00d58a2c052937fa044834313f07910fd0a115dec5ee35919e857eeee3736b21a4eafa8264535800ba8bac312991ce785ecb8a51f4d2cc8c4676d865af1cfbde + yargs-parser: ^21.1.1 + checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 languageName: node linkType: hard @@ -39405,10 +39802,10 @@ __metadata: linkType: hard "z-schema@npm:~5.0.2": - version: 5.0.2 - resolution: "z-schema@npm:5.0.2" + version: 5.0.5 + resolution: "z-schema@npm:5.0.5" dependencies: - commander: ^2.7.1 + commander: ^9.4.1 lodash.get: ^4.4.2 lodash.isequal: ^4.5.0 validator: ^13.7.0 @@ -39417,7 +39814,7 @@ __metadata: optional: true bin: z-schema: bin/z-schema - checksum: 084b2f16043ac0a892914ee29cc0b4fafd9338133eec0345cd6ced25e814f647fa67be1090ad5f606759c2c1f2f8c28127960ba187f437f1caf6fb8cd45d7336 + checksum: 8a1d66817ae4384dc3f63311f0cccaadd95cc9640eaade5fd3fbf91aa80d6bb82fb95d9b9171fa82ac371a0155b32b7f5f77bbe84dabaca611b66f74c628f0b8 languageName: node linkType: hard @@ -39491,8 +39888,8 @@ __metadata: linkType: hard "zwitch@npm:^2.0.0": - version: 2.0.2 - resolution: "zwitch@npm:2.0.2" - checksum: 8edd7af8375f12f64d8dbef815af32cd77bd9237d0b013210ba4e3aef25fdc460fe264cd0a19deabe9f86ef0c607240ebac1a336bf4a70bf06ef53e0652de116 + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 languageName: node linkType: hard From 1ad400bb2de29ce887944ed6d0dd77cb036cc6d2 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 9 Jan 2023 17:03:04 +0100 Subject: [PATCH 314/511] add changeset Signed-off-by: Dominik Pfaffenbauer --- .changeset/nasty-nails-appear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/nasty-nails-appear.md diff --git a/.changeset/nasty-nails-appear.md b/.changeset/nasty-nails-appear.md new file mode 100644 index 0000000000..fdb35f052c --- /dev/null +++ b/.changeset/nasty-nails-appear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': minor +--- + +Add Gitlab Scaffolder Plugin From a387dd6d89c40a5a40f81dd80b05555a314a1386 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 9 Jan 2023 17:12:55 +0100 Subject: [PATCH 315/511] Add API Report Signed-off-by: Dominik Pfaffenbauer --- .../api-report.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 plugins/scaffolder-backend-module-gitlab/api-report.md diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/api-report.md new file mode 100644 index 0000000000..7cde3666e4 --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/api-report.md @@ -0,0 +1,56 @@ +## API Report File for "@backstage/plugin-scaffolder-backend-module-gitlab" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-backend'; + +// Warning: (ae-missing-release-tag) "createGitlabProjectAccessToken" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const createGitlabProjectAccessToken: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction<{ + repoUrl: string; + projectId: string | number; + name: string; + accessLevel: number; + scopes: string[]; + token?: string | undefined; +}>; + +// Warning: (ae-missing-release-tag) "createGitlabProjectDeployToken" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const createGitlabProjectDeployToken: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction<{ + repoUrl: string; + projectId: string | number; + name: string; + username: string; + scopes: string[]; + token?: string | undefined; +}>; + +// Warning: (ae-missing-release-tag) "createGitlabProjectVariable" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const createGitlabProjectVariable: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction<{ + repoUrl: string; + projectId: string | number; + key: string; + value: string; + variableType: string; + variableProtected: boolean; + masked: boolean; + raw: boolean; + environmentScope: string; + token?: string | undefined; +}>; + +// (No @packageDocumentation comment for this package) +``` From 3ea03704908eaad2fa577f9cab86d0535190a2e9 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:14:00 +0100 Subject: [PATCH 316/511] Update plugins/scaffolder-backend-module-gitlab/package.json Co-authored-by: Andreas Berger Signed-off-by: Dominik --- plugins/scaffolder-backend-module-gitlab/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 9864188049..d767d88370 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -10,7 +10,7 @@ "types": "dist/index.d.ts" }, "backstage": { - "role": "frontend-plugin" + "role": "backend-plugin-module" }, "scripts": { "start": "backstage-cli package start", From 7153033b8693dbf6cbcc829bce920730d9900fea Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:14:39 +0100 Subject: [PATCH 317/511] Update plugins/scaffolder-backend-module-gitlab/package.json Co-authored-by: Andreas Berger Signed-off-by: Dominik --- plugins/scaffolder-backend-module-gitlab/package.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index d767d88370..1d2e002dec 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -12,6 +12,15 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-gitlab" + }, + "keywords": [ + "backstage" + ], "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", From 6068251a8e0d8ce894baf2e4d2908a81ee722f32 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 16 Feb 2023 08:41:04 +0100 Subject: [PATCH 318/511] update gitlab scaffolder Signed-off-by: Dominik Pfaffenbauer --- .../README.md | 50 +++++++++++++++++-- .../api-report.md | 2 - .../package.json | 6 --- .../src/actions/createProjectAccessToken.ts | 33 ++++++------ .../actions/createProjectDeployToken.test.ts | 1 - .../src/actions/createProjectDeployToken.ts | 37 +++++++------- .../src/actions/createProjectVariable.ts | 24 +++------ .../src/index.ts | 5 ++ .../src/util.ts | 28 +++++++++++ 9 files changed, 120 insertions(+), 66 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md index 5689c105ab..b4cc3e9459 100644 --- a/plugins/scaffolder-backend-module-gitlab/README.md +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -6,14 +6,58 @@ Here you can find all Gitlab related features to improve your scaffolder: ## Getting started +## From your Backstage root directory + ```bash # From your Backstage root directory yarn add --cwd packages/backend @backstage/plugin-scaffolder-backend-module-gitlab ``` -Configure the action (you can check -the [docs](https://backstage.io/docs/features/software-templates/writing-custom-actions#registering-custom-actions) to -see all options): +Configure the action: +(you can check the [docs](https://backstage.io/docs/features/software-templates/writing-custom-actions#registering-custom-actions) to see all options): + +```typescript +// packages/backend/src/plugins/scaffolder.ts + +import { + createGitlabProjectVariable, + createGitlabProjectAccessToken, + createGitlabProjectDeployToken, +} from '@backstage/plugin-scaffolder-backend-module-gitlab'; + +// Create BuiltIn Actions +const builtInActions = createBuiltinActions({ + integrations, + catalogClient, + config: env.config, + reader: env.reader, +}); + +// Add Gitlab Actions +const actions = [ + ...builtInActions, + createGitlabProjectVariable({ + integrations: integrations, + }), + createGitlabProjectAccessToken({ + integrations: integrations, + }), + createGitlabProjectDeployToken({ + integrations: integrations, + }), +]; + +// Create Scaffolder Router +return await createRouter({ + containerRunner, + catalogClient, + actions, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, +}); +``` After that you can use the action in your template: diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/api-report.md index 7cde3666e4..ba7f0c1b8c 100644 --- a/plugins/scaffolder-backend-module-gitlab/api-report.md +++ b/plugins/scaffolder-backend-module-gitlab/api-report.md @@ -51,6 +51,4 @@ export const createGitlabProjectVariable: (options: { environmentScope: string; token?: string | undefined; }>; - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 1d2e002dec..33cfe0aec1 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -40,17 +40,11 @@ "@gitbeaker/node": "^35.8.0", "fs-extra": "10.1.0" }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - }, "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/jest-dom": "^5.10.1", - "@testing-library/react": "^12.1.3", - "@testing-library/user-event": "^14.0.0", "@types/node": "*", "cross-fetch": "^3.1.5", "msw": "^0.49.0" diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts index 384512f183..484730c2c5 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -16,8 +16,7 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; import { ScmIntegrationRegistry } from '@backstage/integration'; -import { InputError } from '@backstage/errors'; -import { parseRepoHost } from '../util'; +import { getToken } from '../util'; export const createGitlabProjectAccessToken = (options: { integrations: ScmIntegrationRegistry; @@ -64,26 +63,24 @@ export const createGitlabProjectAccessToken = (options: { }, }, }, + output: { + type: 'object', + properties: { + access_token: { + title: 'Access Token', + type: 'string', + }, + }, + }, }, async handler(ctx) { ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); const { repoUrl, projectId, name, accessLevel, scopes } = ctx.input; - - const host = parseRepoHost(repoUrl); - const integrationConfig = integrations.gitlab.byHost(host); - - if (!integrationConfig) { - throw new InputError( - `No matching integration configuration for host ${host}, please check your integrations config`, - ); - } - - const token = ctx.input.token || integrationConfig.config.token!; - const tokenType = ctx.input.token ? 'oauthToken' : 'token'; - - if (tokenType === 'oauthToken') { - throw new InputError(`OAuth Token is currently not supported`); - } + const { token, integrationConfig } = getToken( + repoUrl, + ctx.input.token, + integrations, + ); const response = await fetch( `${integrationConfig.config.baseUrl}/api/v4/projects/${projectId}/access_tokens`, diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts index c2d1c223c4..bba1c6516b 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts @@ -18,7 +18,6 @@ import { createGitlabProjectDeployToken } from './createProjectDeployToken'; import { ScmIntegrations } from '@backstage/integration'; import { ConfigReader } from '@backstage/config'; import { getVoidLogger } from '@backstage/backend-common'; -// eslint-disable-next-line no-restricted-imports import { PassThrough } from 'stream'; const mockGitlabClient = { diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts index 165d7a7863..3660b85f98 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -17,9 +17,8 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; import { Gitlab } from '@gitbeaker/node'; import { ScmIntegrationRegistry } from '@backstage/integration'; -import { InputError } from '@backstage/errors'; import { DeployTokenScope } from '@gitbeaker/core/dist/types/templates/ResourceDeployTokens'; -import { parseRepoHost } from '../util'; +import { getToken } from '../util'; export const createGitlabProjectDeployToken = (options: { integrations: ScmIntegrationRegistry; @@ -66,26 +65,28 @@ export const createGitlabProjectDeployToken = (options: { }, }, }, + output: { + type: 'object', + properties: { + deploy_token: { + title: 'Deploy Token', + type: 'string', + }, + user: { + title: 'User', + type: 'string', + }, + }, + }, }, async handler(ctx) { ctx.logger.info(`Creating Token for Project "${ctx.input.projectId}"`); const { repoUrl, projectId, name, username, scopes } = ctx.input; - - const host = parseRepoHost(repoUrl); - const integrationConfig = integrations.gitlab.byHost(host); - - if (!integrationConfig) { - throw new InputError( - `No matching integration configuration for host ${host}, please check your integrations config`, - ); - } - - const token = ctx.input.token || integrationConfig.config.token!; - const tokenType = ctx.input.token ? 'oauthToken' : 'token'; - - if (tokenType === 'oauthToken') { - throw new InputError(`OAuth Token is currently not supported`); - } + const { token, integrationConfig } = getToken( + repoUrl, + ctx.input.token, + integrations, + ); const api = new Gitlab({ host: integrationConfig.config.baseUrl, diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts index 1b007a9c46..d69601b381 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -16,8 +16,7 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; import { ScmIntegrationRegistry } from '@backstage/integration'; -import { InputError } from '@backstage/errors'; -import { parseRepoHost } from '../util'; +import { getToken } from '../util'; import { Gitlab } from '@gitbeaker/node'; export const createGitlabProjectVariable = (options: { @@ -104,22 +103,11 @@ export const createGitlabProjectVariable = (options: { raw, environmentScope, } = ctx.input; - - const host = parseRepoHost(repoUrl); - const integrationConfig = integrations.gitlab.byHost(host); - - if (!integrationConfig) { - throw new InputError( - `No matching integration configuration for host ${host}, please check your integrations config`, - ); - } - - const token = ctx.input.token || integrationConfig.config.token!; - const tokenType = ctx.input.token ? 'oauthToken' : 'token'; - - if (tokenType === 'oauthToken') { - throw new InputError(`OAuth Token is currently not supported`); - } + const { token, integrationConfig } = getToken( + repoUrl, + ctx.input.token, + integrations, + ); const api = new Gitlab({ host: integrationConfig.config.baseUrl, diff --git a/plugins/scaffolder-backend-module-gitlab/src/index.ts b/plugins/scaffolder-backend-module-gitlab/src/index.ts index 1d72d6f4b5..4ca0b3bb7f 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/index.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/index.ts @@ -13,6 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +/** + * A module for the scaffolder backend that lets you create gitlab project access tokens or deploy tokens + * + * @packageDocumentation + */ export * from './actions/createProjectDeployToken'; export * from './actions/createProjectAccessToken'; diff --git a/plugins/scaffolder-backend-module-gitlab/src/util.ts b/plugins/scaffolder-backend-module-gitlab/src/util.ts index b937c01f9a..fc6667d6d3 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/util.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/util.ts @@ -15,6 +15,10 @@ */ import { InputError } from '@backstage/errors'; +import { + GitLabIntegration, + ScmIntegrationRegistry, +} from '@backstage/integration'; export const parseRepoHost = (repoUrl: string): string => { let parsed; @@ -27,3 +31,27 @@ export const parseRepoHost = (repoUrl: string): string => { } return parsed.host; }; + +export const getToken = ( + repoUrl: string, + inputToken: string | null | undefined, + integrations: ScmIntegrationRegistry, +): { token: string; integrationConfig: GitLabIntegration } => { + const host = parseRepoHost(repoUrl); + const integrationConfig = integrations.gitlab.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = inputToken || integrationConfig.config.token!; + const tokenType = inputToken ? 'oauthToken' : 'token'; + + if (tokenType === 'oauthToken') { + throw new InputError(`OAuth Token is currently not supported`); + } + + return { token: token, integrationConfig: integrationConfig }; +}; From 7f627ded9bde81ff2f5248d56c67940ea138e5ab Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:15:46 +0100 Subject: [PATCH 319/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectAccessToken.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts index 484730c2c5..aacc20b22d 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -18,6 +18,12 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { getToken } from '../util'; +/** + * Creates a `gitlab:create-project-access-token` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ export const createGitlabProjectAccessToken = (options: { integrations: ScmIntegrationRegistry; }) => { From 4a91ff84774f7918a831484cb5272dfa1a4f45e0 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:16:18 +0100 Subject: [PATCH 320/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectAccessToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts index aacc20b22d..1b0c3e6ab5 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { getToken } from '../util'; From 1471eba5e0f8823af1377195c932619e91f40a2d Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:18:05 +0100 Subject: [PATCH 321/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectDeployToken.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts index 3660b85f98..5fb9215380 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -20,6 +20,12 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { DeployTokenScope } from '@gitbeaker/core/dist/types/templates/ResourceDeployTokens'; import { getToken } from '../util'; +/** + * Creates a `gitlab:create-project-deploy-token` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ export const createGitlabProjectDeployToken = (options: { integrations: ScmIntegrationRegistry; }) => { From 758a8fc78e530102222a1168a2e5a38d9aef1ac6 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:18:18 +0100 Subject: [PATCH 322/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectDeployToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts index 5fb9215380..0707fdb526 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { Gitlab } from '@gitbeaker/node'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { DeployTokenScope } from '@gitbeaker/core/dist/types/templates/ResourceDeployTokens'; From 36e9f2faadf396e296774b427509ab388834dcab Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:18:56 +0100 Subject: [PATCH 323/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectVariable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts index d69601b381..18e34f5468 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createTemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { getToken } from '../util'; import { Gitlab } from '@gitbeaker/node'; From 37cfd9347306cd25afd3b2c773907f40d21b0a65 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:19:12 +0100 Subject: [PATCH 324/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectVariable.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts index 18e34f5468..bbb53289eb 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -19,6 +19,12 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { getToken } from '../util'; import { Gitlab } from '@gitbeaker/node'; +/** + * Creates a `gitlab:create-project-variable` Scaffolder action. + * + * @param options - Templating configuration. + * @public + */ export const createGitlabProjectVariable = (options: { integrations: ScmIntegrationRegistry; }) => { From d8eb1f0707c866b2252dfbab164fbdf7e4043035 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:19:35 +0100 Subject: [PATCH 325/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectDeployToken.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts index bba1c6516b..8abf0d7403 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts @@ -72,6 +72,11 @@ describe('gitlab:create-deploy-token', () => { }); it('should work when there is a token provided through ctx.input', async () => { + mockGitlabClient.ProjectDeployTokens.add.mockResolvedValue({ + token: 'TOKEN', + username: 'User', + }); + await action.handler({ ...mockContext, input: { From 5b68d7d361b0734385cde34c0ccb2c33f501e193 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:20:20 +0100 Subject: [PATCH 326/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectDeployToken.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts index 8abf0d7403..ca443aa38d 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts @@ -94,5 +94,9 @@ describe('gitlab:create-deploy-token', () => { ['read_repository'], { username: 'tokenuser' }, ); + + expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); + expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); + }); }); From 6b36e7c895fe22fce50086fcce5d224f147318b4 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:20:50 +0100 Subject: [PATCH 327/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectAccessToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts index 1b0c3e6ab5..b152e82473 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -39,7 +39,7 @@ export const createGitlabProjectAccessToken = (options: { id: 'gitlab:create-project-access-token', schema: { input: { - required: ['projectId'], + required: ['projectId', 'repoUrl'], type: 'object', properties: { repoUrl: { From d4df2927c835ea2cc6da65af23561be7264b93e3 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:20:55 +0100 Subject: [PATCH 328/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectDeployToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts index 0707fdb526..53248a36a3 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -41,7 +41,7 @@ export const createGitlabProjectDeployToken = (options: { id: 'gitlab:create-project-deploy-token', schema: { input: { - required: ['projectId'], + required: ['projectId', 'repoUrl'], type: 'object', properties: { repoUrl: { From bbe0c1f448601a53ffbc912b35735efe860ea2c8 Mon Sep 17 00:00:00 2001 From: Dominik Date: Thu, 16 Feb 2023 08:21:01 +0100 Subject: [PATCH 329/511] Update plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts Co-authored-by: Andreas Berger Signed-off-by: Dominik --- .../src/actions/createProjectVariable.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts index bbb53289eb..bcfcec4c77 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -45,6 +45,7 @@ export const createGitlabProjectVariable = (options: { schema: { input: { required: [ + 'repoUrl', 'projectId', 'key', 'value', From d8342311d17400eae20c9fecc592958f020b7987 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 16 Feb 2023 08:46:35 +0100 Subject: [PATCH 330/511] update api-report Signed-off-by: Dominik Pfaffenbauer --- .../scaffolder-backend-module-gitlab/api-report.md | 14 ++++---------- .../scaffolder-backend-module-gitlab/package.json | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/api-report.md index ba7f0c1b8c..0e2ef92c3c 100644 --- a/plugins/scaffolder-backend-module-gitlab/api-report.md +++ b/plugins/scaffolder-backend-module-gitlab/api-report.md @@ -4,11 +4,9 @@ ```ts import { ScmIntegrationRegistry } from '@backstage/integration'; -import { TemplateAction } from '@backstage/plugin-scaffolder-backend'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; -// Warning: (ae-missing-release-tag) "createGitlabProjectAccessToken" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const createGitlabProjectAccessToken: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ @@ -20,9 +18,7 @@ export const createGitlabProjectAccessToken: (options: { token?: string | undefined; }>; -// Warning: (ae-missing-release-tag) "createGitlabProjectDeployToken" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const createGitlabProjectDeployToken: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ @@ -34,9 +30,7 @@ export const createGitlabProjectDeployToken: (options: { token?: string | undefined; }>; -// Warning: (ae-missing-release-tag) "createGitlabProjectVariable" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const createGitlabProjectVariable: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 33cfe0aec1..42956ac2c0 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -36,7 +36,7 @@ "@backstage/core-components": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-scaffolder-backend": "workspace:^", + "@backstage/plugin-scaffolder-node": "workspace:^", "@gitbeaker/node": "^35.8.0", "fs-extra": "10.1.0" }, From 61350a3e25c57351aa8e80be063eff7383c792ec Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 16 Feb 2023 08:52:03 +0100 Subject: [PATCH 331/511] update lock Signed-off-by: Dominik Pfaffenbauer --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index cf87f7aff9..1bf2e3e838 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7521,7 +7521,7 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/test-utils": "workspace:^" "@gitbeaker/node": ^35.8.0 "@testing-library/jest-dom": ^5.10.1 From d01f6c878d74b06e77542746fd0369f7228d72b7 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 16 Feb 2023 09:01:21 +0100 Subject: [PATCH 332/511] prettier Signed-off-by: Dominik Pfaffenbauer --- .../src/actions/createProjectDeployToken.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts index ca443aa38d..652e7123c8 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts @@ -97,6 +97,5 @@ describe('gitlab:create-deploy-token', () => { expect(mockContext.output).toHaveBeenCalledWith('deploy_token', 'TOKEN'); expect(mockContext.output).toHaveBeenCalledWith('user', 'User'); - }); }); From a968e7cb1df8c3d547ece179b293299823dd75dd Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Tue, 21 Feb 2023 14:19:00 +0100 Subject: [PATCH 333/511] remove unneeded deps Signed-off-by: Dominik Pfaffenbauer --- .../scaffolder-backend-module-gitlab/package.json | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 42956ac2c0..32d0f6621c 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -31,23 +31,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/core-components": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", - "@gitbeaker/node": "^35.8.0", - "fs-extra": "10.1.0" + "@gitbeaker/node": "^35.8.0" }, "devDependencies": { + "@backstage/backend-common": "workspace:^", "@backstage/cli": "workspace:^", - "@backstage/core-app-api": "workspace:^", - "@backstage/dev-utils": "workspace:^", - "@backstage/test-utils": "workspace:^", - "@types/node": "*", - "cross-fetch": "^3.1.5", - "msw": "^0.49.0" + "@backstage/core-app-api": "workspace:^" }, "files": [ "dist" From b7309335cbbbdb6d731de9d9b59c2f1332eb68f7 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Wed, 22 Feb 2023 17:09:09 +0100 Subject: [PATCH 334/511] add lockfile Signed-off-by: Dominik Pfaffenbauer --- yarn.lock | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1bf2e3e838..ab7b8659a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7515,24 +7515,11 @@ __metadata: dependencies: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/dev-utils": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" - "@backstage/test-utils": "workspace:^" "@gitbeaker/node": ^35.8.0 - "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^12.1.3 - "@testing-library/user-event": ^14.0.0 - "@types/node": "*" - cross-fetch: ^3.1.5 - fs-extra: 10.1.0 - msw: ^0.49.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 languageName: unknown linkType: soft From 2b05e68f132cff54271b19306dd895cb7dfc4383 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 23 Feb 2023 07:59:38 +0100 Subject: [PATCH 335/511] add config Signed-off-by: Dominik Pfaffenbauer --- plugins/scaffolder-backend-module-gitlab/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 32d0f6621c..5e02ccc89f 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -31,6 +31,7 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", From 8145359e2edef9ea7f0d3b69311b69bee18510e4 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Thu, 23 Feb 2023 07:59:46 +0100 Subject: [PATCH 336/511] add lock Signed-off-by: Dominik Pfaffenbauer --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index ab7b8659a4..9a405f1de0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7515,6 +7515,7 @@ __metadata: dependencies: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" From d1debd0e995947f510f4a1b2b56142d9520743b8 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Wed, 8 Mar 2023 11:23:31 +0100 Subject: [PATCH 337/511] fix schema definition for projectid and deploy token parsing Signed-off-by: Dominik Pfaffenbauer --- .../src/actions/createProjectAccessToken.ts | 2 +- .../src/actions/createProjectDeployToken.ts | 10 ++++++---- .../src/actions/createProjectVariable.ts | 4 ++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts index b152e82473..b4f7ee4f70 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts @@ -48,7 +48,7 @@ export const createGitlabProjectAccessToken = (options: { }, projectId: { title: 'Project ID', - type: 'string | number', + type: ['string', 'number'], }, name: { title: 'Deploy Token Name', diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts index 53248a36a3..08d789c68c 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts @@ -19,6 +19,7 @@ import { Gitlab } from '@gitbeaker/node'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { DeployTokenScope } from '@gitbeaker/core/dist/types/templates/ResourceDeployTokens'; import { getToken } from '../util'; +import { InputError } from '@backstage/errors'; /** * Creates a `gitlab:create-project-deploy-token` Scaffolder action. @@ -50,7 +51,7 @@ export const createGitlabProjectDeployToken = (options: { }, projectId: { title: 'Project ID', - type: 'string | number', + type: ['string', 'number'], }, name: { title: 'Deploy Token Name', @@ -108,10 +109,11 @@ export const createGitlabProjectDeployToken = (options: { }, ); - const string = JSON.stringify(deployToken); - const result = JSON.parse(string); + if (!deployToken.hasOwnProperty('token')) { + throw new InputError(`No deploy_token given from gitlab instance`); + } - ctx.output('deploy_token', result.token); + ctx.output('deploy_token', deployToken.token as string); ctx.output('user', deployToken.username); }, }); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts index bcfcec4c77..2587f4f740 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts @@ -61,6 +61,10 @@ export const createGitlabProjectVariable = (options: { title: 'Repository Location', type: 'string', }, + projectId: { + title: 'Project ID', + type: ['string', 'number'], + }, key: { title: 'The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed', From 242e84f20d20ca92233f0444156f7543cdfc7cf4 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Wed, 15 Mar 2023 15:59:50 +0100 Subject: [PATCH 338/511] rename gitlab scaffolder actions Signed-off-by: Dominik Pfaffenbauer --- .../scaffolder-backend-module-gitlab/README.md | 18 +++++++++--------- .../api-report.md | 6 +++--- ...=> createGitlabProjectAccessTokenAction.ts} | 4 ++-- ...eateGitlabProjectDeployTokenAction.test.ts} | 4 ++-- ...=> createGitlabProjectDeployTokenAction.ts} | 4 ++-- ...ts => createGitlabProjectVariableAction.ts} | 4 ++-- .../src/index.ts | 6 +++--- 7 files changed, 23 insertions(+), 23 deletions(-) rename plugins/scaffolder-backend-module-gitlab/src/actions/{createProjectAccessToken.ts => createGitlabProjectAccessTokenAction.ts} (96%) rename plugins/scaffolder-backend-module-gitlab/src/actions/{createProjectDeployToken.test.ts => createGitlabProjectDeployTokenAction.test.ts} (94%) rename plugins/scaffolder-backend-module-gitlab/src/actions/{createProjectDeployToken.ts => createGitlabProjectDeployTokenAction.ts} (96%) rename plugins/scaffolder-backend-module-gitlab/src/actions/{createProjectVariable.ts => createGitlabProjectVariableAction.ts} (97%) diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md index b4cc3e9459..a6277d4387 100644 --- a/plugins/scaffolder-backend-module-gitlab/README.md +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -20,9 +20,9 @@ Configure the action: // packages/backend/src/plugins/scaffolder.ts import { - createGitlabProjectVariable, - createGitlabProjectAccessToken, - createGitlabProjectDeployToken, + createGitlabProjectAccessTokenAction, + createGitlabProjectAccessTokenAction, + createGitlabProjectDeployTokenAction, } from '@backstage/plugin-scaffolder-backend-module-gitlab'; // Create BuiltIn Actions @@ -36,13 +36,13 @@ const builtInActions = createBuiltinActions({ // Add Gitlab Actions const actions = [ ...builtInActions, - createGitlabProjectVariable({ + createGitlabProjectAccessTokenAction({ integrations: integrations, }), - createGitlabProjectAccessToken({ + createGitlabProjectAccessTokenAction({ integrations: integrations, }), - createGitlabProjectDeployToken({ + createGitlabProjectDeployTokenAction({ integrations: integrations, }), ]; @@ -116,7 +116,7 @@ spec: - id: gitlab-deploy-token name: Create Deploy Token - action: gitlab:create-project-deploy-token + action: gitlab:pdt:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" @@ -126,7 +126,7 @@ spec: - id: gitlab-access-token name: Gitlab Access Token - action: gitlab:create-project-access-token + action: gitlab:pat:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish-manifest'].output.projectId }}" @@ -136,7 +136,7 @@ spec: - id: gitlab-project-variable name: Manifest CI/CD Variable - action: gitlab:create-project-variable + action: gitlab:pv:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" diff --git a/plugins/scaffolder-backend-module-gitlab/api-report.md b/plugins/scaffolder-backend-module-gitlab/api-report.md index 0e2ef92c3c..6db732fdcc 100644 --- a/plugins/scaffolder-backend-module-gitlab/api-report.md +++ b/plugins/scaffolder-backend-module-gitlab/api-report.md @@ -7,7 +7,7 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; // @public -export const createGitlabProjectAccessToken: (options: { +export const createGitlabProjectAccessTokenAction: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ repoUrl: string; @@ -19,7 +19,7 @@ export const createGitlabProjectAccessToken: (options: { }>; // @public -export const createGitlabProjectDeployToken: (options: { +export const createGitlabProjectDeployTokenAction: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ repoUrl: string; @@ -31,7 +31,7 @@ export const createGitlabProjectDeployToken: (options: { }>; // @public -export const createGitlabProjectVariable: (options: { +export const createGitlabProjectVariableAction: (options: { integrations: ScmIntegrationRegistry; }) => TemplateAction<{ repoUrl: string; diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts similarity index 96% rename from plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts rename to plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts index b4f7ee4f70..971bc2fa65 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectAccessToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts @@ -24,7 +24,7 @@ import { getToken } from '../util'; * @param options - Templating configuration. * @public */ -export const createGitlabProjectAccessToken = (options: { +export const createGitlabProjectAccessTokenAction = (options: { integrations: ScmIntegrationRegistry; }) => { const { integrations } = options; @@ -36,7 +36,7 @@ export const createGitlabProjectAccessToken = (options: { scopes: string[]; token?: string; }>({ - id: 'gitlab:create-project-access-token', + id: 'gitlab:pat:create', schema: { input: { required: ['projectId', 'repoUrl'], diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts similarity index 94% rename from plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts rename to plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts index 652e7123c8..1d3ae804c1 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createGitlabProjectDeployToken } from './createProjectDeployToken'; +import { createGitlabProjectDeployTokenAction } from './createGitlabProjectDeployTokenAction'; import { ScmIntegrations } from '@backstage/integration'; import { ConfigReader } from '@backstage/config'; import { getVoidLogger } from '@backstage/backend-common'; @@ -51,7 +51,7 @@ describe('gitlab:create-deploy-token', () => { }); const integrations = ScmIntegrations.fromConfig(config); - const action = createGitlabProjectDeployToken({ integrations }); + const action = createGitlabProjectDeployTokenAction({ integrations }); const mockContext = { input: { repoUrl: 'gitlab.com?repo=repo&owner=owner', diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts similarity index 96% rename from plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts rename to plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts index 08d789c68c..f8fc5bd389 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectDeployToken.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts @@ -27,7 +27,7 @@ import { InputError } from '@backstage/errors'; * @param options - Templating configuration. * @public */ -export const createGitlabProjectDeployToken = (options: { +export const createGitlabProjectDeployTokenAction = (options: { integrations: ScmIntegrationRegistry; }) => { const { integrations } = options; @@ -39,7 +39,7 @@ export const createGitlabProjectDeployToken = (options: { scopes: string[]; token?: string; }>({ - id: 'gitlab:create-project-deploy-token', + id: 'gitlab:pdt:create', schema: { input: { required: ['projectId', 'repoUrl'], diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts similarity index 97% rename from plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts rename to plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts index 2587f4f740..5b974e6235 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createProjectVariable.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts @@ -25,7 +25,7 @@ import { Gitlab } from '@gitbeaker/node'; * @param options - Templating configuration. * @public */ -export const createGitlabProjectVariable = (options: { +export const createGitlabProjectVariableAction = (options: { integrations: ScmIntegrationRegistry; }) => { const { integrations } = options; @@ -41,7 +41,7 @@ export const createGitlabProjectVariable = (options: { environmentScope: string; token?: string; }>({ - id: 'gitlab:create-project-variable', + id: 'gitlab:pv:create', schema: { input: { required: [ diff --git a/plugins/scaffolder-backend-module-gitlab/src/index.ts b/plugins/scaffolder-backend-module-gitlab/src/index.ts index 4ca0b3bb7f..11209e19bd 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/index.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/index.ts @@ -19,6 +19,6 @@ * @packageDocumentation */ -export * from './actions/createProjectDeployToken'; -export * from './actions/createProjectAccessToken'; -export * from './actions/createProjectVariable'; +export * from './actions/createGitlabProjectDeployTokenAction'; +export * from './actions/createGitlabProjectAccessTokenAction'; +export * from './actions/createGitlabProjectVariableAction'; From 4442b97fb57375f0cef1ea692b1ad4ce408e517c Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 20 Mar 2023 16:27:08 +0100 Subject: [PATCH 339/511] rename actions Signed-off-by: Dominik Pfaffenbauer --- .../src/actions/createGitlabProjectAccessTokenAction.ts | 2 +- .../src/actions/createGitlabProjectDeployTokenAction.ts | 2 +- .../src/actions/createGitlabProjectVariableAction.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts index 971bc2fa65..29e3a06a44 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts @@ -36,7 +36,7 @@ export const createGitlabProjectAccessTokenAction = (options: { scopes: string[]; token?: string; }>({ - id: 'gitlab:pat:create', + id: 'gitlab:personalAccessToken:create', schema: { input: { required: ['projectId', 'repoUrl'], diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts index f8fc5bd389..35a53c87e2 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectDeployTokenAction.ts @@ -39,7 +39,7 @@ export const createGitlabProjectDeployTokenAction = (options: { scopes: string[]; token?: string; }>({ - id: 'gitlab:pdt:create', + id: 'gitlab:projectDeployToken:create', schema: { input: { required: ['projectId', 'repoUrl'], diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts index 5b974e6235..847bbc2057 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectVariableAction.ts @@ -41,7 +41,7 @@ export const createGitlabProjectVariableAction = (options: { environmentScope: string; token?: string; }>({ - id: 'gitlab:pv:create', + id: 'gitlab:projectVariable:create', schema: { input: { required: [ From 4b25d0529d6c91a13bd20b366de6d4987979c202 Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 20 Mar 2023 16:57:22 +0100 Subject: [PATCH 340/511] update lockfile Signed-off-by: Dominik Pfaffenbauer --- yarn.lock | 9984 ++++++++++++++++++++++++++--------------------------- 1 file changed, 4807 insertions(+), 5177 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9a405f1de0..61aaace6d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,19 +6,18 @@ __metadata: cacheKey: 8 "@adobe/css-tools@npm:^4.0.1": - version: 4.2.0 - resolution: "@adobe/css-tools@npm:4.2.0" - checksum: dc5cc92ba3d562e7ffddb79d6d222c7e00b65f255fd2725b3d71490ff268844be322f917415d8c4ab39eca646343b632058db8bd5b1d646193fcc94d1d3e420b + version: 4.0.1 + resolution: "@adobe/css-tools@npm:4.0.1" + checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" +"@ampproject/remapping@npm:^2.1.0": + version: 2.1.2 + resolution: "@ampproject/remapping@npm:2.1.2" dependencies: - "@jridgewell/gen-mapping": ^0.1.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + "@jridgewell/trace-mapping": ^0.3.0 + checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 languageName: node linkType: hard @@ -325,7 +324,7 @@ __metadata: languageName: node linkType: hard -"@ardatan/sync-fetch@npm:^0.0.1": +"@ardatan/sync-fetch@npm:0.0.1": version: 0.0.1 resolution: "@ardatan/sync-fetch@npm:0.0.1" dependencies: @@ -353,11 +352,11 @@ __metadata: linkType: hard "@asyncapi/parser@npm:^1.18.0": - version: 1.18.1 - resolution: "@asyncapi/parser@npm:1.18.1" + version: 1.18.0 + resolution: "@asyncapi/parser@npm:1.18.0" dependencies: "@apidevtools/json-schema-ref-parser": ^9.0.6 - "@asyncapi/specs": ^4.1.1 + "@asyncapi/specs": ^4.1.0 "@fmvilas/pseudo-yaml-ast": ^0.3.1 ajv: ^6.10.1 js-yaml: ^3.13.1 @@ -365,7 +364,7 @@ __metadata: lodash.clonedeep: ^4.5.0 node-fetch: ^2.6.0 tiny-merge-patch: ^0.1.2 - checksum: 6c2799d9338e9650001f2e6afaf1e7525ad9231243130da4adeb96b8af37f0ba2cac41181513aa903aacc08690e64defda8518c78f2b88007d67a7c71d58818e + checksum: 7e08cae52990ce97299170faf99aaf27a8e2e02e6b03df28518d256f5687f394c26fd0a4aba235514ed4e3c2fd081a79321a489c20987ed22122afdb0b9ea0dd languageName: node linkType: hard @@ -388,12 +387,12 @@ __metadata: languageName: node linkType: hard -"@asyncapi/specs@npm:^4.1.1": - version: 4.2.0 - resolution: "@asyncapi/specs@npm:4.2.0" +"@asyncapi/specs@npm:^4.1.0": + version: 4.1.0 + resolution: "@asyncapi/specs@npm:4.1.0" dependencies: "@types/json-schema": ^7.0.11 - checksum: 1eae980e1d7754469cf079bfbbaa2f1185b5fd0293f5bf5d7903014c81fb1c8658ef463a09f6dcca58081f87c0e98b3e0c13b09e3858c738bf209182472763e0 + checksum: 6e95f3c1ef7267480cdfc69f5a015f63b9101874289e31843a629346a3ea07490e3043b296a089bf3458e877c664d83d4b4738dcb53d37d7e13b75c7bc08c879 languageName: node linkType: hard @@ -1566,11 +1565,11 @@ __metadata: linkType: hard "@aws-sdk/util-locate-window@npm:^3.0.0": - version: 3.292.0 - resolution: "@aws-sdk/util-locate-window@npm:3.292.0" + version: 3.183.0 + resolution: "@aws-sdk/util-locate-window@npm:3.183.0" dependencies: tslib: ^2.3.1 - checksum: d1c0f0a41ab3e1210af26db11d1a71ba5fbe11cd69203331cdd4edb9f4dc78c7e455da242b1d34859da7caef9b1417c4cf163cb8a6291dd2a04507a19122c13a + checksum: c29899b440c148aa44a5d9322e06e4cf21644e47bee10555cf8db104d9d76b3985fa4da6e8ca92c137b0b739f7504a7d106e9da49e1d189b84f51f45c21b2204 languageName: node linkType: hard @@ -1656,11 +1655,11 @@ __metadata: linkType: hard "@aws-sdk/util-utf8-browser@npm:^3.0.0": - version: 3.259.0 - resolution: "@aws-sdk/util-utf8-browser@npm:3.259.0" + version: 3.188.0 + resolution: "@aws-sdk/util-utf8-browser@npm:3.188.0" dependencies: tslib: ^2.3.1 - checksum: b6a1e580da1c9b62c749814182a7649a748ca4253edb4063aa521df97d25b76eae3359eb1680b86f71aac668e05cc05c514379bca39ebf4ba998ae4348412da8 + checksum: dacd27164aa0835888434e080b67f04510e2281560540ff73496f2d0aa73b0b7f830ec08491b35c3a51bf6214615579182aff8727e151e54a74a97a197a2ac31 languageName: node linkType: hard @@ -1695,11 +1694,11 @@ __metadata: linkType: hard "@azure/abort-controller@npm:^1.0.0": - version: 1.1.0 - resolution: "@azure/abort-controller@npm:1.1.0" + version: 1.0.2 + resolution: "@azure/abort-controller@npm:1.0.2" dependencies: - tslib: ^2.2.0 - checksum: 0f45e504d4aea799486867179afe7589255f6c111951279958e9d0aa5faebb2c96b8f88e3e3c958ce07b02bcba0b0cddb1bbec94705f573a48ecdb93eec1a92a + tslib: ^2.0.0 + checksum: 2af40548b521fcd8c9c3a9b04f25ab00fecd873f659cfb3bd0b38a507643a2c7f32c367e4ea8a0ffa6ef3ab084e13285c9792ad9133a1ac03d60e7ea70ea381c languageName: node linkType: hard @@ -1741,8 +1740,8 @@ __metadata: linkType: hard "@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.6.1": - version: 1.7.2 - resolution: "@azure/core-client@npm:1.7.2" + version: 1.6.1 + resolution: "@azure/core-client@npm:1.6.1" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.4.0 @@ -1751,7 +1750,7 @@ __metadata: "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 2c6af345ed7f97d7d214873cf08c2564603c659abc8950a1b866b137dfb8b68cc367f75a1c0d0ea840ac8f66a50604661f6f2569184dcda717ec4e62c3c6d977 + checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 languageName: node linkType: hard @@ -1778,28 +1777,29 @@ __metadata: linkType: hard "@azure/core-lro@npm:^2.2.0": - version: 2.5.1 - resolution: "@azure/core-lro@npm:2.5.1" + version: 2.2.4 + resolution: "@azure/core-lro@npm:2.2.4" dependencies: "@azure/abort-controller": ^1.0.0 + "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 33a47694b539dfe0b97601972b7e1f1cd0c0248ffa2109f69d425cb7e9397ebcfb9221e65a183b4e5890e49721a526e2b39b529e7c372bc455598d800811023b + checksum: f3db331409f95fc71206acd9f64efbbdf43a83d86c2012bdd19e577a603225b3a7e74e827e5c6aad1cf18024bdd8110c4cf341f7386fc83c5cb86ab72f5ad9ca languageName: node linkType: hard "@azure/core-paging@npm:^1.1.1, @azure/core-paging@npm:^1.2.0": - version: 1.5.0 - resolution: "@azure/core-paging@npm:1.5.0" + version: 1.3.0 + resolution: "@azure/core-paging@npm:1.3.0" dependencies: tslib: ^2.2.0 - checksum: 156230f0fdf757a0353a2aac6d012d385ed88f8ab5bccf00eee27d8d75843e681674b2d10ed43309669f9cb93bf8d9d000232896593b6fcf399fa391442a59c5 + checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 languageName: node linkType: hard "@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.8.0, @azure/core-rest-pipeline@npm:^1.9.1": - version: 1.10.2 - resolution: "@azure/core-rest-pipeline@npm:1.10.2" + version: 1.9.2 + resolution: "@azure/core-rest-pipeline@npm:1.9.2" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.4.0 @@ -1811,7 +1811,7 @@ __metadata: https-proxy-agent: ^5.0.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: 2f8af40fedf06d4c6f4bb9a337a6c6bbb93baa0585e57c8a10044c0ee811e6b4a7fcf053a7e620decaa39ee2d7de6c053ab7d825566c0a5eda37c814a55fac49 + checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 languageName: node linkType: hard @@ -1869,11 +1869,11 @@ __metadata: linkType: hard "@azure/logger@npm:^1.0.0": - version: 1.0.4 - resolution: "@azure/logger@npm:1.0.4" + version: 1.0.1 + resolution: "@azure/logger@npm:1.0.1" dependencies: - tslib: ^2.2.0 - checksum: 2c243d4c667bbc5cd3e60d4473d0f1169fcef2498a02138398af15547fe1b2870197bcb4c487327451488e4d71dee05244771d51328f03611e193b99fb9aa9af + tslib: ^2.0.0 + checksum: a9312a3a2c19cb23a48a08adfc37dc618755f00428c4bac549bcf996f5bb19a1e220172f44ca33d126b7001192261ce2c92d665748e2cb3ea16798a63a5c8982 languageName: node linkType: hard @@ -1889,8 +1889,8 @@ __metadata: linkType: hard "@azure/ms-rest-js@npm:^2.2.0": - version: 2.6.4 - resolution: "@azure/ms-rest-js@npm:2.6.4" + version: 2.6.2 + resolution: "@azure/ms-rest-js@npm:2.6.2" dependencies: "@azure/core-auth": ^1.1.4 abort-controller: ^3.0.0 @@ -1901,41 +1901,41 @@ __metadata: tunnel: 0.0.6 uuid: ^8.3.2 xml2js: ^0.4.19 - checksum: eefc1bf2cc00ee5f603a64b6d145aef98287fe9de7fbb3d8cd68c2f24b38eddb4af4535b6bd937f8fac285c47a6c68db3c005095444d78b5e70fb5adaa4f2780 + checksum: de650dfc3928a2036923fb3bf50e0324f9f36f5d320ca6d128005b1345ad80b39ab3410073ac35fb137dec4c7d799c602b1cafdf9573b3432b6b8eee8a1e39f8 languageName: node linkType: hard "@azure/msal-browser@npm:^2.26.0": - version: 2.34.0 - resolution: "@azure/msal-browser@npm:2.34.0" + version: 2.27.0 + resolution: "@azure/msal-browser@npm:2.27.0" dependencies: - "@azure/msal-common": ^11.0.0 - checksum: 0ce02792d4488aa7440dfb1d05895192e36edc6f99364e1665327ed7724b922b3f7626d9d7abc6c269f7797c21519433a52f2eb53750c5afb95b920515af92c3 + "@azure/msal-common": ^7.1.0 + checksum: 6cafb4d41a92f1bbb82e7128f64ccd6538ec116a2521f412108d94c4173601d31ea62febb7b22206dcae691e6a01cf7f9ce92793420599437b50a24c7e6ab851 languageName: node linkType: hard -"@azure/msal-common@npm:^11.0.0": - version: 11.0.0 - resolution: "@azure/msal-common@npm:11.0.0" - checksum: 32aa79b20ead2943d6622779aee6656f1b73ce4d981437da9bcfa7541799514c688e3f3d9d68ec5cc48031745a723be1a6de984c56c031bf9364daee559f5240 +"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.1.0": + version: 7.1.0 + resolution: "@azure/msal-common@npm:7.1.0" + checksum: 761a8b9363c7b620d831aba7d7e7a66e341685e306034b027b57dc31dae11abdf86c3187c08fc8008448c845ffdcbbc42c767c75355625cf87aba25ba7e2832e languageName: node linkType: hard -"@azure/msal-common@npm:^7.0.0": - version: 7.6.0 - resolution: "@azure/msal-common@npm:7.6.0" - checksum: b2541603c87778daad4627ddd796577651ccae18c93d518f4c0e40e42475dab8781644903ad1c7f876277e0c436d47548c82d9034b458bca00c746fd465ae184 +"@azure/msal-common@npm:^9.0.2": + version: 9.0.2 + resolution: "@azure/msal-common@npm:9.0.2" + checksum: 5a44d23b1d0f80d3e2221d157c1bd48bdfd19f5a4ac2fc58c73c52ffd25868c1760ea27ad0408931e07f552adc19764757bf91f7bec59258d9d931274df15657 languageName: node linkType: hard "@azure/msal-node@npm:^1.10.0": - version: 1.16.0 - resolution: "@azure/msal-node@npm:1.16.0" + version: 1.14.6 + resolution: "@azure/msal-node@npm:1.14.6" dependencies: - "@azure/msal-common": ^11.0.0 + "@azure/msal-common": ^9.0.2 jsonwebtoken: ^9.0.0 uuid: ^8.3.0 - checksum: e8f5aec00cd104d142b485777898ed00efee969eb433af1789f57616ddfe7a65bfb75971789e3feb1877f5d4af8fc0978a0d75bf482c70c479678b1f118d7f29 + checksum: 7fb2085fe772474bb4c6c1e0a2467da6b2380dfa66f7c67f63d4a8774f591744dc64a6f3337d43c810ff433bc327be470ece59dcd0fa7aff4459e32beb4c738b languageName: node linkType: hard @@ -1973,45 +1973,44 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5": - version: 7.21.0 - resolution: "@babel/compat-data@npm:7.21.0" - checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d +"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.18.8, @babel/compat-data@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/compat-data@npm:7.19.1" + checksum: f985887ea08a140e4af87a94d3fb17af0345491eb97f5a85b1840255c2e2a97429f32a8fd12a7aae9218af5f1024f1eb12a5cd280d2d69b2337583c17ea506ba languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.19.6": - version: 7.21.3 - resolution: "@babel/core@npm:7.21.3" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5": + version: 7.19.1 + resolution: "@babel/core@npm:7.19.1" dependencies: - "@ampproject/remapping": ^2.2.0 + "@ampproject/remapping": ^2.1.0 "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helpers": ^7.21.0 - "@babel/parser": ^7.21.3 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.3 - "@babel/types": ^7.21.3 + "@babel/generator": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.1 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helpers": ^7.19.0 + "@babel/parser": ^7.19.1 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.1 + "@babel/types": ^7.19.0 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 + json5: ^2.2.1 semver: ^6.3.0 - checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a + checksum: 941c8c119b80bdba5fafc80bbaa424d51146b6d3c30b8fae35879358dd37c11d3d0926bc7e970a0861229656eedaa8c884d4a3a25cc904086eb73b827a2f1168 languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.21.3, @babel/generator@npm:^7.7.2": - version: 7.21.3 - resolution: "@babel/generator@npm:7.21.3" +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.19.0, @babel/generator@npm:^7.7.2": + version: 7.19.3 + resolution: "@babel/generator@npm:7.19.3" dependencies: - "@babel/types": ^7.21.3 + "@babel/types": ^7.19.3 "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 + checksum: b1585e398f6c37f442a2fdac964a326b348fbc8fb99a6aaf4f72bbe993adb0ca792bc0a9c65e59930b2a2e55eb5aa3aab360ceb678d3d40692eb0cda2b7b6aa6 languageName: node linkType: hard @@ -2034,68 +2033,68 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-compilation-targets@npm:7.20.7" +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-compilation-targets@npm:7.19.1" dependencies: - "@babel/compat-data": ^7.20.5 + "@babel/compat-data": ^7.19.1 "@babel/helper-validator-option": ^7.18.6 browserslist: ^4.21.3 - lru-cache: ^5.1.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + checksum: c2d3039265e498b341a6b597f855f2fcef02659050fefedf36ad4e6815e6aafe1011a761214cc80d98260ed07ab15a8cbe959a0458e97bec5f05a450e1b1741b languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.21.0" +"@babel/helper-create-class-features-plugin@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-member-expression-to-functions": ^7.21.0 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 3e781d91d1056ea9b3a0395f3017492594a8b86899119b4a1645227c31727b8bec9bc8f6b72e86b1c5cf2dd6690893d2e8c5baff4974c429e616ead089552a21 + checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": - version: 7.21.0 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.21.0" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.3.1 + regexpu-core: ^5.1.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 63a6396a4e9444edc7e97617845583ea5cf059573d0b4cc566869f38576d543e37fde0edfcc21d6dfb7962ed241e909561714dc41c5213198bac04e0983b04f2 + checksum: 2d76e660cbfd0bfcb01ca9f177f0e9091c871a6b99f68ece6bcf4ab4a9df073485bdc2d87ecdfbde44b7f3723b26d13085d0f92082adb3ae80d31b246099f10a languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" +"@babel/helper-define-polyfill-provider@npm:^0.3.1": + version: 0.3.1 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" dependencies: - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-compilation-targets": ^7.13.0 + "@babel/helper-module-imports": ^7.12.13 + "@babel/helper-plugin-utils": ^7.13.0 + "@babel/traverse": ^7.13.0 debug: ^4.1.1 lodash.debounce: ^4.0.8 resolve: ^1.14.2 semver: ^6.1.2 peerDependencies: "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c + checksum: e3e93cb22febfc0449a210cdafb278e5e1a038af2ca2b02f5dee71c7a49e8ba26e469d631ee11a4243885961a62bb2e5b0a4deb3ec1d7918a33c953d05c3e584 languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9": +"@babel/helper-environment-visitor@npm:^7.18.6, @babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 @@ -2111,13 +2110,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-function-name@npm:7.21.0" +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" dependencies: - "@babel/template": ^7.20.7 - "@babel/types": ^7.21.0 - checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e languageName: node linkType: hard @@ -2130,16 +2129,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.20.7, @babel/helper-member-expression-to-functions@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.21.0" +"@babel/helper-member-expression-to-functions@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" dependencies: - "@babel/types": ^7.21.0 - checksum: 49cbb865098195fe82ba22da3a8fe630cde30dcd8ebf8ad5f9a24a2b685150c6711419879cf9d99b94dad24cff9244d8c2a890d3d7ec75502cd01fe58cff5b5d + "@babel/types": ^7.18.9 + checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -2148,19 +2147,19 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/helper-module-transforms@npm:7.21.2" +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9, @babel/helper-module-transforms@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-module-transforms@npm:7.19.0" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-simple-access": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.2 - "@babel/types": ^7.21.2 - checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 + "@babel/helper-validator-identifier": ^7.18.6 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 languageName: node linkType: hard @@ -2173,14 +2172,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.9": +"@babel/helper-remap-async-to-generator@npm:^7.18.6": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -2194,35 +2193,34 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-replace-supers@npm:7.20.7" +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-replace-supers@npm:7.18.9" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" +"@babel/helper-simple-access@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-simple-access@npm:7.18.6" dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + "@babel/types": ^7.18.6 + checksum: 37cd36eef199e0517845763c1e6ff6ea5e7876d6d707a6f59c9267c547a50aa0e84260ba9285d49acfaf2cfa0a74a772d92967f32ac1024c961517d40b6c16a5 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" dependencies: - "@babel/types": ^7.20.0 - checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + "@babel/types": ^7.18.9 + checksum: 6e93ccd10248293082606a4b3e30eed32c6f796d378f6b662796c88f462f348aa368aadeb48eb410cfcc8250db93b2d6627c2e55662530f08fc25397e588d68a languageName: node linkType: hard @@ -2235,10 +2233,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 +"@babel/helper-string-parser@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/helper-string-parser@npm:7.18.10" + checksum: d554a4393365b624916b5c00a4cc21c990c6617e7f3fe30be7d9731f107f12c33229a7a3db9d829bfa110d2eb9f04790745d421640e3bd245bb412dc0ea123c1 languageName: node linkType: hard @@ -2249,33 +2247,33 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-validator-option@npm:7.21.0" - checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 +"@babel/helper-validator-option@npm:^7.16.7, @babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf languageName: node linkType: hard "@babel/helper-wrap-function@npm:^7.18.9": - version: 7.20.5 - resolution: "@babel/helper-wrap-function@npm:7.20.5" + version: 7.18.9 + resolution: "@babel/helper-wrap-function@npm:7.18.9" dependencies: - "@babel/helper-function-name": ^7.19.0 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 - checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b + "@babel/helper-function-name": ^7.18.9 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: da818e519b48bbaa748a4fa87b0ba681bc627c9eb9557008d5307d42d3f536fe435b775163088dd9639b0120c8ea1ae1021777f48806f9f83397f4df622b88d3 languageName: node linkType: hard -"@babel/helpers@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helpers@npm:7.21.0" +"@babel/helpers@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helpers@npm:7.19.0" dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.0 - "@babel/types": ^7.21.0 - checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 languageName: node linkType: hard @@ -2290,12 +2288,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/parser@npm:7.21.3" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.1, @babel/parser@npm:^7.20.15": + version: 7.20.15 + resolution: "@babel/parser@npm:7.20.15" bin: parser: ./bin/babel-parser.js - checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be + checksum: 1d0f47ca67ff2652f1c0ff1570bed8deccbc4b53509e7cd73476af9cc7ed23480c99f1179bd6d0be01612368b92b39e206d330ad6054009d699934848a89298b languageName: node linkType: hard @@ -2311,29 +2309,29 @@ __metadata: linkType: hard "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" + version: 7.18.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-proposal-optional-chaining": ^7.20.7 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 peerDependencies: "@babel/core": ^7.13.0 - checksum: d610f532210bee5342f5b44a12395ccc6d904e675a297189bc1e401cc185beec09873da523466d7fec34ae1574f7a384235cba1ccc9fe7b89ba094167897c845 + checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": - version: 7.20.7 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" +"@babel/plugin-proposal-async-generator-functions@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.6" dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 + "@babel/helper-environment-visitor": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-remap-async-to-generator": ^7.18.6 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 + checksum: 3f708808ba6f8a9bd18805b1b22ab90ec0b362d949111a776e0bade5391f143f55479dcc444b2cec25fc89ac21035ee92e9a5ec37c02c610639197a0c2f7dcb0 languageName: node linkType: hard @@ -2350,15 +2348,15 @@ __metadata: linkType: hard "@babel/plugin-proposal-class-static-block@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.6" dependencies: - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 "@babel/plugin-syntax-class-static-block": ^7.14.5 peerDependencies: "@babel/core": ^7.12.0 - checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b + checksum: b8d7ae99ed5ad784f39e7820e3ac03841f91d6ed60ab4a98c61d6112253da36013e12807bae4ffed0ef3cb318e47debac112ed614e03b403fb8b075b09a828ee languageName: node linkType: hard @@ -2399,14 +2397,14 @@ __metadata: linkType: hard "@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" + version: 7.18.9 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 + checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f languageName: node linkType: hard @@ -2434,18 +2432,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.20.2": - version: 7.20.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/compat-data": ^7.18.8 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.20.7 + "@babel/plugin-transform-parameters": ^7.18.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 + checksum: 66b9bae741d46edf1c96776d26dfe5d335981e57164ec2450583e3d20dfaa08a5137ffebb897e443913207789f9816bfec4ae845f38762c0196a60949eaffdba languageName: node linkType: hard @@ -2461,16 +2459,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9, @babel/plugin-proposal-optional-chaining@npm:^7.20.7": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 + checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f languageName: node linkType: hard @@ -2487,16 +2485,16 @@ __metadata: linkType: hard "@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" + version: 7.18.6 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.18.6" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 + checksum: c8e56a972930730345f39f2384916fd8e711b3f4b4eae2ca9740e99958980118120d5cc9b6ac150f0965a5a35f825910e2c3013d90be3e9993ab6111df444569 languageName: node linkType: hard @@ -2578,18 +2576,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-flow@npm:7.18.6" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-syntax-flow@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 + checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.20.0": +"@babel/plugin-syntax-import-assertions@npm:7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.18.6": version: 7.20.0 resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" dependencies: @@ -2721,38 +2719,38 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" +"@babel/plugin-syntax-typescript@npm:^7.18.6, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + checksum: 2cde73725ec51118ebf410bf02d78781c03fa4d3185993fcc9d253b97443381b621c44810084c5dd68b92eb8bdfae0e5b163e91b32bebbb33852383d1815c05d languageName: node linkType: hard "@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6": - version: 7.20.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" + version: 7.18.6 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 + checksum: 900f5c695755062b91eec74da6f9092f40b8fada099058b92576f1e23c55e9813ec437051893a9b3c05cefe39e8ac06303d4a91b384e1c03dd8dc1581ea11602 languageName: node linkType: hard "@babel/plugin-transform-async-to-generator@npm:^7.18.6": - version: 7.20.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" + version: 7.18.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.18.6" dependencies: "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-remap-async-to-generator": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 + checksum: c2cca47468cf1aeefdc7ec35d670e195c86cee4de28a1970648c46a88ce6bd1806ef0bab27251b9e7fb791bb28a64dcd543770efd899f28ee5f7854e64e873d3 languageName: node linkType: hard @@ -2767,56 +2765,54 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.20.2": - version: 7.21.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" +"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 15aacaadbecf96b53a750db1be4990b0d89c7f5bc3e1794b63b49fb219638c1fd25d452d15566d7e5ddf5b5f4e1a0a0055c35c1c7aee323c7b114bf49f66f4b0 + checksum: f8064ea431eb7aa349dc5b6be87a650f912b48cd65afde917e8644f6f840d7f9d2ce4795f2aa3955aa5b23a73d4ad38abd03386ae109b4b8702b746c6d35bda3 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.20.2": - version: 7.21.0 - resolution: "@babel/plugin-transform-classes@npm:7.21.0" +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-classes@npm:7.18.9" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.20.7 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 + "@babel/helper-function-name": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 088ae152074bd0e90f64659169255bfe50393e637ec8765cb2a518848b11b0299e66b91003728fd0a41563a6fdc6b8d548ece698a314fd5447f5489c22e466b7 + checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad languageName: node linkType: hard "@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" + version: 7.18.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/template": ^7.20.7 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 + checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.20.2": - version: 7.21.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 43ebbe0bfa20287e34427be7c2200ce096c20913775ea75268fb47fe0e55f9510800587e6052c42fe6dffa0daaad95dd465c3e312fd1ef9785648384c45417ac + checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd languageName: node linkType: hard @@ -2855,26 +2851,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.21.0" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-flow": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-flow": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a45951c57265c366f95db9a5e70a62cfc3eafafa3f3d23295357577b5fc139d053d45416cdbdf4a0a387e41cefc434ab94dd6c3048d03b094ff6d041dd10a0b0 + checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba languageName: node linkType: hard "@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.18.8": - version: 7.21.0 - resolution: "@babel/plugin-transform-for-of@npm:7.21.0" + version: 7.18.8 + resolution: "@babel/plugin-transform-for-of@npm:7.18.8" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2f3f86ca1fab2929fcda6a87e4303d5c635b5f96dc9a45fd4ca083308a3020c79ac33b9543eb4640ef2b79f3586a00ab2d002a7081adb9e9d7440dce30781034 + checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 languageName: node linkType: hard @@ -2913,42 +2909,45 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.19.6": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" +"@babel/plugin-transform-modules-amd@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-modules-amd@npm:7.18.6" dependencies: - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-module-transforms": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 23665c1c20c8f11c89382b588fb9651c0756d130737a7625baeaadbd3b973bc5bfba1303bedffa8fb99db1e6d848afb01016e1df2b69b18303e946890c790001 + checksum: f60c4c4e0eaec41e42c003cbab44305da7a8e05b2c9bdfc2b3fe0f9e1d7441c959ff5248aa03e350abe530e354028cbf3aa20bf07067b11510997dad8dd39be0 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.19.6": - version: 7.21.2 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.6" dependencies: - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-module-transforms": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-simple-access": ^7.18.6 + babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 65aa06e3e3792f39b99eb5f807034693ff0ecf80438580f7ae504f4c4448ef04147b1889ea5e6f60f3ad4a12ebbb57c6f1f979a249dadbd8d11fe22f4441918b + checksum: 7e356e3df8a6a8542cced7491ec5b1cc1093a88d216a59e63a5d2b9fe9d193cbea864f680a41429e41a4f9ecec930aa5b0b8f57e2b17b3b4d27923bb12ba5d14 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" +"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-module-transforms": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-validator-identifier": ^7.18.6 + babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4546c47587f88156d66c7eb7808e903cf4bb3f6ba6ac9bc8e3af2e29e92eb9f0b3f44d52043bfd24eb25fa7827fd7b6c8bfeac0cac7584e019b87e1ecbd0e673 + checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 languageName: node linkType: hard @@ -2964,15 +2963,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": - version: 7.20.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.20.5 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 528c95fb1087e212f17e1c6456df041b28a83c772b9c93d2e407c9d03b72182b0d9d126770c1d6e0b23aab052599ceaf25ed6a2c0627f4249be34a83f6fae853 + checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 languageName: node linkType: hard @@ -2999,14 +2998,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.1, @babel/plugin-transform-parameters@npm:^7.20.7": - version: 7.21.3 - resolution: "@babel/plugin-transform-parameters@npm:7.21.3" +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/plugin-transform-parameters@npm:7.18.8" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c92128d7b1fcf54e2cab186c196bbbf55a9a6de11a83328dc2602649c9dc6d16ef73712beecd776cd49bfdc624b5f56740f4a53568d3deb9505ec666bc869da3 + checksum: 2b5863300da60face8a250d91da16294333bd5626e9721b13a3ba2078bd2a5a190e32c6e7a1323d5f547f579aeb2804ff49a62a55fcad2b1d099e55a55b788ea languageName: node linkType: hard @@ -3021,14 +3020,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-constant-elements@npm:^7.18.12": - version: 7.21.3 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.21.3" +"@babel/plugin-transform-react-constant-elements@npm:^7.17.12": + version: 7.18.9 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1ca5cfaa6547d5fe6004fdef5687aa5b757940a132cf56c268c0d369a63aa7d83afafa27c66808687ecc12c871ae28a36b53923733483571e9596fa50e03180f + checksum: bbdc4bc38317e62bb729d6d2b48bfac4cca52cb476a1a537a6fe693610852a6f2c3b3f616e1c73f17fb4b0dae551b1c96f898b7867a02ff2fbe3e858a346c767 languageName: node linkType: hard @@ -3055,17 +3054,17 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-transform-react-jsx@npm:7.21.0" + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx@npm:7.18.6" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.18.6 "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.21.0 + "@babel/types": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c77d277d2e55b489a9b9be185c3eed5d8e2c87046778810f8e47ee3c87b47e64cad93c02211c968486c7958fd05ce203c66779446484c98a7b3a69bec687d5dc + checksum: 46129eaf1ab7a7a73e3e8c9d9859b630f5b381c5e19fb1559e2db7b943a7825b6715ad950623fb03fe7bd31ed618ce1d0bd539b13fa030a50c39d5a873a5ba00 languageName: node linkType: hard @@ -3082,14 +3081,14 @@ __metadata: linkType: hard "@babel/plugin-transform-regenerator@npm:^7.18.6": - version: 7.20.5 - resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" + version: 7.18.6 + resolution: "@babel/plugin-transform-regenerator@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - regenerator-transform: ^0.15.1 + "@babel/helper-plugin-utils": ^7.18.6 + regenerator-transform: ^0.15.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 + checksum: 60bd482cb0343c714f85c3e19a13b3b5fa05ee336c079974091c0b35e263307f4e661f4555dff90707a87d5efe19b1d51835db44455405444ac1813e268ad750 languageName: node linkType: hard @@ -3115,15 +3114,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.19.0": - version: 7.20.7 - resolution: "@babel/plugin-transform-spread@npm:7.20.7" +"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-spread@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 + checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 languageName: node linkType: hard @@ -3160,28 +3159,27 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.21.0": - version: 7.21.3 - resolution: "@babel/plugin-transform-typescript@npm:7.21.3" +"@babel/plugin-transform-typescript@npm:^7.18.6": + version: 7.18.8 + resolution: "@babel/plugin-transform-typescript@npm:7.18.8" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-typescript": ^7.20.0 + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-typescript": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c16fd577bf43f633deb76fca2a8527d8ae25968c8efdf327c1955472c3e0257e62992473d1ad7f9ee95379ce2404699af405ea03346055adadd3478ad0ecd117 + checksum: 627211f1658870274fcabf38a71bb08ae219e3ac672423083574fabe2c857f28d39243cb7279adada8468c912a7beebc0622770ed66885a1e33b84ccc8bfd7df languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" +"@babel/plugin-transform-unicode-escapes@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd + checksum: 297a03706723164a777263f76a8d89bccfb1d3fbc5e1075079dfd84372a5416d579da7d44c650abf935a1150a995bfce0e61966447b657f958e51c4ea45b72dc languageName: node linkType: hard @@ -3197,17 +3195,17 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.19.4": - version: 7.20.2 - resolution: "@babel/preset-env@npm:7.20.2" +"@babel/preset-env@npm:^7.18.2": + version: 7.18.9 + resolution: "@babel/preset-env@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/compat-data": ^7.18.8 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.20.1 + "@babel/plugin-proposal-async-generator-functions": ^7.18.6 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -3216,7 +3214,7 @@ __metadata: "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.20.2 + "@babel/plugin-proposal-object-rest-spread": ^7.18.9 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 "@babel/plugin-proposal-optional-chaining": ^7.18.9 "@babel/plugin-proposal-private-methods": ^7.18.6 @@ -3227,7 +3225,7 @@ __metadata: "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/plugin-syntax-import-assertions": ^7.18.6 "@babel/plugin-syntax-json-strings": ^7.8.3 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 @@ -3240,10 +3238,10 @@ __metadata: "@babel/plugin-transform-arrow-functions": ^7.18.6 "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.20.2 - "@babel/plugin-transform-classes": ^7.20.2 + "@babel/plugin-transform-block-scoping": ^7.18.9 + "@babel/plugin-transform-classes": ^7.18.9 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.20.2 + "@babel/plugin-transform-destructuring": ^7.18.9 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -3251,47 +3249,47 @@ __metadata: "@babel/plugin-transform-function-name": ^7.18.9 "@babel/plugin-transform-literals": ^7.18.9 "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.19.6 - "@babel/plugin-transform-modules-commonjs": ^7.19.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.6 + "@babel/plugin-transform-modules-amd": ^7.18.6 + "@babel/plugin-transform-modules-commonjs": ^7.18.6 + "@babel/plugin-transform-modules-systemjs": ^7.18.9 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-parameters": ^7.18.8 "@babel/plugin-transform-property-literals": ^7.18.6 "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-spread": ^7.18.9 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.10 + "@babel/plugin-transform-unicode-escapes": ^7.18.6 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.20.2 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - core-js-compat: ^3.25.1 + "@babel/types": ^7.18.9 + babel-plugin-polyfill-corejs2: ^0.3.1 + babel-plugin-polyfill-corejs3: ^0.5.2 + babel-plugin-polyfill-regenerator: ^0.3.1 + core-js-compat: ^3.22.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e + checksum: 311002b9255d1aa261afe712ab73a93687652437804e2f44e6cc55438f8b199463f53bb2b8e0912b0034f208a42eee664a9e126a6061ca504a792ede97dd027e languageName: node linkType: hard "@babel/preset-flow@npm:^7.13.13": - version: 7.18.6 - resolution: "@babel/preset-flow@npm:7.18.6" + version: 7.16.7 + resolution: "@babel/preset-flow@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-flow-strip-types": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-transform-flow-strip-types": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9100d4eab3402e6601e361a5b235e46d90cfd389c12db19e2a071e1082ca2a00c04bd47eb185ce68d8979e7c8f3e548cd5d61b86dcd701135468fb929c3aecb6 + checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f languageName: node linkType: hard @@ -3310,7 +3308,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.18.6": +"@babel/preset-react@npm:^7.17.12": version: 7.18.6 resolution: "@babel/preset-react@npm:7.18.6" dependencies: @@ -3326,97 +3324,90 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/preset-typescript@npm:7.21.0" +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12": + version: 7.18.6 + resolution: "@babel/preset-typescript@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-transform-typescript": ^7.21.0 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-typescript": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6e1f4d7294de2678fbaf36035e98847b2be432f40fe7a1204e5e45b8b05bcbe22902fe0d726e16af14de5bc08987fae28a7899871503fd661050d85f58755af6 + checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c languageName: node linkType: hard "@babel/register@npm:^7.13.16": - version: 7.21.0 - resolution: "@babel/register@npm:7.21.0" + version: 7.16.9 + resolution: "@babel/register@npm:7.16.9" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 make-dir: ^2.1.0 - pirates: ^4.0.5 + pirates: ^4.0.0 source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9745cc7520b4c5e64cc54f4851c3b78af82e1f8cffc9041f5cc0b9aef62d86a9a8617327fc975b5e0e39cb5cc0aba7ae02429884390ee93e0de29152fa849b4f + checksum: bbe9552c9e5816aec2bf7d899b43f95fd649714f38d14de48f42c895cc9ef65708f1359f393c235d5f02224c115544aeeb174495682a07734cdf9484ed2e6175 languageName: node linkType: hard -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 - languageName: node - linkType: hard - -"@babel/runtime-corejs3@npm:^7.18.9, @babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7": - version: 7.21.0 - resolution: "@babel/runtime-corejs3@npm:7.21.0" +"@babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/runtime-corejs3@npm:7.18.9" dependencies: - core-js-pure: ^3.25.1 - regenerator-runtime: ^0.13.11 - checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d + core-js-pure: ^3.20.2 + regenerator-runtime: ^0.13.4 + checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.21.0 - resolution: "@babel/runtime@npm:7.21.0" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.20.13 + resolution: "@babel/runtime@npm:7.20.13" dependencies: regenerator-runtime: ^0.13.11 - checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": + version: 7.18.10 + resolution: "@babel/template@npm:7.18.10" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + "@babel/parser": ^7.18.10 + "@babel/types": ^7.18.10 + checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 languageName: node linkType: hard -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": - version: 7.21.3 - resolution: "@babel/traverse@npm:7.21.3" +"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": + version: 7.19.1 + resolution: "@babel/traverse@npm:7.19.1" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 + "@babel/generator": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.3 - "@babel/types": ^7.21.3 + "@babel/parser": ^7.19.1 + "@babel/types": ^7.19.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b + checksum: 9d782b5089ebc989e54c2406814ed1206cb745ed2734e6602dee3e23d4b6ebbb703ff86e536276630f8de83fda6cde99f0634e3c3d847ddb40572d0303ba8800 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.21.3 - resolution: "@babel/types@npm:7.21.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.19.3 + resolution: "@babel/types@npm:7.19.3" dependencies: - "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-string-parser": ^7.18.10 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 + checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77 languageName: node linkType: hard @@ -6568,7 +6559,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@^0.4.31, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.4.30, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -8887,10 +8878,10 @@ __metadata: languageName: node linkType: hard -"@braintree/sanitize-url@npm:=6.0.2": - version: 6.0.2 - resolution: "@braintree/sanitize-url@npm:6.0.2" - checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a +"@braintree/sanitize-url@npm:=6.0.0": + version: 6.0.0 + resolution: "@braintree/sanitize-url@npm:6.0.0" + checksum: 409ce7709dc1a0c67bc887d20af1becd4145d5c62cc5124b1c4c1f3ea2a8d69b0ee9f582d446469c6f5294b56442b99048cbbba6861dd5c834d4e019b95e1f40 languageName: node linkType: hard @@ -9131,31 +9122,31 @@ __metadata: linkType: hard "@codemirror/autocomplete@npm:^6.0.0": - version: 6.4.2 - resolution: "@codemirror/autocomplete@npm:6.4.2" + version: 6.3.0 + resolution: "@codemirror/autocomplete@npm:6.3.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.6.0 + "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 peerDependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: c6cc4edb1c412153e6f6f27926674d7f1d386d1f30d6d4f60c5b52bfa0105870b0c70449b69891937bcf082340d8b0fa6d1f9f28f5eb60adc2974ed4c73aadc1 + checksum: 903b24732230ce3713e5be2bea615ef11f42b6253859274b37206a7158b8f7aed1700c9013d9330665c16d6f9576fd71efb686b4def4434e29b5c1e4e15520dc languageName: node linkType: hard "@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0": - version: 6.2.2 - resolution: "@codemirror/commands@npm:6.2.2" + version: 6.1.0 + resolution: "@codemirror/commands@npm:6.1.0" dependencies: "@codemirror/language": ^6.0.0 - "@codemirror/state": ^6.2.0 + "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: d3aa1ca8cbd7b9434eedba6b6d783411670796bf6ab61990afc4fd0c04645189fe4dd55bb95e23b943e9089f9739bc7e92aa4b2ac3eac09cfa2b91a45f608d3e + checksum: 0b95ed5b657590adda3171ef8cb1b662078ed1c02109b414bbd71503ae8cac3d5d56a56a159020178a4e8f1e7168bd3c5f5782eb2d90a6e25f067fc8c39dbc87 languageName: node linkType: hard @@ -9183,47 +9174,47 @@ __metadata: linkType: hard "@codemirror/lint@npm:^6.0.0": - version: 6.2.0 - resolution: "@codemirror/lint@npm:6.2.0" + version: 6.0.0 + resolution: "@codemirror/lint@npm:6.0.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: b97e55a07bca9f7e357e495853ba189ae0ff7dfe7e7ae445d7a0d6c6926ec792c7f5c6b6c13a1f137fd9fedf44a6624e9d500f76d0d46a3c3e9d19c2cda9d28a + checksum: e1da165ad3a60c70e99c2d26a3ae3beb8392600a9147d15502c740d9259ef3d866c78f7dd2b5b1389153bf015c9c2bc115026d5c9f4433ca647679a1f095cc40 languageName: node linkType: hard "@codemirror/search@npm:^6.0.0": - version: 6.3.0 - resolution: "@codemirror/search@npm:6.3.0" + version: 6.2.1 + resolution: "@codemirror/search@npm:6.2.1" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: b757eebbb541c9d74fe36ccfdd03bc3e4e7aebb08b491e207d5898f24aaa612558c393ba49de5bf375972f5774de817fcfbad1ac551dda1a34badb41cf130d36 + checksum: fdd352c6df6972863ea7e07a0dbad8872d4bd7e3ada01417d562a2cde4cf2b4fdfde47ed801c66e18342bb695c00b1cecd9918bd2e1dab74eaedab7b2dde5feb languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": - version: 6.2.0 - resolution: "@codemirror/state@npm:6.2.0" - checksum: fdc99c773dc09c700dd02bf918f06132aa8d3069c262cc4eb6ca5c810ce24ae2d7e90719ae7630a8158fd263018de6d40bd78f312e6bfba754e737b64e6c6b3d +"@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 "@codemirror/theme-one-dark@npm:^6.0.0": - version: 6.1.1 - resolution: "@codemirror/theme-one-dark@npm:6.1.1" + version: 6.1.0 + resolution: "@codemirror/theme-one-dark@npm:6.1.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/highlight": ^1.0.0 - checksum: e314033c77732deb6eddb44d5e43d134842dd4e174f0525161f90edb0fd4fa93e482710b7371e3ed573645b8e0c402d518d5cdae41867546cd7e2ccee8da455e + checksum: 7454742006f0ea23ed36b1c8e232d55bd1cdf6cd3c9b5ad7f7212a4b5fe7907eecaeb1d908fed2022c2ca5d667176c93e9f071c939d54449cfe740dc028a16d8 languageName: node linkType: hard -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0": +"@codemirror/view@npm:^6.0.0": version: 6.9.2 resolution: "@codemirror/view@npm:6.9.2" dependencies: @@ -9241,419 +9232,6 @@ __metadata: languageName: node linkType: hard -"@cspell/cspell-bundled-dicts@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/cspell-bundled-dicts@npm:6.30.2" - dependencies: - "@cspell/dict-ada": ^4.0.1 - "@cspell/dict-aws": ^3.0.0 - "@cspell/dict-bash": ^4.1.1 - "@cspell/dict-companies": ^3.0.9 - "@cspell/dict-cpp": ^5.0.2 - "@cspell/dict-cryptocurrencies": ^3.0.1 - "@cspell/dict-csharp": ^4.0.2 - "@cspell/dict-css": ^4.0.5 - "@cspell/dict-dart": ^2.0.2 - "@cspell/dict-django": ^4.0.2 - "@cspell/dict-docker": ^1.1.6 - "@cspell/dict-dotnet": ^5.0.0 - "@cspell/dict-elixir": ^4.0.2 - "@cspell/dict-en-common-misspellings": ^1.0.2 - "@cspell/dict-en-gb": 1.1.33 - "@cspell/dict-en_us": ^4.3.1 - "@cspell/dict-filetypes": ^3.0.0 - "@cspell/dict-fonts": ^3.0.1 - "@cspell/dict-fullstack": ^3.1.4 - "@cspell/dict-gaming-terms": ^1.0.4 - "@cspell/dict-git": ^2.0.0 - "@cspell/dict-golang": ^6.0.1 - "@cspell/dict-haskell": ^4.0.1 - "@cspell/dict-html": ^4.0.3 - "@cspell/dict-html-symbol-entities": ^4.0.0 - "@cspell/dict-java": ^5.0.5 - "@cspell/dict-k8s": ^1.0.1 - "@cspell/dict-latex": ^4.0.0 - "@cspell/dict-lorem-ipsum": ^3.0.0 - "@cspell/dict-lua": ^4.0.1 - "@cspell/dict-node": ^4.0.2 - "@cspell/dict-npm": ^5.0.5 - "@cspell/dict-php": ^4.0.1 - "@cspell/dict-powershell": ^5.0.1 - "@cspell/dict-public-licenses": ^2.0.2 - "@cspell/dict-python": ^4.0.2 - "@cspell/dict-r": ^2.0.1 - "@cspell/dict-ruby": ^5.0.0 - "@cspell/dict-rust": ^4.0.1 - "@cspell/dict-scala": ^5.0.0 - "@cspell/dict-software-terms": ^3.1.5 - "@cspell/dict-sql": ^2.1.0 - "@cspell/dict-svelte": ^1.0.2 - "@cspell/dict-swift": ^2.0.1 - "@cspell/dict-typescript": ^3.1.1 - "@cspell/dict-vue": ^3.0.0 - checksum: 5abc82358bbaa4bb8a7dae19ee25c39f296ccad9b291d99520ae2a51ff1bb4141f030ff8b5a2bc90e34127f5e281a030d225e746028f4e353b1ebadabd5c23b4 - languageName: node - linkType: hard - -"@cspell/cspell-pipe@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/cspell-pipe@npm:6.30.2" - checksum: eef05ad52500789bc95e167ea3d25d470f59f57bba8e9c1900799cc9acddff1dabe0b6ae07c0cd5ac3a4a15fa8bbec68fa8b3fe845919ed3c436064ab7a4c925 - languageName: node - linkType: hard - -"@cspell/cspell-service-bus@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/cspell-service-bus@npm:6.30.2" - checksum: 2c933b7e1f0f003668e64b980e403914d30b22f3899aaff8458dacf43371ba3ef022e24efc0c235a89b9a3627b5fbbf01587890f5d580705f431e2b45e7310fb - languageName: node - linkType: hard - -"@cspell/cspell-types@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/cspell-types@npm:6.30.2" - checksum: a41d2e59ac0b212cbdd74c135915bb7a6f43bc9146f22654684bcb49c1a9effcf42c44305d631d4e17282e199a31950494b64041eded607f5d39e87b825a25e7 - languageName: node - linkType: hard - -"@cspell/dict-ada@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-ada@npm:4.0.1" - checksum: 3422487c8decf01d9dd14e666dcbe29557d730085f60fcd859d03fc5c177359d12df19171368cd105dad29f315d0decfa56f29eeb7c594a300d47c65805c4349 - languageName: node - linkType: hard - -"@cspell/dict-aws@npm:^3.0.0": - version: 3.0.0 - resolution: "@cspell/dict-aws@npm:3.0.0" - checksum: d06284d5cc438c18175c26e4f5d450f3235d603dbc989fa2d7515bb01d1c7a8b303ce054d532ca4f814fc6cd7c65ef9558d46bf5bacb06d35504b3c259ebe95c - languageName: node - linkType: hard - -"@cspell/dict-bash@npm:^4.1.1": - version: 4.1.1 - resolution: "@cspell/dict-bash@npm:4.1.1" - checksum: 5b6fbb597c53fa6b9957213aa77688c6e0231f8d59eed02f0eecda456f3606855fc0f4c0c5121a909e9055c164de83e3f151b32a9abd1ccd4a161634ffee6691 - languageName: node - linkType: hard - -"@cspell/dict-companies@npm:^3.0.9": - version: 3.0.9 - resolution: "@cspell/dict-companies@npm:3.0.9" - checksum: 9f6446707072002ec653b42d2a1c06f82a8d21445ed7e2953a6f9cded1d02f5f58735c387b1bcadead88825c4edce3daccdbf7136f5d6e2d79f02580ef5f55a4 - languageName: node - linkType: hard - -"@cspell/dict-cpp@npm:^5.0.2": - version: 5.0.2 - resolution: "@cspell/dict-cpp@npm:5.0.2" - checksum: 6483cea117b1a8313c67d6be5211c490347f36a926d9b2c402740ddd2c15a395e9ba5bd09d038fe9355dd58eafb2f48d0d74658a86accb2ad1d177e0ccc326ab - languageName: node - linkType: hard - -"@cspell/dict-cryptocurrencies@npm:^3.0.1": - version: 3.0.1 - resolution: "@cspell/dict-cryptocurrencies@npm:3.0.1" - checksum: 5d646f569e8dc5998de8a508ff3de39db5f5a5db0a846ee4fc750ea3880080d922d5c28fdce38f93910eaacde2723e2fe4c305d50b3f9d53b817ce33a3bed66a - languageName: node - linkType: hard - -"@cspell/dict-csharp@npm:^4.0.2": - version: 4.0.2 - resolution: "@cspell/dict-csharp@npm:4.0.2" - checksum: d2ecb2aada51c5f0d6d557fd4f0c6eddb5b299e0955e066c49cd2afe96a1c6fe0afde699fdb885dd3183603a1efbd1d793b6a490b8d039256445b4b154b7375b - languageName: node - linkType: hard - -"@cspell/dict-css@npm:^4.0.5": - version: 4.0.5 - resolution: "@cspell/dict-css@npm:4.0.5" - checksum: f5fbe4e71ae7739ee7999c601befafb6e9b9313efa6d2b129fd8ba5ebfd2bf6137163439dd12fb5d540ac5ca5ae78af3ece43d51fb49027ace9a63d425771deb - languageName: node - linkType: hard - -"@cspell/dict-dart@npm:^2.0.2": - version: 2.0.2 - resolution: "@cspell/dict-dart@npm:2.0.2" - checksum: ef88d6d980247badbea01bb8e1a51eaa53cb9eedd611df4ae0324a93d64f5de1e2aef0932805504111ae455ca90181938f74bd522a4304054b55baa5bfd706a8 - languageName: node - linkType: hard - -"@cspell/dict-django@npm:^4.0.2": - version: 4.0.2 - resolution: "@cspell/dict-django@npm:4.0.2" - checksum: 9b700702c864848ed1e133c8ab8500223e0ac68a6ba58ad872fd5eb9179003fda04b713e9a31b3f6b3bf80f4bb2a6c1473c12aa0bed3a3250b495e53ca1af585 - languageName: node - linkType: hard - -"@cspell/dict-docker@npm:^1.1.6": - version: 1.1.6 - resolution: "@cspell/dict-docker@npm:1.1.6" - checksum: ad2e77557f1e0e388910567749e59cd169d9743ea3aed22b0ecff2137750d87d1a90dff7c84c5d1955762ef8d568d1e48c702c990b09b24834bdade188f43ac4 - languageName: node - linkType: hard - -"@cspell/dict-dotnet@npm:^5.0.0": - version: 5.0.0 - resolution: "@cspell/dict-dotnet@npm:5.0.0" - checksum: 3e55abd3cc0ecb0924caa245b83595c8e90b42a8fb438f3294d06ad32d30f3235dc8943a2865f06eaec5285a8d6a7df1db71fb228753d56a678a0f0cff87c24c - languageName: node - linkType: hard - -"@cspell/dict-elixir@npm:^4.0.2": - version: 4.0.2 - resolution: "@cspell/dict-elixir@npm:4.0.2" - checksum: 0d80b2c9f7a05f38df6de7a574641149fa782e9f2c61a91a715293b1a04c81fdaf378c1d5643f14ecacaa3f3d927589a3c3e6b282b3cf3c860d56a907e0c1a8b - languageName: node - linkType: hard - -"@cspell/dict-en-common-misspellings@npm:^1.0.2": - version: 1.0.2 - resolution: "@cspell/dict-en-common-misspellings@npm:1.0.2" - checksum: 6f818f9fe3b76ae3d0c71c109d3543f01607ffbd605d9ecb0b6884e6ffa795adba25fd1206b1c85c089d4ffaab20171f5aa803de49a8eadf2bc5b7f5c326917c - languageName: node - linkType: hard - -"@cspell/dict-en-gb@npm:1.1.33": - version: 1.1.33 - resolution: "@cspell/dict-en-gb@npm:1.1.33" - checksum: 09a9e7a3ee4cad75c87cc7adf6b5981b3ec52d4e3707e8de2e1a2a55cd5c8539057a7742d9c7035e23eb0aeff80a95b9599696c7192c9b3b9d8f14440fe01938 - languageName: node - linkType: hard - -"@cspell/dict-en_us@npm:^4.3.1": - version: 4.3.1 - resolution: "@cspell/dict-en_us@npm:4.3.1" - checksum: 15da93ff9a8248c89c96a08c3935f0e2b347461612f9609e906f2d7ff89ff180ad69dc64cea8afb9e861e69e11854e8fc4fd07ad643f7eb469b20c20f1ebc9c0 - languageName: node - linkType: hard - -"@cspell/dict-filetypes@npm:^3.0.0": - version: 3.0.0 - resolution: "@cspell/dict-filetypes@npm:3.0.0" - checksum: 8afd0785583f913c8d6ad1a2b56a527600258b291fc6ed8e83f543ba70a5273095195495601aca7d80fdeb17cab6a10e8a8aa44bea3083962cd42af130260d8a - languageName: node - linkType: hard - -"@cspell/dict-fonts@npm:^3.0.1": - version: 3.0.1 - resolution: "@cspell/dict-fonts@npm:3.0.1" - checksum: 15110749c6e245df707efab30e16ecdcc1f0676a9fc720f9070b88df056a01114ce2350d862a4421ce06d1a739652aee4e687b8c798a7170f0f9cfdca49bfb0f - languageName: node - linkType: hard - -"@cspell/dict-fullstack@npm:^3.1.4": - version: 3.1.4 - resolution: "@cspell/dict-fullstack@npm:3.1.4" - checksum: 7bfdc5dcebedc52c63e1fc6b73b2e51352001f7e0ae1a2b0d26c46ec3d1ddfaf8aa127e56b07ebc60480110b0a0cbeaf2835509124a75519e8828b313c55446c - languageName: node - linkType: hard - -"@cspell/dict-gaming-terms@npm:^1.0.4": - version: 1.0.4 - resolution: "@cspell/dict-gaming-terms@npm:1.0.4" - checksum: 3e57f5567747a8598b3e4de4f63a3b8090cccf7688f3e91f0a9e005e916645db1224ea600afd5b497b7e8c6a1f9291dfd4cb932278dfd423657107203a2ace0b - languageName: node - linkType: hard - -"@cspell/dict-git@npm:^2.0.0": - version: 2.0.0 - resolution: "@cspell/dict-git@npm:2.0.0" - checksum: eb3985f1f8717ad4e41e146f1b011e0476d7625ab1ebee55364575b727323300773a89a8dd5a20466c74c57b7d2678e0c92446453bd484a44203be737bc07964 - languageName: node - linkType: hard - -"@cspell/dict-golang@npm:^6.0.1": - version: 6.0.1 - resolution: "@cspell/dict-golang@npm:6.0.1" - checksum: 465dc7a879fa34be010aecc7dac9820bc93ea694abc24299757662c10b8d9f632df7d18c37b31d7dabb67b721bfa9a6d02bd50125e464f79e1d466aa8073a35b - languageName: node - linkType: hard - -"@cspell/dict-haskell@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-haskell@npm:4.0.1" - checksum: cfb51e415b60c5eb266a5782d0a4b19a37f1389b9b018d1bbb2ff4358bd739af1f76f68f26a138d4b4bd0ab67146d6eb9032fc3d3c212695237c134e05339c79 - languageName: node - linkType: hard - -"@cspell/dict-html-symbol-entities@npm:^4.0.0": - version: 4.0.0 - resolution: "@cspell/dict-html-symbol-entities@npm:4.0.0" - checksum: 79f05f9080f39dbde703980eb587ed6624b8fc2f5cedc297327bc1b9b7e6022a7c382e6013149b1afe00609b96003ab5c8d18d378979f76f336ab626317183f4 - languageName: node - linkType: hard - -"@cspell/dict-html@npm:^4.0.3": - version: 4.0.3 - resolution: "@cspell/dict-html@npm:4.0.3" - checksum: ebc011c83c4600ef40e68cedf598c402819ef8ab5543a9f264a9b18bf7592f95aade77fd83121befafe338a791a4609aea273f0fa7584b029f34844924344ae0 - languageName: node - linkType: hard - -"@cspell/dict-java@npm:^5.0.5": - version: 5.0.5 - resolution: "@cspell/dict-java@npm:5.0.5" - checksum: a40fafeb4f1b454e025be19bd56e3d591666a7d69be5d06ca673a28743eb84261bf5e193ad16a46bc7698c7b1b6bdd30c34a6939bec0615d827bb0f9ea04bffd - languageName: node - linkType: hard - -"@cspell/dict-k8s@npm:^1.0.1": - version: 1.0.1 - resolution: "@cspell/dict-k8s@npm:1.0.1" - checksum: 90800857566c8d774523d26bbb962d2cdf2d5587162851a14ef85d6b38f70a9da9c61eac26287476371f680556862ef75d18c155a8dfb77de0c543e5e9390714 - languageName: node - linkType: hard - -"@cspell/dict-latex@npm:^4.0.0": - version: 4.0.0 - resolution: "@cspell/dict-latex@npm:4.0.0" - checksum: 33a3f158d8c0151cbb4e6bd79ba1189d167b3916e1ce37d7b5754d18dffefe061320fa54c3cb482bd5c7cf37392d0112530b07a3eca63dffbe1069de317dc652 - languageName: node - linkType: hard - -"@cspell/dict-lorem-ipsum@npm:^3.0.0": - version: 3.0.0 - resolution: "@cspell/dict-lorem-ipsum@npm:3.0.0" - checksum: 145a79ec536bee3ec515b189be3f4a5347a28c563060ac5da6f6783a288e63cb0662fc918be008e1a377bdeb48cfa7a2aa1f9e9f8aef6371109f95f4b049731d - languageName: node - linkType: hard - -"@cspell/dict-lua@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-lua@npm:4.0.1" - checksum: a85da787f1f347a46cfa44fdc26dea39c0665f636936f4ae7ee656b0e3395a2b3d8787a5f4af35e7d777efde15397ed57ba21d2de9b01e27df4239b3d86e27bd - languageName: node - linkType: hard - -"@cspell/dict-node@npm:^4.0.2": - version: 4.0.2 - resolution: "@cspell/dict-node@npm:4.0.2" - checksum: 7a63ee44c4c493b429c821eb9e5fdcd1d0f549a2ada64d8ce3f7f0a88e2d26f82daada8801ee6f09a582502a1500d63985aa47204757b39014dff747211539d5 - languageName: node - linkType: hard - -"@cspell/dict-npm@npm:^5.0.5": - version: 5.0.5 - resolution: "@cspell/dict-npm@npm:5.0.5" - checksum: ecb0f4d99b394f09ebcdf103b91ff4ea3c89d58843eeed99880032c322caf1bd9a81266a0e9fa3b816b88aa32685878fdce8716c2eb3a593b361f0bce2076fc2 - languageName: node - linkType: hard - -"@cspell/dict-php@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-php@npm:4.0.1" - checksum: 163727eca4af8d2e5d759fdda2dcc80065bd01fbc44020dd26cf0d1a3d2906a0c9caa52a97ece9eafecea36d682609c7ffa77ad8d736505058505c64106d7c06 - languageName: node - linkType: hard - -"@cspell/dict-powershell@npm:^5.0.1": - version: 5.0.1 - resolution: "@cspell/dict-powershell@npm:5.0.1" - checksum: 42bb95e5eef228ccdb5c787b7492b77a028ac205ca27cc775fa792558b760814808bb65952214b2282131d7ab4cbd3f80c12c5bee9184b8559f0a2cf1e488008 - languageName: node - linkType: hard - -"@cspell/dict-public-licenses@npm:^2.0.2": - version: 2.0.2 - resolution: "@cspell/dict-public-licenses@npm:2.0.2" - checksum: 79f16b2c3a31208e299bd552d684f7f89da8e73bef97704e2d0e1bfc99448b9dd7758315b6ed5aa04f067908def11f0d481550843568f02cba8a2b2fd7a687ba - languageName: node - linkType: hard - -"@cspell/dict-python@npm:^4.0.2": - version: 4.0.2 - resolution: "@cspell/dict-python@npm:4.0.2" - checksum: 23825b92af39a9b43a6af3862babbeaf01a5718ffe621e9f487400dc62582e5bd840213af22f1b2f4a78ba8e8b24dbb4cd7de9c190aa2cfea2bff7c15338ae7a - languageName: node - linkType: hard - -"@cspell/dict-r@npm:^2.0.1": - version: 2.0.1 - resolution: "@cspell/dict-r@npm:2.0.1" - checksum: fe85939ad4c8ada34284a673918be711cca60b6d6f1c48ee98602c27905228dfbaea3462a350094633032c1d6b6bba9548df7019e0b21673cf1cf887c57ca228 - languageName: node - linkType: hard - -"@cspell/dict-ruby@npm:^5.0.0": - version: 5.0.0 - resolution: "@cspell/dict-ruby@npm:5.0.0" - checksum: e1f99f97fa3459a19f8f25dbae7d879e77bd503e9435aaf640d99ad4212223548fb9e5544d076f9a766f74829958178e814ebfe6f941738fb5e5452969bbdfb2 - languageName: node - linkType: hard - -"@cspell/dict-rust@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-rust@npm:4.0.1" - checksum: 146d3af5d0b1b84ec62059353416cd5d4b53995ed0a0edb47b96ed89f1b8b82881e76c1bac46311318f41d1619eab87d81e0cdc94855f50b79cfa0719333cbb1 - languageName: node - linkType: hard - -"@cspell/dict-scala@npm:^5.0.0": - version: 5.0.0 - resolution: "@cspell/dict-scala@npm:5.0.0" - checksum: 759dd8746e68e45299b65eeaf1dfd32d1e345fd80fd9a623af502266598c384198853001f70a700c454d8490fb9a5e1358ca1e0d7c0d43154a4f07e2d5531c72 - languageName: node - linkType: hard - -"@cspell/dict-software-terms@npm:^3.1.5": - version: 3.1.6 - resolution: "@cspell/dict-software-terms@npm:3.1.6" - checksum: 76b5d33dc830effa229096050964ccbf652cf83a2b648fa313b77a0ee80a8a1979382a07e72e5bed9c8aaadecbb59103a6b578fe10e8892dc53081cffbab3d85 - languageName: node - linkType: hard - -"@cspell/dict-sql@npm:^2.1.0": - version: 2.1.0 - resolution: "@cspell/dict-sql@npm:2.1.0" - checksum: 12eb8f1d3cb9d2f7957375b7258f4e13c2482de3e46a567e4854159e1d6242ca6e25575ccbddcb5c10b1ca8f738d271eabce7c4538e1f31e610bcd002f800b4a - languageName: node - linkType: hard - -"@cspell/dict-svelte@npm:^1.0.2": - version: 1.0.2 - resolution: "@cspell/dict-svelte@npm:1.0.2" - checksum: 5b42989bc6743a26ca5172cc23ebc1449d930695b10c908376048ce1835bf57fef7a0004f02ec5e43219f24a97f154e125041df470441199a045ed0be9e654fc - languageName: node - linkType: hard - -"@cspell/dict-swift@npm:^2.0.1": - version: 2.0.1 - resolution: "@cspell/dict-swift@npm:2.0.1" - checksum: 0bbb106266205c5f5e12886a73ebf0db2078bab1bdd2e1f304fe28445cd72d847a4c5072bf4fe8f9e8cdb4bc69d52fffec0806aea19ea9b64b7a87c67ee01175 - languageName: node - linkType: hard - -"@cspell/dict-typescript@npm:^3.1.1": - version: 3.1.1 - resolution: "@cspell/dict-typescript@npm:3.1.1" - checksum: e70b03d0867070e6695787acea05f32fc5eac6f90f1473ebe3f0833c0578c52d36d85ef20c43f10ff10b8f0be48d9df3e77a21eeed1794fe282b6fca79451293 - languageName: node - linkType: hard - -"@cspell/dict-vue@npm:^3.0.0": - version: 3.0.0 - resolution: "@cspell/dict-vue@npm:3.0.0" - checksum: 4db58b1d6f9be1a523a35678877f2cca2bb04548b136ec5ec4e7186500978dbc32cc8747ced80ade3cad3acc3c80eb23afe980679165810f8f8f26802e952e2f - languageName: node - linkType: hard - -"@cspell/dynamic-import@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/dynamic-import@npm:6.30.2" - dependencies: - import-meta-resolve: ^2.2.2 - checksum: a12a8b18be303c0bb6b9c737d72092686c97c38dafc14cbdd05396a0fb60ebffcd67778b77502b3f8cb9a485cb08e74d4a582e88a828026000ec7241b4050055 - languageName: node - linkType: hard - -"@cspell/strong-weak-map@npm:6.30.2": - version: 6.30.2 - resolution: "@cspell/strong-weak-map@npm:6.30.2" - checksum: 63f923a70bce89abb7955ad38ff1224b91b92afa4e310f333885bdd6b1220316ef51bb4d11455c9f65e5233d2d9504335409944649af5f722fed11e17df46d0a - languageName: node - linkType: hard - "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -9664,8 +9242,8 @@ __metadata: linkType: hard "@cypress/request@npm:^2.88.10": - version: 2.88.11 - resolution: "@cypress/request@npm:2.88.11" + version: 2.88.10 + resolution: "@cypress/request@npm:2.88.10" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -9680,12 +9258,12 @@ __metadata: json-stringify-safe: ~5.0.1 mime-types: ~2.1.19 performance-now: ^2.1.0 - qs: ~6.10.3 + qs: ~6.5.2 safe-buffer: ^5.1.2 tough-cookie: ~2.5.0 tunnel-agent: ^0.6.0 uuid: ^8.3.2 - checksum: e4b3f62e0c41c4ccca6c942828461d8ea717e752fd918d685e9f74e2ebcfa8b7942427f7ce971e502635c3bf3d40011476db84dc753d3dc360c6d08350da6f93 + checksum: 69c3e3b332e9be4866a900f6bcca5d274d8cea6c99707fbcce061de8dbab11c9b1e39f4c017f6e83e6e682717781d4f6106fd6b7cf9546580fcfac353b6676cf languageName: node linkType: hard @@ -9700,13 +9278,13 @@ __metadata: linkType: hard "@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" + version: 2.0.2 + resolution: "@dabh/diagnostics@npm:2.0.2" dependencies: colorspace: 1.1.x enabled: 2.0.x kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + checksum: 4d95cc31249a840b6cc3dba3dc4345a9295265413456068a0d07b69fa0ec6a5a5bc2c39e56ec04c6509ac1f4d9c17fc80baaaddd5caa1abcdd3aaeffe2b63cec languageName: node linkType: hard @@ -9781,19 +9359,6 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.10.5": - version: 11.10.5 - resolution: "@emotion/cache@npm:11.10.5" - dependencies: - "@emotion/memoize": ^0.8.0 - "@emotion/sheet": ^1.2.1 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - stylis: 4.1.3 - checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b - languageName: node - linkType: hard - "@emotion/hash@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/hash@npm:0.8.0" @@ -9801,26 +9366,19 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/is-prop-valid@npm:1.2.0" +"@emotion/is-prop-valid@npm:^1.1.0": + version: 1.1.2 + resolution: "@emotion/is-prop-valid@npm:1.1.2" dependencies: - "@emotion/memoize": ^0.8.0 - checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 + "@emotion/memoize": ^0.7.4 + checksum: 58b1f2d429a589f8f5bc2c33a8732cbb7bbcb17131a103511ef9a94ac754d7eeb53d627f947da480cd977f9d419fd92e244991680292f3287204159652745707 languageName: node linkType: hard -"@emotion/memoize@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/memoize@npm:0.8.0" - checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.2.1": - version: 1.2.1 - resolution: "@emotion/sheet@npm:1.2.1" - checksum: ce78763588ea522438156344d9f592203e2da582d8d67b32e1b0b98eaba26994c6c270f8c7ad46442fc9c0a9f048685d819cd73ca87e544520fd06f0e24a1562 +"@emotion/memoize@npm:^0.7.4": + version: 0.7.5 + resolution: "@emotion/memoize@npm:0.7.5" + checksum: 83da8d4a7649a92c72f960817692bc6be13cc13e107b9f7e878d63766525ed4402881bfeb3cda61145c050281e7e260f114a0a2870515527346f2ef896b915b3 languageName: node linkType: hard @@ -9838,20 +9396,6 @@ __metadata: languageName: node linkType: hard -"@emotion/utils@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/utils@npm:1.2.0" - checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.3.0": - version: 0.3.0 - resolution: "@emotion/weak-memoize@npm:0.3.0" - checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 - languageName: node - linkType: hard - "@esbuild-kit/cjs-loader@npm:^2.4.1": version: 2.4.2 resolution: "@esbuild-kit/cjs-loader@npm:2.4.2" @@ -9863,12 +9407,12 @@ __metadata: linkType: hard "@esbuild-kit/core-utils@npm:^3.0.0": - version: 3.1.0 - resolution: "@esbuild-kit/core-utils@npm:3.1.0" + version: 3.0.0 + resolution: "@esbuild-kit/core-utils@npm:3.0.0" dependencies: - esbuild: ~0.17.6 + esbuild: ~0.15.10 source-map-support: ^0.5.21 - checksum: d54fd5adb3ce6784d84bb025ad54ddcfbab99267071a7f65298e547f56696f0b9d0dba96c535f9678a30d4887ec71cd445fdd277d65fbec1f3b504f6808f693e + checksum: 0e89ec718e2211bf95c48a8085aaef88e8e416f42abd1c62d488d5458eecd3fbc144179a0c5570ad36fa7e2d3bbc411f8d3fb28802c37ced2154dc2c6ded9dfe languageName: node linkType: hard @@ -9886,6 +9430,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.15.18": + version: 0.15.18 + resolution: "@esbuild/android-arm@npm:0.15.18" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/android-arm@npm:0.16.17" @@ -10012,6 +9563,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.15.18": + version: 0.15.18 + resolution: "@esbuild/linux-loong64@npm:0.15.18" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/linux-loong64@npm:0.16.17" @@ -10180,45 +9738,70 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.3.0 - resolution: "@eslint-community/eslint-utils@npm:4.3.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: f487760a692f0f1fef76e248ad72976919576ba57edc2b1b1dc1d182553bae6b5bf7b078e654da85d04f0af8a485d20bd26280002768f4fbcd2e330078340cb0 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/regexpp@npm:4.4.0" - checksum: 2d127af0c752b80e8a782eacfe996a86925d21de92da3ffc6f9e615e701145e44a62e26bdd88bfac2cd76779c39ba8d9875a91046ec5e7e5f23cb647c247ea6a - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.0.1": - version: 2.0.1 - resolution: "@eslint/eslintrc@npm:2.0.1" +"@eslint/eslintrc@npm:^1.4.1": + version: 1.4.1 + resolution: "@eslint/eslintrc@npm:1.4.1" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.5.0 + espree: ^9.4.0 globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 56b9192a687a450db53a7b883daf9f0f447c43b3510189cf88808a7a2467c2a302a42a50f184cc6d5a9faf3d1df890a2ef0fd0d60b751f32a3e9dfea717c6b48 + checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 languageName: node linkType: hard -"@eslint/js@npm:8.36.0": - version: 8.36.0 - resolution: "@eslint/js@npm:8.36.0" - checksum: b7d6b84b823c8c7784be390741196617565527b1f7c0977fde9455bfb57fd88f81c074a03dd878757d2c33fa29f24291e9ecbc1425710f067917324b55e1bf3a +"@f/animate@npm:^1.0.1": + version: 1.0.1 + resolution: "@f/animate@npm:1.0.1" + dependencies: + "@f/elapsed-time": ^1.0.0 + "@f/raf": ^1.0.0 + "@f/tween": ^1.0.0 + checksum: 660b44d297b1a6e5e28c48438633e00ded40f8e51adb4bfb26fc809b60c8c056f567f2e61f4f842c8fd2cf8a85dffaa1c2502bd0963eb926135f2d66d9f997db + languageName: node + linkType: hard + +"@f/elapsed-time@npm:^1.0.0": + version: 1.0.0 + resolution: "@f/elapsed-time@npm:1.0.0" + dependencies: + "@f/timestamp": ^1.0.0 + checksum: 5934d24a667bae4e0089408aa362c0ee1503945adf73ca0ff0d09fed33d62d070f0323eb9a54f42c37bd0545330a0f63da13319f66cc89fef59b8917a3278b5f + languageName: node + linkType: hard + +"@f/map-obj@npm:^1.2.2": + version: 1.2.2 + resolution: "@f/map-obj@npm:1.2.2" + checksum: d67db6074e1daa7a3c0f8c2e54094bff48b54d11817fddc886631dd8a17586d0040e7116282a374cc1d3d643d05862d49a1062ea5b2d03b9069507c09ae888a4 + languageName: node + linkType: hard + +"@f/raf@npm:^1.0.0": + version: 1.0.3 + resolution: "@f/raf@npm:1.0.3" + checksum: 800344caf4c649c0bcdefd4febbf3f0eed96bb9b7e54b5bc6eebd7d781c9e6d98ba22fb39da41474080d97ac21916bd1e82051558b43dabcbbf410d2dd0899c1 + languageName: node + linkType: hard + +"@f/timestamp@npm:^1.0.0": + version: 1.0.0 + resolution: "@f/timestamp@npm:1.0.0" + checksum: 8c37acb40cf67952309a214be2ddfd5c4f6634a414efc47406e8d1c1624e74662f584f6b48f3382c742f256aea1537e730e74c6078e52be3a28d0624cc7306a0 + languageName: node + linkType: hard + +"@f/tween@npm:^1.0.0": + version: 1.0.1 + resolution: "@f/tween@npm:1.0.1" + dependencies: + "@f/map-obj": ^1.2.2 + checksum: e37155c43875becc9eca8425b8dc83e64a78fa327738b33fcb3946418369568aa77007ade39591991379187381da829702e5cb84729dd2a0bc3bb4b7c94e4f2b languageName: node linkType: hard @@ -10351,9 +9934,9 @@ __metadata: linkType: hard "@google-cloud/promisify@npm:^3.0.0": - version: 3.0.1 - resolution: "@google-cloud/promisify@npm:3.0.1" - checksum: 44b4de760425d6ea328f6208c46219cfcc44383b4015c67a6b18b55b8fee5b754a11f80ed481a7d779bc471950b2b856dce51e36e8004b0d2f73a93e50d756ce + version: 3.0.0 + resolution: "@google-cloud/promisify@npm:3.0.0" + checksum: 5339e36bd5bc7957ae72b959e21c5d50fe028ad8eae9affb6e8e172aab715f3bf6a7b3c01720d6b4b67ea080d91dd30ac00f0dc88d455620c8bb10df263385a2 languageName: node linkType: hard @@ -10576,16 +10159,30 @@ __metadata: linkType: hard "@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.26 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.26" + version: 7.3.6 + resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.6" dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/utils": ^9.2.1 - "@whatwg-node/fetch": ^0.8.0 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/utils": 8.9.0 + "@whatwg-node/fetch": ^0.2.4 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2dd0324cd677c0a399a3cda6f155e4367ac38c8f6ec8a36c50931e97ce93d70f716f95575bcfda33d5a5b3c75f0ba04c73b82d22613f1a89e3c31965f576ae22 + checksum: e9711b32fd90d41c97ea8eb6bcc68e5a78374114fdd628ae9f1d4855cc163aecda78d22697c0f6ab556f816a01d27d684bd756ed1b777e7fa42b63200c240b90 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:8.5.14": + version: 8.5.14 + resolution: "@graphql-tools/batch-execute@npm:8.5.14" + dependencies: + "@graphql-tools/utils": 9.1.3 + dataloader: 2.1.0 + 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: a48a11f471fe804852abb60f361eb8e398e5fd9d3b8bc61e3734983a5c8c284f3087b903b5277a2c7e365434947af534a881e67c147b0a3d47849617e124ac33 languageName: node linkType: hard @@ -10618,7 +10215,24 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/delegate@npm:9.0.28, @graphql-tools/delegate@npm:^9.0.27": +"@graphql-tools/delegate@npm:9.0.21": + version: 9.0.21 + resolution: "@graphql-tools/delegate@npm:9.0.21" + dependencies: + "@graphql-tools/batch-execute": 8.5.14 + "@graphql-tools/executor": 0.0.11 + "@graphql-tools/schema": 9.0.12 + "@graphql-tools/utils": 9.1.3 + dataloader: 2.1.0 + 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: fab07abfb06325d82382e6de45bbf2bc6501f18ebabbe50661772b58f512d6e713565be16bd7f99f71fcb00ffeed25bba871d4d459a705880803878e20c2a183 + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:9.0.28": version: 9.0.28 resolution: "@graphql-tools/delegate@npm:9.0.28" dependencies: @@ -10635,53 +10249,68 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/executor-graphql-ws@npm:^0.0.12": - version: 0.0.12 - resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.12" +"@graphql-tools/executor-graphql-ws@npm:0.0.5": + version: 0.0.5 + resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.5" dependencies: - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/utils": 9.1.3 "@repeaterjs/repeater": 3.0.4 "@types/ws": ^8.0.0 - graphql-ws: 5.12.0 + graphql-ws: 5.11.2 isomorphic-ws: 5.0.0 tslib: ^2.4.0 - ws: 8.12.1 + ws: 8.11.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 017f970c19e843c24da9f2b2cf45b5d922f5652b05e34c69fb27c3882618c8cc6a6ee008d4e767c1e74b2ba8630147ec8c7821996ff0eb1724f15dc27b95d1fd + checksum: 79ced279e56b7508282859f805ca8fe1286eec3b53592893e35517f93e5204eca2db327258599749b0d832918d9d709962059087b4e6a894eacc16ceb0142273 languageName: node linkType: hard -"@graphql-tools/executor-http@npm:^0.1.7": - version: 0.1.9 - resolution: "@graphql-tools/executor-http@npm:0.1.9" +"@graphql-tools/executor-http@npm:0.0.7": + version: 0.0.7 + resolution: "@graphql-tools/executor-http@npm:0.0.7" dependencies: - "@graphql-tools/utils": ^9.2.1 - "@repeaterjs/repeater": ^3.0.4 - "@whatwg-node/fetch": ^0.8.1 - dset: ^3.1.2 + "@graphql-tools/utils": 9.1.3 + "@repeaterjs/repeater": 3.0.4 + "@whatwg-node/fetch": 0.5.3 + dset: 3.1.2 extract-files: ^11.0.0 - meros: ^1.2.1 + meros: 1.2.1 tslib: ^2.4.0 - value-or-promise: ^1.0.12 + value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: de62f839c3775141f444a6a453bf8cd01e42257a915845180b7f840b59bb781c21eeb59f68b609dcbab5bae73bc9fa40f3d16449f23410bc616b1f347dedf1d1 + checksum: 05918ee65cb7d3e927e707acddb184ba2efbccf03656454ff8b172654aa41c4ad35bed487c0399ca085ba39ca434421cdaadb78dec4d7ebabbd25fe3c5cbb81c languageName: node linkType: hard -"@graphql-tools/executor-legacy-ws@npm:^0.0.9": - version: 0.0.9 - resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.9" +"@graphql-tools/executor-legacy-ws@npm:0.0.5": + version: 0.0.5 + resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.5" dependencies: - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/utils": 9.1.3 "@types/ws": ^8.0.0 isomorphic-ws: 5.0.0 tslib: ^2.4.0 - ws: 8.12.1 + ws: 8.11.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9f35a38d1e064d4c82eee8d91d0b12552f75b65a413e1defc3831c726c6304f26b3651d3bd26aff3f58e049e40639ddf9b27f681a8bc49fdf11fb693e0d05392 + checksum: 2705e57ae81fbe3117d14900d50ab2459618d93192f795db97e2b98e9a772ebfe2308c17e72d92735123ec32fbedad014158d20fd1cc569fa287d47c90037a71 + languageName: node + linkType: hard + +"@graphql-tools/executor@npm:0.0.11": + version: 0.0.11 + resolution: "@graphql-tools/executor@npm:0.0.11" + dependencies: + "@graphql-tools/utils": 9.1.3 + "@graphql-typed-document-node/core": 3.1.1 + "@repeaterjs/repeater": 3.0.4 + 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: 9f4c5d50eb574ab788a70684150502d4ad25b2681a3933a9415a0bbd78bfdf5ee203dca8bccc4cef93727157254216f0c22c5359bef1c1738f652b3122048b17 languageName: node linkType: hard @@ -10701,52 +10330,68 @@ __metadata: linkType: hard "@graphql-tools/git-loader@npm:^7.2.13": - version: 7.2.20 - resolution: "@graphql-tools/git-loader@npm:7.2.20" + version: 7.2.13 + resolution: "@graphql-tools/git-loader@npm:7.2.13" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.5.0 - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/graphql-tag-pluck": 7.4.0 + "@graphql-tools/utils": 9.1.1 is-glob: 4.0.3 micromatch: ^4.0.4 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a0f16d44c60261eb9680f907d56b86ce3dda4642118ef3c436946f8e5dc1390151b9fd5ae75d34736c78d16e3e1191c1596bd8a86866fe2384ee7b73b9000e29 + checksum: 4690d473bb05d91765ee54fbfd0cb3859bda8cef776feced26e477b6aef22c582923ff18bdc963adcb649d8fa975344371001af60867d1e2cfd5624917cf6e91 languageName: node linkType: hard "@graphql-tools/github-loader@npm:^7.3.20": - version: 7.3.27 - resolution: "@graphql-tools/github-loader@npm:7.3.27" + version: 7.3.20 + resolution: "@graphql-tools/github-loader@npm:7.3.20" dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/graphql-tag-pluck": ^7.4.6 - "@graphql-tools/utils": ^9.2.1 - "@whatwg-node/fetch": ^0.8.0 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/graphql-tag-pluck": 7.4.0 + "@graphql-tools/utils": 9.1.1 + "@whatwg-node/fetch": ^0.5.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 467d5c9f0df5a26656dbd5939768335277eb25023331a359fd4748c2cd85de85affe8d7ac93ac9d51202ed208c54357561e32e2520fae28fdbc42dda72dd99f4 + checksum: 96292e59f8b394fb1e69fae91b3fdf037962e8feadd15da7461043c9559450fc35c2438b669727b14a6d509f784f0c5401477f3f90f693a93fc8c59c246d0c77 languageName: node linkType: hard "@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.16 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.16" + version: 7.5.0 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.0" dependencies: - "@graphql-tools/import": 6.7.17 - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/import": 6.7.1 + "@graphql-tools/utils": 8.9.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5f9af56511a2f791677ad2601e745053d3f28b3afdf5542261e4bbf9924b9872244dcb0c9f6c7ca7fe91b658c12f4d91529efd9638653e112ad75bf79c915d78 + checksum: 57f9f64a26f62d25fcb65282d27a8f6cce8d99fd0ec8f1d5b31ab43fd5698876760e4df42fd96f2b5ea524f2e755768496ee2b3516d559d43270330551371359 languageName: node linkType: hard -"@graphql-tools/graphql-tag-pluck@npm:7.5.0, @graphql-tools/graphql-tag-pluck@npm:^7.4.6": +"@graphql-tools/graphql-tag-pluck@npm:7.4.0": + version: 7.4.0 + resolution: "@graphql-tools/graphql-tag-pluck@npm:7.4.0" + dependencies: + "@babel/parser": ^7.16.8 + "@babel/plugin-syntax-import-assertions": 7.20.0 + "@babel/traverse": ^7.16.8 + "@babel/types": ^7.16.8 + "@graphql-tools/utils": 9.1.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 670888e691707d430066a84ddcc9a34f64c6146e3f1406ab9fbdf74d5805fcbac8d32462cd387c411fbb81a5fc6bfb4d4d14e0568c5b887c72df8ebb7ef66c1b + languageName: node + linkType: hard + +"@graphql-tools/graphql-tag-pluck@npm:7.5.0": version: 7.5.0 resolution: "@graphql-tools/graphql-tag-pluck@npm:7.5.0" dependencies: @@ -10762,44 +10407,68 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/import@npm:6.7.17": - version: 6.7.17 - resolution: "@graphql-tools/import@npm:6.7.17" +"@graphql-tools/import@npm:6.7.1": + version: 6.7.1 + resolution: "@graphql-tools/import@npm:6.7.1" dependencies: - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/utils": 8.9.0 resolve-from: 5.0.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 232debc4abed340f9ab04a9474e6f1af0f50d5b6b66dc6f7b7307872a27bd00745bc4fad1d7d00bf3503686766d2e26c9c42c4f1e2409111799ad80119a8303a + checksum: 1ba6ff176851eff345ccfd37616bd2d800fba074b88abb9a777b59fe153a1e55f2c24d8c033b141303267212f6a01eb874088e403b7efdf10c01c9ec7833af49 languageName: node linkType: hard "@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.17 - resolution: "@graphql-tools/json-file-loader@npm:7.4.17" + version: 7.4.1 + resolution: "@graphql-tools/json-file-loader@npm:7.4.1" dependencies: - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/utils": 8.9.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 54e4d1acf5bb1b55d72500b2ebb521d821edfb99ad7c1b0f0d6b2e3f87cfcda2d61ce6d4a886117ac11fb94354da6f7435f35a1ffdc359cf2e39da1d0fde76c5 + checksum: 9eae0fd4229b60fa93d3e523e7255eeb2400bda44a2e73ba036955c514be4f02c83e7578c4749c4a7e84b44d318d4c65979b745ddb34fa4d219449f455e3e873 languageName: node linkType: hard "@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.8.0": - version: 7.8.13 - resolution: "@graphql-tools/load@npm:7.8.13" + version: 7.8.10 + resolution: "@graphql-tools/load@npm:7.8.10" dependencies: - "@graphql-tools/schema": 9.0.17 - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/schema": 9.0.14 + "@graphql-tools/utils": 9.1.4 p-limit: 3.1.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: f8dafe3b1575a33234b798751a6ec4ee9d78bfb32055395da45f7081737d30f863fe5bb2cc8c2aadd5b46d3a443d1dec75d7f2cc58399c071ac35c8470cb7ff6 + checksum: 9b1fd7041fc69072c4f7d6bc320c9de7f990e1792db567d3d913b9cc77f5c164ffee968dd90a688d89856e1e8c01beb8e1bbe9f22464fa8c563553229c3a3f28 + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:8.3.14": + version: 8.3.14 + resolution: "@graphql-tools/merge@npm:8.3.14" + dependencies: + "@graphql-tools/utils": 9.1.3 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: d77098959a7ecf1346958eb6731f7354fc1155d253aa25169ca48b73053784f3db203ff88ada6a1cdfa9a0b026e55ce02afb83ac61b501223c018e97accf7cdc + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:8.3.16": + version: 8.3.16 + resolution: "@graphql-tools/merge@npm:8.3.16" + dependencies: + "@graphql-tools/utils": 9.1.4 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4d7fa594e0d97b6d596c85619a8203cb9c88452b75efac4191697de00db5d043639ed47f6bf0a3ccc11e8638714d92a4a8bc37e77b61b46790ddf4a1e5d4bb87 languageName: node linkType: hard @@ -10816,24 +10485,25 @@ __metadata: linkType: hard "@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.1 - resolution: "@graphql-tools/optimize@npm:1.3.1" + version: 1.3.0 + resolution: "@graphql-tools/optimize@npm:1.3.0" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4eed041bc3199a70ab426eeb10bc4af65f18fa0c5907613aec236fd7e14918d0f895e12489df6ff501562415eef64c99777a3ca6f6a4ee3c796b68e7cb778342 + checksum: 56a5e8e3079a7ac69639410143315bafd43175c0366a95cf037698b64799ff80fc737b747b7751a4de31b44a679f67b7499468c556ca457932d5d1052db73f19 languageName: node linkType: hard "@graphql-tools/prisma-loader@npm:^7.2.49": - version: 7.2.65 - resolution: "@graphql-tools/prisma-loader@npm:7.2.65" + version: 7.2.49 + resolution: "@graphql-tools/prisma-loader@npm:7.2.49" dependencies: - "@graphql-tools/url-loader": 7.17.14 - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/url-loader": 7.16.28 + "@graphql-tools/utils": 9.1.3 "@types/js-yaml": ^4.0.0 "@types/json-stable-stringify": ^1.0.32 + "@types/jsonwebtoken": ^8.5.0 chalk: ^4.1.0 debug: ^4.3.1 dotenv: ^16.0.0 @@ -10841,29 +10511,57 @@ __metadata: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 isomorphic-fetch: ^3.0.0 - jose: ^4.11.4 js-yaml: ^4.0.0 json-stable-stringify: ^1.0.1 + jsonwebtoken: ^9.0.0 lodash: ^4.17.20 scuid: ^1.1.0 tslib: ^2.4.0 yaml-ast-parser: ^0.0.43 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2354b7e2074b7a519984bb36f1923a1d24c26b83db5e3ad9c319a3e94365c469984fd8e0a442b9a1d6740e7b25830ae31069c89c2ae3c1ac63fa87b444d2b58f + checksum: 9a392346107ec5e468a8725c1d931b638e1899c25a80e34e9c888c050abf85dfde85faea9fdb19a8bfd9425bdb97949e14e759157d083aa91812fcff516ad82d languageName: node linkType: hard "@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.17 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.17" + version: 6.5.0 + resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.0" dependencies: "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 9.2.1 + "@graphql-tools/utils": 8.8.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1e5163390b2834c2246c4842c9ca7b9a63cdff17f5b5afe5934bbb837b5b26e14e2144ef3fad992e3618d4012fb6736a71c34a38e1fdb4e628e3de7f74fac8bd + checksum: eea705c0508b801806d36a6031997868d1aa35a2bee0a21c36e5ac345691a9fec88c9c00bc3c96fa998aa28deb2be667d65e6123ac469f22072f3eba2781b5ad + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:9.0.12": + version: 9.0.12 + resolution: "@graphql-tools/schema@npm:9.0.12" + dependencies: + "@graphql-tools/merge": 8.3.14 + "@graphql-tools/utils": 9.1.3 + 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: c5ea750466181b425dd77822b1dc774227bcdb3a01631f114734d450cfc2dabeac60b3fac40e047090d6035b6a559b614716f1b61068889cf5aae0785650c31b + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:9.0.14": + version: 9.0.14 + resolution: "@graphql-tools/schema@npm:9.0.14" + dependencies: + "@graphql-tools/merge": 8.3.16 + "@graphql-tools/utils": 9.1.4 + tslib: ^2.4.0 + value-or-promise: 1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: ae958892363fe8b1715a9fd3c4bdb56d0d5d429693dbb9774ce930d104ed5a7c94db3c41c12d91fd930bf90ab186337d3ba660e765a99a98bde892f0d2dcf40e languageName: node linkType: hard @@ -10881,26 +10579,81 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/url-loader@npm:7.17.14, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": - version: 7.17.14 - resolution: "@graphql-tools/url-loader@npm:7.17.14" +"@graphql-tools/url-loader@npm:7.16.28, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": + version: 7.16.28 + resolution: "@graphql-tools/url-loader@npm:7.16.28" dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/delegate": ^9.0.27 - "@graphql-tools/executor-graphql-ws": ^0.0.12 - "@graphql-tools/executor-http": ^0.1.7 - "@graphql-tools/executor-legacy-ws": ^0.0.9 - "@graphql-tools/utils": ^9.2.1 - "@graphql-tools/wrap": ^9.3.8 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/delegate": 9.0.21 + "@graphql-tools/executor-graphql-ws": 0.0.5 + "@graphql-tools/executor-http": 0.0.7 + "@graphql-tools/executor-legacy-ws": 0.0.5 + "@graphql-tools/utils": 9.1.3 + "@graphql-tools/wrap": 9.2.23 "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.8.0 - isomorphic-ws: ^5.0.0 + "@whatwg-node/fetch": ^0.5.0 + isomorphic-ws: 5.0.0 tslib: ^2.4.0 value-or-promise: ^1.0.11 - ws: ^8.12.0 + ws: 8.11.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a9473c0d49299d4807c5ab881407b7e96989a06cc583bddd34eb059295fd847df982bf95b82fc713150ac60fe1ccdd1db78bc17e3903db44684b5cce0f7cb82a + checksum: fca2dada0d80c051358f928a321eda0cfa96bb71704b4feb7e61dfd7226f78fb1dd2e8268f4e81080a2984cf57ee92ef6c8608c89c6f931860a0cbdd63bcb031 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.8.0": + version: 8.8.0 + resolution: "@graphql-tools/utils@npm:8.8.0" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 631aa690fcf7c01c42829af93f2af1c62d2eeaca99a74f2ae9d6424b7662383391fff37443d61f76fd9f00243b33d0ba0a7df8792c835e1db1fd1b4cee2f32f0 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.9.0": + version: 8.9.0 + resolution: "@graphql-tools/utils@npm:8.9.0" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8d1d8a11722e211dc8723cd3fd7a97fa5401ab22146e4240a0f9d45547792476c34814ff914524578beec961db7b0ff23a6ddff8fe059764537e594cff35c906 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:9.1.1": + version: 9.1.1 + resolution: "@graphql-tools/utils@npm:9.1.1" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 5a5120417c00b0f8a834b69dca9b7496022f8b1ed3719c2cf7de8253ff639ecc0f4a8e2bcaf0193ce44bd59431098180e94bdd96406e9f260e058b16c0e26975 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:9.1.3": + version: 9.1.3 + resolution: "@graphql-tools/utils@npm:9.1.3" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 3b5acd41ae939e2811f496b1676e6219be61a95f3e502bb3783542a67e7703d7709d4ae87fc9deb7284280aea687fb4b0e596f538d7f1cdf5a8827a2952ee994 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:9.1.4": + version: 9.1.4 + resolution: "@graphql-tools/utils@npm:9.1.4" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 467135297a07b21bdd706ca03385354931db85fcf2accc514d69b7415c8cb0fb9e551e4bba0870278eab58bf4de757d354d53c88fd0f55b52d8562dbcba71869 languageName: node linkType: hard @@ -10916,7 +10669,22 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:^9.0.0, @graphql-tools/wrap@npm:^9.3.8": +"@graphql-tools/wrap@npm:9.2.23": + version: 9.2.23 + resolution: "@graphql-tools/wrap@npm:9.2.23" + dependencies: + "@graphql-tools/delegate": 9.0.21 + "@graphql-tools/schema": 9.0.12 + "@graphql-tools/utils": 9.1.3 + 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: 8f4f289d51adb92a7099940892c52b710e61f76d02580a3223e80aaed790d32f769cae33a4afeff398357f33a55267427d9703de6f0bd30ec9ba57ee3bd5ef5c + languageName: node + linkType: hard + +"@graphql-tools/wrap@npm:^9.0.0": version: 9.3.8 resolution: "@graphql-tools/wrap@npm:9.3.8" dependencies: @@ -10931,7 +10699,16 @@ __metadata: languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:3.1.2": +"@graphql-typed-document-node/core@npm:3.1.1": + version: 3.1.1 + resolution: "@graphql-typed-document-node/core@npm:3.1.1" + 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: 87ff4cee308f1075f4472b80f9f9409667979940f8f701e87f0aa35ce5cf104d94b41258ea8192d05a0893475cd0f086a3929a07663b4fe8d0e805a277f07ed5 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:3.1.2, @graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": version: 3.1.2 resolution: "@graphql-typed-document-node/core@npm:3.1.2" peerDependencies: @@ -10940,28 +10717,19 @@ __metadata: languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d - languageName: node - linkType: hard - "@grpc/grpc-js@npm:~1.8.0": - version: 1.8.12 - resolution: "@grpc/grpc-js@npm:1.8.12" + version: 1.8.9 + resolution: "@grpc/grpc-js@npm:1.8.9" dependencies: "@grpc/proto-loader": ^0.7.0 "@types/node": ">=12.12.47" - checksum: bf6135f8c87d6008f42452a7234b9bfa4bb558dd553a77dcd90cd2fbc9c8f01585504788e479a2805e4ab5f0d4e6d3480f7096324b3ab5db9e492e674b8c375a + checksum: 40408af0c0e2b61dbb0fe1c246ae30404c89c601f3e9f9f8447f82d01d8dc0c8befccf2afe9ded07dfc8bd89c927bcbfb5925d4b1ae887299112b2ab549f519c languageName: node linkType: hard "@grpc/proto-loader@npm:^0.7.0": - version: 0.7.5 - resolution: "@grpc/proto-loader@npm:0.7.5" + version: 0.7.2 + resolution: "@grpc/proto-loader@npm:0.7.2" dependencies: "@types/long": ^4.0.1 lodash.camelcase: ^4.3.0 @@ -10970,23 +10738,23 @@ __metadata: yargs: ^16.2.0 bin: proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: ca3a16fc18526a835d006802d15dcf21cb3e2a7a803a988bf34397ebeb07ae94062b3f06db3d1a9b8ec3c40bd96354ca69d9e2ac06ef4c3a74a990d9e55ca2fd + checksum: b6b45b3da96d634886cae149be67c8754de6e6ed03fee974308610b99df417d7b33f12c22b2770755482634193876baeff13469f9d82898e0a5ccf4e5d8b3535 languageName: node linkType: hard "@hapi/hoek@npm:^9.0.0": - version: 9.3.0 - resolution: "@hapi/hoek@npm:9.3.0" - checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + version: 9.0.4 + resolution: "@hapi/hoek@npm:9.0.4" + checksum: a5503ebaad5407e0c99d0656b0bbc3e9ccac9eddc9b9f66e0358a2da9a9dd173c63c9f7c5e46504a05e1fc41d853e9a19617e258d4fcbe1a4be7f9e61da83920 languageName: node linkType: hard "@hapi/topo@npm:^5.0.0": - version: 5.1.0 - resolution: "@hapi/topo@npm:5.1.0" + version: 5.0.0 + resolution: "@hapi/topo@npm:5.0.0" dependencies: "@hapi/hoek": ^9.0.0 - checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + checksum: 8aa81f71696f88d7daeab4547e120e43c6ab78081a4f215eec5103dd858f3122a703512cdacc43aa7e27d99607345165acfeb2ee69e556e63afd50c5c57a36c3 languageName: node linkType: hard @@ -11113,9 +10881,9 @@ __metadata: linkType: soft "@ioredis/commands@npm:^1.1.1": - version: 1.2.0 - resolution: "@ioredis/commands@npm:1.2.0" - checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 + version: 1.1.1 + resolution: "@ioredis/commands@npm:1.1.1" + checksum: 66a9dc315dc077826fef4057c027c77c5af3fba247e6a5156c6847700fec8968a1b180bca344120ad561f5654cda54ed63119f790a041b0a010cacf02421ecff languageName: node linkType: hard @@ -11127,22 +10895,21 @@ __metadata: linkType: hard "@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + version: 1.0.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.0.0" dependencies: camelcase: ^5.3.1 find-up: ^4.1.0 - get-package-type: ^0.1.0 js-yaml: ^3.13.1 resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + checksum: 6671bd5029a30c1215106d12f870a67a0f6d58f1e038173c84e0006f22f6e724eeee9e5ca8ae1bcb3e741d8ec4fd4390fdf92092c66302a3db189e16446c9cfc languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + version: 0.1.2 + resolution: "@istanbuljs/schema@npm:0.1.2" + checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 languageName: node linkType: hard @@ -11155,50 +10922,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/console@npm:29.5.0" +"@jest/console@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/console@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 - checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 + checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 languageName: node linkType: hard -"@jest/core@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/core@npm:29.5.0" +"@jest/core@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/core@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/reporters": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/reporters": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.5.0 - jest-config: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 + jest-changed-files: ^29.4.3 + jest-config: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-resolve-dependencies: ^29.5.0 - jest-runner: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 - jest-watcher: ^29.5.0 + jest-resolve: ^29.4.3 + jest-resolve-dependencies: ^29.4.3 + jest-runner: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + jest-watcher: ^29.4.3 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -11206,7 +10973,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 + checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 languageName: node linkType: hard @@ -11219,15 +10986,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/environment@npm:29.5.0" +"@jest/environment@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/environment@npm:29.4.3" dependencies: - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.5.0 - checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + jest-mock: ^29.4.3 + checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb languageName: node linkType: hard @@ -11240,60 +11007,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect-utils@npm:29.5.0" +"@jest/expect-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect-utils@npm:29.4.3" dependencies: jest-get-type: ^29.4.3 - checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 languageName: node linkType: hard -"@jest/expect@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect@npm:29.5.0" +"@jest/expect@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect@npm:29.4.3" dependencies: - expect: ^29.5.0 - jest-snapshot: ^29.5.0 - checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 + expect: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/fake-timers@npm:29.5.0" +"@jest/fake-timers@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/fake-timers@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 languageName: node linkType: hard -"@jest/globals@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/globals@npm:29.5.0" +"@jest/globals@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/globals@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/types": ^29.5.0 - jest-mock: ^29.5.0 - checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/types": ^29.4.3 + jest-mock: ^29.4.3 + checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 languageName: node linkType: hard -"@jest/reporters@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/reporters@npm:29.5.0" +"@jest/reporters@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/reporters@npm:29.4.3" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -11306,9 +11073,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -11318,7 +11085,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a languageName: node linkType: hard @@ -11351,50 +11118,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-result@npm:29.5.0" +"@jest/test-result@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-result@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/types": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 + checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-sequencer@npm:29.5.0" +"@jest/test-sequencer@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-sequencer@npm:29.4.3" dependencies: - "@jest/test-result": ^29.5.0 + "@jest/test-result": ^29.4.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 slash: ^3.0.0 - checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e + checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e languageName: node linkType: hard -"@jest/transform@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/transform@npm:29.5.0" +"@jest/transform@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/transform@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 + jest-util: ^29.4.3 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d + checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 languageName: node linkType: hard @@ -11425,9 +11192,9 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/types@npm:29.5.0" +"@jest/types@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/types@npm:29.4.3" dependencies: "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 @@ -11435,7 +11202,7 @@ __metadata: "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 + checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac languageName: node linkType: hard @@ -11446,16 +11213,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -11474,7 +11231,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e @@ -11508,7 +11265,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -11526,18 +11283,18 @@ __metadata: linkType: hard "@jsdoc/salty@npm:^0.2.1": - version: 0.2.5 - resolution: "@jsdoc/salty@npm:0.2.5" + version: 0.2.3 + resolution: "@jsdoc/salty@npm:0.2.3" dependencies: lodash: ^4.17.21 - checksum: 16c65d48c340d8f1b892797bdd6ace4f90d916d16bed5023f2a5421240ead20e828031dfb1d07b8eb0e172a62f532c3c005287e723e30ee9a0c8a0d7d2e98953 + checksum: d2b29089e6ba942bf3228087d35379ada248c34f136357d1a4bf5c0350a0d5bde0f90dc68d5e7271728bac1951f85fe749075df0a32a9d584ad5d198492bf7f1 languageName: node linkType: hard "@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 + version: 3.3.1 + resolution: "@juggle/resize-observer@npm:3.3.1" + checksum: ddabc4044276a2cb57d469c4917206c7e39f2463aa8e3430e33e4eda554412afe29c22afa40e6708b49dad5d56768dc83acd68a704b1dcd49a0906bb96b991b2 languageName: node linkType: hard @@ -11589,34 +11346,34 @@ __metadata: linkType: hard "@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.4 - resolution: "@leichtgewicht/ip-codec@npm:2.0.4" - checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d + version: 2.0.3 + resolution: "@leichtgewicht/ip-codec@npm:2.0.3" + checksum: 5b6bee0481c82ac05c748322e34ac68aa01757451b4f49f1ab9cc91e420a1ea4cd0fc4678251e6fa41d566a3e3683cca3e179fb767c87845286863ac98b54f15 languageName: node linkType: hard "@lezer/common@npm:^1.0.0": - version: 1.0.2 - resolution: "@lezer/common@npm:1.0.2" - checksum: bbcc58e07be02652bf0700d2856042ec089d5be0b95893d628b3e18192ade864fac83b61b19653e10b9f1472261a178b12318d934e9004edd5483a577c0db56b + version: 1.0.0 + resolution: "@lezer/common@npm:1.0.0" + checksum: 0ba652b39f9ff073a6a8a3376a74279f2c2d2ccdd4d2bb57c7b607341dbdbf64baf9c23a196314f09349d175623bc73a6a0b6a0eeb2cc63f3a1190fd631f7c31 languageName: node linkType: hard "@lezer/highlight@npm:^1.0.0": - version: 1.1.3 - resolution: "@lezer/highlight@npm:1.1.3" + version: 1.0.0 + resolution: "@lezer/highlight@npm:1.0.0" dependencies: "@lezer/common": ^1.0.0 - checksum: 90ec143ce46b32f6779c3b245f1b5a540d66686939816d3daed8318821acc4bc719466dc222336cfd483bf04a8de4fdc6f279e904cf114d4d9f786f9feccbbd8 + checksum: 9ce6c4ea041598e2500f11610e74163eba0361954df8dbf5d12b96dc8b5ab5da8af2defda7ff5728ca460d49f053a7502f2840361bcd8dcf30e8a23f7c30672a languageName: node linkType: hard "@lezer/lr@npm:^1.0.0": - version: 1.3.3 - resolution: "@lezer/lr@npm:1.3.3" + version: 1.0.0 + resolution: "@lezer/lr@npm:1.0.0" dependencies: "@lezer/common": ^1.0.0 - checksum: 1804074c794005a31c54d80ab72127f19ae5be29bb627c52bc001a57b1af97a9e62732ff13e3aeb7bc53b330202b6bd3747272c64d87f257dbba533e75a183a3 + checksum: 1365a2d1fa0a40815a03a635506a0215475b778d8b8907d274b8ee4b0732fcb7266799b50db7c4517254da1d245c153c348fd0d7b1db93b7d66926b9c538ee43 languageName: node linkType: hard @@ -11647,27 +11404,27 @@ __metadata: linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.10 - resolution: "@mapbox/node-pre-gyp@npm:1.0.10" + version: 1.0.5 + resolution: "@mapbox/node-pre-gyp@npm:1.0.5" dependencies: - detect-libc: ^2.0.0 + detect-libc: ^1.0.3 https-proxy-agent: ^5.0.0 make-dir: ^3.1.0 - node-fetch: ^2.6.7 + node-fetch: ^2.6.1 nopt: ^5.0.0 - npmlog: ^5.0.1 + npmlog: ^4.1.2 rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 + semver: ^7.3.4 + tar: ^6.1.0 bin: node-pre-gyp: bin/node-pre-gyp - checksum: 1a98db05d955b74dad3814679593df293b9194853698f3f5f1ed00ecd93128cdd4b14fb8767fe44ac6981ef05c23effcfdc88710e7c1de99ccb6f647890597c8 + checksum: c1f182a707f5782e47b77a76e9d6a073fb043999cf9ad965bc86732e88db27ad00926d1602918edb7105f05cde67871b84a178ee9844eb742319ade419636675 languageName: node linkType: hard "@material-table/core@npm:^3.1.0": - version: 3.2.5 - resolution: "@material-table/core@npm:3.2.5" + version: 3.1.0 + resolution: "@material-table/core@npm:3.1.0" dependencies: "@babel/runtime": ^7.12.5 "@date-io/date-fns": ^1.3.13 @@ -11680,13 +11437,50 @@ __metadata: prop-types: ^15.7.2 react-beautiful-dnd: ^13.0.0 react-double-scrollbar: 0.0.15 - uuid: ^3.4.0 peerDependencies: "@date-io/core": ^1.3.13 "@material-ui/core": ^4.11.2 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 707e85cfcb8c1cfc8eb78ea6991509879f774081d7a54ad428f702fe00478b6d3707d0fd85f4ad443ebcfac0c0cab79c046c4d5083adcbc767615445667b50cf + checksum: c54114733c061d99424859465c25fdd0c51314f533d37269ee41062195bb34b5bd7eabae8e7b14532b90baee9363d00333b00d1619c01b821a7ee974053c4947 + languageName: node + linkType: hard + +"@material-ui/core@npm:^3.9.3": + version: 3.9.4 + resolution: "@material-ui/core@npm:3.9.4" + dependencies: + "@babel/runtime": ^7.2.0 + "@material-ui/system": ^3.0.0-alpha.0 + "@material-ui/utils": ^3.0.0-alpha.2 + "@types/jss": ^9.5.6 + "@types/react-transition-group": ^2.0.8 + brcast: ^3.0.1 + classnames: ^2.2.5 + csstype: ^2.5.2 + debounce: ^1.1.0 + deepmerge: ^3.0.0 + dom-helpers: ^3.2.1 + hoist-non-react-statics: ^3.2.1 + is-plain-object: ^2.0.4 + jss: ^9.8.7 + jss-camel-case: ^6.0.0 + jss-default-unit: ^8.0.2 + jss-global: ^3.0.0 + jss-nested: ^6.0.1 + jss-props-sort: ^6.0.0 + jss-vendor-prefixer: ^7.0.0 + normalize-scroll-left: ^0.1.2 + popper.js: ^1.14.1 + prop-types: ^15.6.0 + react-event-listener: ^0.6.2 + react-transition-group: ^2.2.1 + recompose: 0.28.0 - 0.30.0 + warning: ^4.0.1 + peerDependencies: + react: ^16.3.0 + react-dom: ^16.3.0 + checksum: c3923bfba4ef4449fbdcd37712ec0d11393ffa396c575a05b5f9530ca1e714028882d39402eb6918dad49f2eb1c53b261cfd0f2dfed494c2dfd96ee335336b44 languageName: node linkType: hard @@ -11848,6 +11642,21 @@ __metadata: languageName: node linkType: hard +"@material-ui/system@npm:^3.0.0-alpha.0": + version: 3.0.0-alpha.2 + resolution: "@material-ui/system@npm:3.0.0-alpha.2" + dependencies: + "@babel/runtime": ^7.2.0 + deepmerge: ^3.0.0 + prop-types: ^15.6.0 + warning: ^4.0.1 + peerDependencies: + react: ^16.3.0 + react-dom: ^16.3.0 + checksum: 3aacb8b4afe2a820844b90905cfcd86ab934108cd719f11713ee46f8a4da30cb8c50e86219e1440b3c6dd333a09d4123cd1990d9c51862c1d56ec2b36e4d7ded + languageName: node + linkType: hard + "@material-ui/system@npm:^4.12.2": version: 4.12.2 resolution: "@material-ui/system@npm:4.12.2" @@ -11891,6 +11700,20 @@ __metadata: languageName: node linkType: hard +"@material-ui/utils@npm:^3.0.0-alpha.2": + version: 3.0.0-alpha.3 + resolution: "@material-ui/utils@npm:3.0.0-alpha.3" + dependencies: + "@babel/runtime": ^7.2.0 + prop-types: ^15.6.0 + react-is: ^16.6.3 + peerDependencies: + react: ^16.3.0 + react-dom: ^16.3.0 + checksum: 589a16245338c374b604a793d9f7a05bd932c9710f78261e46176b74a61d5d308b3e36dab688988ee5177d689c53d9e9da4649eca009ea11d8aac948db27af50 + languageName: node + linkType: hard + "@material-ui/utils@npm:^4.11.2, @material-ui/utils@npm:^4.11.3, @material-ui/utils@npm:^4.7.1": version: 4.11.3 resolution: "@material-ui/utils@npm:4.11.3" @@ -11915,59 +11738,59 @@ __metadata: linkType: hard "@microsoft/api-documenter@npm:^7.19.27": - version: 7.21.6 - resolution: "@microsoft/api-documenter@npm:7.21.6" + version: 7.19.27 + resolution: "@microsoft/api-documenter@npm:7.19.27" dependencies: - "@microsoft/api-extractor-model": 7.26.4 + "@microsoft/api-extractor-model": 7.25.3 "@microsoft/tsdoc": 0.14.2 - "@rushstack/node-core-library": 3.55.2 - "@rushstack/ts-command-line": 4.13.2 + "@rushstack/node-core-library": 3.53.3 + "@rushstack/ts-command-line": 4.13.1 colors: ~1.2.1 js-yaml: ~3.13.1 resolve: ~1.22.1 bin: api-documenter: bin/api-documenter - checksum: 8225e94860d4c3a7197547a3d5c7bc7b95dfeb15cdf7812b78f39cdf21e0277137f4bc0e3e5defab12190fbbed3ba428cf4389ad9c5eb448ace0e7dcb869f909 + checksum: f243f473e1fe58e1cd6e32aad223724b6b621f569276415380abc4845859bf5c23fbe0e370be2a218f362a6c85b01b44b5427336f55800f2ea8bf3f398b0ee41 languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.26.4": - version: 7.26.4 - resolution: "@microsoft/api-extractor-model@npm:7.26.4" +"@microsoft/api-extractor-model@npm:7.25.3": + version: 7.25.3 + resolution: "@microsoft/api-extractor-model@npm:7.25.3" dependencies: "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.55.2 - checksum: 0b27f9b248396422f3044f2472d86c111a6a4d34b4fd2c67d9995e96e5b144ec41ac35dbf2a005f144766814b824518bc42b424d93e3075d3dc1b17c2f8791d6 + "@rushstack/node-core-library": 3.53.3 + checksum: 532ca30606b5649e90035ef70ff46868f6ccc63181e10b783bc5092e580bcb133112b300799b8f71a19da2b79f685a55f7ddbe84c8fe7ad93d71359c1763c521 languageName: node linkType: hard "@microsoft/api-extractor@npm:^7.33.7": - version: 7.34.4 - resolution: "@microsoft/api-extractor@npm:7.34.4" + version: 7.33.7 + resolution: "@microsoft/api-extractor@npm:7.33.7" dependencies: - "@microsoft/api-extractor-model": 7.26.4 + "@microsoft/api-extractor-model": 7.25.3 "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.55.2 - "@rushstack/rig-package": 0.3.18 - "@rushstack/ts-command-line": 4.13.2 + "@rushstack/node-core-library": 3.53.3 + "@rushstack/rig-package": 0.3.17 + "@rushstack/ts-command-line": 4.13.1 colors: ~1.2.1 lodash: ~4.17.15 - resolve: ~1.22.1 + resolve: ~1.17.0 semver: ~7.3.0 source-map: ~0.6.1 typescript: ~4.8.4 bin: api-extractor: bin/api-extractor - checksum: 855a04237e30f425553aab661b77bc0cbeb493510d769691d713e5bfdf02439fa7bc2076750271d154237f8c9d4451b209f30724c9ee2a2c4ea307c5db093d42 + checksum: 3f9034ca8e7bc7a6622cb8ac1f53f7f265ebca529e17f4abb2bef0ca297011cfa0927c0703a819607d974ca79b8f5307371491cfb192788e723cfd316250f9a6 languageName: node linkType: hard "@microsoft/microsoft-graph-types@npm:^2.25.0, @microsoft/microsoft-graph-types@npm:^2.6.0": - version: 2.26.0 - resolution: "@microsoft/microsoft-graph-types@npm:2.26.0" - checksum: a4391e8b9e9573eb577f0d2c38c773340b8f21c56342e672ce0f15469bbecd53acfc49a505ec6b18592b7f0de14e2f9a6477a6015d9837ead757795077d07ad6 + version: 2.25.0 + resolution: "@microsoft/microsoft-graph-types@npm:2.25.0" + checksum: b311385e0a51f827082af5a016f35b1d6cd4d861121e8767b3279ab1a17475977cddbbdcc208abdddf0f953fd6ce4634d3c302e317cf50af4cb6111385347b4f languageName: node linkType: hard @@ -12001,181 +11824,25 @@ __metadata: linkType: hard "@mswjs/interceptors@npm:^0.17.5": - version: 0.17.9 - resolution: "@mswjs/interceptors@npm:0.17.9" + version: 0.17.5 + resolution: "@mswjs/interceptors@npm:0.17.5" dependencies: "@open-draft/until": ^1.0.3 "@types/debug": ^4.1.7 - "@xmldom/xmldom": ^0.8.3 + "@xmldom/xmldom": ^0.7.5 debug: ^4.3.3 headers-polyfill: ^3.1.0 outvariant: ^1.2.1 strict-event-emitter: ^0.2.4 web-encoding: ^1.1.5 - checksum: 4df726cbee93d8baa54ead1ecb11e98124468659f51eb659ef8ead4aca7d6375198baf412ea17d4810fa5f1ee4fa53994702cb3b0b4f6f427a2f0fb890020192 - languageName: node - linkType: hard - -"@mui/base@npm:5.0.0-alpha.121": - version: 5.0.0-alpha.121 - resolution: "@mui/base@npm:5.0.0-alpha.121" - dependencies: - "@babel/runtime": ^7.21.0 - "@emotion/is-prop-valid": ^1.2.0 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.13 - "@popperjs/core": ^2.11.6 - clsx: ^1.2.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b14c9b5ed631058a0ef780a78c5e9129c67338baa4f65a4ab90e23f68410e24d133a9c19f195c136325338b5f444600e43cdd817430b546b73e5371b5d24f32f - languageName: node - linkType: hard - -"@mui/core-downloads-tracker@npm:^5.11.13": - version: 5.11.13 - resolution: "@mui/core-downloads-tracker@npm:5.11.13" - checksum: b8a32c9fc4beac4b596afe5fd3d2aecc2449e59d9e58a7ae6fbe528249fa6eabff3abf9195233eb7a46d523d6f1dc5c4ae95e1a69c287182c81311508c07c2c6 - languageName: node - linkType: hard - -"@mui/material@npm:^5.8.1": - version: 5.11.13 - resolution: "@mui/material@npm:5.11.13" - dependencies: - "@babel/runtime": ^7.21.0 - "@mui/base": 5.0.0-alpha.121 - "@mui/core-downloads-tracker": ^5.11.13 - "@mui/system": ^5.11.13 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.13 - "@types/react-transition-group": ^4.4.5 - clsx: ^1.2.1 - csstype: ^3.1.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - react-transition-group: ^4.4.5 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 008e7e79bff7f193724c80308c9751151fc61dcaa76ce8f96d11473280ec6d78f61c9bdb8d23f0869e78b9359aa0bdd5164953d57a4e2f7160280f5d2a6b0b2d - languageName: node - linkType: hard - -"@mui/private-theming@npm:^5.11.13": - version: 5.11.13 - resolution: "@mui/private-theming@npm:5.11.13" - dependencies: - "@babel/runtime": ^7.21.0 - "@mui/utils": ^5.11.13 - prop-types: ^15.8.1 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 9e5e02c6482945d9fa52e920fb206fb032d1b1df4bb06ea9d032babb53ed171e3b5a7969091072a5d04b0ab52c90f01ba51b90ba27730019d3f7eccc49ca4628 - languageName: node - linkType: hard - -"@mui/styled-engine@npm:^5.11.11": - version: 5.11.11 - resolution: "@mui/styled-engine@npm:5.11.11" - dependencies: - "@babel/runtime": ^7.21.0 - "@emotion/cache": ^11.10.5 - csstype: ^3.1.1 - prop-types: ^15.8.1 - peerDependencies: - "@emotion/react": ^11.4.1 - "@emotion/styled": ^11.3.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - checksum: 63b71aafe79afbe1638a31d9cc1361d11edd5b4a8eacc50da86d83b5db11c9a1713c5744d1533360488aef85afc8d4a5429517447b78b598493c7a7d639390dd - languageName: node - linkType: hard - -"@mui/system@npm:^5.11.13": - version: 5.11.13 - resolution: "@mui/system@npm:5.11.13" - dependencies: - "@babel/runtime": ^7.21.0 - "@mui/private-theming": ^5.11.13 - "@mui/styled-engine": ^5.11.11 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.13 - clsx: ^1.2.1 - csstype: ^3.1.1 - prop-types: ^15.8.1 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: e6f1852ecf3dc901645c096f650950b858f5a5e53fc72ca68a7565e844d0841681c79402c3b63100574d1863b3af88d84b832bc680e8dae3a4a2147c7c9aee0f - languageName: node - linkType: hard - -"@mui/types@npm:^7.2.3": - version: 7.2.3 - resolution: "@mui/types@npm:7.2.3" - peerDependencies: - "@types/react": "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b8511cb78f8df25c8978317ad3fd585c782116b657f2d32233352c09d415c77040e532f41bbe96de6ad46be87138767d3129a9f0de3561900a9a64db7693bce4 - languageName: node - linkType: hard - -"@mui/utils@npm:^5.11.13": - version: 5.11.13 - resolution: "@mui/utils@npm:5.11.13" - dependencies: - "@babel/runtime": ^7.21.0 - "@types/prop-types": ^15.7.5 - "@types/react-is": ^16.7.1 || ^17.0.0 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - react: ^17.0.0 || ^18.0.0 - checksum: 0f403f2635fd5cd39c013b9d4defa2cf1ecc023e35b8c9866d6123792480dcafe47207e43420c10b0d030e64df31e78adfdb8248e2476da27f07d80ed0b44927 + checksum: 0293ccc56c1c85fb7334cd5902574f7df20c26be74d633c83fde64ffd7620f81e08253fe7985c6b5ad3b64c04ad53c3610e9b9c07621518aabd977343026bb2b languageName: node linkType: hard "@n1ru4l/push-pull-async-iterable-iterator@npm:^3.1.0": - version: 3.2.0 - resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.2.0" - checksum: 2c7bdbc6c3d8f0aa05c2e3e80c4a856f766e6113a86198fd0df2448117f7cfa71ee2946f6aa7e745caec6ac04d19a5a61c6c80c6fdbf686d43984b3791f0a04d + version: 3.1.0 + resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.1.0" + checksum: 1762a3c9b8c131e575c375450a408360551ae47b7c481c8115a73e2533ded134cc1d365e02c8c058c281b8b91764041568a0525250346c64fe57825877d4d5ab languageName: node linkType: hard @@ -12303,22 +11970,22 @@ __metadata: linkType: hard "@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" + version: 1.0.0 + resolution: "@npmcli/fs@npm:1.0.0" dependencies: "@gar/promisify": ^1.0.1 semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 + checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" + version: 2.1.0 + resolution: "@npmcli/fs@npm:2.1.0" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b languageName: node linkType: hard @@ -12351,14 +12018,14 @@ __metadata: linkType: hard "@npmcli/map-workspaces@npm:^2.0.0": - version: 2.0.4 - resolution: "@npmcli/map-workspaces@npm:2.0.4" + version: 2.0.0 + resolution: "@npmcli/map-workspaces@npm:2.0.0" dependencies: "@npmcli/name-from-folder": ^1.0.1 - glob: ^8.0.1 - minimatch: ^5.0.1 - read-package-json-fast: ^2.0.3 - checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f + glob: ^7.1.6 + minimatch: ^3.0.4 + read-package-json-fast: ^2.0.1 + checksum: 33707f80cc556aca2d748e228bbe62b6d7ae4a6e95b18b94ca64dd72e9c071ace29e7dd140bce4c2f96a238e40030212ee0ac00dda6026c7b2e23b2f173d75c8 languageName: node linkType: hard @@ -12385,12 +12052,12 @@ __metadata: linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" + version: 2.0.0 + resolution: "@npmcli/move-file@npm:2.0.0" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 languageName: node linkType: hard @@ -12451,22 +12118,22 @@ __metadata: languageName: node linkType: hard -"@octokit/app@npm:^13.1.1": - version: 13.1.2 - resolution: "@octokit/app@npm:13.1.2" +"@octokit/app@npm:^13.0.5": + version: 13.0.5 + resolution: "@octokit/app@npm:13.0.5" dependencies: - "@octokit/auth-app": ^4.0.8 + "@octokit/auth-app": ^4.0.0 "@octokit/auth-unauthenticated": ^3.0.0 "@octokit/core": ^4.0.0 - "@octokit/oauth-app": ^4.0.7 - "@octokit/plugin-paginate-rest": ^6.0.0 - "@octokit/types": ^9.0.0 + "@octokit/oauth-app": ^4.0.4 + "@octokit/plugin-paginate-rest": ^3.0.0 + "@octokit/types": ^6.27.1 "@octokit/webhooks": ^10.0.0 - checksum: e6b2ff1e71cac593831cbef42684e230987db8d688aef418f10cc7833b6e701126d183cdc65489a6d8f90115d10ec0ef2b0a71e7877be96c657aeec991739654 + checksum: 15fdff892f0ec82a1121b94e82eb09aad8a868147efecb0613dc44b06aeb8252f5a4caade2d929644fd7fa8bff2df56f1fb702506574dafa3df8653421a6015a languageName: node linkType: hard -"@octokit/auth-app@npm:^4.0.0, @octokit/auth-app@npm:^4.0.8": +"@octokit/auth-app@npm:^4.0.0": version: 4.0.9 resolution: "@octokit/auth-app@npm:4.0.9" dependencies: @@ -12485,101 +12152,112 @@ __metadata: linkType: hard "@octokit/auth-oauth-app@npm:^5.0.0": - version: 5.0.5 - resolution: "@octokit/auth-oauth-app@npm:5.0.5" + version: 5.0.1 + resolution: "@octokit/auth-oauth-app@npm:5.0.1" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/auth-oauth-user": ^2.0.0 - "@octokit/request": ^6.0.0 - "@octokit/types": ^9.0.0 + "@octokit/request": ^5.6.3 + "@octokit/types": ^6.0.3 "@types/btoa-lite": ^1.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 00f1567d89e1c7004aba451a2beb218da9c6e9ec5be1f973b48936de5f7960803e242a6359a4acd6238958ed62d8d3dcee3b3faafa64431504244dd37a16d418 + checksum: 8e499a071fa0452805e17cdbeb2df58dab9e2ef5d3a2b3d643c529f86d1048ca5cf629fb573b69894d57af0b8528edf13bef669e7fa399511879833840c8ed02 + languageName: node + linkType: hard + +"@octokit/auth-oauth-device@npm:^3.1.1": + version: 3.1.1 + resolution: "@octokit/auth-oauth-device@npm:3.1.1" + dependencies: + "@octokit/oauth-methods": ^1.1.0 + "@octokit/request": ^5.4.14 + "@octokit/types": ^6.10.0 + universal-user-agent: ^6.0.0 + checksum: e769840fb2953ea7b5d677c249a28766137ed0d2960feee9a5a8eb68737d5f5df0630f855d755f5711823fc11b0a8c2d502288e16c2f577da7aacf0f9853faa6 languageName: node linkType: hard "@octokit/auth-oauth-device@npm:^4.0.0": - version: 4.0.4 - resolution: "@octokit/auth-oauth-device@npm:4.0.4" + version: 4.0.0 + resolution: "@octokit/auth-oauth-device@npm:4.0.0" dependencies: "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^9.0.0 + "@octokit/types": ^6.10.0 universal-user-agent: ^6.0.0 - checksum: 245e1fd77684d131793a52a45133ad2514dbb14e5bb6af99eeaccff58662b567327196a721e296ef5734c0988e85a7536ef22bbf04613b302eba595995c5c751 + checksum: 171304f616edf860dcf6980f90bad8bbefb9c093107241791fee7f6d8dcd708dd7c52c601299b37038b53108b874c8d164fffcaa206eecd13b2f9babc60e2f66 languageName: node linkType: hard "@octokit/auth-oauth-user@npm:^2.0.0": - version: 2.1.1 - resolution: "@octokit/auth-oauth-user@npm:2.1.1" + version: 2.0.0 + resolution: "@octokit/auth-oauth-user@npm:2.0.0" dependencies: - "@octokit/auth-oauth-device": ^4.0.0 - "@octokit/oauth-methods": ^2.0.0 + "@octokit/auth-oauth-device": ^3.1.1 + "@octokit/oauth-methods": ^1.1.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^9.0.0 + "@octokit/types": ^6.12.2 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 6dbe5974bbc71340811fcae86cbb60a177302ecc7bb7fdd7954077f5d40a615a4caae839290defb642703a9079752503314265362736a643ca39c4839454908e + checksum: a9a939e9b1ba79793634234393dbcdc9cda33c84cb2b580d7090c1a737a87cd1b8c35fad42573fc1c84c20ffd4f22ba8d6047ab3af2b10f11a1f870236b8a0a9 languageName: node linkType: hard "@octokit/auth-token@npm:^2.4.4": - version: 2.5.0 - resolution: "@octokit/auth-token@npm:2.5.0" + version: 2.4.4 + resolution: "@octokit/auth-token@npm:2.4.4" dependencies: - "@octokit/types": ^6.0.3 - checksum: 45949296c09abcd6beb4c3f69d45b0c1f265f9581d2a9683cf4d1800c4cf8259c2f58d58e44c16c20bffb85a0282a176c0d51f4af300e428b863f27b910e6297 + "@octokit/types": ^6.0.0 + checksum: ee2c90af0f3274b482b6e615f7c200928a8f86b0596ec95f0e49219515578990118bf1db3baff723191b0e2a94d82af376f357df0ba9a2d8d732b77e9b801feb languageName: node linkType: hard "@octokit/auth-token@npm:^3.0.0": - version: 3.0.3 - resolution: "@octokit/auth-token@npm:3.0.3" + version: 3.0.1 + resolution: "@octokit/auth-token@npm:3.0.1" dependencies: - "@octokit/types": ^9.0.0 - checksum: 9b3f569cec1b7e0aa88ab6da68aed4b49b6652261bd957257541fabaf6a4d4ed99f908153cc3dd2fe15b8b0ccaff8caaafaa50bb1a4de3925b0954a47cca1900 + "@octokit/types": ^7.0.0 + checksum: e94ba5abc2f86cf49e8dc0b86225f2fdda6af451328b13a43d68972117d4e3dccba5cb375fa0c5970a43c9392665bf4e4f0ef1332522f76d4fa4b16c5ad6cc1d languageName: node linkType: hard "@octokit/auth-unauthenticated@npm:^3.0.0": - version: 3.0.4 - resolution: "@octokit/auth-unauthenticated@npm:3.0.4" + version: 3.0.0 + resolution: "@octokit/auth-unauthenticated@npm:3.0.0" dependencies: - "@octokit/request-error": ^3.0.0 - "@octokit/types": ^9.0.0 - checksum: 0f0ed5be93fa991d718728d35f609a627263c05ca5e40f1455ee8ec42686c7c84f411ce536a9e2b95d140f736289c7df903e38d2af44593f9dae4185150c5d38 + "@octokit/request-error": ^2.1.0 + "@octokit/types": ^6.0.3 + checksum: 3b2674f6ef363ee1053cf7e978f1efaec39b85b695bdf0c7fe25fbef028a125c7e548e7d67b32f823aef1938a85f32bfe8de0a5b6071bf21ca4bff596bc62a56 languageName: node linkType: hard -"@octokit/core@npm:^3.5.1": - version: 3.6.0 - resolution: "@octokit/core@npm:3.6.0" +"@octokit/core@npm:^3.2.3": + version: 3.2.4 + resolution: "@octokit/core@npm:3.2.4" dependencies: "@octokit/auth-token": ^2.4.4 "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.6.3 - "@octokit/request-error": ^2.0.5 + "@octokit/request": ^5.4.12 "@octokit/types": ^6.0.3 - before-after-hook: ^2.2.0 + before-after-hook: ^2.1.0 universal-user-agent: ^6.0.0 - checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 + checksum: f9d48423e45103c3e759231f0b4671c7d7d481f8fa7ead7316dc3d126465b697fd1a8f7f258950f22f602a58aacb7524b4b9f617d284f74429df7bd51ad67052 languageName: node linkType: hard "@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4, @octokit/core@npm:^4.1.0": - version: 4.2.0 - resolution: "@octokit/core@npm:4.2.0" + version: 4.1.0 + resolution: "@octokit/core@npm:4.1.0" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^9.0.0 + "@octokit/types": ^8.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: 5ac56e7f14b42a5da8d3075a2ae41483521a78bee061a01f4a81d8c0ecd6a684b2e945d66baba0cd1fdf264639deedc3a96d0f32c4d2fc39b49ca10f52f4de39 + checksum: 4e53e02ff3ebe808b74385be0055cc1cce4b548060b20e3f2d5dd1bf7877ff7b6556f11278edc070842bf24aa869f9f59a02638f1b14083eb290b9e297447a2d languageName: node linkType: hard @@ -12595,13 +12273,13 @@ __metadata: linkType: hard "@octokit/endpoint@npm:^7.0.0": - version: 7.0.5 - resolution: "@octokit/endpoint@npm:7.0.5" + version: 7.0.1 + resolution: "@octokit/endpoint@npm:7.0.1" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^7.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 - checksum: 81c9e9eabf50e48940cceff7c4d7fbc9327190296507cfe8a199ea00cd492caf8f18a841caf4e3619828924b481996eb16091826db6b5a649bee44c8718ecaa9 + checksum: a0ff70202e8355845e9462df4e56e7ce4b32f15eddfb169d91e9939b7602fb05c78088b9d1ac9936b1655d61a883c7fe7b08e8f60c100ee05f40844bb4a95097 languageName: node linkType: hard @@ -12627,7 +12305,7 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.0.7, @octokit/oauth-app@npm:^4.2.0": +"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.2.0": version: 4.2.0 resolution: "@octokit/oauth-app@npm:4.2.0" dependencies: @@ -12644,6 +12322,13 @@ __metadata: languageName: node linkType: hard +"@octokit/oauth-authorization-url@npm:^4.3.1": + version: 4.3.1 + resolution: "@octokit/oauth-authorization-url@npm:4.3.1" + checksum: 2d8e78d178d55ac63b2405b8421dc5443a79b3583c4eedd8de8342c7ee48e122c5887361adeb2bddf13f84f49b2ac747b99d035f85747aac165582161dc6a9de + languageName: node + linkType: hard + "@octokit/oauth-authorization-url@npm:^5.0.0": version: 5.0.0 resolution: "@octokit/oauth-authorization-url@npm:5.0.0" @@ -12651,16 +12336,29 @@ __metadata: languageName: node linkType: hard +"@octokit/oauth-methods@npm:^1.1.0": + version: 1.2.2 + resolution: "@octokit/oauth-methods@npm:1.2.2" + dependencies: + "@octokit/oauth-authorization-url": ^4.3.1 + "@octokit/request": ^5.4.14 + "@octokit/request-error": ^2.0.5 + "@octokit/types": ^6.12.2 + btoa-lite: ^1.0.0 + checksum: 36df0292335cc896dbb1f2bcf03b29c693cd270b8213b4b6c291696e3354bdf47f3700a7cdc54bcd9d718be1b7bf00ed1703fd6ba134d33a009d2508c2bd0090 + languageName: node + linkType: hard + "@octokit/oauth-methods@npm:^2.0.0": - version: 2.0.5 - resolution: "@octokit/oauth-methods@npm:2.0.5" + version: 2.0.2 + resolution: "@octokit/oauth-methods@npm:2.0.2" dependencies: "@octokit/oauth-authorization-url": ^5.0.0 - "@octokit/request": ^6.2.3 - "@octokit/request-error": ^3.0.3 - "@octokit/types": ^9.0.0 + "@octokit/request": ^6.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^6.12.2 btoa-lite: ^1.0.0 - checksum: dda36fdc85f1b9a4322e47d88b13183f86fd7e03e66e787ced7be41ea4a1a64f610e2d1a75f82c7ec7ff5c4a76e07a696c2e7232bf944f04fe64aac5c26bd484 + checksum: 008b0fc52b175fee8ff7d0505ff86bf4e4bc1b69d2c3e6dff9f5a3abbdaefc4730d624ebbc8df8366b7639f9543037d1d22a1ffae180a429182721e8a106d737 languageName: node linkType: hard @@ -12671,6 +12369,20 @@ __metadata: languageName: node linkType: hard +"@octokit/openapi-types@npm:^13.0.0": + version: 13.0.1 + resolution: "@octokit/openapi-types@npm:13.0.1" + checksum: a54dcd7af90470737f4e1ff071d1d5b6d963210f31a658bb17ccb618e5d52164ec1e9cfd3ff3e50a28eccda262fbb20a46b65e70697fc483ccb32a49e444718c + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/openapi-types@npm:14.0.0" + checksum: 0a1f8f3be998cd82c5a640e9166d43fd183b33d5d36f5e1a9b81608e94d0da87c01ec46c9988f69cd26585d4e2ffc4d3ec99ee4f75e5fe997fc86dad0aa8293c + languageName: node + linkType: hard + "@octokit/openapi-types@npm:^16.0.0": version: 16.0.0 resolution: "@octokit/openapi-types@npm:16.0.0" @@ -12678,14 +12390,36 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^2.16.8": - version: 2.21.3 - resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" +"@octokit/plugin-paginate-rest@npm:^2.6.2": + version: 2.7.0 + resolution: "@octokit/plugin-paginate-rest@npm:2.7.0" dependencies: - "@octokit/types": ^6.40.0 + "@octokit/types": ^6.0.1 peerDependencies: "@octokit/core": ">=2" - checksum: acf31de2ba4021bceec7ff49c5b0e25309fc3c009d407f153f928ddf436ab66cd4217344138378d5523f5fb233896e1db58c9c7b3ffd9612a66d760bc5d319ed + checksum: 68a61e6acb07965a5bd8be5302aeaa46d8e9038e65fa047a85f834fc25c4773f085a878e73eac79c072cb0ace7e4e5187c8549ab6c6d749e620e0f341ee83835 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^3.0.0": + version: 3.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:3.0.0" + dependencies: + "@octokit/types": ^6.39.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: 1d2c900254f3dcd43f7ba69dfd12ff63f93a0d39a1bf542b1d0f006e95da4924ae0a26044c864ad7fb0309047f44becaf76293aae334d14c946910d65edd2523 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:4.0.0" + dependencies: + "@octokit/types": ^7.0.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: a3fbc1d540cc919df8935dea88b36d59ae85f417713476d8679f1cf8b733cfb44b96d3020094bd7f8daa7b84e4ac9b8403c1cdad323289d586fdb2ed1dcae7c0 languageName: node linkType: hard @@ -12700,7 +12434,7 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-request-log@npm:^1.0.4": +"@octokit/plugin-request-log@npm:^1.0.2, @octokit/plugin-request-log@npm:^1.0.4": version: 1.0.4 resolution: "@octokit/plugin-request-log@npm:1.0.4" peerDependencies: @@ -12709,15 +12443,27 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0": - version: 5.16.2 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" +"@octokit/plugin-rest-endpoint-methods@npm:5.3.1": + version: 5.3.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.3.1" dependencies: - "@octokit/types": ^6.39.0 + "@octokit/types": ^6.16.2 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 30fcc50c335d1093f03573d9fa3a4b7d027fc98b215c43e07e82ee8dabfa0af0cf1b963feb542312ae32d897a2f68dc671577206f30850215517bebedc5a2c73 + checksum: 7bc7e294dd66af4b2692ce93d28544f2c3473b4fbe5d935cbe6f7765339e5a83bb12977a403af5d093e8fd038fa707bfd68f81b9d38d4038391de64be73d003c + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": + version: 6.7.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.7.0" + dependencies: + "@octokit/types": ^8.0.0 + deprecation: ^2.3.1 + peerDependencies: + "@octokit/core": ">=3" + checksum: 513c6c0717d08f3e85848029bd700412b7d9787750f78cc79a3dede356e94b238bf8a518b108f556a7efe626871720dd0466de9f31091578ea4e0f5a016f0ae7 languageName: node linkType: hard @@ -12733,27 +12479,25 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-retry@npm:^4.0.3": - version: 4.1.3 - resolution: "@octokit/plugin-retry@npm:4.1.3" +"@octokit/plugin-retry@npm:^3.0.9": + version: 3.0.9 + resolution: "@octokit/plugin-retry@npm:3.0.9" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^6.0.3 bottleneck: ^2.15.3 - peerDependencies: - "@octokit/core": ">=3" - checksum: f9ed5869be23dddcf1ee896ce996e46a412a586259b55612ba44c82cdeed91436102e6e3ec57db879bd91a4446dcafbaa94632e4e059c6af56d9cca9b163eacb + checksum: 5744780d308dd2f2b8174264604a9f8ea977374256f5eaf0314e5181c32f96ec53a3cfcee67bf1b48dc7eed401ebefebd2fa744b41cf03103affac92f397a874 languageName: node linkType: hard -"@octokit/plugin-throttling@npm:^5.0.0": - version: 5.0.1 - resolution: "@octokit/plugin-throttling@npm:5.0.1" +"@octokit/plugin-throttling@npm:^4.0.1": + version: 4.0.1 + resolution: "@octokit/plugin-throttling@npm:4.0.1" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^6.0.1 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ^4.0.0 - checksum: 11f54c4791ae75055df22184687788c754914da33b383bb908127f59556012874776e6a597b97d9af2102c5e3b19d13287e8c0b030b5bc42d672c15f383b0132 + checksum: 7642e5968922b8348510782e7675189810d6ed6cb3fc6ae231fd4614ebdb011759628c8f5fbca40f37e5a2cf69898b8b58cdb7722ae75da59012430c6cf7b4d8 languageName: node linkType: hard @@ -12768,18 +12512,18 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:^3.0.0, @octokit/request-error@npm:^3.0.3": - version: 3.0.3 - resolution: "@octokit/request-error@npm:3.0.3" +"@octokit/request-error@npm:^3.0.0": + version: 3.0.1 + resolution: "@octokit/request-error@npm:3.0.1" dependencies: - "@octokit/types": ^9.0.0 + "@octokit/types": ^7.0.0 deprecation: ^2.0.0 once: ^1.4.0 - checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0 + checksum: ae386b5181b3cb66b844047a21d062b683cd7ec4daf70cb9868406c1a51608a72d683955e692c7cc6237d66a09b12c6bcf102a712985da68bcedcc3820117e75 languageName: node linkType: hard -"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": +"@octokit/request@npm:^5.4.12, @octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" dependencies: @@ -12793,7 +12537,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^6.0.0, @octokit/request@npm:^6.2.3": +"@octokit/request@npm:^6.0.0": version: 6.2.3 resolution: "@octokit/request@npm:6.2.3" dependencies: @@ -12808,14 +12552,14 @@ __metadata: linkType: hard "@octokit/rest@npm:^18.5.3": - version: 18.12.0 - resolution: "@octokit/rest@npm:18.12.0" + version: 18.5.6 + resolution: "@octokit/rest@npm:18.5.6" dependencies: - "@octokit/core": ^3.5.1 - "@octokit/plugin-paginate-rest": ^2.16.8 - "@octokit/plugin-request-log": ^1.0.4 - "@octokit/plugin-rest-endpoint-methods": ^5.12.0 - checksum: c18bd6676a60b66819b016b0f969fcd04d8dfa04d01b7af9af9a7410ff028c621c995185e29454c23c47906da506c1e01620711259989a964ebbfd9106f5b715 + "@octokit/core": ^3.2.3 + "@octokit/plugin-paginate-rest": ^2.6.2 + "@octokit/plugin-request-log": ^1.0.2 + "@octokit/plugin-rest-endpoint-methods": 5.3.1 + checksum: f8db5a06692515413b0124edec2b1d77b35bac99659d4b7b9df2aee01b6b145d7fd6deed602addc79d69429095f1d2fee627e9230cc108f1a389041ab270cb91 languageName: node linkType: hard @@ -12840,7 +12584,7 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0, @octokit/types@npm:^6.8.2": +"@octokit/types@npm:^6.0.0, @octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.16.2, @octokit/types@npm:^6.27.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.8.2": version: 6.41.0 resolution: "@octokit/types@npm:6.41.0" dependencies: @@ -12849,6 +12593,24 @@ __metadata: languageName: node linkType: hard +"@octokit/types@npm:^7.0.0": + version: 7.0.0 + resolution: "@octokit/types@npm:7.0.0" + dependencies: + "@octokit/openapi-types": ^13.0.0 + checksum: 54d714c1e8296da7ff68eec6a72061313a3f4836793fe844a120aa8604336e03423c631d6316fa2ab00c34aae7a4be0ecb6aed192d04f891084e00674d176fcb + languageName: node + linkType: hard + +"@octokit/types@npm:^8.0.0": + version: 8.0.0 + resolution: "@octokit/types@npm:8.0.0" + dependencies: + "@octokit/openapi-types": ^14.0.0 + checksum: 1a0197b2c4c522ac90f145e02b3f8cb048a47f71c2c6bdbf021a03db7dd30ca92a899c0186acb401337f218efe44e60d33cc1cc68715b622bb75bc1a4e79515d + languageName: node + linkType: hard + "@octokit/types@npm:^9.0.0": version: 9.0.0 resolution: "@octokit/types@npm:9.0.0" @@ -12892,11 +12654,12 @@ __metadata: linkType: hard "@openapi-contrib/openapi-schema-to-json-schema@npm:^3.0.0": - version: 3.2.0 - resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.2.0" + version: 3.0.3 + resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.0.3" dependencies: fast-deep-equal: ^3.1.3 - checksum: c47cbf85bee3e38e06a627efbbdffd78c95cdadebf6d935092c8ff616e31a69fcfd739a5d9cca5b4b2c6aef49f8dbced6c300eac1f8ade66b3fab403df19ccb2 + lodash.clonedeep: ^4.5.0 + checksum: 2296925669a4a78548f8ba055fbfc1f292274572ecb082d1465b6a6255799f43f0538880009bf4010b2fa9e7c84e97f8aa04d22b330fd469677c594ed98df314 languageName: node linkType: hard @@ -12982,14 +12745,14 @@ __metadata: languageName: node linkType: hard -"@peculiar/asn1-schema@npm:^2.1.6, @peculiar/asn1-schema@npm:^2.3.0": - version: 2.3.6 - resolution: "@peculiar/asn1-schema@npm:2.3.6" +"@peculiar/asn1-schema@npm:^2.1.6": + version: 2.2.0 + resolution: "@peculiar/asn1-schema@npm:2.2.0" dependencies: asn1js: ^3.0.5 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: fc09387c6e3dea07fca21b54ea8c71ce3ec0f8c92377237e51aef729f0c2df92781aa7a18a546a6fe809519faeaa222df576ec21a35c6095037a78677204a55b + checksum: 83c8b4e82d8f829ece3ad1aa96d4e2f0c5f16a5255bb066a1174bd020b031d456469d82786a561e5758af0e56d0391ae5e8c6b3657e73d438f49998ff3cf471f languageName: node linkType: hard @@ -13003,15 +12766,15 @@ __metadata: linkType: hard "@peculiar/webcrypto@npm:^1.4.0": - version: 1.4.1 - resolution: "@peculiar/webcrypto@npm:1.4.1" + version: 1.4.0 + resolution: "@peculiar/webcrypto@npm:1.4.0" dependencies: - "@peculiar/asn1-schema": ^2.3.0 + "@peculiar/asn1-schema": ^2.1.6 "@peculiar/json-schema": ^1.1.12 pvtsutils: ^1.3.2 - tslib: ^2.4.1 + tslib: ^2.4.0 webcrypto-core: ^1.7.4 - checksum: cfcd49f6bd199016de83445f1786b17c49d02aee74b400e7e03ba3bc3707457bdebd23bbaba0e2ff3becdcd769d71b79ec64ae35e0acb80b4ab3ed6326ab111c + checksum: 3a7a3c8f253170436f353a61b807d2e2e7a686e6a9607487fde6459ddfff34c8000414287a6cd904bd81e002ce4564811b3c7789a0fd932cf015df6c4002fd02 languageName: node linkType: hard @@ -13054,13 +12817,6 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.11.6": - version: 2.11.6 - resolution: "@popperjs/core@npm:2.11.6" - checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0 - languageName: node - linkType: hard - "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -13157,6 +12913,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.3.2": + version: 1.3.2 + resolution: "@remix-run/router@npm:1.3.2" + checksum: ee2108b87d4a1241cdea137dd7e1741ee679228bd33fd81e22a6bb2940f81186cefe9a85e26d60cc49bbcc1bdbc57d1954b7d4d62f8a51ef69feddfc899f55fa + languageName: node + linkType: hard + "@remix-run/router@npm:1.4.0": version: 1.4.0 resolution: "@remix-run/router@npm:1.4.0" @@ -13164,7 +12927,7 @@ __metadata: languageName: node linkType: hard -"@repeaterjs/repeater@npm:3.0.4, @repeaterjs/repeater@npm:^3.0.4": +"@repeaterjs/repeater@npm:3.0.4": version: 3.0.4 resolution: "@repeaterjs/repeater@npm:3.0.4" checksum: cca0db3e802bc26fcce0b4a574074d9956da53bf43094de03c0e4732d05e13441279a92f0b96e2a7a39da50933684947a138c1213406eaafe39cfd4683d6c0df @@ -13313,14 +13076,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.4 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.4" + version: 2.5.2 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.2" dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/plugin-catalog-react": ^1.3.0 - "@backstage/plugin-home": ^0.4.31 + "@backstage/catalog-model": ^1.1.5 + "@backstage/core-components": ^0.12.3 + "@backstage/core-plugin-api": ^1.3.0 + "@backstage/plugin-catalog-react": ^1.2.4 + "@backstage/plugin-home": ^0.4.30 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 @@ -13337,7 +13100,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 9e93586a68c2a2f6481138e0ad2e27b170395cc53ed63c682b7ea4f74ce1037eb447efdef18c463d2a9eb96bf00b9354ec562b8913914c7d322ed047c906005f + checksum: dd8c3301867cd8ccaf094eb62c64b2923c4614e9ba384249c5ddb80b6375bc7f5e8828a7fc12f9e7785ca230948895e03a9c1521be45f69797f663b28cecc3c7 languageName: node linkType: hard @@ -13471,52 +13234,48 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.55.2": - version: 3.55.2 - resolution: "@rushstack/node-core-library@npm:3.55.2" +"@rushstack/node-core-library@npm:3.53.3": + version: 3.53.3 + resolution: "@rushstack/node-core-library@npm:3.53.3" dependencies: + "@types/node": 12.20.24 colors: ~1.2.1 fs-extra: ~7.0.1 import-lazy: ~4.0.0 jju: ~1.4.0 - resolve: ~1.22.1 + resolve: ~1.17.0 semver: ~7.3.0 z-schema: ~5.0.2 - peerDependencies: - "@types/node": "*" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: b6b289315cd6a3544471f534405479b7c80f3906b7506590d5eb83a605a0a5b65861bf678f3e6c2277c8db116b8e05f8e7b6864fdc75e0f1514c9ff224b83fe6 + checksum: 265d18e176079b8e90cd507e5d4d45f3afb1f811efdf491ea26f25f0397b77c0e9d42065166bf79a04503426c844ea92034cd3f8d5961b2a116de82e45cf6d6a languageName: node linkType: hard -"@rushstack/rig-package@npm:0.3.18": - version: 0.3.18 - resolution: "@rushstack/rig-package@npm:0.3.18" +"@rushstack/rig-package@npm:0.3.17": + version: 0.3.17 + resolution: "@rushstack/rig-package@npm:0.3.17" dependencies: - resolve: ~1.22.1 + resolve: ~1.17.0 strip-json-comments: ~3.1.1 - checksum: 41e719fb14d99e0f79093523fede051dba2be5f53d63d5ae45c2ea1b8448e298e0303d8453be3f9ac5e8bb99e3dcf3ddbe4cc59d9be5eddb914286acbdd0a2f3 + checksum: 54eeea471c85b547575d7efc84fad3c9588f10106e2bfd8cd022bccb02c2fb0bf8ff597fab9114450b3c262abab0f0a4e52dd074bfd120e850b95037cd7b3102 languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.13.2": - version: 4.13.2 - resolution: "@rushstack/ts-command-line@npm:4.13.2" +"@rushstack/ts-command-line@npm:4.13.1": + version: 4.13.1 + resolution: "@rushstack/ts-command-line@npm:4.13.1" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: 3938e533e08d5cf4007a651d1aab658a7a60d6136a56414e2370b64434657a5d5a9eff442da4ddc260d5e6dc90f82428de64dbcfa1285e9ae176629f7fcd821d + checksum: fea24b2549ecb7d3409b6b485d7c58bf8af8f8d1dd19c43a6b3532c45579ffc546bc4533b5db29c91ae1716581fdee4cb725f6a81ecb300e902ef06600e59f1d languageName: node linkType: hard "@sagold/json-pointer@npm:^5.0.0": - version: 5.0.1 - resolution: "@sagold/json-pointer@npm:5.0.1" - checksum: a83eaf52391d589e346877c27a092130aeec72dc2566dde05f1c0c57876d8a5478b6f89cb70572d664f4d944f9e8262abc0832c338f74c388b4e8997a209dba8 + version: 5.0.0 + resolution: "@sagold/json-pointer@npm:5.0.0" + checksum: 0a087ff25e28d0c49b56566a14d6186ae0ce9fe538569eb7756c1a70989f2794dbc6f0834b5d2f2a0a79b6f0e3096eb05558664d5ff038daba5a46cb5e752e1a languageName: node linkType: hard @@ -13550,7 +13309,7 @@ __metadata: languageName: node linkType: hard -"@sideway/formula@npm:^3.0.1": +"@sideway/formula@npm:^3.0.0": version: 3.0.1 resolution: "@sideway/formula@npm:3.0.1" checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a @@ -13565,32 +13324,32 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 + version: 0.24.42 + resolution: "@sinclair/typebox@npm:0.24.42" + checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 languageName: node linkType: hard "@sinclair/typebox@npm:^0.25.16": - version: 0.25.24 - resolution: "@sinclair/typebox@npm:0.25.24" - checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 + version: 0.25.23 + resolution: "@sinclair/typebox@npm:0.25.23" + checksum: 5720daec6e604be9ac849e6361cfa30d19f4d01934c9b79a3a5f5290dfcefaa300192ea0d384bb5dd0104432d88447bbad27adfacdf0b0f042b510bf15fbd5db languageName: node linkType: hard "@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + version: 4.0.0 + resolution: "@sindresorhus/is@npm:4.0.0" + checksum: 0e010f79820099b0a7cb8e1c982f822fc4407ff65d2898708b04e1675949eb6885a470fd7274843f83b84e0d3b74fe0de1ff9291d66553228d68202daca5bbaf languageName: node linkType: hard "@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" + version: 1.8.3 + resolution: "@sinonjs/commons@npm:1.8.3" dependencies: type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d + checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 languageName: node linkType: hard @@ -13612,6 +13371,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^7.0.4": + version: 7.1.2 + resolution: "@sinonjs/fake-timers@npm:7.1.2" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: c84773d7973edad5511a31d2cc75023447b5cf714a84de9bb50eda45dda88a0d3bd2c30bf6e6e936da50a048d5352e2151c694e13e59b97d187ba1f329e9a00c + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^9.1.2": version: 9.1.2 resolution: "@sinonjs/fake-timers@npm:9.1.2" @@ -13633,60 +13401,60 @@ __metadata: linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab + version: 0.7.1 + resolution: "@sinonjs/text-encoding@npm:0.7.1" + checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 languageName: node linkType: hard "@spotify/eslint-config-base@npm:^14.0.0": - version: 14.1.6 - resolution: "@spotify/eslint-config-base@npm:14.1.6" + version: 14.0.1 + resolution: "@spotify/eslint-config-base@npm:14.0.1" peerDependencies: eslint: ">=7.x" - checksum: be620e179dcdb3e95e5825c133193a7194db1829badbdfcf334dd88cbdccf5cc9889facb6a3d3bb4956f7568ded4dd419d3bd3f9c4e6db2c0da977795461bcba + checksum: 8893e7c903c07ede7f3a03b5b6af03b65d2f334615d30fecb527ce4d888970168b73dbaef43275f9ece9e7b0193e13e6807e506507b32bdde9b64000cc52c8b1 languageName: node linkType: hard "@spotify/eslint-config-react@npm:^14.0.0": - version: 14.1.6 - resolution: "@spotify/eslint-config-react@npm:14.1.6" + version: 14.0.1 + resolution: "@spotify/eslint-config-react@npm:14.0.1" peerDependencies: eslint: ">=8.x" eslint-plugin-jsx-a11y: 6.x eslint-plugin-react: ">=7.7.0 <8" eslint-plugin-react-hooks: ^4.0.0 - checksum: e85a52eec656ab7013c7ab8726c4d920b6681a9cc0853276700f340af58675dc1ccf19ec16a81145b1966d0f5aaaf8aaf5c95f19e3cd6d2cf4669d08261ec3ba + checksum: d8545c3c3967bb8b923bd55dad2c50b5e2eb6d716cd9dcbbfa32417c3a6e786537ee3263ebedae99bd45abe3378acb0879c9644a729820ea61dd5d9e45e55465 languageName: node linkType: hard "@spotify/eslint-config-typescript@npm:^14.0.0": - version: 14.1.6 - resolution: "@spotify/eslint-config-typescript@npm:14.1.6" + version: 14.0.1 + resolution: "@spotify/eslint-config-typescript@npm:14.0.1" peerDependencies: "@typescript-eslint/eslint-plugin": ">=5" "@typescript-eslint/parser": ">=5" eslint: ">=8.x" - checksum: cf29a2c356d40a1e6481b1a87525509127ee7b19cbd40c5f05d57081a3df73735c041117aa0ea3a41c4a6077216c88c98bfaadcd74836e30495f1ffc937321d8 + checksum: faf3ab89880e626d388e9ae212dd3486d6f91ca4d079020066c22d44c3df215dc61439c4e65ef3fc4eb5c3ea9893d5b504a2d251694d7a333d8803991349535b languageName: node linkType: hard "@spotify/eslint-plugin@npm:^14.1.3": - version: 14.1.6 - resolution: "@spotify/eslint-plugin@npm:14.1.6" + version: 14.1.3 + resolution: "@spotify/eslint-plugin@npm:14.1.3" peerDependencies: "@typescript-eslint/parser": ^5.13.0 eslint: ^8.10.0 - checksum: 55d844c5733c929a6218f9aae3454556b6090102ae7a7461082dd14ea98485e48e936046f815267b62f7b054c7faa8edd8bde7d4e092d92f810d8eb7246b29bc + checksum: 788f5d9aab6f7b6c0ad7e414ebd5f4504f058f26a769dc4bcd0088dd8e6d9e5334965c8f6fffcf5b7ed52dbe25de0dc7bba403bcffa79b6d94c7ba3094757b5f languageName: node linkType: hard "@spotify/prettier-config@npm:^14.0.0": - version: 14.1.6 - resolution: "@spotify/prettier-config@npm:14.1.6" + version: 14.0.1 + resolution: "@spotify/prettier-config@npm:14.0.1" peerDependencies: prettier: 2.x - checksum: 0456825576225e33308752b2940ba22e00afd205e9d23802a1b8bf0ce4e8dce9944e433a84f180e63bb64d8d535c3cfb981fdd031a2b8a936aeb594c2bc2f3ea + checksum: 07fb33ff3bb4678ab3bfe2f6f5da2cfb366de427c544e94178f5f8c75b3708282f7ea1a4344404e4ad1bbc5b38fccfde10795528cdfe7f61a8afed62076f8fe9 languageName: node linkType: hard @@ -13701,16 +13469,16 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" +"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: cab83832830a57735329ed68f67c03b57ca21fa037b0134847b0c5c0ef4beca89956d7dacfbf7b2a10fd901e7009e877512086db2ee918b8c69aee7742ae32c0 + checksum: f65ca26905240b685929a7766411618700bda233673cebd74eb9a8da45af8ce8e0536074a178b37762cd23db8868db494e15067e74b2d73e377b2d247895d054 languageName: node linkType: hard -"@svgr/babel-plugin-remove-jsx-attribute@npm:*": +"@svgr/babel-plugin-remove-jsx-attribute@npm:^6.5.0": version: 6.5.0 resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:6.5.0" peerDependencies: @@ -13719,7 +13487,7 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:*": +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^6.5.0": version: 6.5.0 resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:6.5.0" peerDependencies: @@ -13728,514 +13496,149 @@ __metadata: languageName: node linkType: hard -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.1" +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b7d2125758e766e1ebd14b92216b800bdc976959bc696dbfa1e28682919147c1df4bb8b1b5fd037d7a83026e27e681fea3b8d3741af8d3cf4c9dfa3d412125df + checksum: e8e77e4026f2e2f910a3495be8bd283f413865449b6e2f639318d76edc05b373e18d86e1210c808038a5477ae273858d3b313b2a7df8e6929450ed902c1441bc languageName: node linkType: hard -"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.1" +"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0fd42ebf127ae9163ef341e84972daa99bdcb9e6ed3f83aabd95ee173fddc43e40e02fa847fbc0a1058cf5549f72b7960a2c5e22c3e4ac18f7e3ac81277852ae + checksum: 55f36f6e3ef986f2d0ba4cd9e2ebf6b17d68c5c2cf98821abc0dbd551d4fd7d92cf3cda83a91898d988ad7118a9768042ac5afe534ad594bdac024fe0009bae1 languageName: node linkType: hard -"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.1" +"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c1550ee9f548526fa66fd171e3ffb5696bfc4e4cd108a631d39db492c7410dc10bba4eb5a190e9df824bf806130ccc586ae7d2e43c547e6a4f93bbb29a18f344 + checksum: af6508c042a7d256081c09520e79e2d3278ecf361a74707dcc1bc61713845ec7fd6eeb52bbc3a2e114ecbbb1df49b16674caf8b97345570a6c5f0a631118cb5e languageName: node linkType: hard -"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.1" +"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4c924af22b948b812629e80efb90ad1ec8faae26a232d8ca8a06b46b53e966a2c415a57806a3ff0ea806a622612e546422719b69ec6839717a7755dac19171d9 + checksum: 0e7f1d85a25ef0c49b2bfacdc9ae80520959a0925304e030edc739684c75d41a7d4173ac4a1cd6ec8dee8bc618e7465da49ae59dd5638b87e75dccee05498f4c languageName: node linkType: hard -"@svgr/babel-plugin-transform-svg-component@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.1" +"@svgr/babel-plugin-transform-svg-component@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e496bb5ee871feb6bcab250b6e067322da7dd5c9c2b530b41e5586fe090f86611339b49d0a909c334d9b24cbca0fa755c949a2526c6ad03c6b5885666874cf5f + checksum: 8613ef673b7e881d661057188729419b9a9d0b3802247954283293698a9910d76414b4fe106b5255e06fb2329c41f9da147ac5e153149b3b82024e06ab87a2b3 languageName: node linkType: hard -"@svgr/babel-preset@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-preset@npm:6.5.1" +"@svgr/babel-preset@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/babel-preset@npm:6.5.0" dependencies: - "@svgr/babel-plugin-add-jsx-attribute": ^6.5.1 - "@svgr/babel-plugin-remove-jsx-attribute": "*" - "@svgr/babel-plugin-remove-jsx-empty-expression": "*" - "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.1 - "@svgr/babel-plugin-svg-dynamic-title": ^6.5.1 - "@svgr/babel-plugin-svg-em-dimensions": ^6.5.1 - "@svgr/babel-plugin-transform-react-native-svg": ^6.5.1 - "@svgr/babel-plugin-transform-svg-component": ^6.5.1 + "@svgr/babel-plugin-add-jsx-attribute": ^6.5.0 + "@svgr/babel-plugin-remove-jsx-attribute": ^6.5.0 + "@svgr/babel-plugin-remove-jsx-empty-expression": ^6.5.0 + "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.0 + "@svgr/babel-plugin-svg-dynamic-title": ^6.5.0 + "@svgr/babel-plugin-svg-em-dimensions": ^6.5.0 + "@svgr/babel-plugin-transform-react-native-svg": ^6.5.0 + "@svgr/babel-plugin-transform-svg-component": ^6.5.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9f124be39a8e64f909162f925b3a63ddaa5a342a5e24fc0b7f7d9d4d7f7e3b916596c754fb557dc259928399cad5366a27cb231627a0d2dcc4b13ac521cf05af + checksum: 987f6eafebc347b061bfab7d15f87b48601eecdf7cde9ff0e4e99c44acad3bb126e554996b0c48f1ccf24d5e6785226b1662850bb4e2182927b2ded24f226ae8 languageName: node linkType: hard -"@svgr/core@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/core@npm:6.5.1" +"@svgr/core@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/core@npm:6.5.0" dependencies: - "@babel/core": ^7.19.6 - "@svgr/babel-preset": ^6.5.1 - "@svgr/plugin-jsx": ^6.5.1 + "@babel/core": ^7.18.5 + "@svgr/babel-preset": ^6.5.0 + "@svgr/plugin-jsx": ^6.5.0 camelcase: ^6.2.0 cosmiconfig: ^7.0.1 - checksum: fd6d6d5da5aeb956703310480b626c1fb3e3973ad9fe8025efc1dcf3d895f857b70d100c63cf32cebb20eb83c9607bafa464c9436e18fe6fe4fafdc73ed6b1a5 + checksum: 235747a1d1c0e8918aa16da7e44c9dd2024a9ebaadc6bdff00001756d604566437b25e42d61e521f6f38a32c386d44a18dee57a77a92aedef1116f2410b504e6 languageName: node linkType: hard -"@svgr/hast-util-to-babel-ast@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.1" +"@svgr/hast-util-to-babel-ast@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.0" dependencies: - "@babel/types": ^7.20.0 - entities: ^4.4.0 - checksum: 37923cce1b3f4e2039077b0c570b6edbabe37d1cf1a6ee35e71e0fe00f9cffac450eec45e9720b1010418131a999cb0047331ba1b6d1d2c69af1b92ac785aacf + "@babel/types": ^7.18.4 + entities: ^4.3.0 + checksum: 77dcadb467eded0ce5cba71dbd4cbb4c7ffd7961f351828a4066ab6105d466d55533506bc3bc7db78f938af6692008ceda9fa2ea3dda75fd54e2b736b81ae458 languageName: node linkType: hard -"@svgr/plugin-jsx@npm:6.5.x, @svgr/plugin-jsx@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/plugin-jsx@npm:6.5.1" +"@svgr/plugin-jsx@npm:6.5.x, @svgr/plugin-jsx@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/plugin-jsx@npm:6.5.0" dependencies: - "@babel/core": ^7.19.6 - "@svgr/babel-preset": ^6.5.1 - "@svgr/hast-util-to-babel-ast": ^6.5.1 + "@babel/core": ^7.18.5 + "@svgr/babel-preset": ^6.5.0 + "@svgr/hast-util-to-babel-ast": ^6.5.0 svg-parser: ^2.0.4 peerDependencies: "@svgr/core": ^6.0.0 - checksum: 42f22847a6bdf930514d7bedd3c5e1fd8d53eb3594779f9db16cb94c762425907c375cd8ec789114e100a4d38068aca6c7ab5efea4c612fba63f0630c44cc859 + checksum: dec7cd47f16cc1b23dd37e333594d596401e7e49825545f4d808c74fe0a3a12a56c1bd55f507794addd6675e1b81dd58346bac4f752daa04016d3edac03e1625 languageName: node linkType: hard -"@svgr/plugin-svgo@npm:6.5.x, @svgr/plugin-svgo@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/plugin-svgo@npm:6.5.1" +"@svgr/plugin-svgo@npm:6.5.x, @svgr/plugin-svgo@npm:^6.5.0": + version: 6.5.0 + resolution: "@svgr/plugin-svgo@npm:6.5.0" dependencies: cosmiconfig: ^7.0.1 deepmerge: ^4.2.2 svgo: ^2.8.0 peerDependencies: - "@svgr/core": "*" - checksum: cd2833530ac0485221adc2146fd992ab20d79f4b12eebcd45fa859721dd779483158e11dfd9a534858fe468416b9412416e25cbe07ac7932c44ed5fa2021c72e + "@svgr/core": ^6.0.0 + checksum: d1a0ee79283a997aa4af2c2848f502dff71a9fd99623b47b0b2476effd7fe53077456afd1ff54283512a7dd10f30df91736f5d20eb931a462b34f281c90347e0 languageName: node linkType: hard "@svgr/rollup@npm:6.5.x": - version: 6.5.1 - resolution: "@svgr/rollup@npm:6.5.1" + version: 6.5.0 + resolution: "@svgr/rollup@npm:6.5.0" dependencies: - "@babel/core": ^7.19.6 - "@babel/plugin-transform-react-constant-elements": ^7.18.12 - "@babel/preset-env": ^7.19.4 - "@babel/preset-react": ^7.18.6 - "@babel/preset-typescript": ^7.18.6 + "@babel/core": ^7.18.5 + "@babel/plugin-transform-react-constant-elements": ^7.17.12 + "@babel/preset-env": ^7.18.2 + "@babel/preset-react": ^7.17.12 + "@babel/preset-typescript": ^7.17.12 "@rollup/pluginutils": ^4.2.1 - "@svgr/core": ^6.5.1 - "@svgr/plugin-jsx": ^6.5.1 - "@svgr/plugin-svgo": ^6.5.1 - checksum: 809198a655c280b434d762829aeab0c48e545daaa7a520ac87d5e7cfe96402eb4d0c01f8b25959fcc37a2ce4aa1a53c9e1c4ccb1206cd5833883a34db5799dd4 + "@svgr/core": ^6.5.0 + "@svgr/plugin-jsx": ^6.5.0 + "@svgr/plugin-svgo": ^6.5.0 + checksum: a3a043034689a335aa9657580251a8636225002439a4667c31fe2b0faa043980182b28aac7da0219804609ef19c0b3b397626850f056a7065c20f61c2f17b4f8 languageName: node linkType: hard "@svgr/webpack@npm:6.5.x": - version: 6.5.1 - resolution: "@svgr/webpack@npm:6.5.1" + version: 6.5.0 + resolution: "@svgr/webpack@npm:6.5.0" dependencies: - "@babel/core": ^7.19.6 - "@babel/plugin-transform-react-constant-elements": ^7.18.12 - "@babel/preset-env": ^7.19.4 - "@babel/preset-react": ^7.18.6 - "@babel/preset-typescript": ^7.18.6 - "@svgr/core": ^6.5.1 - "@svgr/plugin-jsx": ^6.5.1 - "@svgr/plugin-svgo": ^6.5.1 - checksum: d10582eb4fa82a5b6d314cb49f2c640af4fd3a60f5b76095d2b14e383ef6a43a6f4674b68774a21787dbde69dec0a251cfcfc3f9a96c82754ba5d5c6daf785f0 - languageName: node - linkType: hard - -"@swagger-api/apidom-ast@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ast@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - unraw: =2.0.1 - checksum: 59625e7f3543766d901227d9afec0ebce0cc1368cc63d22ad5f348a9da0b3777ea83acce7eb0eecdbe6210022f3bf0fafdb46d59b0e90d630ad55c428ede14a2 - languageName: node - linkType: hard - -"@swagger-api/apidom-core@npm:=0.69.0, @swagger-api/apidom-core@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-core@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@types/ramda": =0.28.23 - minim: =0.23.8 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - short-unique-id: =4.4.4 - stampit: =4.3.2 - checksum: 036dc1198014fff9d7e879529186c4b0db423ae4c933eecec90650985e198cb3745638feff8681f85940f124703484d1b071dfca4eaf7b9457a4f99186c98972 - languageName: node - linkType: hard - -"@swagger-api/apidom-json-pointer@npm:=0.69.0, @swagger-api/apidom-json-pointer@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-json-pointer@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 7930d938011c608d5c227c3b1cbfcb120eeebd32aedd447220219b079d030af6387a9a61e74461fe53578c06ba29aa78e5e5fdfcd561d5611d5a07ef5534ee49 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-api-design-systems@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: 1c3047d4081cd07bbbdce6fa19c62407d1c57f7bf05b85947fd1e9b3cc2c2792fb85a926a54d3376c761a123ce3b130b06e38830ca68743a20c684aae89275f1 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-asyncapi-2@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-json-schema-draft-7": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: c5b9161166ddce0be047a474e7257520a756ed3fe426b806c19122334535d07b48529be60638dd560ab6ff23899641cee1110932cad16b4bf93f8fbe8f52ca05 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: d308227f5849071be3481bd8d4a8dc16d0e9e99edb61250927da88ed34595d176d59792003a2a666a49585643ff659a16774826790aab718a316beda9ce617c3 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: df237753d0c9aa7d22029c22b5355310a14aa7a77aa484cc86d46850bd994db3f0901804510a6c62196e181c150e15fc7a031b97f0f45983b6f819fb7ed71ccb - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-json-schema-draft-6": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: a2059092cfb1797c90b15384270df65fadd6d1e8b469350082ab46d25a1840fd05ff0bea72a8005068f77ab277a049110962a15f1fbeeac63b9c0a34d21d78c2 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-openapi-3-0@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: e53bda9fada416e23a5220dd8987b3e4082b3020e3db40c5532fdd454aaa02953d4d72223fd0372897b0a6a73b321f89e83504d60bb8b52fa4fbcdfb5f097e59 - languageName: node - linkType: hard - -"@swagger-api/apidom-ns-openapi-3-1@npm:=0.69.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - checksum: 7f194ebb36891655fdcd8dfe88e664e70f6efcd713ac6defc75dadefb0087d3fd0358b656dec4920d876342d23c44ff1cee034fa32cfa1f8b3d49ceba9509dbb - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 - "@swagger-api/apidom-parser-adapter-json": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 68b43e19effd7b9c26e52381903a39fff7ef0990ad3cbcbf4aa7de01cf3454d915dc10d8f688aa0fa4405b11f1a6d8f49bc160e6b72c482fadb484bd787bdebd - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 6ded590b93087ad4b848ba4f742c6baeb35a572195d763a1ae0b479b8de4ae7d331175d5042116dab26684413ca6a58680080fb4b28ca5c66c7d72d6e624e174 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 - "@swagger-api/apidom-parser-adapter-json": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: c13b4ea5a603d7422ebf4dd87851a72a999c0036ff451b080cd37b96aa1b455f6483c447e4962303af52b44ac0fca3517573dfeeddbdb7f8d04cb7ff8796089f - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: f3415e86371f98e3677d22f432214f4b4e2267b80da2f505ed28d89c711fa32a627cea94040c6071e83d2ea3cf6aabc454331951d2fd3bcc138b091e78286423 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-json@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@swagger-api/apidom-core": ^0.69.0 - "@types/ramda": =0.28.23 - node-gyp: latest - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - tree-sitter: =0.20.1 - tree-sitter-json: =0.20.0 - web-tree-sitter: =0.20.7 - checksum: e640ffbf749285f70ea4d125cbb030ff9920b011e8694e3cd5c379b3a6f3f387805c9535af7786c2bed6f0f67bfd9f6daad6eb65a64ca76b48b45f283933f4d5 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 - "@swagger-api/apidom-parser-adapter-json": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 50c61b46d16ed2a24816665ee810c295f6e82cad8a031ebc91d91aa3650bae92ddcede99ceea4346dcb69ca6edd811213018ebe8b23929012c08b425103a807d - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 - "@swagger-api/apidom-parser-adapter-json": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 9c657b1eb82814958ed2b2c4e710a51378cbb11ca6957d0cc57ec544e0cba4a3bac412475f923e47c1fff8130f5a42cf8edcd99080703316150de8f1b30891b8 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: ee32fc65e053ccda7eae265ad1a43e5acd0688460620912363156ada3babf3115fbec0dd35423ca633aaf78e9e4ed71ee4be030385cfdcc9ed69e8438319cc19 - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: c21f6ad4b149f64bb5af24d7d7ba5bd8342c2ab2e0e37d85617ca0d4d3333ee45a4603ce7cdca460d4dcb17c6d41b47f733390d3ef6754664ae11705a628fe9c - languageName: node - linkType: hard - -"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@swagger-api/apidom-core": ^0.69.0 - "@types/ramda": =0.28.23 - node-gyp: latest - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - tree-sitter: =0.20.1 - tree-sitter-yaml: =0.5.0 - web-tree-sitter: =0.20.7 - checksum: 6067347f6ab9d2cfbbe55f13345609c86b1660bebb7cea215c90739eab011498695d785bc7bb75fc95055ea98bafc765bbc0d304ad19f72647b72ee4308d249e - languageName: node - linkType: hard - -"@swagger-api/apidom-reference@npm:=0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-reference@npm:0.69.0" - dependencies: - "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.0 - "@swagger-api/apidom-json-pointer": ^0.69.0 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 - "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.69.0 - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.69.0 - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.69.0 - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.69.0 - "@swagger-api/apidom-parser-adapter-json": ^0.69.0 - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.69.0 - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.69.0 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.69.0 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.69.0 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 - "@types/ramda": =0.28.23 - axios: =1.3.4 - minimatch: =7.3.0 - process: =0.11.10 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - stampit: =4.3.2 - dependenciesMeta: - "@swagger-api/apidom-json-pointer": - optional: true - "@swagger-api/apidom-ns-asyncapi-2": - optional: true - "@swagger-api/apidom-ns-openapi-3-0": - optional: true - "@swagger-api/apidom-ns-openapi-3-1": - optional: true - "@swagger-api/apidom-parser-adapter-api-design-systems-json": - optional: true - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": - optional: true - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": - optional: true - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": - optional: true - "@swagger-api/apidom-parser-adapter-json": - optional: true - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": - optional: true - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": - optional: true - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": - optional: true - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": - optional: true - "@swagger-api/apidom-parser-adapter-yaml-1-2": - optional: true - checksum: f176e51e64377c09449e9f5bf50438be7a05fa63d4ff2f9ec5c45cf0722439537aafbe4804e2197661a652cec013c1aaa78f6a2a7ac4f6d63083aa07875c8671 + "@babel/core": ^7.18.5 + "@babel/plugin-transform-react-constant-elements": ^7.17.12 + "@babel/preset-env": ^7.18.2 + "@babel/preset-react": ^7.17.12 + "@babel/preset-typescript": ^7.17.12 + "@svgr/core": ^6.5.0 + "@svgr/plugin-jsx": ^6.5.0 + "@svgr/plugin-svgo": ^6.5.0 + checksum: 2c0b18b20694b1301e86893e488269882ae136259cc17b4ab47c208c6edcdfeaefa23894b3fe68d36384e26380eafde23571b0cb143aadf538c027d72eb1d702 languageName: node linkType: hard @@ -14370,26 +13773,26 @@ __metadata: linkType: hard "@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" + version: 4.0.5 + resolution: "@szmarczak/http-timer@npm:4.0.5" dependencies: defer-to-connect: ^2.0.0 - checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 + checksum: 27b713859bc7d370f81631eea99879a9d496e1def5d33752fccd6c80dba32cde2094f378c8d07d56f236b08afb4b3621fbf6254faaca52b1a8146ece1eba8428 languageName: node linkType: hard -"@tanstack/query-core@npm:4.27.0": - version: 4.27.0 - resolution: "@tanstack/query-core@npm:4.27.0" - checksum: 914b4f01ac75632f4603b650e9105f64c739b79250baf76aad16cee216f7bad6060c04eda0c70838fe61a5f6c17883e19fcc3075b2433a906539da95ce785796 +"@tanstack/query-core@npm:4.26.1": + version: 4.26.1 + resolution: "@tanstack/query-core@npm:4.26.1" + checksum: c7bc751d7d08ce27dd7262aa75a263808b128902b8f3a5dd1ff9b1dfda6511af965388bcdb7d8130bdf10756c1d583f527ead274b1d3e4f4db29c83260b416b0 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.28.0 - resolution: "@tanstack/react-query@npm:4.28.0" + version: 4.26.1 + resolution: "@tanstack/react-query@npm:4.26.1" dependencies: - "@tanstack/query-core": 4.27.0 + "@tanstack/query-core": 4.26.1 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -14400,7 +13803,7 @@ __metadata: optional: true react-native: optional: true - checksum: 7baa70d22b55cfa22f8a1d92ba9f8379c5436ee81fce3f0e7df4a8c29bb26bfef4a83759cf10f752b40ae2940099fcce88ce91a773240f4999ae91136980c6e3 + checksum: 3b43a5acc84841364c08ed7c7d0f495008214f1f39b7fb073a95a53528ce40b4841dbc407070b4c0082d73990277bbcf9bc88df40217e70c226be4931efaa081 languageName: node linkType: hard @@ -14453,18 +13856,18 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" + version: 8.11.3 + resolution: "@testing-library/dom@npm:8.11.3" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^5.0.1 + "@types/aria-query": ^4.2.0 aria-query: ^5.0.0 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 + checksum: 2245d254b6058590e25de86fb7b3c75e4a31096901a191f80d3efb9fa7e1e273043416f370c8770feb9f3ccc73a1550a877a3b003b593f1728ae828fcb52cd62 languageName: node linkType: hard @@ -14522,11 +13925,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.0.0": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" + version: 14.3.0 + resolution: "@testing-library/user-event@npm:14.3.0" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e + checksum: cbd5954460496519cb2ff3fa506ca598d7e4c2e3d2f2e129b21909758f5ec87573aad7d6c79aebffd4bd0ea843315b3064a2a76e545f196bd4c82489cb3afc1d languageName: node linkType: hard @@ -14635,17 +14038,17 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de +"@types/aria-query@npm:^4.2.0": + version: 4.2.0 + resolution: "@types/aria-query@npm:4.2.0" + checksum: e4a3748c5511deb88e93c6faf2acb0730233ff75018e9aaed95e3d2833880e9d0eda7e08e4315a827872471779471585671d08bae00ac8b9813fc140194b52e5 languageName: node linkType: hard "@types/aws-lambda@npm:^8.10.83": - version: 8.10.114 - resolution: "@types/aws-lambda@npm:8.10.114" - checksum: 9657d06ac8116f0454e465eb298c08af0eb3c2d6715a2faed6a3acebe31062e5ae70a64d4ce269141ad302545781d7df1bd637c70f0fe660f940e919dcdae794 + version: 8.10.92 + resolution: "@types/aws-lambda@npm:8.10.92" + checksum: 71c44d83a1c88aa6dbc920baedfb2d100b8843a3d210c695ccaafb30dfb75f04398b0e5368100022acbf75c55d456c61774242f20dd70915fc63d85430cbcf8a languageName: node linkType: hard @@ -14659,43 +14062,43 @@ __metadata: linkType: hard "@types/babel__core@npm:^7.1.14": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" + version: 7.1.18 + resolution: "@types/babel__core@npm:7.1.18" dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df + checksum: 2e5b5d7c84f347d3789575486e58b0df5c91613abc3d27e716274aba3048518e07e1f068250ba829e2ed58532ccc88da595ce95ba2688e7bbcd7c25a3c6627ed languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.1 + resolution: "@types/babel__generator@npm:7.6.1" dependencies: "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.0.2 + resolution: "@types/babel__template@npm:7.0.2" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" + version: 7.0.15 + resolution: "@types/babel__traverse@npm:7.0.15" dependencies: "@babel/types": ^7.3.0 - checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 + checksum: 6a45519ebf58e6b1197a0177211099fc3ed613d2a435cf9470c39217af35f29013f7984e1f8c2e160a93b588767cfbbcf0d7f77eae399dfcca18d5257f04cbc2 languageName: node linkType: hard @@ -14735,14 +14138,14 @@ __metadata: linkType: hard "@types/cacheable-request@npm:^6.0.1": - version: 6.0.3 - resolution: "@types/cacheable-request@npm:6.0.3" + version: 6.0.1 + resolution: "@types/cacheable-request@npm:6.0.1" dependencies: "@types/http-cache-semantics": "*" - "@types/keyv": ^3.1.4 + "@types/keyv": "*" "@types/node": "*" - "@types/responselike": ^1.0.0 - checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 + "@types/responselike": "*" + checksum: c25b1bfa2f4f2cc1ca8e1bebad99f2e2c502a3fc09b5270765bfd6b57b1b73b9fab7127acb618beb04c646534a21c62b052aa6942bdfc461ee49387ec9975cd5 languageName: node linkType: hard @@ -14754,11 +14157,11 @@ __metadata: linkType: hard "@types/classnames@npm:^2.2.9": - version: 2.3.0 - resolution: "@types/classnames@npm:2.3.0" + version: 2.3.1 + resolution: "@types/classnames@npm:2.3.1" dependencies: classnames: "*" - checksum: e1bd6de60fc5e4ead601838078b10f378d6a66ad21112922856de59a1f450b1361f597aa3ca34f2cc33bc030f950112872fddfde43c5189bec89737a8b237f24 + checksum: 09a17ea08fcb83380921efdfdac94cfa162f87025cae0bf6f4ba508c2fa5f436459ce7612905a3f968fdddb68c03b8e6ff08e762ed2d0c110c5c4fceb244dc55 languageName: node linkType: hard @@ -14841,11 +14244,11 @@ __metadata: linkType: hard "@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" + version: 3.4.33 + resolution: "@types/connect@npm:3.4.33" dependencies: "@types/node": "*" - checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + checksum: 1220403e0cd05c6f51c03b83eed0f4e086f252d50c13279effd38d8bfea5cae82db012b134d31004cb8e4705f83d8ad62dddd71028baa190bf6f31c8d9ac916b languageName: node linkType: hard @@ -14866,9 +14269,9 @@ __metadata: linkType: hard "@types/cookiejar@npm:*": - version: 2.1.2 - resolution: "@types/cookiejar@npm:2.1.2" - checksum: f6e1903454007f86edd6c3520cbb4d553e1d4e17eaf1f77f6f75e3270f48cc828d74397a113a36942f5fe52f9fa71067bcfa738f53ad468fcca0bc52cb1cbd28 + version: 2.1.1 + resolution: "@types/cookiejar@npm:2.1.1" + checksum: 7b2967a3344e8e646e79e1dc09ef30a70c4ceeb348364c4eb75b56e2f2e695605fbddd40a50f468b2b5932d2ffb58694ba550f0f52d074c972023910c77de2f6 languageName: node linkType: hard @@ -14907,24 +14310,17 @@ __metadata: languageName: node linkType: hard -"@types/d3-array@npm:^3.0.3": - version: 3.0.4 - resolution: "@types/d3-array@npm:3.0.4" - checksum: b0e398365fc1f638d48442e865e036d671c731b2b18f7a92e5172db1f60f5a38d4cd992693a29ad64b38e7ba981eb8c63a2aef95fbdcfbc4bf8926a9cb9ca978 - languageName: node - linkType: hard - "@types/d3-color@npm:*": - version: 3.1.0 - resolution: "@types/d3-color@npm:3.1.0" - checksum: b1856f17d6366559a68eaba0164f30727e9dc5eaf1b3a6c8844354da228860240423d19fa4de65bff9da26b4ead8843eab14b1566962665412e8fd82c3810554 + version: 3.0.2 + resolution: "@types/d3-color@npm:3.0.2" + checksum: 9009aa52e41638442ca4884666e694f177b650b46df5d2495f80437659545c9f3afd598ab95c4ff6d0d13e445df4bd893a89887ca3d34239279a37215d148873 languageName: node linkType: hard -"@types/d3-ease@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-ease@npm:3.0.0" - checksum: 1be7c993643b5a08332e0ee146375a3845545d8deb423db5d152e0b061524385d2345ceccf968f75f605247b940dd3f9a144335fee2e7d935cddaf187afb7095 +"@types/d3-color@npm:^2": + version: 2.0.3 + resolution: "@types/d3-color@npm:2.0.3" + checksum: b4a963b15f4fe0e7e49b0898df3e51b46392d91c21038b7ec61aef0f13e04bd7bcfebf06c9fad9ee92317c9682a105e18942c9295a7e2715855622d4d6fc415a languageName: node linkType: hard @@ -14935,7 +14331,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.1": +"@types/d3-interpolate@npm:*": version: 3.0.1 resolution: "@types/d3-interpolate@npm:3.0.1" dependencies: @@ -14944,6 +14340,15 @@ __metadata: languageName: node linkType: hard +"@types/d3-interpolate@npm:^2.0.0": + version: 2.0.2 + resolution: "@types/d3-interpolate@npm:2.0.2" + dependencies: + "@types/d3-color": ^2 + checksum: 78c47193da3c114a7d78580c6f8d9915f11df92ce78fe08d13052cf49fab91dcdca938895a778cdc6f9820ebf16df3e0e339c17491a8c2b1140cdd2e09553084 + languageName: node + linkType: hard + "@types/d3-path@npm:*": version: 3.0.0 resolution: "@types/d3-path@npm:3.0.0" @@ -14958,12 +14363,19 @@ __metadata: languageName: node linkType: hard -"@types/d3-scale@npm:^4.0.2": - version: 4.0.3 - resolution: "@types/d3-scale@npm:4.0.3" +"@types/d3-path@npm:^2": + version: 2.0.1 + resolution: "@types/d3-path@npm:2.0.1" + checksum: 2fe04503ec56de47e2b8482e5a55e2eaf2940444f2cea00a5fb740d52d24bddfe13e900e392c1edebf2127b11557db09aeae6f5669f49a35caac4fe1a9d43b84 + languageName: node + linkType: hard + +"@types/d3-scale@npm:^3.0.0": + version: 3.3.2 + resolution: "@types/d3-scale@npm:3.3.2" dependencies: - "@types/d3-time": "*" - checksum: 76684da8519ab5f2210e647f74f96ece9c6816dea4ad5d76131121703a5268cc65687a8bc9ebbf4a44039482247336d98811ecc3fbfeb7f0122fdce4bb295547 + "@types/d3-time": ^2 + checksum: 65dbf85f07a4d6ac26396075b0faa1930cfebb96dc248629d4b82c22457c89161d0f070f9a5554adccee80b959e2c6d7c1ef6b7355743afe91050d71014fe3cf languageName: node linkType: hard @@ -14983,7 +14395,16 @@ __metadata: languageName: node linkType: hard -"@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": +"@types/d3-shape@npm:^2.0.0": + version: 2.1.3 + resolution: "@types/d3-shape@npm:2.1.3" + dependencies: + "@types/d3-path": ^2 + checksum: d0855a1e2c11a4ab23367c86ef0cc104e12bf216f2c007fa5955da7179b60b0426d0e9ddbbbdf93d4342e7dd24c7bcfc3a2bc6258744e03fc44ca460a063dcc3 + languageName: node + linkType: hard + +"@types/d3-shape@npm:^3.0.1": version: 3.1.1 resolution: "@types/d3-shape@npm:3.1.1" dependencies: @@ -14992,17 +14413,10 @@ __metadata: languageName: node linkType: hard -"@types/d3-time@npm:*, @types/d3-time@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-time@npm:3.0.0" - checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e - languageName: node - linkType: hard - -"@types/d3-timer@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-timer@npm:3.0.0" - checksum: 1ec86b3808de6ecfa93cfdf34254761069658af0cc1d9540e8353dbcba161cdf1296a0724187bd17433b2ff16563115fd20b85fc89d5e809ff28f9b1ab134b42 +"@types/d3-time@npm:^2": + version: 2.1.1 + resolution: "@types/d3-time@npm:2.1.1" + checksum: 115048d0cd312a3172ef7c03615dfbdbd8b92a93fd7b6d9ca93c49c704fcdb9575f4c57955eb54eb757b9834acaaf47fc52eae103d06246c59ae120de4559cbc languageName: node linkType: hard @@ -15069,22 +14483,22 @@ __metadata: linkType: hard "@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" + version: 3.7.3 + resolution: "@types/eslint-scope@npm:3.7.3" dependencies: "@types/eslint": "*" "@types/estree": "*" - checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 languageName: node linkType: hard "@types/eslint@npm:*, @types/eslint@npm:^7.29.0 || ^8.4.1": - version: 8.21.3 - resolution: "@types/eslint@npm:8.21.3" + version: 8.4.6 + resolution: "@types/eslint@npm:8.4.6" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 80e0b5ca9ffb77bff19d01df08b93a99a6b44cad4c40e6450733ead6f1bc44b5514e7d28c3b0ad6304aeb01d690ee7ca89250729a9373551b7e587c6dbb41d7f + checksum: bfaf27b00031b2238139003965475d023306119e467947f7a43a41e380918e365618e2ae6a6ae638697f6421a6bb1571db078695ff5e548f23618000b38acd23 languageName: node linkType: hard @@ -15123,7 +14537,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.5": version: 4.17.33 resolution: "@types/express-serve-static-core@npm:4.17.33" dependencies: @@ -15154,14 +14568,14 @@ __metadata: linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" + version: 4.17.16 + resolution: "@types/express@npm:4.17.16" dependencies: "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.33 + "@types/express-serve-static-core": ^4.17.31 "@types/qs": "*" "@types/serve-static": "*" - checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da + checksum: 43f3ed2cea6e5e83c7c1098c5152f644e975fd764443717ff9c812a1518416a9e7e9f824ffe852c118888cbfb994ed023cad08331f49b19ced469bb185cdd5cd languageName: node linkType: hard @@ -15189,12 +14603,12 @@ __metadata: linkType: hard "@types/glob@npm:*": - version: 8.1.0 - resolution: "@types/glob@npm:8.1.0" + version: 7.1.3 + resolution: "@types/glob@npm:7.1.3" dependencies: - "@types/minimatch": ^5.1.2 + "@types/minimatch": "*" "@types/node": "*" - checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d + checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 languageName: node linkType: hard @@ -15206,11 +14620,11 @@ __metadata: linkType: hard "@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" + version: 4.1.5 + resolution: "@types/graceful-fs@npm:4.1.5" dependencies: "@types/node": "*" - checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a languageName: node linkType: hard @@ -15232,7 +14646,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1": +"@types/hoist-non-react-statics@npm:^3.3.0": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" dependencies: @@ -15250,9 +14664,9 @@ __metadata: linkType: hard "@types/http-cache-semantics@npm:*": - version: 4.0.1 - resolution: "@types/http-cache-semantics@npm:4.0.1" - checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 + version: 4.0.0 + resolution: "@types/http-cache-semantics@npm:4.0.0" + checksum: c820774eb1d9d8d0c13077834e870cc1afd2500dc9d0ac1b67abc050c7c115aee4024f90fda65b50babc258de0464fc4459709e4fa12552f65094328e5a551c6 languageName: node linkType: hard @@ -15317,9 +14731,9 @@ __metadata: linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + version: 2.0.1 + resolution: "@types/istanbul-lib-coverage@npm:2.0.1" + checksum: eb8abb8b56fb8f645c46c482c5a438d78fc44ce2eb82a47491d552eba94fc3d81bc404996f220921c16df3eb6126ec01890f4acaebd0f71249b37e110eacdd3a languageName: node linkType: hard @@ -15333,11 +14747,11 @@ __metadata: linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.0 + resolution: "@types/istanbul-reports@npm:3.0.0" dependencies: "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b languageName: node linkType: hard @@ -15360,12 +14774,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.0.0": - version: 29.5.0 - resolution: "@types/jest@npm:29.5.0" + version: 29.4.0 + resolution: "@types/jest@npm:29.4.0" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: cd877e5c56d299cceb8bfdcbb1a77723c706750dd3c3bc47403bc3599b8faff590a3b009c68bb5b11bf7a8c77d1fb01de5e124329b4a08e65f1cdda28b0ecdb8 + checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e languageName: node linkType: hard @@ -15389,9 +14803,9 @@ __metadata: linkType: hard "@types/js-cookie@npm:^2.2.6": - version: 2.2.7 - resolution: "@types/js-cookie@npm:2.2.7" - checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 + version: 2.2.6 + resolution: "@types/js-cookie@npm:2.2.6" + checksum: 97c50ff6cd0a27409b028aad94b0c4eb5cc43623532a1bdbbcccdb200539593eff3cc7f0d874b6b9bee586167638e3a10093c811ff6603ff2a9639564c82b3b1 languageName: node linkType: hard @@ -15420,13 +14834,13 @@ __metadata: linkType: hard "@types/jsdom@npm:^20.0.0": - version: 20.0.1 - resolution: "@types/jsdom@npm:20.0.1" + version: 20.0.0 + resolution: "@types/jsdom@npm:20.0.0" dependencies: "@types/node": "*" "@types/tough-cookie": "*" parse5: ^7.0.0 - checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + checksum: 13e67d31347e02d46ec6a23919b3ce39d86136665922a2a6cb977e216a2f46c22d2f025d0586a64ab492ebaa5f43da669b6f173a5a8cfd3e3bb7c9d19b6cfa9e languageName: node linkType: hard @@ -15447,9 +14861,9 @@ __metadata: linkType: hard "@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.34 - resolution: "@types/json-stable-stringify@npm:1.0.34" - checksum: 45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e + version: 1.0.32 + resolution: "@types/json-stable-stringify@npm:1.0.32" + checksum: 3091ddc8d15c6cce1a847ba1f8db21e7c2564c7b8bc6923a873801d936228f775096b517d62653fbcebedcb2a7992555dc6ed11517ef050e75525cdf1d1bce8d languageName: node linkType: hard @@ -15460,12 +14874,31 @@ __metadata: languageName: node linkType: hard -"@types/jsonwebtoken@npm:^9.0.0": - version: 9.0.1 - resolution: "@types/jsonwebtoken@npm:9.0.1" +"@types/jsonwebtoken@npm:^8.5.0": + version: 8.5.0 + resolution: "@types/jsonwebtoken@npm:8.5.0" dependencies: "@types/node": "*" - checksum: a7f0925e9a42ad3ae970364c63c5986d40da5c83d51d3f4e624eb0f064a380376f9e3fb3f2f837390a9ab80143f5d75fd51866da30e110f6b486a3379e1c768f + checksum: e8f9ab96ec5cf76195c0d31cf555371824b673939064efec698ca99525ce46476af54debd1f66bd732e6079e134848b97163797009c4b47a767448a0c6ddaeda + languageName: node + linkType: hard + +"@types/jsonwebtoken@npm:^9.0.0": + version: 9.0.0 + resolution: "@types/jsonwebtoken@npm:9.0.0" + dependencies: + "@types/node": "*" + checksum: c7791354ba895759524c18ba609ea04efdc576e2b660bd6f80d5b917db8dc4b01acd4d1bc115a62d35406a82e627067973d475c4b36035dabaa27862b141ae49 + languageName: node + linkType: hard + +"@types/jss@npm:^9.5.6": + version: 9.5.8 + resolution: "@types/jss@npm:9.5.8" + dependencies: + csstype: ^2.0.0 + indefinite-observable: ^1.0.1 + checksum: 6e51707529a15f2f5ff94555ecb555d29427fd10c4f3d2d29474934292e365c2dfaa4ad30b2ab46946201cbca7f6e8df56513a22fc6ceca10a979db8338935c5 languageName: node linkType: hard @@ -15478,7 +14911,7 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:^3.1.4": +"@types/keyv@npm:*": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" dependencies: @@ -15504,9 +14937,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.191 - resolution: "@types/lodash@npm:4.14.191" - checksum: ba0d5434e10690869f32d5ea49095250157cae502f10d57de0a723fd72229ce6c6a4979576f0f13e0aa9fbe3ce2457bfb9fa7d4ec3d6daba56730a51906d1491 + version: 4.14.185 + resolution: "@types/lodash@npm:4.14.185" + checksum: f81d13da5ecab110ca9c5c7cc2bedc3c9802a6acf668576aecd1b8f4b134ed81d06c15f1e600fb08f05975098280a0d97d30cddfc2cb39ec1c6b56e971ca53b3 languageName: node linkType: hard @@ -15555,7 +14988,7 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0": +"@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" dependencies: @@ -15564,7 +14997,7 @@ __metadata: languageName: node linkType: hard -"@types/mdurl@npm:*": +"@types/mdurl@npm:*, @types/mdurl@npm:^1.0.0": version: 1.0.2 resolution: "@types/mdurl@npm:1.0.2" checksum: 79c7e523b377f53cf1f5a240fe23d0c6cae856667692bd21bf1d064eafe5ccc40ae39a2aa0a9a51e8c94d1307228c8f6b121e847124591a9a828c3baf65e86e2 @@ -15578,10 +15011,17 @@ __metadata: languageName: node linkType: hard -"@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 +"@types/mime@npm:^1": + version: 1.3.2 + resolution: "@types/mime@npm:1.3.2" + checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd + languageName: node + linkType: hard + +"@types/minimatch@npm:*, @types/minimatch@npm:^5.0.0": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 languageName: node linkType: hard @@ -15592,13 +15032,6 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:^5.0.0, @types/minimatch@npm:^5.1.2": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 - languageName: node - linkType: hard - "@types/minimist@npm:^1.2.0": version: 1.2.2 resolution: "@types/minimist@npm:1.2.2" @@ -15660,10 +15093,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17, @types/node@npm:^18.11.18": - version: 18.15.3 - resolution: "@types/node@npm:18.15.3" - checksum: 31b1d92475a82c30de29aa6c0771b18a276552d191283b4423ba2d61b3f01159bf0d02576c0b7cc834b043997893800db6bb47f246083ed85aa45e79c80875d7 +"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17": + version: 18.11.19 + resolution: "@types/node@npm:18.11.19" + checksum: d7cd19fcfc59cbdd3f9ba0b4072cb7adc21bd575bd8eb7d7e698975e63564aaa83f03434f32b12331f84f73d0b369d9cbe2371e359d9d7f5c3361f4987f4f7da + languageName: node + linkType: hard + +"@types/node@npm:12.20.24": + version: 12.20.24 + resolution: "@types/node@npm:12.20.24" + checksum: e7a13460e2f5b0b5a32c0f3af7daf1a05201552a66d542d3cc3b1ea8b52d4730250f9eb1961d755e31cfe5d03c78340911a6242657a0a9a17d6f7e341fc9f366 languageName: node linkType: hard @@ -15675,13 +15115,13 @@ __metadata: linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.38 - resolution: "@types/node@npm:14.18.38" - checksum: 4f580c5e0f124f44fa6f5d9923bf8fd98f644caabee6171c2dac48160062a91de99f2edd5db5ec59e93fe61f85dd4111df78c9d4f341f3aafca719929362303f + version: 14.18.33 + resolution: "@types/node@npm:14.18.33" + checksum: 4e23f95186d8ae1d38c999bc6b46fe94e790da88744b0a3bfeedcbd0d9ffe2cb0ff39e85f43014f6739e5270292c1a1f6f97a1fc606fd573a0c17fda9a1d42de languageName: node linkType: hard -"@types/node@npm:^15.6.2": +"@types/node@npm:^15.6.1": version: 15.14.9 resolution: "@types/node@npm:15.14.9" checksum: 49f7f0522a3af4b8389aee660e88426490cd54b86356672a1fedb49919a8797c00d090ec2dcc4a5df34edc2099d57fc2203d796c4e7fbd382f2022ccd789eee7 @@ -15689,9 +15129,9 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.18.16 - resolution: "@types/node@npm:16.18.16" - checksum: 69c422450f046fbdf1904c4fdb9fbc80fda379768f6e5402ac1434fb5955b7b3d0082f02fb9bcd4979f57649ecd9a934277492d757c6ea88d080ba101c1ced48 + version: 16.18.12 + resolution: "@types/node@npm:16.18.12" + checksum: fc3271182414f8593018ef8f00b4718116a92f463f619081bd399d9460e7861e1dd7eebc7cf94c23567e418ff397babed077011711aae8d47171b5a81c5bd71d languageName: node linkType: hard @@ -15774,13 +15214,13 @@ __metadata: linkType: hard "@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": - version: 1.4.12 - resolution: "@types/passport-oauth2@npm:1.4.12" + version: 1.4.11 + resolution: "@types/passport-oauth2@npm:1.4.11" dependencies: "@types/express": "*" "@types/oauth": "*" "@types/passport": "*" - checksum: ff39f486529420d624c776835c54e46cc91c110b9620a96679e9a6391c330ff613f5ae5e3232317b1a7c05591652e906caf51d2d30b2bc28e50c8c3a3e5cf14d + checksum: 09d047a6c09a05c036f7db0cf8f8c09bf5878fdd15949bb1baa09a35f439929d471048fa6595f09ea4a4ea25396ce3918b362136579cf4a2b2ee29a92c0dd1ce languageName: node linkType: hard @@ -15832,13 +15272,13 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 + version: 2.4.3 + resolution: "@types/prettier@npm:2.4.3" + checksum: b240434daabac54700c862b0bb52a83fec396e0e9c847447119ba41fd8404d79aadfa174e6306fb094b29efadac586344b7606c3a71c286b71755ab2579d54df languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3, @types/prop-types@npm:^15.7.5": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 @@ -15855,34 +15295,25 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba - languageName: node - linkType: hard - -"@types/ramda@npm:=0.28.23": - version: 0.28.23 - resolution: "@types/ramda@npm:0.28.23" - dependencies: - ts-toolbelt: ^6.15.1 - checksum: 61d7416c0f4f189c6524e093c7546ca2f159553e54d7933836d46aac1332611aa7b02fd8c8bfa98c0865f262fd9e99e06e3d9538deba0bab1f6153cbcf841160 + version: 6.9.6 + resolution: "@types/qs@npm:6.9.6" + checksum: 01871b1cf7062717ec76fcb9b29ddae1e04fcfadc1c76d86ec2571e72f27bf09ff31b094b295be8d4ca664aeec9b8965563680b31fcab7aba1ed93afac5181cd languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + version: 1.2.3 + resolution: "@types/range-parser@npm:1.2.3" + checksum: a0a4218214d2c599e2128a8965e9183d1f0b8fc614def43a2183cf80534d10fcf86357c823c7907e779df0ab048fd1fa3818b4c8f0f6f99ba150a3f99df7d03d languageName: node linkType: hard "@types/react-dom@npm:^17": - version: 17.0.19 - resolution: "@types/react-dom@npm:17.0.19" + version: 17.0.17 + resolution: "@types/react-dom@npm:17.0.17" dependencies: "@types/react": ^17 - checksum: 875a472d868b235435c905ded16cf92297bd2afb20a5a78f5dccd54312f6f038ccf452ea92bb41c0b39150c2f16f3ddff0265a2de756c6f63b0971dd5719578b + checksum: 23caf98aa03e968811560f92a2c8f451694253ebe16b670929b24eaf0e7fa62ba549abe9db0ac028a9d8a9086acd6ab9c6c773f163fa21224845edbc00ba6232 languageName: node linkType: hard @@ -15895,24 +15326,15 @@ __metadata: languageName: node linkType: hard -"@types/react-is@npm:^16.7.1 || ^17.0.0": - version: 17.0.3 - resolution: "@types/react-is@npm:17.0.3" - dependencies: - "@types/react": "*" - checksum: 6abb7c47d54f012272650df8a962a28bd82f219291e5ef8b4dfa7fe0bb98ae243b060bf9fbe8ceff6213141794855a006db194b490b00ffd15842ae19d0ce1f0 - languageName: node - linkType: hard - -"@types/react-redux@npm:^7.1.20": - version: 7.1.25 - resolution: "@types/react-redux@npm:7.1.25" +"@types/react-redux@npm:^7.1.16": + version: 7.1.19 + resolution: "@types/react-redux@npm:7.1.19" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: a61ec25cbf8bb3720850402d3c49493fcff4afb73ad447d161460b5d4c600c984ad48708e8564d2fd32052eaa3c3b3f655c5b300ce813429637cce9e5958329f + checksum: 32a1b21f6a5e45cd6e78fdb4b86974ea444a35539c3c1270d66132527b2c45051f9642a3e2296616c72407dc019d0629c0183bcca64fbf3ba19443484cb70df7 languageName: node linkType: hard @@ -15943,12 +15365,21 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "@types/react-transition-group@npm:4.4.5" +"@types/react-transition-group@npm:^2.0.8": + version: 2.9.2 + resolution: "@types/react-transition-group@npm:2.9.2" dependencies: "@types/react": "*" - checksum: 265f1c74061556708ffe8d15559e35c60d6c11478c9950d3735575d2c116ca69f461d85effa06d73a613eb8b73c84fd32682feb57cf7c5f9e4284021dbca25b0 + checksum: 6f30fffc221339de90bd3e999f32328618cfaedfcaa501603f5ddc5bed1c2dbaa0d51347c3a25e5f8fd3041c671aabd2b7bfbcad611a7636adcd9da4e0666fa5 + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.2.0": + version: 4.2.4 + resolution: "@types/react-transition-group@npm:4.2.4" + dependencies: + "@types/react": "*" + checksum: a8abb3ad3c6e0575c630b591503a78ae3a94e21d1285905a49c36168e5d3de68b0886e2c6d75b751e30f2dc6e4245351cde30e4b3ff2649aec345f2088961e2c languageName: node linkType: hard @@ -15971,32 +15402,32 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.53 - resolution: "@types/react@npm:17.0.53" + version: 17.0.52 + resolution: "@types/react@npm:17.0.52" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: dacfde02c260fd98bed2eb775ed0c7ce1397be4c0844f907a50763b081a4008f81f57071889a16eb1350ddcf0927f3cf1a6541702c8ad03de3c70383ef931e3f + checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 languageName: node linkType: hard "@types/readdir-glob@npm:*": - version: 1.1.1 - resolution: "@types/readdir-glob@npm:1.1.1" + version: 1.1.0 + resolution: "@types/readdir-glob@npm:1.1.0" dependencies: "@types/node": "*" - checksum: cc888be86e729c1e2f799a926c091b464d58016aaee69e08b58878668ec0137e985236775a3eaac14273554bf45c7da92fe19b900370f8d02f47a32709000ba8 + checksum: 98cabfac6beddd3aeb3624e05d57b8dd1354431e436e9e795aaf74ddf2f1c23342d7b8df7586cc3d1374ceeee0d7975638fae97cb1739572d8a4067ebebb91d9 languageName: node linkType: hard "@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": - version: 1.8.24 - resolution: "@types/recharts@npm:1.8.24" + version: 1.8.23 + resolution: "@types/recharts@npm:1.8.23" dependencies: "@types/d3-shape": ^1 "@types/react": "*" - checksum: 1341e5472bf62a83ab98648bc5c14a9a81fba16af9255203ef12a21caa21a988fac3198d9771703394eb876d4fbefb42e818865e35ecfe0d105aee1d1164aa6e + checksum: 0588f6245f067583f14f98637e24c117cb7f90128926f9b09fa7ed7411a6391d47198afba60201759efd588d5e520cc88d04afdc11fda1d70c62ccee52c0f02f languageName: node linkType: hard @@ -16028,6 +15459,13 @@ __metadata: languageName: node linkType: hard +"@types/resize-observer-browser@npm:^0.1.6": + version: 0.1.7 + resolution: "@types/resize-observer-browser@npm:0.1.7" + checksum: 0377eaac8bb7a17b983b49a156006032380b459bfebefc54a5aa2f7f8a9786d2b60723e8837c61ef733330b478f4f26293e9edbdc8006238e4f80c878c56c988 + languageName: node + linkType: hard + "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -16037,7 +15475,7 @@ __metadata: languageName: node linkType: hard -"@types/responselike@npm:^1.0.0": +"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" dependencies: @@ -16046,7 +15484,7 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:0.12.0": +"@types/retry@npm:^0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 @@ -16092,9 +15530,9 @@ __metadata: linkType: hard "@types/scheduler@npm:*": - version: 0.16.2 - resolution: "@types/scheduler@npm:0.16.2" - checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + version: 0.16.1 + resolution: "@types/scheduler@npm:0.16.1" + checksum: 2ff8034df029a6cbb3623b05fa895cac4fc504806a8e948ebe29675a1edfa5ac04faac7611016076b3ffefc2037bbe344ad1978304059b2d4c78e513ec43c7bf languageName: node linkType: hard @@ -16131,21 +15569,21 @@ __metadata: linkType: hard "@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.15.1 - resolution: "@types/serve-static@npm:1.15.1" + version: 1.13.10 + resolution: "@types/serve-static@npm:1.13.10" dependencies: - "@types/mime": "*" + "@types/mime": ^1 "@types/node": "*" - checksum: 2e078bdc1e458c7dfe69e9faa83cc69194b8896cce57cb745016580543c7ab5af07fdaa8ac1765eb79524208c81017546f66056f44d1204f812d72810613de36 + checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 languageName: node linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.2 - resolution: "@types/set-cookie-parser@npm:2.4.2" + version: 2.4.0 + resolution: "@types/set-cookie-parser@npm:2.4.0" dependencies: "@types/node": "*" - checksum: c31bf04eb9620829dc3c91bced74ac934ad039d20d20893fb5acac0f08769cbd4eef3bf7502a0289c7be59c3e9cfa456147b4e88bff47dd1b9efb4995ba5d5a3 + checksum: dfd9f31079e44ad5922c142564e8cfc43c8ed61dafd4f22ab3862dd76971398a6063b4e8e89a047607e7a0ff0914a0e4b16a51ff2fc9b73c4196744666762685 languageName: node linkType: hard @@ -16173,9 +15611,9 @@ __metadata: linkType: hard "@types/sizzle@npm:*, @types/sizzle@npm:^2.3.2": - version: 2.3.3 - resolution: "@types/sizzle@npm:2.3.3" - checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 + version: 2.3.2 + resolution: "@types/sizzle@npm:2.3.2" + checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d languageName: node linkType: hard @@ -16189,24 +15627,15 @@ __metadata: linkType: hard "@types/ssh2-streams@npm:*": - version: 0.1.9 - resolution: "@types/ssh2-streams@npm:0.1.9" + version: 0.1.8 + resolution: "@types/ssh2-streams@npm:0.1.8" dependencies: "@types/node": "*" - checksum: 190f3c235bf19787cd255f366d3ac9233875750095f3c73d15e72a1e67a826aed7e7c389603c5e89cb6420b87ff6dffc566f9174e546ddb7ff8c8dc2e8b00def + checksum: 1df7035f66165e1719cd61c365cbeb8c3221d645bcd57519a7f0f7b1cb9ff7b37e190480f9a2a8ed95cf126cac066c0f1ca6d365101f828966903e36efb59fcc languageName: node linkType: hard -"@types/ssh2@npm:*": - version: 1.11.8 - resolution: "@types/ssh2@npm:1.11.8" - dependencies: - "@types/node": ^18.11.18 - checksum: ee8b990652ee5ade2bab513e2e30443673c94cc54bf9912d63a46dd51777ab088fa2213d830d3f538c7540f5b2bf6bccb2bebd4071a6804fc4a89df5352c4ae0 - languageName: node - linkType: hard - -"@types/ssh2@npm:^0.5.48": +"@types/ssh2@npm:*, @types/ssh2@npm:^0.5.48": version: 0.5.52 resolution: "@types/ssh2@npm:0.5.52" dependencies: @@ -16217,9 +15646,9 @@ __metadata: linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + version: 2.0.0 + resolution: "@types/stack-utils@npm:2.0.0" + checksum: b3fbae25b073116977ecb5c67d22f14567b51a7792403b0bf46e5de8f29bde3bd4ec1626afb22065495ca7f1c699c8bd66720050c94b8f8f9bcefbee79d161fd languageName: node linkType: hard @@ -16233,21 +15662,21 @@ __metadata: linkType: hard "@types/styled-jsx@npm:^2.2.8": - version: 2.2.9 - resolution: "@types/styled-jsx@npm:2.2.9" + version: 2.2.8 + resolution: "@types/styled-jsx@npm:2.2.8" dependencies: "@types/react": "*" - checksum: 0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e + checksum: 6f1e5d893da847595a625c0281a78350d03c0650a7abb7aedbf5a20ccb085d925185823df611f6aff45fa908904bc3736f8d8bafd7b990b1563d25d92339904f languageName: node linkType: hard "@types/superagent@npm:*": - version: 4.1.16 - resolution: "@types/superagent@npm:4.1.16" + version: 4.1.7 + resolution: "@types/superagent@npm:4.1.7" dependencies: "@types/cookiejar": "*" "@types/node": "*" - checksum: 187d1d32fdafd20b27e81728c46283160d3296ad904d56e0780769cf524105c94cc64bf5bafa170400cf5f1063d30826427de42ff0894d15b54df6d0fa31be4e + checksum: 090a9fd148d82550a8feda89df4a9f3051ff2e253b02cf5f84e01c23f6e5225c0bf814d600167449c5bd090a02e42449dfbe8fa089fc24b7c10e397d814e37b9 languageName: node linkType: hard @@ -16298,12 +15727,11 @@ __metadata: linkType: hard "@types/terser-webpack-plugin@npm:^5.0.4": - version: 5.0.4 - resolution: "@types/terser-webpack-plugin@npm:5.0.4" + version: 5.2.0 + resolution: "@types/terser-webpack-plugin@npm:5.2.0" dependencies: - terser: ^5.3.8 - webpack: ^5.1.0 - checksum: 7b3845526d4ed7b636f7b2f8f35b5d7e45211f7a55afc85e32a66655eaf65cd193e2fec195bcdb473c0d9a5b2828798b9c23196fdc86e9cd2e9420227012f438 + terser-webpack-plugin: "*" + checksum: 475b0f160c9f83641255f6516b69d7908b9e3e8e8ab653f3a257690249f9614f9386c0897eba6e4e35182ec0d83f57454d62fb94b38ae7c171891641350072ee languageName: node linkType: hard @@ -16326,9 +15754,9 @@ __metadata: linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 + version: 4.0.0 + resolution: "@types/tough-cookie@npm:4.0.0" + checksum: 454fa8d4d64532992274ebf2ff5ea0061b0dd32a2282255a3e793f04a8b64a9c4c1f9e0f4ed83c514c852b7b604d69336c66c80de4a857cb41a81e9572981e7f languageName: node linkType: hard @@ -16340,9 +15768,9 @@ __metadata: linkType: hard "@types/trusted-types@npm:*": - version: 2.0.3 - resolution: "@types/trusted-types@npm:2.0.3" - checksum: 4794804bc4a4a173d589841b6d26cf455ff5dc4f3e704e847de7d65d215f2e7043d8757e4741ce3a823af3f08260a8d04a1a6e9c5ec9b20b7b04586956a6b005 + version: 2.0.2 + resolution: "@types/trusted-types@npm:2.0.2" + checksum: 3371eef5f1c50e1c3c07a127c1207b262ba65b83dd167a1c460fc1b135a3fb0c97b9f508efebd383f239cc5dd5b7169093686a692a501fde9c3f7208657d9b0d languageName: node linkType: hard @@ -16362,13 +15790,6 @@ __metadata: languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e - languageName: node - linkType: hard - "@types/uuid@npm:^8.0.0": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -16377,12 +15798,12 @@ __metadata: linkType: hard "@types/vinyl@npm:^2.0.4": - version: 2.0.7 - resolution: "@types/vinyl@npm:2.0.7" + version: 2.0.6 + resolution: "@types/vinyl@npm:2.0.6" dependencies: "@types/expect": ^1.20.4 "@types/node": "*" - checksum: 8e6e341860a2a024d5802517fb171ffc66bfbd91b0eefe8dd4376e08733e468781417ba861b9d32bb8207707cf554e3aeb60d08297c5e666a40520af95082e2d + checksum: 5012fb61e3a29e7deaac7e66b6d8cb73d87d15965c8a38cb69277c2beb851a9a8ec09d4a1b07a3151e143afc2e3a102ca368b9a0e08f2f29de9183c97f9c7d85 languageName: node linkType: hard @@ -16430,27 +15851,27 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + version: 15.0.0 + resolution: "@types/yargs-parser@npm:15.0.0" + checksum: 333ab73a1f9c82c64b2fac2441558e58f062fbe7affc35bb53b8e755b62cdd32b1bbc6f4da23773887a2189bf04395e2a8c710df344df4cd578993aeefe98053 languageName: node linkType: hard "@types/yargs@npm:^16.0.0": - version: 16.0.5 - resolution: "@types/yargs@npm:16.0.5" + version: 16.0.4 + resolution: "@types/yargs@npm:16.0.4" dependencies: "@types/yargs-parser": "*" - checksum: 22697f7cc8aa32dcc10981a87f035e183303a58351c537c81fb450270d5c494b1d918186210e445b0eb2e4a8b34a8bda2a595f346bdb1c9ed2b63d193cb00430 + checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.22 - resolution: "@types/yargs@npm:17.0.22" + version: 17.0.12 + resolution: "@types/yargs@npm:17.0.12" dependencies: "@types/yargs-parser": "*" - checksum: 0773523fda71bafdc52f13f5970039e535a353665a60ba9261149a5c9c2b908242e6e77fbb7a8c06931ec78ce889d64d09673c68ba23eb5f5742d5385d0d1982 + checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 languageName: node linkType: hard @@ -16485,17 +15906,17 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.9.0": - version: 5.55.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.55.0" + version: 5.53.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.53.0" dependencies: - "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.55.0 - "@typescript-eslint/type-utils": 5.55.0 - "@typescript-eslint/utils": 5.55.0 + "@typescript-eslint/scope-manager": 5.53.0 + "@typescript-eslint/type-utils": 5.53.0 + "@typescript-eslint/utils": 5.53.0 debug: ^4.3.4 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 + regexpp: ^3.2.0 semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: @@ -16504,54 +15925,69 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: e3239ec6016eeb73b8b4d8310581978e28b8d3378140a8eb70bd8e33ffd332266020c19d493e0ccae4edfd4abd6097608718c50308fe6288f4ffeb8e4784efd9 + checksum: 12dffe65969d8e5248c86a700fe46a737e55ecafb276933e747b4731eab6266fe55e2d43a34b8b340179fe248e127d861cd016a7614b1b9804cd0687c99616d1 languageName: node linkType: hard "@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.55.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.55.0" + version: 5.9.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.9.0" dependencies: - "@typescript-eslint/utils": 5.55.0 + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.9.0 + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/typescript-estree": 5.9.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: e674ce85f40c5ba21d26fbf8c2195cc2e411823d545cac5c73856c5f707d276aa4764d10c47e6469a5f63825e77bc98a88103da32130f23da378e699bef1ea94 + checksum: 731b27840642b644e65f4ae321ed47e973ffadacd1aa24a19b02b4b298b5bcfbfa16c2d3d034e87a08c3c45f942c5b974f7619cb143eb23fb950f37418dce791 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.9.0": - version: 5.55.0 - resolution: "@typescript-eslint/parser@npm:5.55.0" + version: 5.53.0 + resolution: "@typescript-eslint/parser@npm:5.53.0" dependencies: - "@typescript-eslint/scope-manager": 5.55.0 - "@typescript-eslint/types": 5.55.0 - "@typescript-eslint/typescript-estree": 5.55.0 + "@typescript-eslint/scope-manager": 5.53.0 + "@typescript-eslint/types": 5.53.0 + "@typescript-eslint/typescript-estree": 5.53.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 48a20dc7e67960b5168b77bfb9d11d053a21d57bb83cf7b59f750191cbca5eea3b4636a8e6e75cc0aca5a84cdef91fed5440934fc2935f8c6fa71630a253a50c + checksum: 979e5d63793a9e64998b1f956ba0f00f8a2674db3a664fafce7b2433323f5248bd776af8305e2419d73a9d94c55176fee099abc5c153b4cc52e5765c725c1edd languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.55.0": - version: 5.55.0 - resolution: "@typescript-eslint/scope-manager@npm:5.55.0" +"@typescript-eslint/scope-manager@npm:5.53.0": + version: 5.53.0 + resolution: "@typescript-eslint/scope-manager@npm:5.53.0" dependencies: - "@typescript-eslint/types": 5.55.0 - "@typescript-eslint/visitor-keys": 5.55.0 - checksum: f253db88f69a29e4abe2f567d0a611cc3e7fb1a911a2cc54a2f6baf16e3de4d1883b3f8e45ee61b3db9fa5543dda0fd7b608de9d28ba6173ab49bfd17ff90cad + "@typescript-eslint/types": 5.53.0 + "@typescript-eslint/visitor-keys": 5.53.0 + checksum: 51f31dc01e95908611f402441f58404da80a338c0237b2b82f4a7b0b2e8868c4bfe8f7cf44b2567dd56533de609156a5d4ac54bb1f9f09c7014b99428aef2543 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.55.0": - version: 5.55.0 - resolution: "@typescript-eslint/type-utils@npm:5.55.0" +"@typescript-eslint/scope-manager@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/scope-manager@npm:5.9.0" dependencies: - "@typescript-eslint/typescript-estree": 5.55.0 - "@typescript-eslint/utils": 5.55.0 + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/visitor-keys": 5.9.0 + checksum: 46e7ab0cef558e7faf1aa8d122a265e196566c0073292f5b2f9cede1f63f52860be8e4ef90251c15e0922339c15852584cb5337382035baff87f1203c0c8d1b5 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.53.0": + version: 5.53.0 + resolution: "@typescript-eslint/type-utils@npm:5.53.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.53.0 + "@typescript-eslint/utils": 5.53.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -16559,23 +15995,30 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5c60d441355b51f96b596324068c10605c74abb46748c0bbc6d8f7f2ea40acb6b4bda3b537105fa189172324c56d18bd88e7102e67f99f8c03bc05c6d0e2023d + checksum: 52c40967c5fabd58c2ae8bf519ef89e4feb511e4df630aeaeac8335661a79b6b3a32d30a61a5f1d8acc703f21c4d90751a5d41cda1b35d08867524da11bc2e1d languageName: node linkType: hard -"@typescript-eslint/types@npm:5.55.0": - version: 5.55.0 - resolution: "@typescript-eslint/types@npm:5.55.0" - checksum: 7d851f09a2106514d3a9c7164d34758f30abfe554e3c7a02be75cdc7e16644e23ca32840a8f39a0321bc509927fb4d98ce91b22b21e8544ac56cef33b815a864 +"@typescript-eslint/types@npm:5.53.0": + version: 5.53.0 + resolution: "@typescript-eslint/types@npm:5.53.0" + checksum: b0eaf23de4ab13697d4d2095838c959a3f410c30f0d19091e5ca08e62320c3cc3c72bcb631823fb6a4fbb31db0a059e386a0801244930d0a88a6a698e5f46548 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.55.0": - version: 5.55.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.55.0" +"@typescript-eslint/types@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/types@npm:5.9.0" + checksum: 7c4e142600aec266b41418dab1d0cee8cace980b6990692df6522de6eab6705bf515aef36180e4a38c62acb10c92fb474269ac6856a4266d6b035068cd83fad3 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.53.0": + version: 5.53.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.53.0" dependencies: - "@typescript-eslint/types": 5.55.0 - "@typescript-eslint/visitor-keys": 5.55.0 + "@typescript-eslint/types": 5.53.0 + "@typescript-eslint/visitor-keys": 5.53.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -16584,35 +16027,63 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: d24a11aee3d01067018d99804f420aecb8af88e43bf170d5d14f6480bd378c0a81ce49a37f5d6c36e5f0f319e3fa8b099720f295f2767338be1a4f7e9a5323e1 + checksum: 6e119c8e4167c8495d728c5556a834545a9c064918dd5e7b79b0d836726f4f8e2a0297b0ac82bf2b71f1e5427552217d0b59d8fb1406fd79bd3bf91b75dca873 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.55.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": - version: 5.55.0 - resolution: "@typescript-eslint/utils@npm:5.55.0" +"@typescript-eslint/typescript-estree@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.9.0" + dependencies: + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/visitor-keys": 5.9.0 + debug: ^4.3.2 + globby: ^11.0.4 + is-glob: ^4.0.3 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 71e3f720e335fb08e66950d32b723484aa4d1f4a3163e82259f4be2d11091545070c2e71472be470403cb6f82bf1abe84fa89c1d0b1d47adc8550b3f70aabfb5 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.53.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": + version: 5.53.0 + resolution: "@typescript-eslint/utils@npm:5.53.0" dependencies: - "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.55.0 - "@typescript-eslint/types": 5.55.0 - "@typescript-eslint/typescript-estree": 5.55.0 + "@typescript-eslint/scope-manager": 5.53.0 + "@typescript-eslint/types": 5.53.0 + "@typescript-eslint/typescript-estree": 5.53.0 eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 368cfc3fb9d6af6901e739e2e41c3f7f1c1244576607445f4f59d95eccb237f73e1a75e7f0816ec9a32a0f1ec6bb4a3602a99e17e70fe184e62f7c69dcbe4b8d + checksum: 18e6bac14ae853385a74123759850bca367904723e170c37416fc014673eb714afb6bb090367bff61494a8387e941b6af65ee5f4f845f7177fabb4df85e01643 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.55.0": - version: 5.55.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.55.0" +"@typescript-eslint/visitor-keys@npm:5.53.0": + version: 5.53.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.53.0" dependencies: - "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/types": 5.53.0 eslint-visitor-keys: ^3.3.0 - checksum: 0b24c72dff99dd2cf41c19d20067f8ab20a38aa2e82c79c5530bec7cf651031e95c80702fc21c813c9b94e5f3d4cd210f13967b2966ef38abe548cb5f05848a3 + checksum: 090695883c15364c6f401e97f56b13db0f31c1114f3bd22562bd41734864d27f6a3c80de33957e9dedab2d5f94b0f4480ba3fde1d4574e74dca4593917b7b54a + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.9.0" + dependencies: + "@typescript-eslint/types": 5.9.0 + eslint-visitor-keys: ^3.0.0 + checksum: 34a595b83b0e7d4f387d6c81b272804b94a1a91478c5f856fdfdd227595bf8562bf3f5d732606d10b4522c3f2617d09d4bacd2193f757a324ea66b3144a68903 languageName: node linkType: hard @@ -16819,22 +16290,55 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1": - version: 0.8.3 - resolution: "@whatwg-node/fetch@npm:0.8.3" +"@whatwg-node/fetch@npm:0.5.3, @whatwg-node/fetch@npm:^0.5.0": + version: 0.5.3 + resolution: "@whatwg-node/fetch@npm:0.5.3" dependencies: "@peculiar/webcrypto": ^1.4.0 - "@whatwg-node/node-fetch": ^0.3.3 + abort-controller: ^3.0.0 busboy: ^1.6.0 - urlpattern-polyfill: ^6.0.2 - web-streams-polyfill: ^3.2.1 - checksum: 1b12abaf8113634201d4fceba378c0e859d86a71876cf5ba17af73d7c6c18129c98e27e10959a36893472b4b2648c82d651b2dd5681ed4beacb193e18aa91685 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: ^5.12.0 + web-streams-polyfill: ^3.2.0 + checksum: 73087779b3b0e70d0abf8b2a5d82919c29c26f8062e16db0cad413fe45c7b58c3c12cc2bcd5942aebdfdc4feee97b01cf1ff6c5d92d9507a140afdcafa410b12 languageName: node linkType: hard -"@whatwg-node/node-fetch@npm:^0.3.3": - version: 0.3.3 - resolution: "@whatwg-node/node-fetch@npm:0.3.3" +"@whatwg-node/fetch@npm:^0.2.4": + version: 0.2.6 + resolution: "@whatwg-node/fetch@npm:0.2.6" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + abort-controller: ^3.0.0 + busboy: ^1.6.0 + event-target-polyfill: ^0.0.3 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: ^5.8.0 + web-streams-polyfill: ^3.2.0 + checksum: 12ee718be802860fbde2647ec0139dba598a278b0248326c0a314591b7096c84c34b16f5317273b0b11f3bbc6ff0d5d1df08983b4e9f5c3f0d779fde727f21af + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.8.0": + version: 0.8.1 + resolution: "@whatwg-node/fetch@npm:0.8.1" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + "@whatwg-node/node-fetch": ^0.3.0 + busboy: ^1.6.0 + urlpattern-polyfill: ^6.0.2 + web-streams-polyfill: ^3.2.1 + checksum: b827ac2299676705d98d31be4b68e70741200618b38daaae0d70e587f61fae573854170e2ca219d64bbd910b96960e26b64aa9869e9194a4d162e2a751d6f7a7 + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.3.0": + version: 0.3.0 + resolution: "@whatwg-node/node-fetch@npm:0.3.0" dependencies: "@whatwg-node/events": ^0.0.2 busboy: ^1.6.0 @@ -16843,7 +16347,7 @@ __metadata: tslib: ^2.3.1 peerDependencies: "@types/node": ^18.0.6 - checksum: 4b32aec0ea6d0e1d495002e67694e44cb0885f7f488bd7fb75ad404d9fee3c09f476738c038e770a45ef8020e171e889ff7d9799f434aca4439c80c320620d6f + checksum: 141deb3f44d1978218c64ca285120b3e2427159773056774f2251f9d5d418c8e1d6f27f4b593d031ff4124f9cd00cb4bd9fd681e4528c9f498c72356a520b69f languageName: node linkType: hard @@ -16874,20 +16378,13 @@ __metadata: languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.6, @xmldom/xmldom@npm:^0.7.9": +"@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.5, @xmldom/xmldom@npm:^0.7.6": version: 0.7.9 resolution: "@xmldom/xmldom@npm:0.7.9" checksum: 66e37b7800132f891b885b2eceeeebc53f60b69789da10276f1584256b963d79a28c7ae2071bc53a9cd842d9b03554c761b2701fe8036d6052f26bcd0ae8f2bb languageName: node linkType: hard -"@xmldom/xmldom@npm:^0.8.3": - version: 0.8.6 - resolution: "@xmldom/xmldom@npm:0.8.6" - checksum: f17ac6d99a971a6aeb831fcfc5cfa86f367664e45815046548814b2deb17ccc421fef4e0d5ba29e66179d112b552f6caa5680064f8e7bd8a389b788a60404c8e - languageName: node - linkType: hard - "@xobotyi/scrollbar-width@npm:^1.9.5": version: 1.9.5 resolution: "@xobotyi/scrollbar-width@npm:1.9.5" @@ -16917,12 +16414,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.4": - version: 3.0.0-rc.40 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.40" + version: 3.0.0-rc.21 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.21" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: 64df0d8dad4cd43af5fcff758b0cfc47e7dc56e00eed87e3bd6ce8a9ea265c41fe758c1e01607e630bae46c9f8324ca853bced58be3d1c93492e125757ab7f30 + checksum: c0741ef01089a7d452dfb75b8c24a82ddcc3e218dac22b794a06f2e50c7070378c460f63f63fb7ed0f62f634114e448e3d85a75ccd4db84e1526242ae9b4a7d5 languageName: node linkType: hard @@ -16933,16 +16430,6 @@ __metadata: languageName: node linkType: hard -"GendocuPublicApis@https://git.gendocu.com/gendocu/GendocuPublicApis.git#master": - version: 1.0.0 - resolution: "GendocuPublicApis@https://git.gendocu.com/gendocu/GendocuPublicApis.git#commit=83be829a28b0c28c85c18f8d8a2748efbfa58819" - dependencies: - "@improbable-eng/grpc-web": ^0.14.0 - google-protobuf: ^3.15.8 - checksum: eddc66c877000fb28b06ed56022b31ef81161fd8bcf766f2da3e3d4529b9e0cb8a4b43661d118336077dfd882ad2381885c4104a5e8524c315e2dc7d341661b2 - languageName: node - linkType: hard - "a-sync-waterfall@npm:^1.0.0": version: 1.0.1 resolution: "a-sync-waterfall@npm:1.0.1" @@ -16974,9 +16461,9 @@ __metadata: linkType: hard "abstract-logging@npm:^2.0.0": - version: 2.0.1 - resolution: "abstract-logging@npm:2.0.1" - checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e + version: 2.0.0 + resolution: "abstract-logging@npm:2.0.0" + checksum: 2f3e0ef758a18d98ddfd4fc01532724d6ada0945e2f679a0ad3b73fbe4b3594b1a3047dafb25bb88d3cb4031c4ea6090b25f8f5b7cfb4d2c7bcf125a56aca6df languageName: node linkType: hard @@ -17000,22 +16487,12 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: ^8.1.0 - acorn-walk: ^8.0.2 - checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - "acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" + version: 1.7.6 + resolution: "acorn-import-assertions@npm:1.7.6" peerDependencies: acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 + checksum: bc8a1585abd70ebfb3a6b3112f5e3974fee3ac598230f916a3857f0ad4fa7e72197be532c49d1feeb83678ef264f34bee9bf1934dfb2f276d88468134a51fa9f languageName: node linkType: hard @@ -17029,13 +16506,13 @@ __metadata: linkType: hard "acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f + version: 7.1.1 + resolution: "acorn-walk@npm:7.1.1" + checksum: 046be0b8094b16459d94dadc550adb0cf5ace3fad02880cb4fd968e2250e988d0022f1f169c60b2fecc77bc711c46f91a6b1b7b72d6c458b008c9e821e89cfff languageName: node linkType: hard -"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -17051,19 +16528,19 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": + version: 8.8.0 + resolution: "acorn@npm:8.8.0" bin: acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + checksum: 7270ca82b242eafe5687a11fea6e088c960af712683756abf0791b68855ea9cace3057bd5e998ffcef50c944810c1e0ca1da526d02b32110e13c722aa959afdc languageName: node linkType: hard "address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 + version: 1.1.2 + resolution: "address@npm:1.1.2" + checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 languageName: node linkType: hard @@ -17077,13 +16554,13 @@ __metadata: linkType: hard "agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.1": - version: 4.3.0 - resolution: "agentkeepalive@npm:4.3.0" + version: 4.2.1 + resolution: "agentkeepalive@npm:4.2.1" dependencies: debug: ^4.1.0 - depd: ^2.0.0 + depd: ^1.1.2 humanize-ms: ^1.2.1 - checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 + checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 languageName: node linkType: hard @@ -17141,7 +16618,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": +"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -17165,6 +16642,13 @@ __metadata: languageName: node linkType: hard +"alphanum-sort@npm:^1.0.2": + version: 1.0.2 + resolution: "alphanum-sort@npm:1.0.2" + checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 + languageName: node + linkType: hard + "already@npm:^3.2.0": version: 3.4.1 resolution: "already@npm:3.4.1" @@ -17221,9 +16705,9 @@ __metadata: linkType: hard "ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + version: 4.1.0 + resolution: "ansi-regex@npm:4.1.0" + checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 languageName: node linkType: hard @@ -17260,9 +16744,9 @@ __metadata: linkType: hard "ansi-styles@npm:^6.0.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + version: 6.1.0 + resolution: "ansi-styles@npm:6.1.0" + checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 languageName: node linkType: hard @@ -17274,12 +16758,12 @@ __metadata: linkType: hard "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" + version: 3.1.2 + resolution: "anymatch@npm:3.1.2" dependencies: normalize-path: ^3.0.0 picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 languageName: node linkType: hard @@ -17348,22 +16832,22 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" + version: 3.0.0 + resolution: "are-we-there-yet@npm:3.0.0" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 languageName: node linkType: hard "are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" + version: 1.1.5 + resolution: "are-we-there-yet@npm:1.1.5" dependencies: delegates: ^1.0.0 readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 + checksum: 9a746b1dbce4122f44002b0c39fbba5b2c6f52c00e88b6ccba6fc68652323f8a1355a20e8ab94846995626d8de3bf67669a3b4a037dff0885db14607168f2b15 languageName: node linkType: hard @@ -17398,14 +16882,14 @@ __metadata: linkType: hard "args@npm:^5.0.0": - version: 5.0.3 - resolution: "args@npm:5.0.3" + version: 5.0.1 + resolution: "args@npm:5.0.1" dependencies: camelcase: 5.0.0 chalk: 2.4.2 leven: 2.1.0 mri: 1.1.4 - checksum: ac39e656090f9364d7a2a42216a572dfe36d3e4d16d87ca4c1c9552a1c325dc222b642124cb96cdeeafb46662922910191f5aa12142cc4ca117b6d85454c8423 + checksum: 51e2a05f32d15b8e292f000e6b232118df61b8f4fd446b17bb4e99df9ab47fe2c4a01924d7f967a6f08e82f9c19be277b08ed22bceff058aca849144ef8efed3 languageName: node linkType: hard @@ -17418,16 +16902,6 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 - languageName: node - linkType: hard - "array-differ@npm:^3.0.0": version: 3.0.0 resolution: "array-differ@npm:3.0.0" @@ -17462,13 +16936,6 @@ __metadata: languageName: node linkType: hard -"array-timsort@npm:^1.0.3": - version: 1.0.3 - resolution: "array-timsort@npm:1.0.3" - checksum: fd4b5b0911214bdc8b5699ed10d309685551b518b3819c611c967cff59b87aee01cf591a10e36a3f14dbff696984bd6682b845f6fdbf1217195e910f241a4f78 - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -17534,24 +17001,23 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" +"asn1.js@npm:^4.0.0": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" dependencies: bn.js: ^4.0.0 inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - safer-buffer: ^2.1.0 - checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 languageName: node linkType: hard "asn1@npm:^0.2.4, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" + version: 0.2.4 + resolution: "asn1@npm:0.2.4" dependencies: safer-buffer: ~2.1.0 - checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c languageName: node linkType: hard @@ -17616,9 +17082,9 @@ __metadata: linkType: hard "async-lock@npm:^1.1.0": - version: 1.4.0 - resolution: "async-lock@npm:1.4.0" - checksum: a71ef9e50dc448a8e8dd6482494210d7b6f556d4815612b1fed5662216cd756c2c8fb9c2153a9a66ea90b36ba7fb18aa568d11813aadc23feb4c5b0b188df614 + version: 1.2.4 + resolution: "async-lock@npm:1.2.4" + checksum: 9b8cf65bb9ac7b58ff95539a03b73d51f64d0aea95cde1ebf787859670a8998f0a5258f118db6b54305bf6ed20cf3a2f923f4dd69a58d472fa78cca436c42342 languageName: node linkType: hard @@ -17632,9 +17098,9 @@ __metadata: linkType: hard "async@npm:^3.2.0, async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + version: 3.2.3 + resolution: "async@npm:3.2.3" + checksum: c4bee57ab2249af3dc83ca3ef9acfa8e822c0d5e5aa41bae3eaf7f673648343cd64ecd7d26091ffd357f3f044428b17b5f00098494b6cf8b6b3e9681f0636ca1 languageName: node linkType: hard @@ -17667,11 +17133,11 @@ __metadata: linkType: hard "autolinker@npm:^3.11.0": - version: 3.16.2 - resolution: "autolinker@npm:3.16.2" + version: 3.14.1 + resolution: "autolinker@npm:3.14.1" dependencies: - tslib: ^2.3.0 - checksum: 1d5d20ef23586629ec3c341052e6bb6250399cf5e66db21540c17b2f5b1137066435fb274a2115b57464d05e75b85afad61ef7cdf6ea693ef2920a3748b7249d + tslib: ^1.9.3 + checksum: e8c0b07053a6d1557953325e500d6e59f4c7c5bb2ae97d0ace9229019133fc0f058ef41636bfc74b6581d98bc4a5e15631dc00cfe0993d0c41b525e2e0652e37 languageName: node linkType: hard @@ -17736,8 +17202,8 @@ __metadata: linkType: hard "aws-sdk@npm:^2.1231.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": - version: 2.1338.0 - resolution: "aws-sdk@npm:2.1338.0" + version: 2.1279.0 + resolution: "aws-sdk@npm:2.1279.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -17749,7 +17215,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.4.19 - checksum: b4b4e74ee93a98e728182220281062230b62dd64a2f2d47054ed9e14d84044de2329923af7f86a92d280af6bc1b37005394c229542b553d5a386f4874d430b79 + checksum: ee8e8ee7baea9abaa0e1d08294be8ff00795b9db606101ef69a45d1465dac936187e43079fbe7a28ff4a463c8f9cd728d9bfee3e3974b0b5b88eb437dc81295b languageName: node linkType: hard @@ -17768,9 +17234,9 @@ __metadata: linkType: hard "axe-core@npm:^4.6.2": - version: 4.6.3 - resolution: "axe-core@npm:4.6.3" - checksum: d0c46be92b9707c48b88a53cd5f471b155a2bfc8bf6beffb514ecd14e30b4863e340b5fc4f496d82a3c562048088c1f3ff5b93b9b3b026cb9c3bfacfd535da10 + version: 4.6.2 + resolution: "axe-core@npm:4.6.2" + checksum: 81523eeaf101a3a129545a936d448d235ecf1f8c0daccdee224d29f63bec716fa38cf1a65c8462548b1f995624277eed790d9d9977ae40ba692c4cadf1196403 languageName: node linkType: hard @@ -17797,17 +17263,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:=1.3.4": - version: 1.3.4 - resolution: "axios@npm:1.3.4" - dependencies: - follow-redirects: ^1.15.0 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c - languageName: node - linkType: hard - "axios@npm:^0.21.1": version: 0.21.4 resolution: "axios@npm:0.21.4" @@ -17855,20 +17310,29 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-jest@npm:29.5.0" +"babel-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-jest@npm:29.4.3" dependencies: - "@jest/transform": ^29.5.0 + "@jest/transform": ^29.4.3 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.5.0 + babel-preset-jest: ^29.4.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede + checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 + languageName: node + linkType: hard + +"babel-plugin-dynamic-import-node@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" + dependencies: + object.assign: ^4.1.0 + checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b languageName: node linkType: hard @@ -17885,51 +17349,51 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-plugin-jest-hoist@npm:29.5.0" +"babel-plugin-jest-hoist@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-plugin-jest-hoist@npm:29.4.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" +"babel-plugin-polyfill-corejs2@npm:^0.3.1": + version: 0.3.1 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 + "@babel/compat-data": ^7.13.11 + "@babel/helper-define-polyfill-provider": ^0.3.1 semver: ^6.1.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 + checksum: ca873f14ccd6d2942013345a956de8165d0913556ec29756a748157140f5312f79eed487674e0ca562285880f05829b3712d72e1e4b412c2ce46bd6a50b4b975 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" +"babel-plugin-polyfill-corejs3@npm:^0.5.2": + version: 0.5.2 + resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 + "@babel/helper-define-polyfill-provider": ^0.3.1 + core-js-compat: ^3.21.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 + checksum: 2f3184c73f80f00ac876a5ebcad945fd8d2ae70e5f85b7ab6cc3bc69bc74025f4f7070de7abbb2a7274c78e130bd34fc13f4c85342da28205930364a1ef0aa21 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" +"babel-plugin-polyfill-regenerator@npm:^0.3.1": + version: 0.3.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 + "@babel/helper-define-polyfill-provider": ^0.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c + checksum: f1473df7b700d6795ca41301b1e65a0aff15ce6c1463fc0ce2cf0c821114b0330920f59d4cebf52976363ee817ba29ad2758544a4661a724b08191080b9fe1da languageName: node linkType: hard @@ -17974,8 +17438,8 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.0.0 + resolution: "babel-preset-current-node-syntax@npm:1.0.0" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 @@ -17991,7 +17455,7 @@ __metadata: "@babel/plugin-syntax-top-level-await": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 05c193dcf11eae66bd43621d49e346c0b94ba18a9d193a612a36cef30732ac5f62092312de76140400551dd13c457a8e79c96ebafb445cc491d993f7ccb9a9de languageName: node linkType: hard @@ -18032,15 +17496,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-preset-jest@npm:29.5.0" +"babel-preset-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-preset-jest@npm:29.4.3" dependencies: - babel-plugin-jest-hoist: ^29.5.0 + babel-plugin-jest-hoist: ^29.4.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 languageName: node linkType: hard @@ -18083,9 +17547,9 @@ __metadata: linkType: hard "bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 + version: 2.0.1 + resolution: "bail@npm:2.0.1" + checksum: 5e80e3d71c52f134bf51e9e89570c4e81e50e9ace0126954e4594699cafdf01136535bedf36780ef77802c88be3d3cfb0d0f83495d8d7ddf90e948e4fbaf99c3 languageName: node linkType: hard @@ -18142,10 +17606,10 @@ __metadata: languageName: node linkType: hard -"before-after-hook@npm:^2.2.0": - version: 2.2.3 - resolution: "before-after-hook@npm:2.2.3" - checksum: a1a2430976d9bdab4cd89cb50d27fa86b19e2b41812bf1315923b0cba03371ebca99449809226425dd3bcef20e010db61abdaff549278e111d6480034bebae87 +"before-after-hook@npm:^2.1.0, before-after-hook@npm:^2.2.0": + version: 2.2.2 + resolution: "before-after-hook@npm:2.2.2" + checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 languageName: node linkType: hard @@ -18189,30 +17653,30 @@ __metadata: linkType: hard "big.js@npm:^6.1.1": - version: 6.2.1 - resolution: "big.js@npm:6.2.1" - checksum: 0b234a2fd56c52bed2798ed2020bcab6fef5e9523b99a05406ad071d1aed6ee97ada9fb8de9576092da74c68825c276e19015743b8d1baea269b60a5c666b0cd + version: 6.2.0 + resolution: "big.js@npm:6.2.0" + checksum: 42bcbf0be703c4ae8669c969d0e108f9e1730f20e85bd779e31f7a92d28f6b3e87de96e25ef8657edc0b5dc945a0f66c184ec2654276b86f49e4e9ba025f131a languageName: node linkType: hard "bignumber.js@npm:^9.0.0": - version: 9.1.1 - resolution: "bignumber.js@npm:9.1.1" - checksum: ad243b7e2f9120b112d670bb3d674128f0bd2ca1745b0a6c9df0433bd2c0252c43e6315d944c2ac07b4c639e7496b425e46842773cf89c6a2dcd4f31e5c4b11e + version: 9.0.1 + resolution: "bignumber.js@npm:9.0.1" + checksum: 6e72f6069d9db32fc8d27561164de9f811b15f9144be61f323d8b36150a239eea50c92e20ba38af2ba5e717af10b8ef12db8f9948fe2ff02bf17ede5239d15d3 languageName: node linkType: hard "bin-links@npm:^3.0.0": - version: 3.0.3 - resolution: "bin-links@npm:3.0.3" + version: 3.0.0 + resolution: "bin-links@npm:3.0.0" dependencies: - cmd-shim: ^5.0.0 + cmd-shim: ^4.0.1 mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^2.0.0 - read-cmd-shim: ^3.0.0 + npm-normalize-package-bin: ^1.0.0 + read-cmd-shim: ^2.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 - checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 + checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 languageName: node linkType: hard @@ -18246,10 +17710,10 @@ __metadata: languageName: node linkType: hard -"bintrees@npm:1.0.2": - version: 1.0.2 - resolution: "bintrees@npm:1.0.2" - checksum: 56a52b7d3634e30002b1eda740d2517a22fa8e9e2eb088e919f37c030a0ed86e364ab59e472fc770fc8751308054bb1c892979d150e11d9e11ac33bcc1b5d16e +"bintrees@npm:1.0.1": + version: 1.0.1 + resolution: "bintrees@npm:1.0.1" + checksum: 71d00ce450ee7ad080a3c86ae5f05fac841bdf95c0d78f3b3bbf8f754c19d7cb732f0f9213a46ed27cbec47eb124ffe2b686bef870718a4b9918c23210b55c73 languageName: node linkType: hard @@ -18278,20 +17742,13 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.1.1, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 - languageName: node - linkType: hard - "body-parser@npm:1.20.1": version: 1.20.1 resolution: "body-parser@npm:1.20.1" @@ -18333,14 +17790,14 @@ __metadata: linkType: hard "bonjour-service@npm:^1.0.11": - version: 1.1.0 - resolution: "bonjour-service@npm:1.1.0" + version: 1.0.11 + resolution: "bonjour-service@npm:1.0.11" dependencies: array-flatten: ^2.1.2 dns-equal: ^1.0.0 fast-deep-equal: ^3.1.3 - multicast-dns: ^7.2.5 - checksum: c0cdf6f6438ef4873ffd17768a9e62300ca30ac2bc3437bcfb6c75a3efd70ad80418c38ec19af2f5fe3a9f1dee725b83ff8e0c4a473b1b9f1718a39033b34cbf + multicast-dns: ^7.2.4 + checksum: b6093a856de9bc303551f1639945318e93782d3c40f03e38def3e2f079f478afd5385cf46538ade86f07205ac4b5f059105832b01eb9ce142fc69d27c006982f languageName: node linkType: hard @@ -18400,6 +17857,13 @@ __metadata: languageName: node linkType: hard +"brcast@npm:^3.0.1": + version: 3.0.2 + resolution: "brcast@npm:3.0.2" + checksum: 7abae42088c6ffad9ff9e0fc756607a1764e299d737b3007fa49a73a38b3fda1e51362713f645db7991878ca388de94942011188450324c3debd08509315fa94 + languageName: node + linkType: hard + "breakword@npm:^1.0.5": version: 1.0.5 resolution: "breakword@npm:1.0.5" @@ -18467,30 +17931,28 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" +"browserify-rsa@npm:^4.0.0": + version: 4.0.1 + resolution: "browserify-rsa@npm:4.0.1" dependencies: - bn.js: ^5.0.0 + bn.js: ^4.1.0 randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + checksum: e5d8406e65f8e9a2e038f6fa0cb30108269a1ab33c1563ddc78fb0fff1a43ea21d44bd3dcd01a783683f60dcbc4b58c63120a11f6d09939e3f84af378e6caef8 languageName: node linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" + version: 4.0.4 + resolution: "browserify-sign@npm:4.0.4" dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.3 - inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 + bn.js: ^4.1.1 + browserify-rsa: ^4.0.0 + create-hash: ^1.1.0 + create-hmac: ^1.1.2 + elliptic: ^6.0.0 + inherits: ^2.0.1 + parse-asn1: ^5.0.0 + checksum: b1e6f6383f6abbbd5e0f4eb0161cd211cb79af636dd14b5f038db7f3a309b3e026e7e8d7428e3f072a9baace57051a2f45cff311f3b26a901e8be921c3dab847 languageName: node linkType: hard @@ -18503,17 +17965,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5": - version: 4.21.5 - resolution: "browserslist@npm:4.21.5" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.0, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.21.2, browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" dependencies: - caniuse-lite: ^1.0.30001449 - electron-to-chromium: ^1.4.284 - node-releases: ^2.0.8 - update-browserslist-db: ^1.0.10 + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 bin: browserslist: cli.js - checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 languageName: node linkType: hard @@ -18609,17 +18071,10 @@ __metadata: languageName: node linkType: hard -"buildcheck@npm:0.0.3": - version: 0.0.3 - resolution: "buildcheck@npm:0.0.3" - checksum: baf30605c56e80c2ca0502e40e18f2ebc7075bb4a861c941c0b36cd468b27957ed11a62248003ce99b9e5f91a7dfa859b30aad4fa50f0090c77a6f596ba20e6d - languageName: node - linkType: hard - -"builtin-modules@npm:^3.3.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d +"builtin-modules@npm:^3.0.0": + version: 3.2.0 + resolution: "builtin-modules@npm:3.2.0" + checksum: 0265aa1ba78e1a16f4e18668d815cb43fb364e6a6b8aa9189c6f44c7b894a551a43b323c40206959d2d4b2568c1f2805607ad6c88adc306a776ce6904cca6715 languageName: node linkType: hard @@ -18694,8 +18149,8 @@ __metadata: linkType: hard "cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" + version: 16.1.1 + resolution: "cacache@npm:16.1.1" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -18714,15 +18169,15 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + unique-filename: ^1.1.1 + checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a languageName: node linkType: hard "cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d + version: 5.0.3 + resolution: "cacheable-lookup@npm:5.0.3" + checksum: ad5a6d5cd1630ab03b63741b610f3ed71593879b3de9ba43e6767129b2cbb8303fe24af4ec808584531a85c5605a614902cfdc41f5b6200d8c5f029d6b90c430 languageName: node linkType: hard @@ -18759,13 +18214,13 @@ __metadata: linkType: hard "call-me-maybe@npm:^1.0.1": - version: 1.0.2 - resolution: "call-me-maybe@npm:1.0.2" - checksum: 42ff2d0bed5b207e3f0122589162eaaa47ba618f79ad2382fe0ba14d9e49fbf901099a6227440acc5946f86a4953e8aa2d242b330b0a5de4d090bb18f8935cae + version: 1.0.1 + resolution: "call-me-maybe@npm:1.0.1" + checksum: d19e9d6ac2c6a83fb1215718b64c5e233f688ebebb603bdfe4af59cde952df1f2b648530fab555bf290ea910d69d7d9665ebc916e871e0e194f47c2e48e4886b languageName: node linkType: hard -"callsites@npm:^3.0.0, callsites@npm:^3.1.0": +"callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 @@ -18834,9 +18289,9 @@ __metadata: linkType: hard "camelize@npm:^1.0.0": - version: 1.0.1 - resolution: "camelize@npm:1.0.1" - checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 + version: 1.0.0 + resolution: "camelize@npm:1.0.0" + checksum: 769f8d10071f57b974d9a51dc02f589dd7fb07ea6a7ecde1a57b52ae68657ba61fe85c60d50661b76c7dbb76b6474fbfd3356aee33cf5f025cd7fd6fb2811b73 languageName: node linkType: hard @@ -18852,10 +18307,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001468 - resolution: "caniuse-lite@npm:1.0.30001468" - checksum: 39f23ce5af90fee37004bee334cd809a20f8aa46ef08244f75e33d2e32b53cfebee205018769a2712937fa05ea5a1c0249175771ffee561acd1e8e05c54f9a67 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001407 + resolution: "caniuse-lite@npm:1.0.30001407" + checksum: e1c449d22f120a708accc956c1780f1da01af6c226cb6a324e531dc9f26f53075bff98e6c9cfce806157cdeede459aa8de03a3407b05f71d292a57b2910018b1 languageName: node linkType: hard @@ -18899,9 +18354,9 @@ __metadata: linkType: hard "ccount@npm:^2.0.0": - version: 2.0.1 - resolution: "ccount@npm:2.0.1" - checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + version: 2.0.0 + resolution: "ccount@npm:2.0.0" + checksum: b238baa1415f259264a8b5fa552929ae1dc46cb46bd94a79deb29d7a814cc4cc36500b24184c38a9f0332d19c6acbb386d5bb5f4f03396140be92edd7294db1c languageName: node linkType: hard @@ -18991,6 +18446,13 @@ __metadata: languageName: node linkType: hard +"change-emitter@npm:^0.1.2": + version: 0.1.6 + resolution: "change-emitter@npm:0.1.6" + checksum: 0ed494ba9901ca56ea6f942668fd294465c334a9a0981dca96da5aea5e387c0023a630d7c658c1b532d203db54c928ddca2564e434b4a8b7f6d39155d09db255 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -19014,6 +18476,13 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^2.0.0": + version: 2.0.0 + resolution: "character-entities-legacy@npm:2.0.0" + checksum: c8941cc75d2a82f36adadc7eaa0116da13ba7600ef2c689c1932ed7b58380e84e2d7237c8795a30017623d3d889c9840aa3327076754af4a329f3030b4cc431e + languageName: node + linkType: hard + "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -19022,9 +18491,9 @@ __metadata: linkType: hard "character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def + version: 2.0.0 + resolution: "character-entities@npm:2.0.0" + checksum: bacbcacab87fcd61a4f226d9079eb1a582092d1fca581e72a6997d8b0d498225a75413e4401e5fb310f1e8be7bfa8e1485a96f9f12de31178c637c7195fcc78e languageName: node linkType: hard @@ -19035,6 +18504,13 @@ __metadata: languageName: node linkType: hard +"character-reference-invalid@npm:^2.0.0": + version: 2.0.0 + resolution: "character-reference-invalid@npm:2.0.0" + checksum: 0d33a2eb4a7e7b57ed171175faefb0d53434e92203bb9a3e66051cf55de299efe263f39e8c2611733cde100e9229193c1a186148570ba336d5ab0cf5993d6ed5 + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -19050,9 +18526,9 @@ __metadata: linkType: hard "check-types@npm:^11.1.1": - version: 11.2.2 - resolution: "check-types@npm:11.2.2" - checksum: 61ed60d59e3397c8cf694f20edf73d0061cd6a905754efdec2ccdceafbd390cb09717bab855f9eba921d36278f84c86fe20f7e731a384e9803bc469c09153831 + version: 11.1.2 + resolution: "check-types@npm:11.1.2" + checksum: 6c339a5dfe326e34a5275016c7f9464665405cd79007c057852acd677d265ddfe36236ad5567bd1e601ea88fa78bf1f882b6bc3dc7c5616c26f6b54b2c0ef4fc languageName: node linkType: hard @@ -19090,9 +18566,11 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + version: 1.0.2 + resolution: "chrome-trace-event@npm:1.0.2" + dependencies: + tslib: ^1.9.0 + checksum: a104606fd07e6191848fa15d4031ac41c1715d025074574bdbb27d998a20d75d860a2060a5aca840bfbf97ec2ef6b72df9b387ed4109a8fc6eb5c362477c9294 languageName: node linkType: hard @@ -19104,9 +18582,9 @@ __metadata: linkType: hard "ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 + version: 3.3.2 + resolution: "ci-info@npm:3.3.2" + checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 languageName: node linkType: hard @@ -19137,18 +18615,18 @@ __metadata: linkType: hard "classnames@npm:*, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e + version: 2.3.1 + resolution: "classnames@npm:2.3.1" + checksum: 14db8889d56c267a591f08b0834989fe542d47fac659af5a539e110cc4266694e8de86e4e3bbd271157dbd831361310a8293e0167141e80b0f03a0f175c80960 languageName: node linkType: hard "clean-css@npm:^5.2.2": - version: 5.3.2 - resolution: "clean-css@npm:5.3.2" + version: 5.2.2 + resolution: "clean-css@npm:5.2.2" dependencies: source-map: ~0.6.0 - checksum: 8787b281acc9878f309b5f835d410085deedfd4e126472666773040a6a8a72f472a1d24185947d23b87b1c419bf2c5ed429395d5c5ff8279c98b05d8011e9758 + checksum: 10855820829b8b6ea94e462313fdc177b297aca5c7870a969591549d6a766824f912b5e58773bd345b2a7effae863ab492258b5a77a40029fba6d11d861cbee3 languageName: node linkType: hard @@ -19175,16 +18653,6 @@ __metadata: languageName: node linkType: hard -"clear-module@npm:^4.1.2": - version: 4.1.2 - resolution: "clear-module@npm:4.1.2" - dependencies: - parent-module: ^2.0.0 - resolve-from: ^5.0.0 - checksum: 4931f0c461f5d7b9b79f62c2d1bc31c37f7f1d33b4e95eef7080a83955c0374f4c180f5a96cc4d63bbefc64a9aa5d12b155641109e8e489dfa50fd5820e5101f - languageName: node - linkType: hard - "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -19195,31 +18663,31 @@ __metadata: linkType: hard "cli-spinners@npm:^2.5.0": - version: 2.7.0 - resolution: "cli-spinners@npm:2.7.0" - checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f + version: 2.5.0 + resolution: "cli-spinners@npm:2.5.0" + checksum: 9cd7c3e22f9243c2b8436bd405d4c7aa5c7b432112fed0c9b7e1d773f8d12fb30e15083ed45474b28d5e8de490d4299dc8a213c327931a25cc998a44b4a2d747 languageName: node linkType: hard "cli-table3@npm:~0.6.1": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" + version: 0.6.1 + resolution: "cli-table3@npm:0.6.1" dependencies: - "@colors/colors": 1.5.0 + colors: 1.4.0 string-width: ^4.2.0 dependenciesMeta: - "@colors/colors": + colors: optional: true - checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c + checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 languageName: node linkType: hard "cli-table@npm:^0.3.1": - version: 0.3.11 - resolution: "cli-table@npm:0.3.11" + version: 0.3.6 + resolution: "cli-table@npm:0.3.6" dependencies: colors: 1.0.3 - checksum: 59fb61f992ac9bc8610ed98c72bf7f5d396c5afb42926b6747b46b0f8bb98a0dfa097998e77542ac334c1eb7c18dbf4f104d5783493273c5ec4c34084aa7c663 + checksum: b0cd08578c810240920438cc2b3ffb4b4f5106b29f3362707f1d8cfc0c0440ad2afb70b96e30ce37f72f0ffe1e844ae7341dde4df17d51ad345eb186a5903af2 languageName: node linkType: hard @@ -19250,6 +18718,17 @@ __metadata: languageName: node linkType: hard +"clipboard@npm:^2.0.4": + version: 2.0.11 + resolution: "clipboard@npm:2.0.11" + dependencies: + good-listener: ^1.2.2 + select: ^1.1.2 + tiny-emitter: ^2.0.0 + checksum: 413055a6038e43898e0e895216b58ed54fbf386f091cb00188875ef35b186cefbd258acdf4cb4b0ac87cbc00de936f41b45dde9fe1fd1a57f7babb28363b8748 + languageName: node + linkType: hard + "cliui@npm:^3.2.0": version: 3.2.0 resolution: "cliui@npm:3.2.0" @@ -19283,17 +18762,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - "clone-buffer@npm:^1.0.0": version: 1.0.0 resolution: "clone-buffer@npm:1.0.0" @@ -19313,11 +18781,11 @@ __metadata: linkType: hard "clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" + version: 1.0.2 + resolution: "clone-response@npm:1.0.2" dependencies: mimic-response: ^1.0.0 - checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e + checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda languageName: node linkType: hard @@ -19353,26 +18821,26 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2, clsx@npm:^1.0.4, clsx@npm:^1.2.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 +"clsx@npm:^1.0.2, clsx@npm:^1.0.4": + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 languageName: node linkType: hard "cluster-key-slot@npm:^1.1.0": - version: 1.1.2 - resolution: "cluster-key-slot@npm:1.1.2" - checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681 + version: 1.1.0 + resolution: "cluster-key-slot@npm:1.1.0" + checksum: fc953c75209b1ef9088081bab4e40a0b2586491c974ab93460569c014515ca5a2e31c043f185285e177007162fc353d07836d98f570c171dbe055775430e495b languageName: node linkType: hard -"cmd-shim@npm:^5.0.0": - version: 5.0.0 - resolution: "cmd-shim@npm:5.0.0" +"cmd-shim@npm:^4.0.1": + version: 4.1.0 + resolution: "cmd-shim@npm:4.1.0" dependencies: mkdirp-infer-owner: ^2.0.0 - checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb + checksum: d25bb57a8accab681bcfc632e085573b9395cdc60aed8d0ce479f988f9ced16720c89732aef81020140e43fd223b6573c22402e5a1c0cbd0149443104df88d68 languageName: node linkType: hard @@ -19418,15 +18886,15 @@ __metadata: linkType: hard "codemirror@npm:^5.65.3": - version: 5.65.12 - resolution: "codemirror@npm:5.65.12" - checksum: 6fca4434ef781b0c393c0c24766c53a9a21e7bc5b48b22414032aa458574be5e6ec5d4d95e8d179769937c6c39a54564af8aebbf7f9dc289165bbcd0ae765be7 + version: 5.65.3 + resolution: "codemirror@npm:5.65.3" + checksum: 89bc7f99c15a021bfd3671a943e58589cd5108f08738882d79458a4f432a05ff1d50bb664e7d0c02c639ec98241c9840f1fd9de5f458a7b0e15628892839aef0 languageName: node linkType: hard "codemirror@npm:^6.0.0": - version: 6.0.1 - resolution: "codemirror@npm:6.0.1" + version: 6.0.0 + resolution: "codemirror@npm:6.0.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -19435,7 +18903,7 @@ __metadata: "@codemirror/search": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 - checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef + checksum: 42fb2b5ac5d4b8616a733de5efd7913764c1d13dcc27f732af5ed5e98f657a53ab5549437b53d73ed89d004423141ee65612a5e54c451538ef6d75afed4cd3e2 languageName: node linkType: hard @@ -19452,9 +18920,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + version: 1.0.0 + resolution: "collect-v8-coverage@npm:1.0.0" + checksum: 99d6059eb0e04bf792e27824d43d1139ede28914b7f55ddedd9c43594926221579fa6925ecc7e2f47dec14f5199e5ea3afbfc1da9a32ad542f859022d57f9d80 languageName: node linkType: hard @@ -19465,7 +18933,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -19497,17 +18965,17 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.6.0, color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" +"color-string@npm:^1.5.2, color-string@npm:^1.9.0": + version: 1.9.0 + resolution: "color-string@npm:1.9.0" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + checksum: 93c6678b847f8cfa47d19677fd19e1d4b19d7a33f100644400357c298266080b5bca64e5f874fa8ac8cc0aa0606ad44f7a838b4e6fd05e6affea190a68555bb4 languageName: node linkType: hard -"color-support@npm:^1.1.2, color-support@npm:^1.1.3": +"color-support@npm:^1.1.2": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: @@ -19516,13 +18984,13 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" +"color@npm:3.0.x": + version: 3.0.0 + resolution: "color@npm:3.0.0" dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + color-convert: ^1.9.1 + color-string: ^1.5.2 + checksum: 273fe5d4c2a322dbc0e184ef6c891cbefefa11af7c6a8ed6001ff6986af747038cf3258bd4f4b715415f287c556efc8d1f0368bc02240877610ae1d427887537 languageName: node linkType: hard @@ -19537,9 +19005,9 @@ __metadata: linkType: hard "colord@npm:^2.9.1": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 + version: 2.9.1 + resolution: "colord@npm:2.9.1" + checksum: c47ff86c6ffc28ac55812c64fe35563809ccf860687506e4127137dcd27595b49610b85dcf3551b39a1c19af6a1a41ed41a42043ef6e795f787f29e4e49b4014 languageName: node linkType: hard @@ -19557,6 +19025,13 @@ __metadata: languageName: node linkType: hard +"colors@npm:1.4.0": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec + languageName: node + linkType: hard + "colors@npm:~1.2.1": version: 1.2.5 resolution: "colors@npm:1.2.5" @@ -19565,12 +19040,12 @@ __metadata: linkType: hard "colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" + version: 1.1.2 + resolution: "colorspace@npm:1.1.2" dependencies: - color: ^3.1.3 + color: 3.0.x text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + checksum: a959ec1669176aa72185067b7d04dae1cef2698456e1a452a035ce8adcac95673fbb1547e3240903355bcbaa67e031cca0b8b4f7d42c256b3dd94dcead8e1405 languageName: node linkType: hard @@ -19591,9 +19066,9 @@ __metadata: linkType: hard "comma-separated-tokens@npm:^2.0.0": - version: 2.0.3 - resolution: "comma-separated-tokens@npm:2.0.3" - checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d + version: 2.0.2 + resolution: "comma-separated-tokens@npm:2.0.2" + checksum: 8fa68ff2605233571536a802a7c712b0c766e0c5088e067be72740054e84d040865eea945c984924ae84932bcc3e25a99f71601220b438e875b5f42b87277767 languageName: node linkType: hard @@ -19625,7 +19100,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": +"commander@npm:^2.20.0, commander@npm:^2.7.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -19653,26 +19128,13 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.1.0, commander@npm:^9.4.1, commander@npm:^9.5.0": +"commander@npm:^9.1.0, commander@npm:^9.5.0": version: 9.5.0 resolution: "commander@npm:9.5.0" checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade languageName: node linkType: hard -"comment-json@npm:^4.2.3": - version: 4.2.3 - resolution: "comment-json@npm:4.2.3" - dependencies: - array-timsort: ^1.0.3 - core-util-is: ^1.0.3 - esprima: ^4.0.1 - has-own-prop: ^2.0.0 - repeat-string: ^1.6.1 - checksum: 7f8d26266b0d49de9661f6365cbcc373fee4f4d0f422a203dfb17ad8f3d84c5be5ded444874935a197cd03cff297c53fe48910256cb4171cb2e52a3e6b9d317c - languageName: node - linkType: hard - "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -19701,9 +19163,9 @@ __metadata: languageName: node linkType: hard -"commonmark@npm:0.30.0": - version: 0.30.0 - resolution: "commonmark@npm:0.30.0" +"commonmark@npm:^0.29.0": + version: 0.29.3 + resolution: "commonmark@npm:0.29.3" dependencies: entities: ~2.0 mdurl: ~1.0.1 @@ -19711,7 +19173,7 @@ __metadata: string.prototype.repeat: ^0.2.0 bin: commonmark: bin/commonmark - checksum: 39f05d6d0f471aa345487d45199809233f29f857630780fde23661356f1f31970f67328934895d3062e01524674785981837c3b6f4303b63d8c9bff8fa99ec83 + checksum: 892b603aeffea6a04770ce24979fc4024d2d92ca6d5146353398faab15be980af6802f3d7b35357400b870e752a9f80b766fed5c09ca063a2951c8c26013876c languageName: node linkType: hard @@ -19730,14 +19192,14 @@ __metadata: linkType: hard "compress-commons@npm:^4.1.0": - version: 4.1.1 - resolution: "compress-commons@npm:4.1.1" + version: 4.1.0 + resolution: "compress-commons@npm:4.1.0" dependencies: buffer-crc32: ^0.2.13 - crc32-stream: ^4.0.2 + crc32-stream: ^4.0.1 normalize-path: ^3.0.0 readable-stream: ^3.6.0 - checksum: 0176483211a7304a4a8aa52dbcc149a4c9181ac8a04bfbcc3d1a379174bf5fa56c3b15cec19e5ae3d31f1b1ce35ebb275b792b867000c77bac7162ce4e0ca268 + checksum: 3348bea7a1cce04b430f6ec3125eebbc0e23bd8dd14d30ec2fb113d3733f95ae6b12d5b33ad794e7ceab70f57e38a6c2642d96a64bc83e490a3ddae8db469949 languageName: node linkType: hard @@ -19854,20 +19316,6 @@ __metadata: languageName: node linkType: hard -"configstore@npm:^5.0.1": - version: 5.0.1 - resolution: "configstore@npm:5.0.1" - dependencies: - dot-prop: ^5.2.0 - graceful-fs: ^4.1.2 - make-dir: ^3.0.0 - unique-string: ^2.0.0 - write-file-atomic: ^3.0.0 - xdg-basedir: ^4.0.0 - checksum: 60ef65d493b63f96e14b11ba7ec072fdbf3d40110a94fb7199d1c287761bdea5c5244e76b2596325f30c1b652213aa75de96ea20afd4a5f82065e61ea090988e - languageName: node - linkType: hard - "connect-history-api-fallback@npm:^2.0.0": version: 2.0.0 resolution: "connect-history-api-fallback@npm:2.0.0" @@ -19947,9 +19395,11 @@ __metadata: linkType: hard "convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + version: 1.7.0 + resolution: "convert-source-map@npm:1.7.0" + dependencies: + safe-buffer: ~5.1.1 + checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 languageName: node linkType: hard @@ -19998,7 +19448,7 @@ __metadata: languageName: node linkType: hard -"cookiejar@npm:^2.1.4": +"cookiejar@npm:^2.1.3": version: 2.1.4 resolution: "cookiejar@npm:2.1.4" checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b @@ -20006,27 +19456,35 @@ __metadata: linkType: hard "copy-to-clipboard@npm:^3.2.0, copy-to-clipboard@npm:^3.3.1": - version: 3.3.3 - resolution: "copy-to-clipboard@npm:3.3.3" + version: 3.3.1 + resolution: "copy-to-clipboard@npm:3.3.1" dependencies: toggle-selection: ^1.0.6 - checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf + checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 languageName: node linkType: hard -"core-js-compat@npm:^3.25.1": - version: 3.29.1 - resolution: "core-js-compat@npm:3.29.1" +"core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": + version: 3.23.5 + resolution: "core-js-compat@npm:3.23.5" dependencies: - browserslist: ^4.21.5 - checksum: 7260f6bbaa98836cda09a3b61aa721149d3ae95040302fb3b27eb153ae9bbddc8dee5249e72004cdc9552532029de4d50a5b2b066c37414421d2929d6091b18f + browserslist: ^4.21.2 + semver: 7.0.0 + checksum: c2398a39239a782ba1b9531a80b25f8d9fb8d98de8bf980f32140e9be3d2852afb797517afdf3a15f9319bcd25d594b3d3d2a500dce7c338532532565c9e83cb languageName: node linkType: hard -"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5": - version: 3.29.1 - resolution: "core-js-pure@npm:3.29.1" - checksum: 2ed91f79c13f23c1b70c31edf4224aca99a9ac3db38c79127798c294a36faac0ea0b21070218621741057cf84b3dadff595475580c1fac3a43e02cae575dc27b +"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.6.5": + version: 3.25.5 + resolution: "core-js-pure@npm:3.25.5" + checksum: e48799a8ab28f00ef3db18377142ff2c578574ab2b18ebddde6cbf12823e0181a57c80e3caa6046ce2a2e439d603a252be767583ddc54248e3d1060bc5012127 + languageName: node + linkType: hard + +"core-js@npm:^1.0.0": + version: 1.2.7 + resolution: "core-js@npm:1.2.7" + checksum: 0b76371bfa98708351cde580f9287e2360d2209920e738ae950ae74ad08639a2e063541020bf666c28778956fc356ed9fe56d962129c88a87a6a4a0612526c75 languageName: node linkType: hard @@ -20044,20 +19502,13 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2": +"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard -"core-util-is@npm:^1.0.3, core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - "cors@npm:^2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" @@ -20094,59 +19545,61 @@ __metadata: linkType: hard "cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" + version: 7.0.1 + resolution: "cosmiconfig@npm:7.0.1" dependencies: "@types/parse-json": ^4.0.0 import-fresh: ^3.2.1 parse-json: ^5.0.0 path-type: ^4.0.0 yaml: ^1.10.0 - checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + checksum: 4be63e7117955fd88333d7460e4c466a90f556df6ef34efd59034d2463484e339666c41f02b523d574a797ec61f4a91918c5b89a316db2ea2f834e0d2d09465b languageName: node linkType: hard -"cpu-features@npm:~0.0.4": - version: 0.0.4 - resolution: "cpu-features@npm:0.0.4" +"cpu-features@npm:0.0.2": + version: 0.0.2 + resolution: "cpu-features@npm:0.0.2" dependencies: - buildcheck: 0.0.3 - nan: ^2.15.0 + nan: ^2.14.1 node-gyp: latest - checksum: a20d58e41e63182b34753dfe23bd1d967944ec13d84b70849b5d334fb4a558b7e71e7f955ed86c8e75dd65b5c5b882f1c494174d342cb6d8a062d77f79d39596 + checksum: 15177f9a2d465e4d84390f902c977b34f237dadb29fd8553853b13d906ffe5f15be9f091c72db4f34c71412d5ff4e0e4edf04caebc875b02d1d7ecfce2963299 languageName: node linkType: hard "crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" + version: 1.2.0 + resolution: "crc-32@npm:1.2.0" + dependencies: + exit-on-epipe: ~1.0.1 + printj: ~1.1.0 bin: - crc32: bin/crc32.njs - checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 + crc32: ./bin/crc32.njs + checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e languageName: node linkType: hard -"crc32-stream@npm:^4.0.2": - version: 4.0.2 - resolution: "crc32-stream@npm:4.0.2" +"crc32-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "crc32-stream@npm:4.0.1" dependencies: crc-32: ^1.2.0 readable-stream: ^3.4.0 - checksum: 1099559283b86e8a55390228b57ff4d57a74cac6aa8086aa4730f84317c9f93e914aeece115352f2d706a9df7ed75327ffacd86cfe23f040aef821231b528e76 + checksum: 39c2e0d5d7a3388e85ccf27ef0b30475f98902d34e7a048decc1665ff67f98f17f850059b28942fdf5582cb836eaa5184453ec35a6ea2442ce3bc10c8f1ee8a4 languageName: node linkType: hard "create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" + version: 4.0.3 + resolution: "create-ecdh@npm:4.0.3" dependencies: bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + elliptic: ^6.0.0 + checksum: 0678955daf937c188c69b2a601ebcbe4ab02ca3c1aa04f62d5fb5511430d0141802207eabf9aa100351920ea89bfcbe53ba8bd4c013a1a3453fd807549a5ede2 languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -20159,7 +19612,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.2, create-hmac@npm:^1.1.4": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -20217,7 +19670,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": +"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -20280,136 +19733,6 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 - languageName: node - linkType: hard - -"cspell-dictionary@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-dictionary@npm:6.30.2" - dependencies: - "@cspell/cspell-pipe": 6.30.2 - "@cspell/cspell-types": 6.30.2 - cspell-trie-lib: 6.30.2 - fast-equals: ^4.0.3 - gensequence: ^5.0.2 - checksum: 76f8d9aa731ff6fcdb62e71d529826484dcbfda6ce1beed459ae4967a719b2e163e89fca15f152ae0b3f43300f12ae1eec6758aebd533712a54507c97bfa7cf5 - languageName: node - linkType: hard - -"cspell-gitignore@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-gitignore@npm:6.30.2" - dependencies: - cspell-glob: 6.30.2 - find-up: ^5.0.0 - bin: - cspell-gitignore: bin.mjs - checksum: 7b732a26841ba7a73b8d871ebf97a248d1eb371c2ecf2c8c89f417cf7c2fb2d46e75c67d7a96ccdb1b9649f175647c78a0dc0c456b74f61595d2b25f7af19641 - languageName: node - linkType: hard - -"cspell-glob@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-glob@npm:6.30.2" - dependencies: - micromatch: ^4.0.5 - checksum: ae4934d7f8a63a168416d7697183840b5492bafda95a0abb476df900b671b4c75ee1d86c769665ff72c6b17b431c907fe109e26c7a1bc58f56d0028ea5bd963d - languageName: node - linkType: hard - -"cspell-grammar@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-grammar@npm:6.30.2" - dependencies: - "@cspell/cspell-pipe": 6.30.2 - "@cspell/cspell-types": 6.30.2 - bin: - cspell-grammar: bin.mjs - checksum: d5c4f11d915beda4236ad54c0954d3df5d0224c84cc19e5104a1a6b1cdfb41ed88fb6a7b8c4b3f5bb1159129c73a007d41fa92ffe4a0e3333ae53ec187b2bcb0 - languageName: node - linkType: hard - -"cspell-io@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-io@npm:6.30.2" - dependencies: - "@cspell/cspell-service-bus": 6.30.2 - node-fetch: ^2.6.9 - checksum: 71ed9eeddb3064f7fe160a0036c20d64e6d94567726175fc92fc2b80576066b2b39f7aecf5649c4bf6d23e4527602c23512f8054567fc0ed7e6e274f27b05793 - languageName: node - linkType: hard - -"cspell-lib@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-lib@npm:6.30.2" - dependencies: - "@cspell/cspell-bundled-dicts": 6.30.2 - "@cspell/cspell-pipe": 6.30.2 - "@cspell/cspell-types": 6.30.2 - "@cspell/strong-weak-map": 6.30.2 - clear-module: ^4.1.2 - comment-json: ^4.2.3 - configstore: ^5.0.1 - cosmiconfig: 8.0.0 - cspell-dictionary: 6.30.2 - cspell-glob: 6.30.2 - cspell-grammar: 6.30.2 - cspell-io: 6.30.2 - cspell-trie-lib: 6.30.2 - fast-equals: ^4.0.3 - find-up: ^5.0.0 - gensequence: ^5.0.2 - import-fresh: ^3.3.0 - resolve-from: ^5.0.0 - resolve-global: ^1.0.0 - vscode-languageserver-textdocument: ^1.0.8 - vscode-uri: ^3.0.7 - checksum: 2a5ffb328da2ed630f8027a972309c283f46a7778a0f1d090c564dff92b8ddb49c9e4636f9c1535df624d918802f792f30138673cfbac6de98bfba818f16b47a - languageName: node - linkType: hard - -"cspell-trie-lib@npm:6.30.2": - version: 6.30.2 - resolution: "cspell-trie-lib@npm:6.30.2" - dependencies: - "@cspell/cspell-pipe": 6.30.2 - "@cspell/cspell-types": 6.30.2 - gensequence: ^5.0.2 - checksum: e24ea590ed86ba6a7ef09fa048403eb10ca9e231f795d39c2ac5962319deeafd85ab645af7313388a5ee8ef5fc83ce23ff3f3cce11b2f4de1930fe31925d7cb8 - languageName: node - linkType: hard - -"cspell@npm:^6.2.3": - version: 6.30.2 - resolution: "cspell@npm:6.30.2" - dependencies: - "@cspell/cspell-pipe": 6.30.2 - "@cspell/dynamic-import": 6.30.2 - chalk: ^4.1.2 - commander: ^10.0.0 - cspell-gitignore: 6.30.2 - cspell-glob: 6.30.2 - cspell-io: 6.30.2 - cspell-lib: 6.30.2 - fast-glob: ^3.2.12 - fast-json-stable-stringify: ^2.1.0 - file-entry-cache: ^6.0.1 - get-stdin: ^8.0.0 - imurmurhash: ^0.1.4 - semver: ^7.3.8 - strip-ansi: ^6.0.1 - vscode-uri: ^3.0.7 - bin: - cspell: bin.js - cspell-esm: bin.mjs - checksum: e2065036e04526c2894f24d41901d8f368ad121a178df1ba8401c2889156688bc841381f1bad470180c83a8592f40e9dc66e00ce475976e45f63bb7be1d0189e - languageName: node - linkType: hard - "css-box-model@npm:^1.2.0": version: 1.2.1 resolution: "css-box-model@npm:1.2.1" @@ -20437,21 +19760,24 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.3.1": - version: 6.3.1 - resolution: "css-declaration-sorter@npm:6.3.1" +"css-declaration-sorter@npm:^6.0.3": + version: 6.1.3 + resolution: "css-declaration-sorter@npm:6.1.3" + dependencies: + timsort: ^0.3.0 peerDependencies: postcss: ^8.0.9 - checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c + checksum: 6fdacdce48e1351a8fd73472b7dfaae573ce7d4f5bba8385afc9c765d01055920b851d288228ecb0d535d163b22f8d7941e095b9da995956cd3309e41d1bffa2 languageName: node linkType: hard -"css-in-js-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "css-in-js-utils@npm:3.1.0" +"css-in-js-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "css-in-js-utils@npm:2.0.1" dependencies: - hyphenate-style-name: ^1.0.3 - checksum: 066318e918c04a5e5bce46b38fe81052ea6ac051bcc6d3c369a1d59ceb1546cb2b6086901ab5d22be084122ee3732169996a3dfb04d3406eaee205af77aec61b + hyphenate-style-name: ^1.0.2 + isobject: ^3.0.1 + checksum: c9964c4708216954c468b69bbee2d971fd759ada4f40637b8ca4d3f79caba4818d0532a4f190ac560227c08742ad063ffec7a30afddc4d96b66a18c3a008f0d8 languageName: node linkType: hard @@ -20474,26 +19800,26 @@ __metadata: linkType: hard "css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" + version: 4.1.3 + resolution: "css-select@npm:4.1.3" dependencies: boolbase: ^1.0.0 - css-what: ^6.0.1 - domhandler: ^4.3.1 - domutils: ^2.8.0 - nth-check: ^2.0.1 - checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 + css-what: ^5.0.0 + domhandler: ^4.2.0 + domutils: ^2.6.0 + nth-check: ^2.0.0 + checksum: 40928f1aa6c71faf36430e7f26bcbb8ab51d07b98b754caacb71906400a195df5e6c7020a94f2982f02e52027b9bd57c99419220cf7020968c3415f14e4be5f8 languageName: node linkType: hard "css-to-react-native@npm:^3.0.0": - version: 3.2.0 - resolution: "css-to-react-native@npm:3.2.0" + version: 3.0.0 + resolution: "css-to-react-native@npm:3.0.0" dependencies: camelize: ^1.0.0 css-color-keywords: ^1.0.0 postcss-value-parser: ^4.0.2 - checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce + checksum: 98a2e9d4fbe9cabc8b744dfdd5ec108396ce497a7b860912a95b299bd52517461281810fcb707965a021a8be39adca9587184a26fb4e926211391a1557aca3c1 languageName: node linkType: hard @@ -20514,6 +19840,15 @@ __metadata: languageName: node linkType: hard +"css-vendor@npm:^0.3.8": + version: 0.3.8 + resolution: "css-vendor@npm:0.3.8" + dependencies: + is-in-browser: ^1.0.2 + checksum: 0a2e0cd0d4adbfdb6236950e7f9697b8a9b294eb2ae7c95996a95d273d2a63316ce793cb4654ae048aa3c129327124d2a29aada9935a0c284f9cc341c2768c8a + languageName: node + linkType: hard + "css-vendor@npm:^2.0.8": version: 2.0.8 resolution: "css-vendor@npm:2.0.8" @@ -20524,10 +19859,10 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.0.1": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe +"css-what@npm:^5.0.0": + version: 5.1.0 + resolution: "css-what@npm:5.1.0" + checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 languageName: node linkType: hard @@ -20547,64 +19882,65 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^5.2.14": - version: 5.2.14 - resolution: "cssnano-preset-default@npm:5.2.14" +"cssnano-preset-default@npm:^5.1.7": + version: 5.1.7 + resolution: "cssnano-preset-default@npm:5.1.7" dependencies: - css-declaration-sorter: ^6.3.1 - cssnano-utils: ^3.1.0 - postcss-calc: ^8.2.3 - postcss-colormin: ^5.3.1 - postcss-convert-values: ^5.1.3 - postcss-discard-comments: ^5.1.2 - postcss-discard-duplicates: ^5.1.0 - postcss-discard-empty: ^5.1.1 - postcss-discard-overridden: ^5.1.0 - postcss-merge-longhand: ^5.1.7 - postcss-merge-rules: ^5.1.4 - postcss-minify-font-values: ^5.1.0 - postcss-minify-gradients: ^5.1.1 - postcss-minify-params: ^5.1.4 - postcss-minify-selectors: ^5.2.1 - postcss-normalize-charset: ^5.1.0 - postcss-normalize-display-values: ^5.1.0 - postcss-normalize-positions: ^5.1.1 - postcss-normalize-repeat-style: ^5.1.1 - postcss-normalize-string: ^5.1.0 - postcss-normalize-timing-functions: ^5.1.0 - postcss-normalize-unicode: ^5.1.1 - postcss-normalize-url: ^5.1.0 - postcss-normalize-whitespace: ^5.1.1 - postcss-ordered-values: ^5.1.3 - postcss-reduce-initial: ^5.1.2 - postcss-reduce-transforms: ^5.1.0 - postcss-svgo: ^5.1.0 - postcss-unique-selectors: ^5.1.1 + css-declaration-sorter: ^6.0.3 + cssnano-utils: ^2.0.1 + postcss-calc: ^8.0.0 + postcss-colormin: ^5.2.1 + postcss-convert-values: ^5.0.2 + postcss-discard-comments: ^5.0.1 + postcss-discard-duplicates: ^5.0.1 + postcss-discard-empty: ^5.0.1 + postcss-discard-overridden: ^5.0.1 + postcss-merge-longhand: ^5.0.4 + postcss-merge-rules: ^5.0.3 + postcss-minify-font-values: ^5.0.1 + postcss-minify-gradients: ^5.0.3 + postcss-minify-params: ^5.0.2 + postcss-minify-selectors: ^5.1.0 + postcss-normalize-charset: ^5.0.1 + postcss-normalize-display-values: ^5.0.1 + postcss-normalize-positions: ^5.0.1 + postcss-normalize-repeat-style: ^5.0.1 + postcss-normalize-string: ^5.0.1 + postcss-normalize-timing-functions: ^5.0.1 + postcss-normalize-unicode: ^5.0.1 + postcss-normalize-url: ^5.0.3 + postcss-normalize-whitespace: ^5.0.1 + postcss-ordered-values: ^5.0.2 + postcss-reduce-initial: ^5.0.1 + postcss-reduce-transforms: ^5.0.1 + postcss-svgo: ^5.0.3 + postcss-unique-selectors: ^5.0.2 peerDependencies: postcss: ^8.2.15 - checksum: d3bbbe3d50c6174afb28d0bdb65b511fdab33952ec84810aef58b87189f3891c34aaa8b6a6101acd5314f8acded839b43513e39a75f91a698ddc985a1b1d9e95 + checksum: 179b9a113d5e7fc887eb5ce4841ec83834e95afc85a28c767b34a8736fe0fe098a5963c225b18a1b553d566c7a74908951a0ceed97f2fbf5cdfafcce10db37ff languageName: node linkType: hard -"cssnano-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "cssnano-utils@npm:3.1.0" +"cssnano-utils@npm:^2.0.1": + version: 2.0.1 + resolution: "cssnano-utils@npm:2.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 + checksum: e27f7648fdb999667ba607fd8d56e28d4dbf4bf458c625fc84f460f70fa0fcd491991f309ca27cc0609a24fb3af49b3d0b9b205921e0edd7de57ca27048652e3 languageName: node linkType: hard "cssnano@npm:^5.0.1": - version: 5.1.15 - resolution: "cssnano@npm:5.1.15" + version: 5.0.11 + resolution: "cssnano@npm:5.0.11" dependencies: - cssnano-preset-default: ^5.2.14 + cssnano-preset-default: ^5.1.7 + is-resolvable: ^1.1.0 lilconfig: ^2.0.3 yaml: ^1.10.2 peerDependencies: postcss: ^8.2.15 - checksum: ca9e1922178617c66c2f1548824b2c7af2ecf69cc3a187fc96bf8d29251c2e84d9e4966c69cf64a2a6a057a37dff7d6d057bc8a2a0957e6ea382e452ae9d0bbb + checksum: 9b7d6a4a796175e73a019ec94e112dbf1fb66173716e099116fa8b33568fb1875d7cc1bf728033f4c2861c65d92b66be15618127182dd1f9872387d2d55fddcd languageName: node linkType: hard @@ -20647,17 +19983,17 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.5.2": +"csstype@npm:^2.0.0, csstype@npm:^2.5.2, csstype@npm:^2.6.7": version: 2.6.21 resolution: "csstype@npm:2.6.21" checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d +"csstype@npm:^3.0.2, csstype@npm:^3.0.6": + version: 3.0.7 + resolution: "csstype@npm:3.0.7" + checksum: 2f30c993be570c6d0de334b979a718370ee9bca9569c90340f13e05e542146c55b22e87372b858c061f9f8ded494da7a4715957882f9356cf9993ba11ab6f09c languageName: node linkType: hard @@ -20682,7 +20018,7 @@ __metadata: languageName: node linkType: hard -"csv@npm:^5.5.3": +"csv@npm:^5.5.0": version: 5.5.3 resolution: "csv@npm:5.5.3" dependencies: @@ -20746,12 +20082,19 @@ __metadata: languageName: node linkType: hard -"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": - version: 3.2.2 - resolution: "d3-array@npm:3.2.2" +"d3-array@npm:2, d3-array@npm:^2.3.0": + version: 2.12.1 + resolution: "d3-array@npm:2.12.1" dependencies: - internmap: 1 - 2 - checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1 + internmap: ^1.0.0 + checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb + languageName: node + linkType: hard + +"d3-color@npm:1 - 2": + version: 2.0.0 + resolution: "d3-color@npm:2.0.0" + checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc languageName: node linkType: hard @@ -20779,7 +20122,7 @@ __metadata: languageName: node linkType: hard -"d3-ease@npm:1 - 3, d3-ease@npm:^3.0.1": +"d3-ease@npm:1 - 3": version: 3.0.1 resolution: "d3-ease@npm:3.0.1" checksum: 06e2ee5326d1e3545eab4e2c0f84046a123dcd3b612e68858219aa034da1160333d9ce3da20a1d3486d98cb5c2a06f7d233eee1bc19ce42d1533458bd85dedcd @@ -20797,14 +20140,14 @@ __metadata: languageName: node linkType: hard -"d3-format@npm:1 - 3": - version: 3.1.0 - resolution: "d3-format@npm:3.1.0" - checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 +"d3-format@npm:1 - 2": + version: 2.0.0 + resolution: "d3-format@npm:2.0.0" + checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 languageName: node linkType: hard -"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": +"d3-interpolate@npm:1 - 3": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: @@ -20813,6 +20156,22 @@ __metadata: languageName: node linkType: hard +"d3-interpolate@npm:1.2.0 - 2, d3-interpolate@npm:^2.0.0": + version: 2.0.1 + resolution: "d3-interpolate@npm:2.0.1" + dependencies: + d3-color: 1 - 2 + checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c + languageName: node + linkType: hard + +"d3-path@npm:1 - 2": + version: 2.0.0 + resolution: "d3-path@npm:2.0.0" + checksum: e39e91dfb9abf9637962caede1f4ea4877f4b9e1c914868bdfc355688e9a637ba51bed0fb6180934eb596e50a4d0d1f001b5f2e98a4a3d23cc42558acfbd1f2c + languageName: node + linkType: hard + "d3-path@npm:^3.1.0": version: 3.1.0 resolution: "d3-path@npm:3.1.0" @@ -20827,16 +20186,16 @@ __metadata: languageName: node linkType: hard -"d3-scale@npm:^4.0.2": - version: 4.0.2 - resolution: "d3-scale@npm:4.0.2" +"d3-scale@npm:^3.0.0": + version: 3.3.0 + resolution: "d3-scale@npm:3.3.0" dependencies: - d3-array: 2.10.0 - 3 - d3-format: 1 - 3 - d3-interpolate: 1.2.0 - 3 - d3-time: 2.1.1 - 3 - d3-time-format: 2 - 4 - checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e + d3-array: ^2.3.0 + d3-format: 1 - 2 + d3-interpolate: 1.2.0 - 2 + d3-time: ^2.1.1 + d3-time-format: 2 - 3 + checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2 languageName: node linkType: hard @@ -20847,7 +20206,16 @@ __metadata: languageName: node linkType: hard -"d3-shape@npm:^3.0.0, d3-shape@npm:^3.1.0": +"d3-shape@npm:^2.0.0": + version: 2.1.0 + resolution: "d3-shape@npm:2.1.0" + dependencies: + d3-path: 1 - 2 + checksum: 4a82a83fbb15aadee3eb6661226a34bcd793cdbcd7aa5bf980a4724efc93eb94acc6c499f0ebedc9c3144c57c0f033867d137f41e86459acbd5d7181cb27b49c + languageName: node + linkType: hard + +"d3-shape@npm:^3.0.0": version: 3.2.0 resolution: "d3-shape@npm:3.2.0" dependencies: @@ -20856,25 +20224,25 @@ __metadata: languageName: node linkType: hard -"d3-time-format@npm:2 - 4": - version: 4.1.0 - resolution: "d3-time-format@npm:4.1.0" +"d3-time-format@npm:2 - 3": + version: 3.0.0 + resolution: "d3-time-format@npm:3.0.0" dependencies: - d3-time: 1 - 3 - checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 + d3-time: 1 - 2 + checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db languageName: node linkType: hard -"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.0.0": - version: 3.1.0 - resolution: "d3-time@npm:3.1.0" +"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": + version: 2.1.1 + resolution: "d3-time@npm:2.1.1" dependencies: - d3-array: 2 - 3 - checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 + d3-array: 2 + checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6 languageName: node linkType: hard -"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": +"d3-timer@npm:1 - 3": version: 3.0.1 resolution: "d3-timer@npm:3.0.1" checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 @@ -20957,6 +20325,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:2.1.0": + version: 2.1.0 + resolution: "dataloader@npm:2.1.0" + checksum: bbd43496c41697766f8611f60ed3bae437b450985499140b9603a2447c10d45975d3a0661caaebaa9750bc1bc9fd154676a314423294916c8b8ca1a59a08d139 + languageName: node + linkType: hard + "dataloader@npm:2.2.2, dataloader@npm:^2.0.0, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -20979,20 +20354,20 @@ __metadata: linkType: hard "dateformat@npm:^4.5.0": - version: 4.6.3 - resolution: "dateformat@npm:4.6.3" - checksum: c3aa0617c0a5b30595122bc8d1bee6276a9221e4d392087b41cbbdf175d9662ae0e50d0d6dcdf45caeac5153c4b5b0844265f8cd2b2245451e3da19e39e3b65d + version: 4.5.1 + resolution: "dateformat@npm:4.5.1" + checksum: 2c80b0fed4977db338aa70fbdd605a50c06ec36f4ef8d8fd36193a08c4910da1172eec919a74ed93abfc134fc71dca8707877d4fd149c07f0d1c919d598283e3 languageName: node linkType: hard "dayjs@npm:^1.10.4": - version: 1.11.7 - resolution: "dayjs@npm:1.11.7" - checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb + version: 1.10.4 + resolution: "dayjs@npm:1.10.4" + checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938 languageName: node linkType: hard -"debounce@npm:^1.2.0": +"debounce@npm:^1.1.0, debounce@npm:^1.2.0": version: 1.2.1 resolution: "debounce@npm:1.2.1" checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e @@ -21037,12 +20412,12 @@ __metadata: linkType: hard "decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" + version: 1.1.0 + resolution: "decamelize-keys@npm:1.1.0" dependencies: decamelize: ^1.1.0 map-obj: ^1.0.0 - checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + checksum: 8bc5d32e035a072f5dffc1f1f3d26ca7ab1fb44a9cade34c97ab6cd1e62c81a87e718101e96de07d78cecda20a3fdb955df958e46671ccad01bb8dcf0de2e298 languageName: node linkType: hard @@ -21054,29 +20429,29 @@ __metadata: linkType: hard "decimal.js-light@npm:^2.4.1": - version: 2.5.1 - resolution: "decimal.js-light@npm:2.5.1" - checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 + version: 2.5.0 + resolution: "decimal.js-light@npm:2.5.0" + checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 languageName: node linkType: hard -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.2": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae +"decimal.js@npm:^10.2.1, decimal.js@npm:^10.3.1": + version: 10.4.1 + resolution: "decimal.js@npm:10.4.1" + checksum: 5da6dc74af5b73d954741b24d404ef6da07841794d9e51412a2708ec384dd7b4bced3365fb178f4cd119b7ef45f0b34344014a4dc0494c8374c5e746df3cb410 languageName: node linkType: hard "decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" + version: 1.0.1 + resolution: "decode-named-character-reference@npm:1.0.1" dependencies: character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 + checksum: 4f67b088213497f7e19faffc1d2bf470bd3ceffd01b3be17857d4bce455e03728b33d3770761745916b0a230ecd917a1cba3c61156f0bd13958dc4fada19580a languageName: node linkType: hard -"decode-uri-component@npm:^0.2.2": +"decode-uri-component@npm:^0.2.0": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 @@ -21141,16 +20516,23 @@ __metadata: linkType: hard "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + version: 0.1.3 + resolution: "deep-is@npm:0.1.3" + checksum: c15b04c3848a89880c94e25b077c19b47d9a30dd99048e70e5f95d943e7b246bee1da0c1376b56b01bc045be2cae7d9b1c856e68e47e9805634327de7c6cb6d5 languageName: node linkType: hard -"deepmerge@npm:^4.2.2, deepmerge@npm:~4.3.0": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 +"deepmerge@npm:^3.0.0": + version: 3.3.0 + resolution: "deepmerge@npm:3.3.0" + checksum: 4322195389e0170a0443c07b36add19b90249802c4b47b96265fdc5f5d8beddf491d5e50cbc5bfd65f85ccf76598173083863c202f5463b3b667aca8be75d5ac + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2, deepmerge@npm:~4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b languageName: node linkType: hard @@ -21164,18 +20546,18 @@ __metadata: linkType: hard "defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" + version: 1.0.3 + resolution: "defaults@npm:1.0.3" dependencies: clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + checksum: 96e2112da6553d376afd5265ea7cbdb2a3b45535965d71ab8bb1da10c8126d168fdd5268799625324b368356d21ba2a7b3d4ec50961f11a47b7feb9de3d4413e languageName: node linkType: hard "defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + version: 2.0.0 + resolution: "defer-to-connect@npm:2.0.0" + checksum: 635a01644ea6b52268a9b15c3196ec3a4cb01f874ff09d3ec7858c4aac0ea12ac554aa8831b7ac8ae88c4761e1653f8ea05cf5eebd1236b7bedfde34db52813c languageName: node linkType: hard @@ -21187,12 +20569,12 @@ __metadata: linkType: hard "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" + version: 1.1.4 + resolution: "define-properties@npm:1.1.4" dependencies: has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b languageName: node linkType: hard @@ -21226,6 +20608,13 @@ __metadata: languageName: node linkType: hard +"delegate@npm:^3.1.2": + version: 3.2.0 + resolution: "delegate@npm:3.2.0" + checksum: d943058fe05897228b158cbd1bab05164df28c8f54127873231d6b03b0a5acc1b3ee1f98ac70ccc9b79cd84aa47118a7de111fee2923753491583905069da27d + languageName: node + linkType: hard + "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -21240,14 +20629,14 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard -"depd@npm:~1.1.2": +"depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 @@ -21323,9 +20712,9 @@ __metadata: linkType: hard "detect-node@npm:^2.0.4": - version: 2.1.0 - resolution: "detect-node@npm:2.1.0" - checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + version: 2.0.4 + resolution: "detect-node@npm:2.0.4" + checksum: c06ae40fefbad8cb8cbb6ca819c93568b2a809e747bfc9c71f3524b027f5e988163b0ac0517fd65288b375360b30bc4822172eb05d211f99003d73cf8ec22911 languageName: node linkType: hard @@ -21431,23 +20820,23 @@ __metadata: linkType: hard "docker-compose@npm:^0.23.17": - version: 0.23.19 - resolution: "docker-compose@npm:0.23.19" + version: 0.23.17 + resolution: "docker-compose@npm:0.23.17" dependencies: yaml: ^1.10.2 - checksum: 1704825954ec8645e4b099cc2641531955eef5a8a9729c885fab7067ae4d7935c663252e51b49878397e51cd5a3efcf2f13c8460e252aa39d14a0722c0bacfe5 + checksum: c308bf067cabe178d245b3e499119937b1d2a5effdc9fac6227e04be4308a0250ca7bb1471789b3d0492ea2ce83f74e40b7517a9a5cb540a21355a64e4ad5d3c languageName: node linkType: hard "docker-modem@npm:^3.0.0": - version: 3.0.8 - resolution: "docker-modem@npm:3.0.8" + version: 3.0.3 + resolution: "docker-modem@npm:3.0.3" dependencies: debug: ^4.1.1 readable-stream: ^3.5.0 split-ca: ^1.0.1 - ssh2: ^1.11.0 - checksum: e3675c9b1ad800be8fb1cb9c5621fbef20a75bfedcd6e01b69808eadd7f0165681e4e30d1700897b788a67dbf4769964fcccd19c3d66f6d2499bb7aede6b34df + ssh2: ^1.4.0 + checksum: 4ad495d17a7bbb29f48e3bf8ab74508848a3ca62c2dffc399fc0b9b2d1caccb1be54cc53001d5e0d56069e6cb4a91da4b017240733080b6648a66b40345e1f96 languageName: node linkType: hard @@ -21481,9 +20870,9 @@ __metadata: linkType: hard "dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": - version: 0.5.16 - resolution: "dom-accessibility-api@npm:0.5.16" - checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + version: 0.5.13 + resolution: "dom-accessibility-api@npm:0.5.13" + checksum: a5a5f14c01e466d424750aaac9225f1dc43cf16d101a1c40e01a554abce63c48084707002c39b805f2ce212273c179dd6d2258175997cd06d5f79851bf52dd40 languageName: node linkType: hard @@ -21496,7 +20885,7 @@ __metadata: languageName: node linkType: hard -"dom-helpers@npm:^3.4.0": +"dom-helpers@npm:^3.2.1, dom-helpers@npm:^3.4.0": version: 3.4.0 resolution: "dom-helpers@npm:3.4.0" dependencies: @@ -21506,23 +20895,23 @@ __metadata: linkType: hard "dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" + version: 5.1.4 + resolution: "dom-helpers@npm:5.1.4" dependencies: "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + csstype: ^2.6.7 + checksum: e516325d662f57db7724e6fe26ae5b36b6974f74ae2513998f408bf056670c05ed010bb3be866ac454110249a9e88aaa6451e63e4efa87f834041ef8303ace68 languageName: node linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" + version: 1.2.0 + resolution: "dom-serializer@npm:1.2.0" dependencies: domelementtype: ^2.0.1 - domhandler: ^4.2.0 + domhandler: ^4.0.0 entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + checksum: 231212b30947eb7d89f8b9d89ec82af60a634ff5fd4c3a2e42989567742d308d0aae21e82328c17df4b453deb13e11b047ce0d610581766dd25734afda23bef0 languageName: node linkType: hard @@ -21569,12 +20958,12 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": + version: 4.3.0 + resolution: "domhandler@npm:4.3.0" dependencies: domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + checksum: d2a2dbf40dd99abf936b65ad83c6b530afdb3605a87cad37a11b5d9220e68423ebef1b86c89e0f6d93ffaf315cc327cf1a988652e7a9a95cce539e3984f4c64d languageName: node linkType: hard @@ -21595,13 +20984,13 @@ __metadata: linkType: hard "dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": - version: 2.4.5 - resolution: "dompurify@npm:2.4.5" - checksum: d6d3c3b320f15cdb5b26aa1902c3275a3ab2c3705a9df4420bb94691d7c4df67959ec7b91e486c308320791b0ee000456f042734c45d76721e61c2768eac706e + version: 2.4.3 + resolution: "dompurify@npm:2.4.3" + checksum: b440981f2a38cada2085759cc3d1e2f94571afc34343d011a8a6aa1ad91ae6abf651adbfa4994b0e2283f0ce81f7891cdb04b67d0b234c8d190cb70e9691f026 languageName: node linkType: hard -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": +"domutils@npm:^2.5.2, domutils@npm:^2.6.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -21633,19 +21022,10 @@ __metadata: languageName: node linkType: hard -"dot-prop@npm:^5.2.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: ^2.0.0 - checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea - languageName: node - linkType: hard - "dotenv@npm:^16.0.0": - version: 16.0.3 - resolution: "dotenv@npm:16.0.3" - checksum: afcf03f373d7a6d62c7e9afea6328e62851d627a4e73f2e12d0a8deae1cd375892004f3021883f8aec85932cd2834b091f568ced92b4774625b321db83b827f8 + version: 16.0.0 + resolution: "dotenv@npm:16.0.0" + checksum: 664cebb51f0a9a1d1b930f51f0271e72e26d62feaecc9dc03df39453dd494b4e724809ca480fb3ec3213382b1ed3f791aaeb83569a137f9329ce58efd4853dbf languageName: node linkType: hard @@ -21656,7 +21036,7 @@ __metadata: languageName: node linkType: hard -"dset@npm:^3.1.2": +"dset@npm:3.1.2": version: 3.1.2 resolution: "dset@npm:3.1.2" checksum: 4f8066f517aa0a70af688c66e9a0a5590f0aada76f6edc7ba9ddb309e27d3a6d65c0a2e31ab2a84005d4c791e5327773cdde59b8ab169050330a0dc283663e87 @@ -21671,14 +21051,14 @@ __metadata: linkType: hard "duplexify@npm:^4.0.0": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" + version: 4.1.1 + resolution: "duplexify@npm:4.1.1" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 stream-shift: ^1.0.0 - checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + checksum: 1cf800f1dc1647d6e0272b811421d4ce78b7d9b12dd85c7ecd78b9e4bfba374d309ac9e3440c66461fc62adb69db49aebf49da15962c98a84d8fd33c7e9c5c5a languageName: node linkType: hard @@ -21762,14 +21142,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.8": - version: 3.1.9 - resolution: "ejs@npm:3.1.9" +"ejs@npm:^3.1.6": + version: 3.1.7 + resolution: "ejs@npm:3.1.7" dependencies: jake: ^10.8.5 bin: ejs: bin/cli.js - checksum: af6f10eb815885ff8a8cfacc42c6b6cf87daf97a4884f87a30e0c3271fedd85d76a3a297d9c33a70e735b97ee632887f85e32854b9cdd3a2d97edf931519a35f + checksum: fe40764af39955ce8f8b116716fc8b911959946698edb49ecab85df597746c07aa65d5b74ead28a1e2ffa75b0f92d9bedd752f1c29437da6137b3518271e988c languageName: node linkType: hard @@ -21789,14 +21169,14 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.284": - version: 1.4.333 - resolution: "electron-to-chromium@npm:1.4.333" - checksum: 028f6618f18addf619a5a5eeca01c07fa3052ef4912b98e03e19c419eb92b6ed69bdb9c2bb499761186fdc60f9e955fa34a4b96e50b03d98a4a0bcb01aef8afd +"electron-to-chromium@npm:^1.4.251": + version: 1.4.255 + resolution: "electron-to-chromium@npm:1.4.255" + checksum: 9fd4e0b4a05b072e211b5a1ad2e20b099d7cd54a47b6cbf700dc9ef2020291b5b2d179af0dd0fc71be74b3c765a71ad14f7ff20afb637c0b58e7abc26ff3b68e languageName: node linkType: hard -"elliptic@npm:^6.5.3": +"elliptic@npm:^6.0.0": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -21853,7 +21233,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.12, encoding@npm:^0.1.13": +"encoding@npm:^0.1.11, encoding@npm:^0.1.12, encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -21872,12 +21252,12 @@ __metadata: linkType: hard "enhanced-resolve@npm:^5.10.0": - version: 5.12.0 - resolution: "enhanced-resolve@npm:5.12.0" + version: 5.10.0 + resolution: "enhanced-resolve@npm:5.10.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 + checksum: 0bb9830704db271610f900e8d79d70a740ea16f251263362b0c91af545576d09fe50103496606c1300a05e588372d6f9780a9bc2e30ce8ef9b827ec8f44687ff languageName: node linkType: hard @@ -21926,9 +21306,9 @@ __metadata: linkType: hard "env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + version: 2.2.0 + resolution: "env-paths@npm:2.2.0" + checksum: ba2aea38301aafd69086be1f8cb453b92946e4840cb0de9d1c88a67e6f43a6174dcddb60b218ec36db8720b12de46b0d93c2f97ad9bbec6a267b479ab37debb6 languageName: node linkType: hard @@ -21956,11 +21336,11 @@ __metadata: linkType: hard "error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" + version: 2.0.6 + resolution: "error-stack-parser@npm:2.0.6" dependencies: - stackframe: ^1.3.4 - checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + stackframe: ^1.1.1 + checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12 languageName: node linkType: hard @@ -21971,62 +21351,51 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": - version: 1.21.2 - resolution: "es-abstract@npm:1.21.2" +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.4": + version: 1.20.4 + resolution: "es-abstract@npm:1.20.4" dependencies: - array-buffer-byte-length: ^1.0.0 - available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 - es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.2.0 + get-intrinsic: ^1.1.3 get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 has: ^1.0.3 has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 + internal-slot: ^1.0.3 is-callable: ^1.2.7 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 - is-typed-array: ^1.1.10 is-weakref: ^1.0.2 - object-inspect: ^1.12.3 + object-inspect: ^1.12.2 object-keys: ^1.1.1 object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.7 - string.prototype.trimend: ^1.0.6 - string.prototype.trimstart: ^1.0.6 - typed-array-length: ^1.0.4 + string.prototype.trimend: ^1.0.5 + string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.9 - checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a + checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 languageName: node linkType: hard "es-get-iterator@npm:^1.1.2": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" + version: 1.1.2 + resolution: "es-get-iterator@npm:1.1.2" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - has-symbols: ^1.0.3 - is-arguments: ^1.1.1 + get-intrinsic: ^1.1.0 + has-symbols: ^1.0.1 + is-arguments: ^1.1.0 is-map: ^2.0.2 is-set: ^2.0.2 - is-string: ^1.0.7 + is-string: ^1.0.5 isarray: ^2.0.5 - stop-iteration-iterator: ^1.0.0 - checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d + checksum: f75e66acb6a45686fa08b3ade9c9421a70d36a0c43ed4363e67f4d7aab2226cb73dd977cb48abbaf75721b946d3cd810682fcf310c7ad0867802fbf929b17dcf languageName: node linkType: hard @@ -22037,17 +21406,6 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" - dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 - languageName: node - linkType: hard - "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -22075,6 +21433,104 @@ __metadata: languageName: node linkType: hard +"esbuild-android-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-android-64@npm:0.15.18" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"esbuild-android-arm64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-android-arm64@npm:0.15.18" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-darwin-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-darwin-64@npm:0.15.18" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"esbuild-darwin-arm64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-darwin-arm64@npm:0.15.18" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-freebsd-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-freebsd-64@npm:0.15.18" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-freebsd-arm64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-freebsd-arm64@npm:0.15.18" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-linux-32@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-32@npm:0.15.18" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"esbuild-linux-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-64@npm:0.15.18" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"esbuild-linux-arm64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-arm64@npm:0.15.18" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-linux-arm@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-arm@npm:0.15.18" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"esbuild-linux-mips64le@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-mips64le@npm:0.15.18" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"esbuild-linux-ppc64le@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-ppc64le@npm:0.15.18" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"esbuild-linux-riscv64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-riscv64@npm:0.15.18" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"esbuild-linux-s390x@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-linux-s390x@npm:0.15.18" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "esbuild-loader@npm:^2.18.0": version: 2.21.0 resolution: "esbuild-loader@npm:2.21.0" @@ -22091,6 +21547,48 @@ __metadata: languageName: node linkType: hard +"esbuild-netbsd-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-netbsd-64@npm:0.15.18" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-openbsd-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-openbsd-64@npm:0.15.18" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-sunos-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-sunos-64@npm:0.15.18" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"esbuild-windows-32@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-windows-32@npm:0.15.18" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"esbuild-windows-64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-windows-64@npm:0.15.18" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"esbuild-windows-arm64@npm:0.15.18": + version: 0.15.18 + resolution: "esbuild-windows-arm64@npm:0.15.18" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "esbuild@npm:^0.16.17": version: 0.16.17 resolution: "esbuild@npm:0.16.17" @@ -22168,7 +21666,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.17.0, esbuild@npm:~0.17.6": +"esbuild@npm:^0.17.0": version: 0.17.12 resolution: "esbuild@npm:0.17.12" dependencies: @@ -22245,6 +21743,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:~0.15.10": + version: 0.15.18 + resolution: "esbuild@npm:0.15.18" + dependencies: + "@esbuild/android-arm": 0.15.18 + "@esbuild/linux-loong64": 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/linux-loong64": + optional: true + esbuild-android-64: + optional: true + esbuild-android-arm64: + optional: true + esbuild-darwin-64: + optional: true + esbuild-darwin-arm64: + optional: true + esbuild-freebsd-64: + optional: true + esbuild-freebsd-arm64: + optional: true + esbuild-linux-32: + optional: true + esbuild-linux-64: + optional: true + esbuild-linux-arm: + optional: true + esbuild-linux-arm64: + optional: true + esbuild-linux-mips64le: + optional: true + esbuild-linux-ppc64le: + optional: true + esbuild-linux-riscv64: + optional: true + esbuild-linux-s390x: + optional: true + esbuild-netbsd-64: + optional: true + esbuild-openbsd-64: + optional: true + esbuild-sunos-64: + optional: true + esbuild-windows-32: + optional: true + esbuild-windows-64: + optional: true + esbuild-windows-arm64: + optional: true + bin: + esbuild: bin/esbuild + checksum: ec12682b2cb2d4f0669d0e555028b87a9284ca7f6a1b26e35e69a8697165b35cc682ad598abc70f0bbcfdc12ca84ef888caf5ceee389237862e8f8c17da85f89 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -22543,7 +22118,25 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0": +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-visitor-keys@npm:2.0.0" + checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0": version: 3.3.0 resolution: "eslint-visitor-keys@npm:3.3.0" checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 @@ -22567,13 +22160,10 @@ __metadata: linkType: hard "eslint@npm:^8.33.0, eslint@npm:^8.6.0": - version: 8.36.0 - resolution: "eslint@npm:8.36.0" + version: 8.33.0 + resolution: "eslint@npm:8.33.0" dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.0.1 - "@eslint/js": 8.36.0 + "@eslint/eslintrc": ^1.4.1 "@humanwhocodes/config-array": ^0.11.8 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -22584,9 +22174,10 @@ __metadata: doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 eslint-visitor-keys: ^3.3.0 - espree: ^9.5.0 - esquery: ^1.4.2 + espree: ^9.4.0 + esquery: ^1.4.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 @@ -22607,12 +22198,13 @@ __metadata: minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.1 + regexpp: ^3.2.0 strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: e9a961fc3b3de5cff5a1cb2c92eeffaa7e155a715489e30b3e1e76f186bd1255e0481e09564f2094733c0b1dbd3453499fb72ae7c043c83156e11e6d965b2304 + checksum: 727e63ab8b7acf281442323c5971f6afdd5b656fbcebc4476cf54e35af51b2f180617433fc5e1952f0449ca3f43a905527f9407ea4b8a7ea7562fc9c3f278d4c languageName: node linkType: hard @@ -22623,14 +22215,14 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.0.0, espree@npm:^9.5.0": - version: 9.5.0 - resolution: "espree@npm:9.5.0" +"espree@npm:^9.0.0, espree@npm:^9.4.0": + version: 9.4.0 + resolution: "espree@npm:9.4.0" dependencies: acorn: ^8.8.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.3.0 - checksum: a7f110aefb6407e0d3237aa635ab3cea87106ae63748dd23c67031afccc640d04c4209fca2daf16e2233c82efb505faead0fb84097478fd9cc6e8f8dd80bf99d + checksum: 2e3020dde67892d2ba3632413b44d0dc31d92c29ce72267d7ec24216a562f0a6494d3696e2fa39a3ec8c0e0088d773947ab2925fbb716801a11eb8dd313ac89c languageName: node linkType: hard @@ -22644,12 +22236,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.4.0": + version: 1.4.0 + resolution: "esquery@npm:1.4.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 languageName: node linkType: hard @@ -22733,6 +22325,13 @@ __metadata: languageName: node linkType: hard +"event-target-polyfill@npm:^0.0.3": + version: 0.0.3 + resolution: "event-target-polyfill@npm:0.0.3" + checksum: 42efefcc46aa4170547b35399337762a579fa27c9fe8b3e791aec470df3126e0bb4cb49b9f17901956eb65a137ef0e35c3a32c9f047b32c64cf56fa9ecc76d06 + languageName: node + linkType: hard + "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" @@ -22740,20 +22339,13 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:6.4.7": +"eventemitter2@npm:6.4.7, eventemitter2@npm:^6.4.4": version: 6.4.7 resolution: "eventemitter2@npm:6.4.7" checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 languageName: node linkType: hard -"eventemitter2@npm:^6.4.4": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: be59577c1e1c35509c7ba0e2624335c35bbcfd9485b8a977384c6cc6759341ea1a98d3cb9dbaa5cea4fff9b687e504504e3f9c2cc1674cf3bd8a43a7c74ea3eb - languageName: node - linkType: hard - "eventemitter3@npm:^3.1.0": version: 3.1.2 resolution: "eventemitter3@npm:3.1.2" @@ -23018,8 +22610,8 @@ __metadata: linkType: hard "execa@npm:^7.0.0": - version: 7.1.1 - resolution: "execa@npm:7.1.1" + version: 7.0.0 + resolution: "execa@npm:7.0.0" dependencies: cross-spawn: ^7.0.3 get-stream: ^6.0.1 @@ -23030,7 +22622,7 @@ __metadata: onetime: ^6.0.0 signal-exit: ^3.0.7 strip-final-newline: ^3.0.0 - checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 + checksum: be7c7b6d1e5473f628e46888b0cf8279da483c1a6000dd494a2059cc26591ded57ba46be1c9bdde1ec895e7eb8b18911174aba425cd971d41d140a9405da9a02 languageName: node linkType: hard @@ -23043,6 +22635,13 @@ __metadata: languageName: node linkType: hard +"exit-on-epipe@npm:~1.0.1": + version: 1.0.1 + resolution: "exit-on-epipe@npm:1.0.1" + checksum: e8ab4940416d19f311b3c9226e3725c6c4c6026fe682266ecc0ff33a455d585fe3e4ee757857c7bf1d0491b478cb232b8e395dfb438e65ac87317eda47304c32 + languageName: node + linkType: hard + "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -23070,16 +22669,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.5.0": - version: 29.5.0 - resolution: "expect@npm:29.5.0" +"expect@npm:^29.0.0, expect@npm:^29.4.3": + version: 29.4.3 + resolution: "expect@npm:29.4.3" dependencies: - "@jest/expect-utils": ^29.5.0 + "@jest/expect-utils": ^29.4.3 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb languageName: node linkType: hard @@ -23240,9 +22839,9 @@ __metadata: linkType: hard "extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + version: 1.4.0 + resolution: "extsprintf@npm:1.4.0" + checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e languageName: node linkType: hard @@ -23260,10 +22859,10 @@ __metadata: languageName: node linkType: hard -"fast-equals@npm:^4.0.3": - version: 4.0.3 - resolution: "fast-equals@npm:4.0.3" - checksum: 3d5935b757f9f2993e59b5164a7a9eeda0de149760495375cde14a4ed725186a7e6c1c0d58f7d42d2f91deb97f3fce1e0aad5591916ef0984278199a85c87c87 +"fast-equals@npm:^2.0.0": + version: 2.0.4 + resolution: "fast-equals@npm:2.0.4" + checksum: 1aac8a2e16b33e5e402bb5cd46be65f1ca331903c2c44e3bd75324e8472ee04f0acdbc6889e45fc28f9707ca3964f2a86789b32305d4d8b85dc97f61e446ef4b languageName: node linkType: hard @@ -23308,13 +22907,6 @@ __metadata: languageName: node linkType: hard -"fast-loops@npm:^1.1.3": - version: 1.1.3 - resolution: "fast-loops@npm:1.1.3" - checksum: b674378ba2ed8364ca1a00768636e88b22201c8d010fa62a8588a4cace04f90bac46714c13cf638be82b03438d2fe813600da32291fb47297a1bd7fa6cef0cee - languageName: node - linkType: hard - "fast-querystring@npm:^1.1.1": version: 1.1.1 resolution: "fast-querystring@npm:1.1.1" @@ -23346,9 +22938,9 @@ __metadata: linkType: hard "fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3": - version: 1.0.6 - resolution: "fast-text-encoding@npm:1.0.6" - checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 + version: 1.0.3 + resolution: "fast-text-encoding@npm:1.0.3" + checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 languageName: node linkType: hard @@ -23380,11 +22972,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" + version: 1.6.1 + resolution: "fastq@npm:1.6.1" dependencies: reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + checksum: e9940b30758a6a6bb3595d965accb4c86b85c7b594c3387788c480a83ac5e43d933eccb6b41f510d0c944aa17af340f432b4efe791f0d0bbe0e3e06dfdcda610 languageName: node linkType: hard @@ -23398,20 +22990,20 @@ __metadata: linkType: hard "faye-websocket@npm:^0.11.3": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" + version: 0.11.3 + resolution: "faye-websocket@npm:0.11.3" dependencies: websocket-driver: ">=0.5.1" - checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + checksum: d7b2d68546812ea24e3079bd1e08bf1d79cd6d6137bfcea565d1cb1f6a5fc8fc29b689df2c1aff8b8b291d60fc808e1b27aa2896b86ba77ded10f1d9734c8e9f languageName: node linkType: hard "fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" + version: 2.0.1 + resolution: "fb-watchman@npm:2.0.1" dependencies: bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 languageName: node linkType: hard @@ -23422,18 +23014,33 @@ __metadata: languageName: node linkType: hard -"fbjs@npm:^3.0.0": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" +"fbjs@npm:^0.8.1": + version: 0.8.18 + resolution: "fbjs@npm:0.8.18" dependencies: - cross-fetch: ^3.1.5 - fbjs-css-vars: ^1.0.0 + core-js: ^1.0.0 + isomorphic-fetch: ^2.1.1 loose-envify: ^1.0.0 object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 ua-parser-js: ^0.7.30 - checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 + checksum: 668731b946a765908c9cbe51d5160f973abb78004b3d122587c3e930e3e1ddcc0ce2b17f2a8637dc9d733e149aa580f8d3035a35cc2d3bc78b78f1b19aab90e2 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.0 + resolution: "fbjs@npm:3.0.0" + dependencies: + cross-fetch: ^3.0.4 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^0.7.18 + checksum: 85ec57d8dbeddd7c82bf8f111a3c7de1abc1f4d7c603d6ccbcc1ec8dce35ff5b7a113dd34acbf7930093e5533c37a2298a92d342077f967bef34dc7cf2f3f07e languageName: node linkType: hard @@ -23447,9 +23054,9 @@ __metadata: linkType: hard "fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + version: 4.2.0 + resolution: "fecha@npm:4.2.0" + checksum: 4eb4235959161446f6ec1a24e34eba7362187d2c96d9dd86ea4290e345d1efd2175ccb01bbef9ee852c6790aa7af2539d08361b0499ebc9bf23b4791f5666cd0 languageName: node linkType: hard @@ -23490,18 +23097,18 @@ __metadata: linkType: hard "filelist@npm:^1.0.1": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" + version: 1.0.3 + resolution: "filelist@npm:1.0.3" dependencies: minimatch: ^5.0.1 - checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 + checksum: c78048691a31b91d54908ce2eac4731bf108613c7b2e4d1a05a6cbe6739bd067e4c1a3baa4f7d07b7143b8c374c0c0d59864b5c8d9168ec8e2a85f84fb7170ad languageName: node linkType: hard "filesize@npm:^8.0.6": - version: 8.0.7 - resolution: "filesize@npm:8.0.7" - checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 + version: 8.0.6 + resolution: "filesize@npm:8.0.6" + checksum: a16d7bd88c943ff55185559eabd4e9779d531b281a39a4a884659fd6f58bd29c20337ad7d58dc5492477df484bb9579a7ca6ad77e57a25908a51f8224790aaa3 languageName: node linkType: hard @@ -23664,16 +23271,16 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + version: 3.1.1 + resolution: "flatted@npm:3.1.1" + checksum: 508935e3366d95444131f0aaa801a4301f24ea5bcb900d12764e7335b46b910730cc1b5bcfcfb8eccb7c8db261ba0671c6a7ca30d10870ff7a7756dc7e731a7a languageName: node linkType: hard "flow-parser@npm:0.*": - version: 0.202.0 - resolution: "flow-parser@npm:0.202.0" - checksum: 9212d7cfe002a3ef05d170f022e58b362a1e5633177836d0a9123bcfbaa41a2e7026fff27549aadbb752488d4a05da49809676584da55362f791095795479ec3 + version: 0.152.0 + resolution: "flow-parser@npm:0.152.0" + checksum: 648558d3e51b6bc3ac8c2ecffc0d37511c2658ecae14b8b869a316621d08a5807253a80d4d5b3268c087cd1f5cfd9db879d4a00710d02891d1567febbdd5e15a languageName: node linkType: hard @@ -23684,7 +23291,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -23704,9 +23311,9 @@ __metadata: linkType: hard "foreach@npm:^2.0.4": - version: 2.0.6 - resolution: "foreach@npm:2.0.6" - checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e + version: 2.0.5 + resolution: "foreach@npm:2.0.5" + checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 languageName: node linkType: hard @@ -23718,8 +23325,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.3 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" + version: 6.5.0 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -23744,7 +23351,7 @@ __metadata: optional: true vue-template-compiler: optional: true - checksum: 9732a49bfeed8fc23e6e8a59795fa7c238edeba91040a9b520db54b4d316dda27f9f1893d360e296fd0ad8930627d364417d28a8c7007fba60cc730ebfce4956 + checksum: 95d145ab7936445f3a9bfa4116ef73537f97196cfaa3f5b24473dff36d034e839d3b0e034a23beefc9619eceb7a9866816bfd55afd1968e955eb3b3f8cfc35ed languageName: node linkType: hard @@ -23775,10 +23382,10 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:^1.4.3": - version: 1.7.2 - resolution: "form-data-encoder@npm:1.7.2" - checksum: aeebd87a1cb009e13cbb5e4e4008e6202ed5f6551eb6d9582ba8a062005178907b90f4887899d3c993de879159b6c0c940af8196725b428b4248cec5af3acf5f +"form-data-encoder@npm:^1.4.3, form-data-encoder@npm:^1.7.1": + version: 1.7.1 + resolution: "form-data-encoder@npm:1.7.1" + checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 languageName: node linkType: hard @@ -23794,13 +23401,13 @@ __metadata: linkType: hard "form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" + version: 3.0.0 + resolution: "form-data@npm:3.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 60ec3fe7e23154949ab6fef31baedf5afbfb8d6441ea8d19b211b43a5d0448be2918c9bba6218cade56a7cbd43f670d6e75f41f626f8d397d56bf8c60f4a829d languageName: node linkType: hard @@ -23833,17 +23440,17 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.0.0": - version: 4.4.1 - resolution: "formdata-node@npm:4.4.1" +"formdata-node@npm:^4.0.0, formdata-node@npm:^4.3.1": + version: 4.3.2 + resolution: "formdata-node@npm:4.3.2" dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - checksum: d91d4f667cfed74827fc281594102c0dabddd03c9f8b426fc97123eedbf73f5060ee43205d89284d6854e2fc5827e030cd352ef68b93beda8decc2d72128c576 + web-streams-polyfill: 4.0.0-beta.1 + checksum: e1d7aae7d579775b813ddc8ea4511fee613552715e81b36afb188d3a65b3d4df2ef69017106079ba52d9ab1e3367fea0206862d8ae64c02008ababdb341d2c3d languageName: node linkType: hard -"formidable@npm:^2.1.2": +"formidable@npm:^2.0.1": version: 2.1.2 resolution: "formidable@npm:2.1.2" dependencies: @@ -23965,7 +23572,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:^1.0.3": +"fs-monkey@npm:1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -24048,19 +23655,20 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" +"gauge@npm:^4.0.0": + version: 4.0.0 + resolution: "gauge@npm:4.0.0" dependencies: + ansi-regex: ^5.0.1 aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 + color-support: ^1.1.2 + console-control-strings: ^1.0.0 has-unicode: ^2.0.1 - signal-exit: ^3.0.7 + signal-exit: ^3.0.0 string-width: ^4.2.3 strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + wide-align: ^1.1.2 + checksum: 637b34c84f518defa89319dbef68211a24e9302182ad2a619e3be1be5b7dcf2a962c8359e889294af667440f4722e7e6e61671859e00bd8ec280a136ded89b25 languageName: node linkType: hard @@ -24081,24 +23689,34 @@ __metadata: linkType: hard "gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": - version: 5.1.0 - resolution: "gaxios@npm:5.1.0" + version: 5.0.1 + resolution: "gaxios@npm:5.0.1" dependencies: extend: ^3.0.2 https-proxy-agent: ^5.0.0 is-stream: ^2.0.0 node-fetch: ^2.6.7 - checksum: c3bf9eff0055f9af734380a765afb237ca199b6dedccd888417075c923c94311dcf5217fcb2b908c1121412668959d99c5ef5328827155e51deae6ce579c4473 + checksum: 65464122a5be72084d07947536d18a0dcebd115b28cbcd19da8a98763a67c8c8fde995bf2f358251397c939df9d2ff84f54628a94f634a98a16c7b7553cdb4a5 languageName: node linkType: hard "gcp-metadata@npm:^5.0.0": - version: 5.2.0 - resolution: "gcp-metadata@npm:5.2.0" + version: 5.0.0 + resolution: "gcp-metadata@npm:5.0.0" dependencies: gaxios: ^5.0.0 json-bigint: ^1.0.0 - checksum: 4e7ed589c814bb79cbf052b0eda1d5e219fbee030f4772eca27ec1e6e1faa85ba0ef3b17ea5c3fd51a54fc5429c924b4edbb260ac147701f211fb9807b893544 + checksum: b75635e564a39ef0a6ebbff0daa97cea37382c3d6f0d7a6a0406e03a275de804a74e3f3d410d5313a6c9dd3496023e96bc81474917fa8369974398eb069d9645 + languageName: node + linkType: hard + +"gendocu-public-apis@npm:^1.0.0": + version: 1.0.0 + resolution: "gendocu-public-apis@npm:1.0.0" + dependencies: + "@improbable-eng/grpc-web": ^0.14.0 + google-protobuf: ^3.15.8 + checksum: ee1548d1285f9d2dc7ef04c959e620516322314c8aa2f2bfedd25345a6211abf51cdca4d54cca18de8f31a90f2b86ab171ae41f7c2f39dfdd0ac7163f875f719 languageName: node linkType: hard @@ -24111,19 +23729,12 @@ __metadata: languageName: node linkType: hard -"generic-names@npm:^4.0.0": - version: 4.0.0 - resolution: "generic-names@npm:4.0.0" +"generic-names@npm:^2.0.1": + version: 2.0.1 + resolution: "generic-names@npm:2.0.1" dependencies: - loader-utils: ^3.2.0 - checksum: 8dabd2505164191501b75f2861b5e1194458a344ae2a7c9776bdd72d1f50b248dff737bcdf118fff677275edb3632f2d10662e6ac122dd7b245c5baa8d303270 - languageName: node - linkType: hard - -"gensequence@npm:^5.0.2": - version: 5.0.2 - resolution: "gensequence@npm:5.0.2" - checksum: b94af8d6591bbf5bc568813f31efbc5bfca010d83bce2a6c82dcf4211f56be8e13df956b239fecb1d7492bf02218e3d36dbc47e6f872df256312a507ae9ccd25 + loader-utils: ^1.1.0 + checksum: 5f2d6837dcddf4d7139f7c7ee4ff6ed82564123ae363aadc7a1c1c9967724da1e10d92c904b76b6ff58912465cf63cf47d87f3b400286845f289f54d5092e78f languageName: node linkType: hard @@ -24148,14 +23759,14 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": - version: 1.2.0 - resolution: "get-intrinsic@npm:1.2.0" +"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: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a languageName: node linkType: hard @@ -24181,11 +23792,11 @@ __metadata: linkType: hard "get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" + version: 5.1.0 + resolution: "get-stream@npm:5.1.0" dependencies: pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + checksum: 371e1fb3f3b009edffd379810ed52a1f0a0a621dbb3778bd844e3b002065af0790bfddde845b4a0f05f71da5d99441465f5586281497321b151a8bdd102c885a languageName: node linkType: hard @@ -24357,21 +23968,12 @@ __metadata: languageName: node linkType: hard -"global-dirs@npm:^0.1.1": - version: 0.1.1 - resolution: "global-dirs@npm:0.1.1" - dependencies: - ini: ^1.3.4 - checksum: 10624f5a8ddb8634c22804c6b24f93fb591c3639a6bc78e3584e01a238fc6f7b7965824184e57d63f6df36980b6c191484ad7bc6c35a1599b8f1d64be64c2a4a - languageName: node - linkType: hard - "global-dirs@npm:^3.0.0": - version: 3.0.1 - resolution: "global-dirs@npm:3.0.1" + version: 3.0.0 + resolution: "global-dirs@npm:3.0.0" dependencies: ini: 2.0.0 - checksum: 70147b80261601fd40ac02a104581432325c1c47329706acd773f3a6ce99bb36d1d996038c85ccacd482ad22258ec233c586b6a91535b1a116b89663d49d6438 + checksum: 953c17cf14bf6ee0e2100ae82a0d779934eed8a3ec5c94a7a4f37c5b3b592c31ea015fb9a15cf32484de13c79f4a814f3015152f3e1d65976cfbe47c1bfe4a88 languageName: node linkType: hard @@ -24403,20 +24005,20 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" + version: 13.19.0 + resolution: "globals@npm:13.19.0" dependencies: type-fest: ^0.20.2 - checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e languageName: node linkType: hard -"globalthis@npm:^1.0.1, globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.1": + version: 1.0.2 + resolution: "globalthis@npm:1.0.2" dependencies: define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff languageName: node linkType: hard @@ -24447,6 +24049,15 @@ __metadata: languageName: node linkType: hard +"good-listener@npm:^1.2.2": + version: 1.2.2 + resolution: "good-listener@npm:1.2.2" + dependencies: + delegate: ^3.1.2 + checksum: f39fb82c4e41524f56104cfd2d7aef1a88e72f3f75139115fbdf98cc7d844e0c1b39218b2e83438c6188727bf904ed78c7f0f2feff67b32833bc3af7f0202b33 + languageName: node + linkType: hard + "google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": version: 8.7.0 resolution: "google-auth-library@npm:8.7.0" @@ -24465,8 +24076,8 @@ __metadata: linkType: hard "google-gax@npm:^3.5.2, google-gax@npm:^3.5.7": - version: 3.5.8 - resolution: "google-gax@npm:3.5.8" + version: 3.5.7 + resolution: "google-gax@npm:3.5.7" dependencies: "@grpc/grpc-js": ~1.8.0 "@grpc/proto-loader": ^0.7.0 @@ -24486,25 +24097,25 @@ __metadata: bin: compileProtos: build/tools/compileProtos.js minifyProtoJson: build/tools/minify.js - checksum: e1d75b255f6fd08e93b0da23aa74f1b235fce76daf71b0e951a0de6ed77c1ad686f86adaa00e6100a92df0b23b2fc88d8c133604ad0022086560d4b9b661a189 + checksum: 1f3c647fc1ddc00a6a017be0f83b89691997358720763db13a69a94c7a74f6d31a49b0fd56f7bab18689914c784328901b118bdf150d742719995c705d0fa65d languageName: node linkType: hard "google-p12-pem@npm:^4.0.0": - version: 4.0.1 - resolution: "google-p12-pem@npm:4.0.1" + version: 4.0.0 + resolution: "google-p12-pem@npm:4.0.0" dependencies: node-forge: ^1.3.1 bin: gp12-pem: build/src/bin/gp12-pem.js - checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd + checksum: f41a88d339e9fe633dc915bc0f3335c0196fa318f994dcd5dfaa0f3f7aa2d99f6122e2c80bd0f4bb22f2b61ff645b7cc782a74e12ceaf6c9ad9e08cdeb4d615e languageName: node linkType: hard -"google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.21.2": - version: 3.21.2 - resolution: "google-protobuf@npm:3.21.2" - checksum: 3caa2e1e2654714cc1a201ac5e5faabcaa48f5fba3d8ff9b64ca66fe19e4e0506b94053f32eddc77bf3a7a47ac1660315c6744185c1e2bb27654fd76fe91b988 +"google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.19.1": + version: 3.20.1 + resolution: "google-protobuf@npm:3.20.1" + checksum: a440fbc329bb441b253bc421b01540918f4b66921c47a3bc57d154d2677dc917cb1a29126ff35ddc4d8872d1b5843ef1ece60b6dff506ba64a9f5807962d3f61 languageName: node linkType: hard @@ -24518,8 +24129,8 @@ __metadata: linkType: hard "got@npm:^11.8.3": - version: 11.8.6 - resolution: "got@npm:11.8.6" + version: 11.8.5 + resolution: "got@npm:11.8.5" dependencies: "@sindresorhus/is": ^4.0.0 "@szmarczak/http-timer": ^4.0.5 @@ -24532,14 +24143,14 @@ __metadata: lowercase-keys: ^2.0.0 p-cancelable: ^2.0.0 responselike: ^2.0.0 - checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d + checksum: 2de8a1bbda4e9b6b2b72b2d2100bc055a59adc1740529e631f61feb44a8b9a1f9f8590941ed9da9df0090b6d6d0ed8ffee94cd9ac086ec3409b392b33440f7d2 languageName: node linkType: hard "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da languageName: node linkType: hard @@ -24602,16 +24213,16 @@ __metadata: linkType: hard "graphql-language-service@npm:^5.0.6": - version: 5.1.2 - resolution: "graphql-language-service@npm:5.1.2" + version: 5.0.6 + resolution: "graphql-language-service@npm:5.0.6" dependencies: nullthrows: ^1.0.0 - vscode-languageserver-types: ^3.17.1 + vscode-languageserver-types: ^3.15.1 peerDependencies: graphql: ^15.5.0 || ^16.0.0 bin: graphql: dist/temp-bin.js - checksum: 23551077017db9f57f17e73472145931db48b091d44ceeaa789bd69845b2ed48b1e9b8604319564b755788e6870eca93732a597bcd70ffcaf273f7970dfc7e68 + checksum: a7155ba934aa428278cce0f460fa3b8b12020a26a0355e60738974617a66d9b2f1bb7d41cbd72a1620a29e61f10ca438cbf72cbf2405b8f653edddfc69fec02a languageName: node linkType: hard @@ -24630,8 +24241,8 @@ __metadata: linkType: hard "graphql-request@npm:^5.0.0": - version: 5.2.0 - resolution: "graphql-request@npm:5.2.0" + version: 5.1.0 + resolution: "graphql-request@npm:5.1.0" dependencies: "@graphql-typed-document-node/core": ^3.1.1 cross-fetch: ^3.1.5 @@ -24639,7 +24250,7 @@ __metadata: form-data: ^3.0.0 peerDependencies: graphql: 14 - 16 - checksum: a8aa37816378898e6fc8c4db04a1c114c98f98d90718cf1680bd96b22724bd43b1210619f9b0d328b5c1acb4f7b76d2227a2537cd5ab059bb54cf0debecb33bf + checksum: 8b65d5c1b0cad8996a843b52305b2712ffbf842c700487d4cee1ed719f22baacaacfddafb65572bcddd67d57fd1d2d389dee2430ffba4b34c3ab542d079446c7 languageName: node linkType: hard @@ -24664,23 +24275,36 @@ __metadata: linkType: hard "graphql-voyager@npm:^1.0.0-rc.31": - version: 1.0.0 - resolution: "graphql-voyager@npm:1.0.0" + version: 1.0.0-rc.31 + resolution: "graphql-voyager@npm:1.0.0-rc.31" dependencies: - "@mui/material": ^5.8.1 - commonmark: 0.30.0 - cspell: ^6.2.3 - lodash: 4.17.21 - svg-pan-zoom: ^3.6.1 + "@f/animate": ^1.0.1 + "@material-ui/core": ^3.9.3 + classnames: ^2.2.6 + clipboard: ^2.0.4 + commonmark: ^0.29.0 + lodash: ^4.17.10 + prop-types: ^15.7.2 + svg-pan-zoom: ^3.6.0 + viz.js: 2.1.2 peerDependencies: - graphql: ">=16.5.0" - react: ">=18.0.0" - react-dom: ">=18.0.0" - checksum: 57f2ed4a8066adf50ea6c630be5ab10935c7e56c6b1e4163243a15034205c1ec563c203eac107d01be2b9c28354458512ad93b41c96dea30f94d08dd556393b9 + graphql: ">=14.0.0" + react: ">=15.4.2" + react-dom: ">=15.4.2" + checksum: 80e826eeb42d286540447723ea35a463a3a155287914a45e24b69f31617d8ca74c0c43bdaa64123bf4ed046e68f7e31feca7661c06288551040f3e5b96c48fed languageName: node linkType: hard -"graphql-ws@npm:5.12.0, graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": +"graphql-ws@npm:5.11.2": + version: 5.11.2 + resolution: "graphql-ws@npm:5.11.2" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 2c94b06c1919217dc15a0556474673de7aabcc7179a2982a87ded51856c105e4f4ee6d54a6c135a0a7f55d85a5997a6a15cff514959258885814adec6a61ff00 + languageName: node + linkType: hard + +"graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": version: 5.12.0 resolution: "graphql-ws@npm:5.12.0" peerDependencies: @@ -24704,13 +24328,13 @@ __metadata: linkType: hard "grpc-docs@npm:^1.0.6, grpc-docs@npm:^1.1.2": - version: 1.1.4 - resolution: "grpc-docs@npm:1.1.4" + version: 1.1.3 + resolution: "grpc-docs@npm:1.1.3" dependencies: "@improbable-eng/grpc-web": ^0.15.0 "@types/minimatch": ^3.0.5 - GendocuPublicApis: "https://git.gendocu.com/gendocu/GendocuPublicApis.git#master" - google-protobuf: ^3.21.2 + gendocu-public-apis: ^1.0.0 + google-protobuf: ^3.19.1 grpc-docs: ^1.0.6 js-yaml: ^4.1.0 minimatch: ^3.0.4 @@ -24723,18 +24347,18 @@ __metadata: styled-components: ^5.3.3 peerDependencies: react: ^16.0.0 - checksum: 55b088011205fe82ced6af763136bb2494eb059445c5776bf29922439b814fa8983774a68910c47898cef5be82bea60801c2f96305e76170cff1df3f890b8d18 + checksum: 1bcd3179ce276e8fd34229acc6d3f1024908b7e6734e36ddcc4852c6db0100b900093355652577ab476c9927167cff92b05e560713995803154d4dbd4459f973 languageName: node linkType: hard "gtoken@npm:^6.1.0": - version: 6.1.2 - resolution: "gtoken@npm:6.1.2" + version: 6.1.1 + resolution: "gtoken@npm:6.1.1" dependencies: gaxios: ^5.0.1 google-p12-pem: ^4.0.0 jws: ^4.0.0 - checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf + checksum: f063ed3f418f5a9c33fbe599b09f56a55b18f6c8d2913f11cc2fc5025d53b96fd6ab1b4deb2c7631167d6b89d0939e4ea77f94767fcf338862ffda8911250980 languageName: node linkType: hard @@ -24748,9 +24372,9 @@ __metadata: linkType: hard "handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + version: 2.0.0 + resolution: "handle-thing@npm:2.0.0" + checksum: bb6a33ec17a36a9fca92c8f98b0208dca4b5659253d77a2db7d31a0bad467d01f94e59444e226b6d35877226516176f069501c01d847047e1abcbe303363070f languageName: node linkType: hard @@ -24780,12 +24404,12 @@ __metadata: linkType: hard "har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" + version: 5.1.3 + resolution: "har-validator@npm:5.1.3" dependencies: - ajv: ^6.12.3 + ajv: ^6.5.5 har-schema: ^2.0.0 - checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + checksum: 5903ddf55f4403bb102a86dc2da073593716c7aa422863c244cb406b69e006551553c904e30ed5d123788675ae827f977b3b366211dc730b33a2b619f926199f languageName: node linkType: hard @@ -24797,9 +24421,9 @@ __metadata: linkType: hard "harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + version: 1.6.1 + resolution: "harmony-reflect@npm:1.6.1" + checksum: 4cb91f86d262650d62c3ac713a2284ef0784a5c8be347188f97747db68d0e6d9801f09a3f12bacec59d5ec9d010cba64b8acb4c2c4827e172ef2ab215cdfef9d languageName: node linkType: hard @@ -24824,13 +24448,6 @@ __metadata: languageName: node linkType: hard -"has-own-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "has-own-prop@npm:2.0.0" - checksum: ca6336e85ead2295c9603880cbc199e2d3ff7eaea0e9035d68fbc79892e9cf681abc62c0909520f112c671dad9961be2173b21dff951358cc98425c560e789e0 - languageName: node - linkType: hard - "has-property-descriptors@npm:^1.0.0": version: 1.0.0 resolution: "has-property-descriptors@npm:1.0.0" @@ -24840,14 +24457,7 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -24880,13 +24490,12 @@ __metadata: linkType: hard "hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 languageName: node linkType: hard @@ -24908,16 +24517,16 @@ __metadata: linkType: hard "hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 + version: 2.2.4 + resolution: "hast-util-parse-selector@npm:2.2.4" + checksum: 06e8b534626517929856877df116d95b46d384cc159595270c1e5b3af7404f20843065a1c675d60944445f7356c5c876ed10d5e2d66654b62fe06ecc8b423d45 languageName: node linkType: hard "hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 + version: 2.0.0 + resolution: "hast-util-whitespace@npm:2.0.0" + checksum: abeb5386075bfb0facfce89eed0e13d2cb27a0910cec8fd234b48821a1538387a73fa7f458842e8c404148dc69434acbc10488d75b02817e460652c2c894c024 languageName: node linkType: hard @@ -24954,9 +24563,9 @@ __metadata: linkType: hard "headers-polyfill@npm:^3.1.0": - version: 3.1.2 - resolution: "headers-polyfill@npm:3.1.2" - checksum: 510ca9637ef652404dbd432e680418f8d418ba18094ef2f64c3d8de955ebf6e68d553c7f0aeaa5fc937d130b139c1e2d7c2066cd4cf0f740a4627924eaaee9db + version: 3.1.0 + resolution: "headers-polyfill@npm:3.1.0" + checksum: a95257065684653b7185efbb9a380c547ea832002991b5adf0d90cd222073da2701be9dc2849d1970ecf15e8c35b383984358566afe6e76ca8ff1dbd7cdce3af languageName: node linkType: hard @@ -25001,7 +24610,14 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^2.3.1": + version: 2.5.5 + resolution: "hoist-non-react-statics@npm:2.5.5" + checksum: ee2d05e5c7e1398ad84a15b0327f66bd78f38a8e0015e852f954b36434e32eb7e942d5357505020a3a1147f247b165bf1e69d72393e3accab67cafdafeb86230 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.2.1, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -25078,16 +24694,16 @@ __metadata: linkType: hard "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.3 - resolution: "html-entities@npm:2.3.3" - checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 + version: 2.3.2 + resolution: "html-entities@npm:2.3.2" + checksum: 522d8d202df301ff51b517a379e642023ed5c81ea9fb5674ffad88cff386165733d00b6089d5c2fcc644e44777d6072017b6216d8fa40f271d3610420d00a886 languageName: node linkType: hard "html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + version: 2.0.1 + resolution: "html-escaper@npm:2.0.1" + checksum: 5f76c4f12a155fc19dbcad7da11fe833623a84b7d120d9a96fb5c720f9fe1e3e68c1916e9c333fe383f5cdeeeb382cbcb4c22fc345a00863eba48f3a027c4878 languageName: node linkType: hard @@ -25187,9 +24803,9 @@ __metadata: linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + version: 0.5.3 + resolution: "http-parser-js@npm:0.5.3" + checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 languageName: node linkType: hard @@ -25267,12 +24883,12 @@ __metadata: linkType: hard "http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" + version: 1.0.0-beta.5.2 + resolution: "http2-wrapper@npm:1.0.0-beta.5.2" dependencies: quick-lru: ^5.1.1 resolve-alpn: ^1.0.0 - checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e + checksum: c2b572ded523dbf52d8107f61791b527f85e9ce03e811f452e7e3c9e59925ebd1e757c60f8b46a549778675546e8ace189091a1764eb4601db46aa51292b84d0 languageName: node linkType: hard @@ -25315,9 +24931,9 @@ __metadata: linkType: hard "human-signals@npm:^4.3.0": - version: 4.3.1 - resolution: "human-signals@npm:4.3.1" - checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + version: 4.3.0 + resolution: "human-signals@npm:4.3.0" + checksum: 662b976b1063a8afb8fd7fa50bde6975997e17ea6ceba2aad54aacf1dc239a2cd7d14d27b3ceca0c6288627f4b45c56c2c89618455ff52cd9377c02d6328cd7c languageName: node linkType: hard @@ -25346,10 +24962,10 @@ __metadata: languageName: node linkType: hard -"hyphenate-style-name@npm:^1.0.3": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 +"hyphenate-style-name@npm:^1.0.2, hyphenate-style-name@npm:^1.0.3": + version: 1.0.3 + resolution: "hyphenate-style-name@npm:1.0.3" + checksum: e333f610e7cb32210861ff8c55f99582cdc39e4737903936a7eb61702c98f8db45f33d54f9d230221fabc4d321b2ab8382b8af50d24a1eba21916f2edddd7b85 languageName: node linkType: hard @@ -25479,13 +25095,13 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": + version: 3.2.1 + resolution: "import-fresh@npm:3.2.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: caef42418a087c3951fb676943a7f21ba8971aa07f9b622dff4af7edcef4160e1b172dccd85a88d7eb109cf41406a4592f70259e6b3b33aeafd042bb61f81d96 languageName: node linkType: hard @@ -25513,21 +25129,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.0.2 + resolution: "import-local@npm:3.0.2" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"import-meta-resolve@npm:^2.2.2": - version: 2.2.2 - resolution: "import-meta-resolve@npm:2.2.2" - checksum: 3a5910a6f914b5f06b307d7d1c25710bc56f12e21e923d5b2180dd0d53c6c2d51e7b55df26f168b63f5670babcaca9422b7a9429e877bbb8c1997d79bd65882b + checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c languageName: node linkType: hard @@ -25538,6 +25147,24 @@ __metadata: languageName: node linkType: hard +"indefinite-observable@npm:^1.0.1": + version: 1.0.2 + resolution: "indefinite-observable@npm:1.0.2" + dependencies: + symbol-observable: 1.2.0 + checksum: 69a337967f48fca18989f9d68ad98c7220ed9b499bf00330ff72669a9583cb7f8e82f801da10720f720edf1313f427c77ce793350bdc413c952cec8ce112fc12 + languageName: node + linkType: hard + +"indefinite-observable@npm:^2.0.1": + version: 2.0.1 + resolution: "indefinite-observable@npm:2.0.1" + dependencies: + symbol-observable: 1.2.0 + checksum: b4305c999b7596901f8798e569b8faa030361dfb77f8b720e229558a29f544826f7e8987c55cc2a84c37ff2723594a965b96a40a6c71daae92b918f3eb393077 + languageName: node + linkType: hard + "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -25597,7 +25224,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": +"ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -25612,12 +25239,11 @@ __metadata: linkType: hard "inline-style-prefixer@npm:^6.0.0": - version: 6.0.4 - resolution: "inline-style-prefixer@npm:6.0.4" + version: 6.0.0 + resolution: "inline-style-prefixer@npm:6.0.0" dependencies: - css-in-js-utils: ^3.1.0 - fast-loops: ^1.1.3 - checksum: caf7a75d18acbedc7e3b8bfac17563082becd2df6b65accad964a6afdf490329b42315c37fe65ba0177cc10fd32809eb40d62aba23a0118c74d87d4fc58defa2 + css-in-js-utils: ^2.0.0 + checksum: 1331a6184bed03d145e3b9a98363fc7a245590ea1a495df7376a99386737893d4318f8ecf873e2be8431cff1de91512b7a4b9e36326933d5647db0088b63ef4f languageName: node linkType: hard @@ -25666,21 +25292,21 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.0.3": + version: 1.0.3 + resolution: "internal-slot@npm:1.0.3" dependencies: - get-intrinsic: ^1.2.0 + get-intrinsic: ^1.1.0 has: ^1.0.3 side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf languageName: node linkType: hard -"internmap@npm:1 - 2": - version: 2.0.3 - resolution: "internmap@npm:2.0.3" - checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 +"internmap@npm:^1.0.0": + version: 1.0.1 + resolution: "internmap@npm:1.0.1" + checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 languageName: node linkType: hard @@ -25748,10 +25374,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 +"ip@npm:^1.1.5": + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a languageName: node linkType: hard @@ -25769,6 +25395,13 @@ __metadata: languageName: node linkType: hard +"is-absolute-url@npm:^3.0.3": + version: 3.0.3 + resolution: "is-absolute-url@npm:3.0.3" + checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 + languageName: node + linkType: hard + "is-absolute@npm:^1.0.0": version: 1.0.0 resolution: "is-absolute@npm:1.0.0" @@ -25786,6 +25419,13 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^2.0.0": + version: 2.0.0 + resolution: "is-alphabetical@npm:2.0.0" + checksum: 7193b3ffaa1b7657b71a4e25aea51f4bd750e589d7e1cc2e349edb942b0145873923477a689b248fe553602e0a3793bc012a13763c56dbc0241d14f3b98d8dc9 + languageName: node + linkType: hard + "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -25796,7 +25436,17 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": +"is-alphanumerical@npm:^2.0.0": + version: 2.0.0 + resolution: "is-alphanumerical@npm:2.0.0" + dependencies: + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 50a5003efd6824aba9f69bae8b37c76c2c7b76f0c6251dcc9a54408437364f5ae70da7f010e24a056c4bf19e20b0116d95f248be1089528a8b6696e28c1f0b0b + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.0, is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -25806,14 +25456,14 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.1": + version: 3.0.1 + resolution: "is-array-buffer@npm:3.0.1" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 + get-intrinsic: ^1.1.3 is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + checksum: f26ab87448e698285daf707e52a533920449f7abf63714140ffab9d5571aa5a71ac2fa2677e8b793ad0d5d3e40078d4d2c8a0ab39c957e3cfc6513bb6c9dfdc9 languageName: node linkType: hard @@ -25860,18 +25510,18 @@ __metadata: linkType: hard "is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + version: 2.0.4 + resolution: "is-buffer@npm:2.0.4" + checksum: b1616ff40c1644e219d6038819044608e31edcc60eb287e5f214391222dea889a68c659f0654865ce34b6c4dcfa2c8cae0174343a0f6ae3f2150f7856326cb80 languageName: node linkType: hard "is-builtin-module@npm:^3.1.0": - version: 3.2.1 - resolution: "is-builtin-module@npm:3.2.1" + version: 3.1.0 + resolution: "is-builtin-module@npm:3.1.0" dependencies: - builtin-modules: ^3.3.0 - checksum: e8f0ffc19a98240bda9c7ada84d846486365af88d14616e737d280d378695c8c448a621dcafc8332dbf0fcd0a17b0763b845400709963fa9151ddffece90ae88 + builtin-modules: ^3.0.0 + checksum: f1e5dd2cd5f252d4d799b20a0c8c4f7e9c399c4d141749af76ca0121058d4062c3015d026f1b1409dd3d2a4ddfb9b15cf6eb9c370fed53fea8652ce35b5e95cb languageName: node linkType: hard @@ -25929,6 +25579,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^2.0.0": + version: 2.0.0 + resolution: "is-decimal@npm:2.0.0" + checksum: 274ff0ef14e5694a2f698d65225680fb9b0c9a9da36afd320a9b5224aec1182679792ec6684fe15e3576ad3de91a2e1f6662e0e0e2f7bda6a50c026cd8030959 + languageName: node + linkType: hard + "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -25976,11 +25633,9 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + version: 1.0.8 + resolution: "is-generator-function@npm:1.0.8" + checksum: ff6a510416885616fa57a2a1e043224a386ed37451c3686cc1ed38a63acd59b240f09b5d937aa86dedc3a7fb91ae6c0ce6477149d4b6f9be608a870e038b38bd languageName: node linkType: hard @@ -26000,6 +25655,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^2.0.0": + version: 2.0.0 + resolution: "is-hexadecimal@npm:2.0.0" + checksum: 62d03640345e13a3edcccbd5c80e47088c7163e54ab6e945f77fd5bf2b1e8571fb7fd4c2d6eff9f2720a6db81cb13377f0acd0b245344b69dc85be5239b8a6f6 + languageName: node + linkType: hard + "is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": version: 1.1.3 resolution: "is-in-browser@npm:1.1.3" @@ -26084,13 +25746,6 @@ __metadata: languageName: node linkType: hard -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 - languageName: node - linkType: hard - "is-path-cwd@npm:^3.0.0": version: 3.0.0 resolution: "is-path-cwd@npm:3.0.0" @@ -26127,9 +25782,9 @@ __metadata: linkType: hard "is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + version: 4.0.0 + resolution: "is-plain-obj@npm:4.0.0" + checksum: a6bb55a90636345a64c6153b74d85a9b6440f9975f4dcc57eed596c280b7ba228c71c406355a3147ed0488330d2743d5756e052c9492b1aa4f7dcd281f08c4b6 languageName: node linkType: hard @@ -26163,6 +25818,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:^2.1.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 + languageName: node + linkType: hard + "is-promise@npm:^4.0.0": version: 4.0.0 resolution: "is-promise@npm:4.0.0" @@ -26205,6 +25867,13 @@ __metadata: languageName: node linkType: hard +"is-resolvable@npm:^1.1.0": + version: 1.1.0 + resolution: "is-resolvable@npm:1.1.0" + checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 + languageName: node + linkType: hard + "is-root@npm:^2.1.0": version: 2.1.0 resolution: "is-root@npm:2.1.0" @@ -26253,6 +25922,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^1.0.1": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -26294,7 +25970,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3": version: 1.1.10 resolution: "is-typed-array@npm:1.1.10" dependencies: @@ -26307,7 +25983,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": +"is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -26409,7 +26085,7 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8 <5": +"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8, isbinaryfile@npm:^4.0.8 <5": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 @@ -26448,6 +26124,16 @@ __metadata: languageName: node linkType: hard +"isomorphic-fetch@npm:^2.1.1": + version: 2.2.1 + resolution: "isomorphic-fetch@npm:2.2.1" + dependencies: + node-fetch: ^1.0.1 + whatwg-fetch: ">=0.10.0" + checksum: bb5daa7c3785d6742f4379a81e55b549a469503f7c9bf9411b48592e86632cf5e8fe8ea878dba185c0f33eb7c510c23abdeb55aebfdf5d3c70f031ced68c5424 + languageName: node + linkType: hard + "isomorphic-fetch@npm:^3.0.0": version: 3.0.0 resolution: "isomorphic-fetch@npm:3.0.0" @@ -26512,15 +26198,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" + version: 5.1.0 + resolution: "istanbul-lib-instrument@npm:5.1.0" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + checksum: 8b82e733c69fe9f94d2e21f3e5760c9bedb110329aa75df4bd40df95f1cac3bf38767e43f35b125cc547ceca7376b72ce7d95cc5238b7e9088345c7b589233d3 languageName: node linkType: hard @@ -26536,23 +26222,23 @@ __metadata: linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" + version: 4.0.0 + resolution: "istanbul-lib-source-maps@npm:4.0.0" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 languageName: node linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" + version: 3.1.4 + resolution: "istanbul-reports@npm:3.1.4" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 languageName: node linkType: hard @@ -26593,58 +26279,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-changed-files@npm:29.5.0" +"jest-changed-files@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-changed-files@npm:29.4.3" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 languageName: node linkType: hard -"jest-circus@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-circus@npm:29.5.0" +"jest-circus@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-circus@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.5.0 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-each: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 p-limit: ^3.1.0 - pretty-format: ^29.5.0 - pure-rand: ^6.0.0 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 + checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 languageName: node linkType: hard -"jest-cli@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-cli@npm:29.5.0" +"jest-cli@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-cli@npm:29.4.3" dependencies: - "@jest/core": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-config: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -26654,34 +26339,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba + checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 languageName: node linkType: hard -"jest-config@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-config@npm:29.5.0" +"jest-config@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-config@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.5.0 - "@jest/types": ^29.5.0 - babel-jest: ^29.5.0 + "@jest/test-sequencer": ^29.4.3 + "@jest/types": ^29.4.3 + babel-jest: ^29.4.3 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.5.0 - jest-environment-node: ^29.5.0 + jest-circus: ^29.4.3 + jest-environment-node: ^29.4.3 jest-get-type: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-runner: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-resolve: ^29.4.3 + jest-runner: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26692,7 +26377,7 @@ __metadata: optional: true ts-node: optional: true - checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c + checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 languageName: node linkType: hard @@ -26717,15 +26402,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-diff@npm:29.5.0" +"jest-diff@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-diff@npm:29.4.3" dependencies: chalk: ^4.0.0 diff-sequences: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 + pretty-format: ^29.4.3 + checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 languageName: node linkType: hard @@ -26738,51 +26423,51 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-each@npm:29.5.0" +"jest-each@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-each@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 chalk: ^4.0.0 jest-get-type: ^29.4.3 - jest-util: ^29.5.0 - pretty-format: ^29.5.0 - checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 + jest-util: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d languageName: node linkType: hard "jest-environment-jsdom@npm:^29.0.2": - version: 29.5.0 - resolution: "jest-environment-jsdom@npm:29.5.0" + version: 29.4.3 + resolution: "jest-environment-jsdom@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.5.0 - jest-util: ^29.5.0 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 3df7fc85275711f20b483ac8cd8c04500704ed0f69791eb55c574b38f5a39470f03d775cf20c1025bc1884916ac0573aa2fa4db1bb74225bc7fdd95ba97ad0da + checksum: 3fb29bb4b472e05a38fdb235aa936ad469dfa2f6c1cab97fe3d1a7c585351976d05c7bbbd715b9747f070a225dcf10a9166df1461e0fb838ea7a377a8e64bed4 languageName: node linkType: hard -"jest-environment-node@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-environment-node@npm:29.5.0" +"jest-environment-node@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-node@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d languageName: node linkType: hard @@ -26800,11 +26485,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-haste-map@npm:29.5.0" +"jest-haste-map@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-haste-map@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -26812,24 +26497,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 + checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 languageName: node linkType: hard -"jest-leak-detector@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-leak-detector@npm:29.5.0" +"jest-leak-detector@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-leak-detector@npm:29.4.3" dependencies: jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 + pretty-format: ^29.4.3 + checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 languageName: node linkType: hard @@ -26845,15 +26530,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-matcher-utils@npm:29.5.0" +"jest-matcher-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-matcher-utils@npm:29.4.3" dependencies: chalk: ^4.0.0 - jest-diff: ^29.5.0 + jest-diff: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 + pretty-format: ^29.4.3 + checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d languageName: node linkType: hard @@ -26874,43 +26559,43 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-message-util@npm:29.5.0" +"jest-message-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-message-util@npm:29.4.3" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf + checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced languageName: node linkType: hard -"jest-mock@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-mock@npm:29.5.0" +"jest-mock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-mock@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-util: ^29.5.0 - checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c + jest-util: ^29.4.3 + checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 languageName: node linkType: hard "jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" + version: 1.2.2 + resolution: "jest-pnp-resolver@npm:1.2.2" peerDependencies: jest-resolve: "*" peerDependenciesMeta: jest-resolve: optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 languageName: node linkType: hard @@ -26921,95 +26606,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve-dependencies@npm:29.5.0" +"jest-resolve-dependencies@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve-dependencies@npm:29.4.3" dependencies: jest-regex-util: ^29.4.3 - jest-snapshot: ^29.5.0 - checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf + jest-snapshot: ^29.4.3 + checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 languageName: node linkType: hard -"jest-resolve@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve@npm:29.5.0" +"jest-resolve@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve@npm:29.4.3" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f + checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc languageName: node linkType: hard -"jest-runner@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runner@npm:29.5.0" +"jest-runner@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runner@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/environment": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/environment": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.4.3 - jest-environment-node: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-leak-detector: ^29.5.0 - jest-message-util: ^29.5.0 - jest-resolve: ^29.5.0 - jest-runtime: ^29.5.0 - jest-util: ^29.5.0 - jest-watcher: ^29.5.0 - jest-worker: ^29.5.0 + jest-environment-node: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-leak-detector: ^29.4.3 + jest-message-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runtime: ^29.4.3 + jest-util: ^29.4.3 + jest-watcher: ^29.4.3 + jest-worker: ^29.4.3 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runtime@npm:29.5.0" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runtime@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/globals": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/globals": ^29.4.3 "@jest/source-map": ^29.4.3 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-resolve: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d + checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 languageName: node linkType: hard -"jest-snapshot@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-snapshot@npm:29.5.0" +"jest-snapshot@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-snapshot@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -27017,24 +26702,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/expect-utils": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.5.0 + expect: ^29.4.3 graceful-fs: ^4.2.9 - jest-diff: ^29.5.0 + jest-diff: ^29.4.3 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-haste-map: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 natural-compare: ^1.4.0 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 semver: ^7.3.5 - checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b + checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 languageName: node linkType: hard @@ -27052,47 +26738,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-util@npm:29.5.0" +"jest-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-util@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 + checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f languageName: node linkType: hard -"jest-validate@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-validate@npm:29.5.0" +"jest-validate@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-validate@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.5.0 - checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 + pretty-format: ^29.4.3 + checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 languageName: node linkType: hard -"jest-watcher@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-watcher@npm:29.5.0" +"jest-watcher@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-watcher@npm:29.4.3" dependencies: - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.5.0 + jest-util: ^29.4.3 string-length: ^4.0.1 - checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 + checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc languageName: node linkType: hard @@ -27117,36 +26803,36 @@ __metadata: linkType: hard "jest-worker@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" + version: 28.1.1 + resolution: "jest-worker@npm:28.1.1" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca + checksum: 28519c43b4007e60a3756d27f1e7884192ee9161b6a9587383a64b6535f820cc4868e351a67775e0feada41465f48ccf323a8db34ae87e15a512ddac5d1424b2 languageName: node linkType: hard -"jest-worker@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-worker@npm:29.5.0" +"jest-worker@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-worker@npm:29.4.3" dependencies: "@types/node": "*" - jest-util: ^29.5.0 + jest-util: ^29.4.3 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b languageName: node linkType: hard "jest@npm:^29.0.2": - version: 29.5.0 - resolution: "jest@npm:29.5.0" + version: 29.4.3 + resolution: "jest@npm:29.4.3" dependencies: - "@jest/core": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.4.3 + "@jest/types": ^29.4.3 import-local: ^3.0.2 - jest-cli: ^29.5.0 + jest-cli: ^29.4.3 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -27154,7 +26840,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f languageName: node linkType: hard @@ -27168,11 +26854,11 @@ __metadata: linkType: hard "jiti@npm:^1.17.1": - version: 1.18.2 - resolution: "jiti@npm:1.18.2" + version: 1.17.2 + resolution: "jiti@npm:1.17.2" bin: jiti: bin/jiti.js - checksum: 46c41cd82d01c6efdee3fc0ae9b3e86ed37457192d6366f19157d863d64961b07982ab04e9d5879576a1af99cc4d132b0b73b336094f86a5ce9fb1029ec2d29f + checksum: 51941fea3622d1ff80d914ec6ec95ae463ede598a4a2317f1e8ff018823212eba6b9ea1c638c97c18f681870b1c2b9f49fbb13021b7c2415c46c8a3b1910f1e3 languageName: node linkType: hard @@ -27198,29 +26884,29 @@ __metadata: linkType: hard "joi@npm:^17.7.0": - version: 17.9.0 - resolution: "joi@npm:17.9.0" + version: 17.7.0 + resolution: "joi@npm:17.7.0" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 - "@sideway/formula": ^3.0.1 + "@sideway/formula": ^3.0.0 "@sideway/pinpoint": ^2.0.0 - checksum: d6d0f62df122f5aa11ea9d5bbedd92713b1a9b6ec3f82e1087432e0fd127b44fbbe7232d2803d3aae2f9db5a75968eeb480799a2eb4b571c5bb9278e22a26b56 + checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c languageName: node linkType: hard -"jose@npm:^4.10.0, jose@npm:^4.11.4, jose@npm:^4.6.0": - version: 4.13.1 - resolution: "jose@npm:4.13.1" - checksum: 89be959573beee69bd443493887d78799fd42340b45afa2c6681beda30314bcdfa5575f6977203c199e4c3e0ec2fc18d3c94745e7f0d59db51dedfae0efee63d +"jose@npm:^4.10.0, jose@npm:^4.6.0": + version: 4.12.0 + resolution: "jose@npm:4.12.0" + checksum: 09e67611768127ab54b6b507401de4b1f87e1e285cf2c2fc917e931e001b7e584c90081b421f483f13a6eec4fc44936e4a5f4b8ae2d59928061e886e35d33fa2 languageName: node linkType: hard "joycon@npm:^3.0.1": - version: 3.1.1 - resolution: "joycon@npm:3.1.1" - checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + version: 3.1.0 + resolution: "joycon@npm:3.1.0" + checksum: f21f17b46142f14c92cc99f5a157ebf224717a284c45e870452be5c5ebc3bb7e07e66692fc9da3a40f6b08106ac986dc9eae2f77977db62416fe47a99b0de0ac languageName: node linkType: hard @@ -27253,9 +26939,9 @@ __metadata: linkType: hard "js-sdsl@npm:^4.1.4": - version: 4.3.0 - resolution: "js-sdsl@npm:4.3.0" - checksum: ce908257cf6909e213af580af3a691a736f5ee8b16315454768f917a682a4ea0c11bde1b241bbfaecedc0eb67b72101b2c2df2ffaed32aed5d539fca816f054e + version: 4.1.4 + resolution: "js-sdsl@npm:4.1.4" + checksum: 1977cea4ab18e0e03e28bdf0371d8b443fad65ca0988e0faa216406faf6bb943714fe8f7cc7a5bfe5f35ba3d94ddae399f4d10200f547f2c3320688b0670d726 languageName: node linkType: hard @@ -27435,16 +27121,16 @@ __metadata: linkType: hard "jsdom@npm:^20.0.0": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" + version: 20.0.0 + resolution: "jsdom@npm:20.0.0" dependencies: abab: ^2.0.6 - acorn: ^8.8.1 - acorn-globals: ^7.0.0 + acorn: ^8.7.1 + acorn-globals: ^6.0.0 cssom: ^0.5.0 cssstyle: ^2.3.0 data-urls: ^3.0.2 - decimal.js: ^10.4.2 + decimal.js: ^10.3.1 domexception: ^4.0.0 escodegen: ^2.0.0 form-data: ^4.0.0 @@ -27452,24 +27138,25 @@ __metadata: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.1 is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.2 - parse5: ^7.1.1 + nwsapi: ^2.2.0 + parse5: ^7.0.0 saxes: ^6.0.0 symbol-tree: ^3.2.4 - tough-cookie: ^4.1.2 - w3c-xmlserializer: ^4.0.0 + tough-cookie: ^4.0.0 + w3c-hr-time: ^1.0.2 + w3c-xmlserializer: ^3.0.0 webidl-conversions: ^7.0.0 whatwg-encoding: ^2.0.0 whatwg-mimetype: ^3.0.0 whatwg-url: ^11.0.0 - ws: ^8.11.0 + ws: ^8.8.0 xml-name-validator: ^4.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + checksum: f69b40679d8cfaee2353615445aaff08b823c53dc7778ede6592d02ed12b3e9fb4e8db2b6d033551b67e08424a3adb2b79d231caa7dcda2d16019c20c705c11f languageName: node linkType: hard @@ -27609,11 +27296,11 @@ __metadata: linkType: hard "json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" + version: 1.0.1 + resolution: "json-stable-stringify@npm:1.0.1" dependencies: - jsonify: ^0.0.1 - checksum: ec10863493fb728481ed7576551382768a173d5b884758db530def00523b862083a3fd70fee24b39e2f47f5f502e22f9a1489dd66da3535b63bf6241dbfca800 + jsonify: ~0.0.0 + checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 languageName: node linkType: hard @@ -27658,7 +27345,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1, json5@npm:^1.0.2": +"json5@npm:^1.0.1": version: 1.0.2 resolution: "json5@npm:1.0.2" dependencies: @@ -27669,7 +27356,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.2": +"json5@npm:^2.1.2, json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -27710,10 +27397,10 @@ __metadata: languageName: node linkType: hard -"jsonify@npm:^0.0.1": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 +"jsonify@npm:~0.0.0": + version: 0.0.0 + resolution: "jsonify@npm:0.0.0" + checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce languageName: node linkType: hard @@ -27788,81 +27475,154 @@ __metadata: languageName: node linkType: hard +"jss-camel-case@npm:^6.0.0": + version: 6.1.0 + resolution: "jss-camel-case@npm:6.1.0" + dependencies: + hyphenate-style-name: ^1.0.2 + peerDependencies: + jss: ^9.7.0 + checksum: f20ad892cddc30241b5127d648233b513ce57b2a6ed2f710cd995510f8d06e1418cd8f6e8e50dc6bd60b2e8a35159bfdeb40143938e0f2cdc19fd39279953789 + languageName: node + linkType: hard + +"jss-default-unit@npm:^8.0.2": + version: 8.0.2 + resolution: "jss-default-unit@npm:8.0.2" + peerDependencies: + jss: ^9.4.0 + checksum: 5277c5ccc3d56f5c137d6d65f0fc36d15eb22ef08b5949e887ee75e9f4f25197e25f2a99706b70a2828cee010fd8ed7484fb1bb2086fe327f2b24b1bdcc22abb + languageName: node + linkType: hard + +"jss-global@npm:^3.0.0": + version: 3.0.0 + resolution: "jss-global@npm:3.0.0" + peerDependencies: + jss: ^9.0.0 + checksum: e3fa80d8251ba5f183d9b0b4416d64e8f5d285cfdb595cc600daf1a1366b67bca573939bb71d98b6596bf4d6f2c95711cf53a358af3d63cd7945dbb434c6547b + languageName: node + linkType: hard + +"jss-nested@npm:^6.0.1": + version: 6.0.1 + resolution: "jss-nested@npm:6.0.1" + dependencies: + warning: ^3.0.0 + peerDependencies: + jss: ^9.0.0 + checksum: 437bdacc559be0b4b5bc1faa2bc77b5c6cf14733fefbf73a34bb7335786b9f08e4e79b3d73cf83b386959adcd8fa9d725877912e96d9a0921ed38baa1a69b8d9 + languageName: node + linkType: hard + "jss-plugin-camel-case@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-camel-case@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-camel-case@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.10.0 - checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 + jss: 10.6.0 + checksum: 75c23826deef63c3603cfb47331d1eaf9feeafd097bd115a076f2ee9fb696855d3f18b3f41455a046120fddf0ea11985259c1b8b8a37b3556f4de1a1c83affd5 languageName: node linkType: hard "jss-plugin-default-unit@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-default-unit@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-default-unit@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa + jss: 10.6.0 + checksum: 7ae36fadf4f206a16e49c40806ef92ba1f0e60395488ab8ad4df96796b408013b38ea5ed975155ecd7833a42a96c8d5cb1e90aef011279816633e60f807ec330 languageName: node linkType: hard "jss-plugin-global@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-global@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-global@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 + jss: 10.6.0 + checksum: 7aab58408c77071c571dd2c2132edad8d40b683513a8de534f0ec7f63926fd9d9fcf6bdda82103eb541452a723b992f061720f8e5cf2014acb7f6bbbde111f56 languageName: node linkType: hard "jss-plugin-nested@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-nested@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-nested@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 + jss: 10.6.0 tiny-warning: ^1.0.2 - checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de + checksum: 38095127e8b5ddb0a33ccaf61a4d89dc1b0f78e6d06d079a47a14bca4aed4e885f1957d83f11c5da08b4249b2c629e8bc62b2996f1674ca1302575a7b2b11171 languageName: node linkType: hard "jss-plugin-props-sort@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-props-sort@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-props-sort@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba + jss: 10.6.0 + checksum: 2917ff301e667f75efa15df865a860a50d4319d415d1169c213e66b464edc2b37b6f428be2d974ccdde7c8d61c50123f18e788143a96eacc2a1c42ad250ae375 languageName: node linkType: hard "jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-rule-value-function@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-rule-value-function@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.10.0 + jss: 10.6.0 tiny-warning: ^1.0.2 - checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee + checksum: 709e1ce0afdc39a52cb78e371fef626f933e99992790b15771d85056176bdf69365d62cfed6ce95434752cc1a1e7e05a6f2548e4cd5999808d50a28174315be3 languageName: node linkType: hard "jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.10.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" + version: 10.6.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.10.0 - checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff + jss: 10.6.0 + checksum: 9db048022ee2fb79a223a9f1be5976e131715057e3c0200cfcead9b9f8625023942534afa261e3c967cee6ad716bfd7d4a2f356556178f60f4eddcf83bcd8856 languageName: node linkType: hard -"jss@npm:10.10.0, jss@npm:^10.5.1, jss@npm:~10.10.0": +"jss-props-sort@npm:^6.0.0": + version: 6.0.0 + resolution: "jss-props-sort@npm:6.0.0" + peerDependencies: + jss: ^9.0.0 + checksum: 82a04f625a2f2b3a71b2fcb00b1ed0478137c83dc47c323d24c7ea88d08c9ea295b061f99cf264db133fef3435366d6da594724f7713e0415dc50b4eff2aeb53 + languageName: node + linkType: hard + +"jss-vendor-prefixer@npm:^7.0.0": + version: 7.0.0 + resolution: "jss-vendor-prefixer@npm:7.0.0" + dependencies: + css-vendor: ^0.3.8 + peerDependencies: + jss: ^9.0.0 + checksum: 8ec3608711833e79da7ccfffd8177e752f16093589fa28d3a24ec19e6588fbc6a07cc5cacf59ef4c111ab1d0fb72e07b88cb3444eb8c0c6ed4cc8107da984633 + languageName: node + linkType: hard + +"jss@npm:10.6.0": + version: 10.6.0 + resolution: "jss@npm:10.6.0" + dependencies: + "@babel/runtime": ^7.3.1 + csstype: ^3.0.2 + indefinite-observable: ^2.0.1 + is-in-browser: ^1.1.3 + tiny-warning: ^1.0.2 + checksum: 529edd871ddf059beef55ee0f974ad8436fbcf050d6538e6d2d7edab53ce2c09983d2f863e42a1473dd0e42a0447e9912bce6706bb0e539226d92cdaad128d46 + languageName: node + linkType: hard + +"jss@npm:^10.5.1, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" dependencies: @@ -27874,6 +27634,17 @@ __metadata: languageName: node linkType: hard +"jss@npm:^9.8.7": + version: 9.8.7 + resolution: "jss@npm:9.8.7" + dependencies: + is-in-browser: ^1.1.3 + symbol-observable: ^1.1.0 + warning: ^3.0.0 + checksum: ebb264cc893fb8c17a0277875947f8f72e01f5be991bf7f61a39abb861e1276e75ee402fdd2be9ce827af839a1a08bd81ad86a4e108d57fd7d7ebb2361837a53 + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -27884,17 +27655,17 @@ __metadata: languageName: node linkType: hard -"just-diff-apply@npm:^5.2.0": - version: 5.5.0 - resolution: "just-diff-apply@npm:5.5.0" - checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa +"just-diff-apply@npm:^4.0.1": + version: 4.0.1 + resolution: "just-diff-apply@npm:4.0.1" + checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e languageName: node linkType: hard "just-diff@npm:^5.0.1": - version: 5.2.0 - resolution: "just-diff@npm:5.2.0" - checksum: 5527fb6d28a446185250fba501ad857370c049bac7aa5a34c9ec82a45e1380af1a96137be7df2f87252d9f75ef67be41d4c0267d481ed0235b2ceb3ee1f5f75d + version: 5.0.1 + resolution: "just-diff@npm:5.0.1" + checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 languageName: node linkType: hard @@ -28002,7 +27773,7 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3, kleur@npm:^4.1.5": +"kleur@npm:^4.0.3, kleur@npm:^4.1.4": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 @@ -28063,9 +27834,9 @@ __metadata: linkType: hard "language-subtag-registry@npm:~0.3.2": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + version: 0.3.21 + resolution: "language-subtag-registry@npm:0.3.21" + checksum: 5f794525a5bfcefeea155a681af1c03365b60e115b688952a53c6e0b9532b09163f57f1fcb69d6150e0e805ec0350644a4cb35da98f4902562915be9f89572a1 languageName: node linkType: hard @@ -28078,16 +27849,6 @@ __metadata: languageName: node linkType: hard -"launch-editor@npm:^2.6.0": - version: 2.6.0 - resolution: "launch-editor@npm:2.6.0" - dependencies: - picocolors: ^1.0.0 - shell-quote: ^1.7.3 - checksum: 48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d - languageName: node - linkType: hard - "lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -28096,11 +27857,11 @@ __metadata: linkType: hard "lazystream@npm:^1.0.0": - version: 1.0.1 - resolution: "lazystream@npm:1.0.1" + version: 1.0.0 + resolution: "lazystream@npm:1.0.0" dependencies: readable-stream: ^2.0.5 - checksum: 822c54c6b87701a6491c70d4fabc4cafcf0f87d6b656af168ee7bb3c45de9128a801cb612e6eeeefc64d298a7524a698dd49b13b0121ae50c2ae305f0dcc5310 + checksum: 6cb9352a697bad74471671b299997edc736b400bb405dc409acfc9ffe584bb6f86898c4ace86b2f145ae32fe42ef60bd68749acb62c2ff3fa6bded721193f79c languageName: node linkType: hard @@ -28201,7 +27962,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5": +"lilconfig@npm:2.1.0, lilconfig@npm:^2.0.3": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 @@ -28235,11 +27996,11 @@ __metadata: linkType: hard "linkify-it@npm:^3.0.1": - version: 3.0.3 - resolution: "linkify-it@npm:3.0.3" + version: 3.0.2 + resolution: "linkify-it@npm:3.0.2" dependencies: uc.micro: ^1.0.1 - checksum: 31367a4bb70c5bbc9703246236b504b0a8e049bcd4e0de4291fa50f0ebdebf235b5eb54db6493cb0b1319357c6eeafc4324c9f4aa34b0b943d9f2e11a1268fbc + checksum: 08e14854ec3c29e3578311b1cd95e469952a27f191633189a23890628939fc45c6d84fa4495abb9f7f06e60f73a31b8881d834214864d46db914a09ffc7889ae languageName: node linkType: hard @@ -28309,8 +28070,8 @@ __metadata: linkType: hard "listr2@npm:^5.0.7": - version: 5.0.8 - resolution: "listr2@npm:5.0.8" + version: 5.0.7 + resolution: "listr2@npm:5.0.7" dependencies: cli-truncate: ^2.1.0 colorette: ^2.0.19 @@ -28325,7 +28086,7 @@ __metadata: peerDependenciesMeta: enquirer: optional: true - checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c + checksum: 5c2cb6ba3f7a5cfd548f89405febe73dc937acb6060227198c05da0ed5d5285a8107c61fcc4e33884e3bbdd447411aff7580af396bd22b6a11047ceab4950fab languageName: node linkType: hard @@ -28355,9 +28116,9 @@ __metadata: linkType: hard "loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + version: 4.2.0 + resolution: "loader-runner@npm:4.2.0" + checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a languageName: node linkType: hard @@ -28384,9 +28145,9 @@ __metadata: linkType: hard "loader-utils@npm:^3.2.0": - version: 3.2.1 - resolution: "loader-utils@npm:3.2.1" - checksum: 4e3ea054cdc8be1ab1f1238f49f42fdf0483039eff920fb1d442039f3f0ad4ebd11fb8e584ccdf2cb7e3c56b3d40c1832416e6408a55651b843da288960cc792 + version: 3.2.0 + resolution: "loader-utils@npm:3.2.0" + checksum: c7b9a8dc4b3bc19e9ef563c48e3a18ea9f8bb2da1ad38a12e4b88358cfba5f148a7baf12d78fe78ffcb718ce1e062ab31fcf5c148459f1247a672a4213471e80 languageName: node linkType: hard @@ -28621,7 +28382,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -28665,9 +28426,9 @@ __metadata: linkType: hard "loglevel@npm:^1.6.8": - version: 1.8.1 - resolution: "loglevel@npm:1.8.1" - checksum: a1a62db40291aaeaef2f612334c49e531bff71cc1d01a2acab689ab80d59e092f852ab164a5aedc1a752fdc46b7b162cb097d8a9eb2cf0b299511106c29af61d + version: 1.8.0 + resolution: "loglevel@npm:1.8.0" + checksum: 41aeea17de24aba8dba68084a31fe9189648bce4f39c1277e021bb276c3c53a75b0d337395919cf271068ad40ecefabad0e4fdeb4a8f11908beee532b898f4a7 languageName: node linkType: hard @@ -28679,16 +28440,16 @@ __metadata: linkType: hard "long@npm:^5.0.0": - version: 5.2.1 - resolution: "long@npm:5.2.1" - checksum: 9264da12d1b7df67e5aa6da4498144293caf1ad12e7f092efe4e9a2d32c53f0bbf7334f7cef997080a2a3af061142558ab366efa71698d98b1cdb883477445a7 + version: 5.2.0 + resolution: "long@npm:5.2.0" + checksum: 37aa4e67b9c3eebc6d9d675adcc9d06f06059ca268922a71273de389746bf07f0ff282f9e604d17fdf84c4149099b44e936ea2b621a6c4759a216621afa97efd languageName: node linkType: hard "longest-streak@npm:^3.0.0": - version: 3.1.0 - resolution: "longest-streak@npm:3.1.0" - checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 + version: 3.0.0 + resolution: "longest-streak@npm:3.0.0" + checksum: 02de69d43c25dc0bd7f617052201ec0746f6060acefd1dd10e579d89ec996177702c92e3b526f0c88a1823988c62cd537b17cac65693f49d8af076f1ac016364 languageName: node linkType: hard @@ -28738,7 +28499,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^4.0.1": +"lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.3": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" dependencies: @@ -28788,27 +28549,27 @@ __metadata: linkType: hard "luxon@npm:^3.0.0, luxon@npm:^3.2.1": - version: 3.3.0 - resolution: "luxon@npm:3.3.0" - checksum: 50cf17a0dc155c3dcacbeae8c0b7e80db425e0ba97b9cbdf12a7fc142d841ff1ab1560919f033af46240ed44e2f70c49f76e3422524c7fc8bb8d81ca47c66187 + version: 3.2.1 + resolution: "luxon@npm:3.2.1" + checksum: 3fa3def2c5f5d3032b4c46220c4da8aeb467ac979888fc9d2557adcd22195f93516b4ad5909a75862bec8dc6ddc0953b0f38e6d2f4a8ab8450ddc531a83cf20d languageName: node linkType: hard "lz-string@npm:^1.4.4": - version: 1.5.0 - resolution: "lz-string@npm:1.5.0" + version: 1.4.4 + resolution: "lz-string@npm:1.4.4" bin: lz-string: bin/bin.js - checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + checksum: 54e31238a61a84d8f664d9860a9fba7310c5b97a52c444f80543069bc084815eff40b8d4474ae1d93992fdf6c252dca37cf27f6adbeb4dbc3df2f3ac773d0e61 languageName: node linkType: hard "magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" + version: 0.25.7 + resolution: "magic-string@npm:0.25.7" dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a + sourcemap-codec: ^1.4.4 + checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 languageName: node linkType: hard @@ -28942,12 +28703,12 @@ __metadata: linkType: hard "markdown-it-anchor@npm:^8.4.1": - version: 8.6.7 - resolution: "markdown-it-anchor@npm:8.6.7" + version: 8.6.4 + resolution: "markdown-it-anchor@npm:8.6.4" peerDependencies: "@types/markdown-it": "*" markdown-it: "*" - checksum: 828236768ac7f61ed5591393c1b1bfc5dbf2b6d0c58a3deec606c61dddaa12658a34450cbef37ab50a04453e618ce1efd47d86e4e52595024334898fd306225b + checksum: bde310d0202450a228662921df9d9c2e95b3c5762512e8eed1d472fcc812fb20e6b4e98480cda88c8b56b0baf34ac70d6bf8404309c5a2321ebe62da43cd6fe6 languageName: node linkType: hard @@ -28967,9 +28728,9 @@ __metadata: linkType: hard "markdown-table@npm:^3.0.0": - version: 3.0.3 - resolution: "markdown-table@npm:3.0.3" - checksum: 8fcd3d9018311120fbb97115987f8b1665a603f3134c93fbecc5d1463380c8036f789e2a62c19432058829e594fff8db9ff81c88f83690b2f8ed6c074f8d9e10 + version: 3.0.1 + resolution: "markdown-table@npm:3.0.1" + checksum: 5376078ab652ba68cf855b33d338b3472d28b9f8c254dc0530261f55490261e861742a8e6625239cbbed08f899cbf0de7d2d1d5de48d3e7c6afd5f0876730227 languageName: node linkType: hard @@ -29041,35 +28802,33 @@ __metadata: linkType: hard "mdast-util-definitions@npm:^5.0.0": - version: 5.1.2 - resolution: "mdast-util-definitions@npm:5.1.2" + version: 5.1.0 + resolution: "mdast-util-definitions@npm:5.1.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae + unist-util-visit: ^3.0.0 + checksum: a5237dc5925d965ec5f4c237b8d2fbc4728c18402f4f0cea0c947fb6241d7f2c7264b8bd5000363800388003d1474d57f5d5d29e0605a504bd186e59ddf8906a languageName: node linkType: hard "mdast-util-find-and-replace@npm:^2.0.0": - version: 2.2.2 - resolution: "mdast-util-find-and-replace@npm:2.2.2" + version: 2.1.0 + resolution: "mdast-util-find-and-replace@npm:2.1.0" dependencies: - "@types/mdast": ^3.0.0 escape-string-regexp: ^5.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.0.0 - checksum: b4ce463c43fe6e1c38a53a89703f755c84ab5437f49bff9a0ac751279733332ca11c85ed0262aa6c17481f77b555d26ca6d64e70d6814f5b8d12d34a3e53a60b + unist-util-visit-parents: ^4.0.0 + checksum: 2df955899edb71fdd9f09a639572b281ec6e9be1533469cdbd7f1f16232a576adbd423f914182684f9516897143a5a797c45182848c0f83807d2c30a582a3c03 languageName: node linkType: hard "mdast-util-from-markdown@npm:^1.0.0": - version: 1.3.0 - resolution: "mdast-util-from-markdown@npm:1.3.0" + version: 1.0.2 + resolution: "mdast-util-from-markdown@npm:1.0.2" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 mdast-util-to-string: ^3.1.0 micromark: ^3.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 @@ -29077,130 +28836,116 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 + parse-entities: ^3.0.0 unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f + checksum: 6127a541ac09f41bd988388f40ac7952b9a1a2b0309de79341ffe2a3c0e6875a827831c13a3dd4af81cbedf873f7d28e4a01d4be529a02adf177956f56363e13 languageName: node linkType: hard "mdast-util-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.3 - resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" + version: 1.0.2 + resolution: "mdast-util-gfm-autolink-literal@npm:1.0.2" dependencies: "@types/mdast": ^3.0.0 ccount: ^2.0.0 mdast-util-find-and-replace: ^2.0.0 micromark-util-character: ^1.0.0 - checksum: 1748a8727cfc533bac0c287d6e72d571d165bfa77ae0418be4828177a3ec73c02c3f2ee534d87eb75cbaffa00c0866853bbcc60ae2255babb8210f7636ec2ce2 + checksum: 75e12f21ec24552ba33725f69a06cd703e5586d2296ca9d180927b2293c036e1bd39108adba83e8cbbefcc45ffd8821fb561b4c107684ed87bd9e5e286ba03bd languageName: node linkType: hard "mdast-util-gfm-footnote@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-gfm-footnote@npm:1.0.2" + version: 1.0.0 + resolution: "mdast-util-gfm-footnote@npm:1.0.0" dependencies: "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 + mdast-util-to-markdown: ^1.0.0 micromark-util-normalize-identifier: ^1.0.0 - checksum: 2d77505f9377ed7e14472ef5e6b8366c3fec2cf5f936bb36f9fbe5b97ccb7cce0464d9313c236fa86fb844206fd585db05707e4fcfb755e4fc1864194845f1f6 + unist-util-visit: ^4.0.0 + checksum: 45af2e4fee5cf425f285ac4252871630eda6e0b284babc3458495521fdeff26fcbd9b310618900ca80338c299635413c16600934a4ed5c483f8e0f4f6c812223 languageName: node linkType: hard "mdast-util-gfm-strikethrough@npm:^1.0.0": - version: 1.0.3 - resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" + version: 1.0.0 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 17003340ff1bba643ec4a59fd4370fc6a32885cab2d9750a508afa7225ea71449fb05acaef60faa89c6378b8bcfbd86a9d94b05f3c6651ff27a60e3ddefc2549 + "@types/mdast": ^3.0.3 + mdast-util-to-markdown: ^1.0.0 + checksum: 4e57d6957673493860ea602031861b0a3bb1daf204d07a2ec521b8238beba6e6d9f700f53503afd6ce9aad81d8edafeba7c307761090a3db05094ffbdad421f4 languageName: node linkType: hard "mdast-util-gfm-table@npm:^1.0.0": - version: 1.0.7 - resolution: "mdast-util-gfm-table@npm:1.0.7" + version: 1.0.1 + resolution: "mdast-util-gfm-table@npm:1.0.1" dependencies: - "@types/mdast": ^3.0.0 markdown-table: ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 8b8c401bb4162e53f072a2dff8efbca880fd78d55af30601c791315ab6722cb2918176e8585792469a0c530cebb9df9b4e7fede75fdc4d83df2839e238836692 + mdast-util-to-markdown: ^1.0.0 + checksum: 5b1fd47402c914d12f54fe588d7cb658e396ca63c3b2bc3ee771386bc671ba729ca7018ce2e5e8abdaf021ce4f72f49348c82226ee3d54ebe0620174ade70caa languageName: node linkType: hard "mdast-util-gfm-task-list-item@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" + version: 1.0.0 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: c9b86037d6953b84f11fb2fc3aa23d5b8e14ca0dfcb0eb2fb289200e172bb9d5647bfceb4f86606dc6d935e8d58f6a458c04d3e55e87ff8513c7d4ade976200b + "@types/mdast": ^3.0.3 + mdast-util-to-markdown: ^1.0.0 + checksum: 7771c08a9cc03f58fff59d00af9ddc3aab6f64d85192186c344df4937a03809acd38189f1c8a05860026b9149a6953959e80a291a770d89d88eae92ef49ad463 languageName: node linkType: hard "mdast-util-gfm@npm:^2.0.0": - version: 2.0.2 - resolution: "mdast-util-gfm@npm:2.0.2" + version: 2.0.0 + resolution: "mdast-util-gfm@npm:2.0.0" dependencies: - mdast-util-from-markdown: ^1.0.0 mdast-util-gfm-autolink-literal: ^1.0.0 mdast-util-gfm-footnote: ^1.0.0 mdast-util-gfm-strikethrough: ^1.0.0 mdast-util-gfm-table: ^1.0.0 mdast-util-gfm-task-list-item: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 7078cb985255208bcbce94a121906417d38353c6b1a9acbe56ee8888010d3500608b5d51c16b0999ac63ca58848fb13012d55f26930ff6c6f3450f053d56514e - languageName: node - linkType: hard - -"mdast-util-phrasing@npm:^3.0.0": - version: 3.0.1 - resolution: "mdast-util-phrasing@npm:3.0.1" - dependencies: - "@types/mdast": ^3.0.0 - unist-util-is: ^5.0.0 - checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + checksum: 70c35ee810b15895adef654ccb7d12bf633eb03105e56a0d0acca693d5f81c9819073262f9ab98fb1c7059eabbc0c658a05dd60c48ed9e1e8d5d7ea0d91e5c00 languageName: node linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.3.0 - resolution: "mdast-util-to-hast@npm:12.3.0" + version: 12.1.1 + resolution: "mdast-util-to-hast@npm:12.1.1" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 + "@types/mdurl": ^1.0.0 mdast-util-definitions: ^5.0.0 - micromark-util-sanitize-uri: ^1.1.0 - trim-lines: ^3.0.0 + mdurl: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + unist-builder: ^3.0.0 unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb + checksum: 4c5a73e0463493d5ab2c033d42f8daead24d0808969bf21c3a720786784a347cedc1d3ae26b37737dbe3ea0839bc130bf7e20f3bc02e2387e6e7b0a5f94bafe4 languageName: node linkType: hard -"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": - version: 1.5.0 - resolution: "mdast-util-to-markdown@npm:1.5.0" +"mdast-util-to-markdown@npm:^1.0.0": + version: 1.2.3 + resolution: "mdast-util-to-markdown@npm:1.2.3" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 longest-streak: ^3.0.0 - mdast-util-phrasing: ^3.0.0 mdast-util-to-string: ^3.0.0 micromark-util-decode-string: ^1.0.0 unist-util-visit: ^4.0.0 zwitch: ^2.0.0 - checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + checksum: 2a904f8af5dfe75650eda59e7f1b728c0dfb54fb37698274e78e99383b692aaba9d1a75092150960224b844b3a78cbdf813b31b2101d267159b7a43d56f58f3e languageName: node linkType: hard "mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": - version: 3.1.1 - resolution: "mdast-util-to-string@npm:3.1.1" - dependencies: - "@types/mdast": ^3.0.0 - checksum: 5e9375e1757ebf2950e122ef3538e4257ed2b6f43ab1d3e9c45db5dd5d5b5d14fd041490afcde00934f1cdb4b99877597ae04eb810d313ec7b38c6009058dddd + version: 3.1.0 + resolution: "mdast-util-to-string@npm:3.1.0" + checksum: f42ddd4e22f2215a75715b92ea6e3149c4ba356e7781d7b94fc86ded1c79cec3f986afeecef3a4a80068c9b224a6520099783a12146b957de24f020a3e47dd29 languageName: node linkType: hard @@ -29211,7 +28956,7 @@ __metadata: languageName: node linkType: hard -"mdurl@npm:^1.0.1, mdurl@npm:~1.0.1": +"mdurl@npm:^1.0.0, mdurl@npm:^1.0.1, mdurl@npm:~1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b @@ -29226,16 +28971,16 @@ __metadata: linkType: hard "mem-fs-editor@npm:^8.1.2 || ^9.0.0": - version: 9.7.0 - resolution: "mem-fs-editor@npm:9.7.0" + version: 9.3.0 + resolution: "mem-fs-editor@npm:9.3.0" dependencies: binaryextensions: ^4.16.0 commondir: ^1.0.1 deep-extend: ^0.6.0 - ejs: ^3.1.8 - globby: ^11.1.0 - isbinaryfile: ^5.0.0 - minimatch: ^7.2.0 + ejs: ^3.1.6 + globby: ^11.0.3 + isbinaryfile: ^4.0.8 + minimatch: ^3.0.4 multimatch: ^5.0.0 normalize-path: ^3.0.0 textextensions: ^5.13.0 @@ -29244,28 +28989,28 @@ __metadata: peerDependenciesMeta: mem-fs: optional: true - checksum: 25d566b0a0b841ea347f91196f4486386622070655907dab5cc63c0fd49c0ef9f752a1c3e6384b43e9dbd0518086d4a316d1fbed1f0a002b68f291167d1b9520 + checksum: ec61cbded585b61efaf5b04a6d9eb8e96bb2ce7baeeae98443e2ec7e0cb22a060af98f5fb4edd5d8fcfbd05eff0396b0b5d6929d3add4f65eed7616ef94a272a languageName: node linkType: hard "mem-fs@npm:^1.2.0 || ^2.0.0": - version: 2.3.0 - resolution: "mem-fs@npm:2.3.0" + version: 2.2.1 + resolution: "mem-fs@npm:2.2.1" dependencies: - "@types/node": ^15.6.2 + "@types/node": ^15.6.1 "@types/vinyl": ^2.0.4 vinyl: ^2.0.1 vinyl-file: ^3.0.0 - checksum: 375c6b81da35b6a73ce98b209f8795fb25d6f8ef6a60b67aa4f9cf32e16078484c1e704e0008b0fc095675af9679dc74a9891cab51cc34433939ae13c706a59c + checksum: e44fb4acf8391a847b9e9494115b27300eda77aa7c6caea533786f43d385253515b0c0ff4f00906744b2bd31010df923cc448bb6efb9593f41df5d40b0e69046 languageName: node linkType: hard -"memfs@npm:^3.1.2, memfs@npm:^3.4.1, memfs@npm:^3.4.3": - version: 3.4.13 - resolution: "memfs@npm:3.4.13" +"memfs@npm:^3.1.2, memfs@npm:^3.4.1": + version: 3.4.1 + resolution: "memfs@npm:3.4.1" dependencies: - fs-monkey: ^1.0.3 - checksum: 3f9717d6f060919d53f211acb6096a0ea2f566a8cbcc4ef7e1f2561e31e33dc456053fdf951c90a49c8ec55402de7f01b006b81683ab7bd4bdbbd8c9b9cdae5f + fs-monkey: 1.0.3 + checksum: 6d2f49d447d1be24ff9c747618933784eeb059189bc6a0d77b7a51c7daf06e2d3a74674a2e2ff1520e2c312bf91e719ed37144cf05087379b3ba0aef0b6aa062 languageName: node linkType: hard @@ -29323,7 +29068,7 @@ __metadata: languageName: node linkType: hard -"meros@npm:^1.1.4, meros@npm:^1.2.1": +"meros@npm:1.2.1, meros@npm:^1.1.4": version: 1.2.1 resolution: "meros@npm:1.2.1" peerDependencies: @@ -29381,21 +29126,20 @@ __metadata: linkType: hard "micromark-extension-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" + version: 1.0.0 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 + checksum: 8cefa45928ba2fdb6c572c6912214aa533e762ec4287fb5d47b6e2f92eb6a907c80e24e134b44b2b8ab9cac2a94d930c9c1f74a56a152a5daab23486e0a6a13f languageName: node linkType: hard "micromark-extension-gfm-footnote@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-gfm-footnote@npm:1.0.4" + version: 1.0.3 + resolution: "micromark-extension-gfm-footnote@npm:1.0.3" dependencies: micromark-core-commonmark: ^1.0.0 micromark-factory-space: ^1.0.0 @@ -29403,58 +29147,54 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 uvu: ^0.5.0 - checksum: 8daa203f5cf753338d5ecdbaae6b3ab6319d34b6013b90ea6860bed299418cecf86e69e48dabe42562e334760c738c77c5acdb47e75ae26f5f01f02f3bf0952d + checksum: 81aaf12d23ed73df405639d94896b9840ba8854c2490ae0b33b7f05b39635a71dfde27a98bce278092293bc5e4b268b7092fd2596ceb6c1c5ba45143e4e8fbf2 languageName: node linkType: hard "micromark-extension-gfm-strikethrough@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-gfm-strikethrough@npm:1.0.4" + version: 1.0.1 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.1" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-classify-character: ^1.0.0 micromark-util-resolve-all: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: f43d316b85fe93df1711cdcdc99a5320b941239349234bd262fc708cb67ad47bdfb41d1a7ebe2a5829816b0e9d3107380a5c1e558cb536a75354cbe4857823ba + checksum: 720aa4e47ac4701faf5640be40a97a249b880d5f8f2787106a0d12bd11dd8ab9e29a513af738743be07d42a02734e024184114b719435160e012c4ba9f7464bd languageName: node linkType: hard "micromark-extension-gfm-table@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-gfm-table@npm:1.0.5" + version: 1.0.0 + resolution: "micromark-extension-gfm-table@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef + checksum: 0c489daa32b9fc812b3f52f051fe38dab91e52f59791050b422f4ee141936747a14ad26a05d834b2e398f4c0a22b34a3106d914b1e2accf6dc5b3b16ccf35680 languageName: node linkType: hard "micromark-extension-gfm-tagfilter@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-gfm-tagfilter@npm:1.0.1" + version: 1.0.0 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.0" dependencies: micromark-util-types: ^1.0.0 - checksum: 63e8d68f25871722900a67a8001d5da21f19ea707f3566fc7d0b2eb1f6d52476848bb6a41576cf22470565124af9497c5aae842355faa4c14ec19cb1847e71ec + checksum: 8a5988f46a7ce39c15e45ead46a7890dd3a9903c6c50f6d6f4e5a7b95c04042654728a7921f1224001f274059c9fefd3c65e63eff67a1299e19d94fff83e0457 languageName: node linkType: hard "micromark-extension-gfm-task-list-item@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-task-list-item@npm:1.0.3" + version: 1.0.0 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: d320b0c5301f87e211c06a2330d1ee0fee6da14f0d6d44d5211055b465dadff34390cd6b258a5e0ca376fcda3364fef9a12fe6e26a0c858231fa3b98ddbf7785 + checksum: a8bc41ce4c5599cde45804737381ca5136b43c64c05034e396e476958232916d3bc23e585d3f71c59f03666c568bced41f177a76497267259b813ab4987dd3a5 languageName: node linkType: hard @@ -29486,14 +29226,13 @@ __metadata: linkType: hard "micromark-factory-label@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-label@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-factory-label@npm:1.0.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 + checksum: 37f34d8e42e3a606a636419ffe0f99fd7f6054778365aac56d1cc11585d1cd46000dbf938319abb2ea5e245803679d3cfa46afb5aecf2702bfd963113481f14c languageName: node linkType: hard @@ -29508,15 +29247,14 @@ __metadata: linkType: hard "micromark-factory-title@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-title@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-factory-title@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 + checksum: d9bf0779c49f013fea5fc5daadcee91e1703c81c1b5091337e806c24f1ea224d69f534d174aba2eccff7826620af71bb3db83b1caf14cbb89bea53f4e8e38bc3 languageName: node linkType: hard @@ -29582,28 +29320,27 @@ __metadata: linkType: hard "micromark-util-decode-string@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-decode-string@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-util-decode-string@npm:1.0.0" dependencies: - decode-named-character-reference: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a + parse-entities: ^3.0.0 + checksum: 9c7e6e3950e675f39058935e065e8774a1ef26a0d386eb45abd96fb8c0312c8a72464c672f41a3c7668974ac2a7cb2ad23b84eee3775b0bd4c47947d9fc64888 languageName: node linkType: hard "micromark-util-encode@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-encode@npm:1.0.1" - checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a + version: 1.0.0 + resolution: "micromark-util-encode@npm:1.0.0" + checksum: 16985a6b355721307553d1893da364e83144ef068f84978071a9b4b3d884b65c3138f8330fb039aac10f75766b4906e03c5e62baafb1bf5e731f959878277712 languageName: node linkType: hard "micromark-util-html-tag-name@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-html-tag-name@npm:1.1.0" - checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c + version: 1.0.0 + resolution: "micromark-util-html-tag-name@npm:1.0.0" + checksum: ed07ce9b9bb30cc4ea57f733089b3a253a6132c0608ccfc105eadb32f1f80bbd2347bf8a74f897fe039d7805a59f602fd4dd15f6adc7926d40b3646da2888d0f languageName: node linkType: hard @@ -29625,50 +29362,48 @@ __metadata: languageName: node linkType: hard -"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": - version: 1.1.0 - resolution: "micromark-util-sanitize-uri@npm:1.1.0" +"micromark-util-sanitize-uri@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-sanitize-uri@npm:1.0.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-encode: ^1.0.0 micromark-util-symbol: ^1.0.0 - checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b + checksum: 77448ec3a5d18f0ac975ea47591fbf0d5bd5568f9a0d033d9e318f90656031f037c5ff9137e93faf289480eaea70a5382e2571ebf9edcb1c1cd2a5187b6b3160 languageName: node linkType: hard "micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-subtokenize@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-util-subtokenize@npm:1.0.0" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 + checksum: 58272616564c0c91b8c38e4c3e4516489d90eba3a82ff8dc946e7af0fb8b7828618d1e260c090cdcde5ca4c2d2b772e8506535e6af154653db974485ce4f3fa0 languageName: node linkType: hard "micromark-util-symbol@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-symbol@npm:1.0.1" - checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d + version: 1.0.0 + resolution: "micromark-util-symbol@npm:1.0.0" + checksum: 704e30468efcfd52cefc077981e3502620c9cbef8b2395ec4d556893ac4ab76531c1be1c4edd78c8d71526d4e4b404e3bad131cf6832dc19366f3ab3f81cd815 languageName: node linkType: hard "micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.0.2 - resolution: "micromark-util-types@npm:1.0.2" - checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df + version: 1.0.1 + resolution: "micromark-util-types@npm:1.0.1" + checksum: 5da351efe8e7e6e341a6a0d6396846a484a5ee1406eddb7da1541f22f29035c1574e481bc159e15fe032c42afcf85e699f37257b89d7f43872d7b89efd1682a0 languageName: node linkType: hard "micromark@npm:^3.0.0": - version: 3.1.0 - resolution: "micromark@npm:3.1.0" + version: 3.0.5 + resolution: "micromark@npm:3.0.5" dependencies: "@types/debug": ^4.0.0 debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 micromark-core-commonmark: ^1.0.1 micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 @@ -29682,8 +29417,8 @@ __metadata: micromark-util-subtokenize: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 + parse-entities: ^3.0.0 + checksum: 613208b6e7e967e7da0c773950d25acc7154e9bfedfe66a4946c77f34d95ef1c7c08cc9a31142cdf4d84ccbfab310fece15f74dae1f1f70348390266ede26ebf languageName: node linkType: hard @@ -29811,22 +29546,13 @@ __metadata: linkType: hard "mini-css-extract-plugin@npm:^2.4.2": - version: 2.7.5 - resolution: "mini-css-extract-plugin@npm:2.7.5" + version: 2.7.2 + resolution: "mini-css-extract-plugin@npm:2.7.2" dependencies: schema-utils: ^4.0.0 peerDependencies: webpack: ^5.0.0 - checksum: afc37cdfb765e8826a1babbab3cd8a99ffc4eaeabb6c013a6b3c80801e44ebc37d930b98c6f66168bb8cd545fcb2e8fc2630d72b4501a1bb8add1547c2534a53 - languageName: node - linkType: hard - -"minim@npm:=0.23.8": - version: 0.23.8 - resolution: "minim@npm:0.23.8" - dependencies: - lodash: ^4.15.0 - checksum: 98e19a431189cee4dfad766e19948fb65b3607780bda2dc3f76b7bb35f9a468f372fb1b4c4b2ebfe348191e09f2b981579967b29cf02038798efe4eab326ffca + checksum: cd65611d6dc452f230c6ebba8a47bc5f5146b813b13b0b402c6f4a69f6451242eeea781152bebd31cad8ca7c7e95dac91e7e464087f18fb65b2d1097b58cf4ae languageName: node linkType: hard @@ -29862,30 +29588,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:=7.3.0": - version: 7.3.0 - resolution: "minimatch@npm:7.3.0" - dependencies: - brace-expansion: ^2.0.1 - checksum: c4d9af992958339d5fc593c9ce496f4b9615597e57cdd663e57bd3a745ebd208c2bba19c3290c25ed8dcf259586fa1f68e4e1acf304f8694927b84c5381167d0 - languageName: node - linkType: hard - "minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" + version: 5.1.2 + resolution: "minimatch@npm:5.1.2" dependencies: brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - -"minimatch@npm:^7.2.0": - version: 7.4.2 - resolution: "minimatch@npm:7.4.2" - dependencies: - brace-expansion: ^2.0.1 - checksum: 9e341b04e69d5ab03e4206dcb61c8a158e3b8709628bf5e1a4eaa9f3b72c0ba925e24ad959b1f6ce6835caa5a927131d5087fae6836b69e7d99d7d5e63ef0bd8 + checksum: 32ffda25b9fb8270a1c1beafdb7489dc0e411af553495136509a945691f63c9b6b000eeeaaf8bffe3efa609c1d6d3bc0f5a106f6c3443b5c05da649100ded964 languageName: node linkType: hard @@ -29941,8 +29649,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" + version: 2.1.0 + resolution: "minipass-fetch@npm:2.1.0" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -29951,7 +29659,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f languageName: node linkType: hard @@ -29993,18 +29701,20 @@ __metadata: linkType: hard "minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" + version: 3.3.5 + resolution: "minipass@npm:3.3.5" dependencies: yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + checksum: f89f02bcaa0e0e4bb4c44ec796008e69fbca62db0aba6ead1bc57d25bdaefdf42102130f4f9ecb7d9c6b6cd35ff7b0c7b97d001d3435da8e629fb68af3aea57e languageName: node linkType: hard "minipass@npm:^4.0.0": - version: 4.2.5 - resolution: "minipass@npm:4.2.5" - checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f + version: 4.0.0 + resolution: "minipass@npm:4.0.0" + dependencies: + yallist: ^4.0.0 + checksum: 7a609afbf394abfcf9c48e6c90226f471676c8f2a67f07f6838871afb03215ede431d1433feffe1b855455bcb13ef0eb89162841b9796109d6fed8d89790f381 languageName: node linkType: hard @@ -30019,9 +29729,9 @@ __metadata: linkType: hard "mixme@npm:^0.5.1": - version: 0.5.9 - resolution: "mixme@npm:0.5.9" - checksum: ec0e96b2fa099a051fe14477577e3da13f158690c64114a50ecd039694ca2cca1cb7c71a8755aaee8a3ef7229ef33408df822faa4d1d6123b52295eecf50620f + version: 0.5.4 + resolution: "mixme@npm:0.5.4" + checksum: cec5f6127c92455bc86d592f0a0628e188c7ccf3909bd106703a1d939f0e2f451ddaac6da0d77c5f14d53dd2d58f64f5b2f8ff55a68ec68be95a73d290e4d430 languageName: node linkType: hard @@ -30158,8 +29868,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1": - version: 1.1.1 - resolution: "msw@npm:1.1.1" + version: 1.0.1 + resolution: "msw@npm:1.0.1" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -30181,25 +29891,25 @@ __metadata: type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: - typescript: ">= 4.4.x <= 5.0.x" + typescript: ">= 4.4.x <= 4.9.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: d99c13911a2f3bc3b07a38ed60e0ec19883bc89e3f77a2d7609ce580eb4f50883e2b15ef140927fc0424e661ef1c455eea8fcd614202f2eaef66f53b794356f7 + checksum: e5d6cbe67067ca46f42aaa33011f53a4e5a873abcf81c52a6996536b3c41a88f522821d3a4cf589658252581506afddb58fd8c3dfd79a5cbf06e26e14f9570b6 languageName: node linkType: hard -"multicast-dns@npm:^7.2.5": - version: 7.2.5 - resolution: "multicast-dns@npm:7.2.5" +"multicast-dns@npm:^7.2.4": + version: 7.2.4 + resolution: "multicast-dns@npm:7.2.4" dependencies: dns-packet: ^5.2.2 thunky: ^1.0.2 bin: multicast-dns: cli.js - checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb + checksum: 45a78628a8f26479c4018122d689a8b22aff034699a1913dac0b9891e4111162b3222c85bba642d624270a90e51129607f1e41aa701e0108cc974246bc9fe828 languageName: node linkType: hard @@ -30251,15 +29961,15 @@ __metadata: linkType: hard "named-placeholders@npm:^1.1.2": - version: 1.1.3 - resolution: "named-placeholders@npm:1.1.3" + version: 1.1.2 + resolution: "named-placeholders@npm:1.1.2" dependencies: - lru-cache: ^7.14.1 - checksum: 7834adc91e92ae1b9c4413384e3ccd297de5168bb44017ff0536705ddc4db421723bd964607849265feb3f6ded390f84cf138e5925f22f7c13324f87a803dc73 + lru-cache: ^4.1.3 + checksum: c9317d1b479d6733b3baedfde209c6c866cf387c2d625837f93355fdb6a9055b1e8180b883fe00bcb20edb3ba4dd21128ec2f1ed8cb884385cef7698cbcadcc4 languageName: node linkType: hard -"nan@npm:^2.14.0, nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.16.0, nan@npm:^2.17.0": +"nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.17.0": version: 2.17.0 resolution: "nan@npm:2.17.0" dependencies: @@ -30269,8 +29979,8 @@ __metadata: linkType: hard "nano-css@npm:^5.3.1": - version: 5.3.5 - resolution: "nano-css@npm:5.3.5" + version: 5.3.1 + resolution: "nano-css@npm:5.3.1" dependencies: css-tree: ^1.1.2 csstype: ^3.0.6 @@ -30283,7 +29993,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 + checksum: 45517871e8c15a00769bfc9eb5e466d9c193b0a7423050eb77eb21003a1ccfd13863f01bf68490be830de019f4a0ae945d5b91eb23c5898d341ac8968ba3f18b languageName: node linkType: hard @@ -30361,15 +30071,15 @@ __metadata: linkType: hard "nise@npm:^5.1.2": - version: 5.1.4 - resolution: "nise@npm:5.1.4" + version: 5.1.2 + resolution: "nise@npm:5.1.2" dependencies: "@sinonjs/commons": ^2.0.0 - "@sinonjs/fake-timers": ^10.0.2 + "@sinonjs/fake-timers": ^7.0.4 "@sinonjs/text-encoding": ^0.7.1 just-extend: ^4.0.2 path-to-regexp: ^1.7.0 - checksum: bc57c10eaec28a6a7ddfb2e1e9b21d5e1fe22710e514f8858ae477cf9c7e9c891475674d5241519193403db43d16c3675f4207bc094a7a27b7e4f56584a78c1b + checksum: 688c557333dcbc5b41f4f1f1b0ea32fb0f8b424541a8958140bc61074980362c954b2aeb027c282de26b9ddcb4b230656f68ac4206777499e405dd7e716ec1f8 languageName: node linkType: hard @@ -30383,21 +30093,12 @@ __metadata: languageName: node linkType: hard -"node-abi@npm:^2.21.0": - version: 2.30.1 - resolution: "node-abi@npm:2.30.1" - dependencies: - semver: ^5.4.1 - checksum: 3f4b0c912ce4befcd7ceab4493ba90b51d60dfcc90f567c93f731d897ef8691add601cb64c181683b800f21d479d68f9a6e15d8ab8acd16a5706333b9e30a881 - languageName: node - linkType: hard - "node-abi@npm:^3.3.0": - version: 3.33.0 - resolution: "node-abi@npm:3.33.0" + version: 3.8.0 + resolution: "node-abi@npm:3.8.0" dependencies: semver: ^7.3.5 - checksum: 59e5e00d9a15225087b6dd55b7d4f99686a6d64a8bdbe2c9aa98f4f74554873a7225d3dc975fa32718e7695eed8abcfeaae58b03db118a01392f6d25b0469b52 + checksum: 3644dd51f4f189358ef56055407501aa698632d67448585b38c46c81a482a0c3bfb06da513ac4060a12ce5f607f208ba9d9c8280f1c38329670b709bd735fcae languageName: node linkType: hard @@ -30465,7 +30166,17 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": +"node-fetch@npm:^1.0.1": + version: 1.7.3 + resolution: "node-fetch@npm:1.7.3" + dependencies: + encoding: ^0.1.11 + is-stream: ^1.0.1 + checksum: 3bb0528c05d541316ebe52770d71ee25a6dce334df4231fd55df41a644143e07f068637488c18a5b0c43f05041dbd3346752f9e19b50df50569a802484544d5b + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7": version: 2.6.9 resolution: "node-fetch@npm:2.6.9" dependencies: @@ -30517,7 +30228,7 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.1.0, node-gyp@npm:latest": +"node-gyp@npm:^9.1.0": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" dependencies: @@ -30537,6 +30248,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:latest": + version: 9.1.0 + resolution: "node-gyp@npm:9.1.0" + dependencies: + env-paths: ^2.2.0 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^10.0.3 + nopt: ^5.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 + languageName: node + linkType: hard + "node-int64@npm:^0.4.0": version: 0.4.0 resolution: "node-int64@npm:0.4.0" @@ -30575,10 +30306,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.8": - version: 2.0.10 - resolution: "node-releases@npm:2.0.10" - checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc +"node-releases@npm:^2.0.6": + version: 2.0.6 + resolution: "node-releases@npm:2.0.6" + checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf languageName: node linkType: hard @@ -30663,6 +30394,13 @@ __metadata: languageName: node linkType: hard +"normalize-scroll-left@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-scroll-left@npm:0.1.2" + checksum: 817d5a659ba6f14f458cd03a5a0f98ec2a9d7e6c63c160f2db164827b87bb77c0237752890a18d11054fe628907493c5f4d8914907585ec9fbba3de26d2a6815 + languageName: node + linkType: hard + "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -30697,7 +30435,7 @@ __metadata: languageName: node linkType: hard -"npm-normalize-package-bin@npm:^1.0.1": +"npm-normalize-package-bin@npm:^1.0.0, npm-normalize-package-bin@npm:^1.0.1": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 @@ -30794,7 +30532,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.0.1": +"npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -30819,23 +30557,23 @@ __metadata: linkType: hard "npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" + version: 6.0.1 + resolution: "npmlog@npm:6.0.1" dependencies: are-we-there-yet: ^3.0.0 console-control-strings: ^1.1.0 - gauge: ^4.0.3 + gauge: ^4.0.0 set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 languageName: node linkType: hard -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" +"nth-check@npm:^2.0.0": + version: 2.0.1 + resolution: "nth-check@npm:2.0.1" dependencies: boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 languageName: node linkType: hard @@ -30871,10 +30609,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 +"nwsapi@npm:^2.2.0": + version: 2.2.0 + resolution: "nwsapi@npm:2.2.0" + checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 languageName: node linkType: hard @@ -30913,7 +30651,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db @@ -30937,7 +30675,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -31009,18 +30747,18 @@ __metadata: linkType: hard "octokit@npm:^2.0.0, octokit@npm:^2.0.4": - version: 2.0.14 - resolution: "octokit@npm:2.0.14" + version: 2.0.7 + resolution: "octokit@npm:2.0.7" dependencies: - "@octokit/app": ^13.1.1 + "@octokit/app": ^13.0.5 "@octokit/core": ^4.0.4 "@octokit/oauth-app": ^4.0.6 - "@octokit/plugin-paginate-rest": ^6.0.0 - "@octokit/plugin-rest-endpoint-methods": ^7.0.0 - "@octokit/plugin-retry": ^4.0.3 - "@octokit/plugin-throttling": ^5.0.0 - "@octokit/types": ^9.0.0 - checksum: 549ada6e075b810fe0fb0ce0314eccbaeacb2161805b25fb38c5730eff0494773ca7209cf19eae9848161bf73327d0c2f2ff307a7e15607e3a27e39298208e59 + "@octokit/plugin-paginate-rest": ^4.0.0 + "@octokit/plugin-rest-endpoint-methods": ^6.0.0 + "@octokit/plugin-retry": ^3.0.9 + "@octokit/plugin-throttling": ^4.0.1 + "@octokit/types": ^7.0.0 + checksum: 26eeba2b3d0614db4147980f6a9acb2a595f3ea6d78e9db5ef485b2c1b4606724e8a0b4c342a9f264903242ada5c329ee82eccb3fd8df822dff1944aa5bf20db languageName: node linkType: hard @@ -31103,23 +30841,23 @@ __metadata: linkType: hard "open@npm:^8.0.0, open@npm:^8.0.9, open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" + version: 8.4.0 + resolution: "open@npm:8.4.0" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 - checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c languageName: node linkType: hard "openapi-sampler@npm:^1.2.1": - version: 1.3.1 - resolution: "openapi-sampler@npm:1.3.1" + version: 1.2.1 + resolution: "openapi-sampler@npm:1.2.1" dependencies: "@types/json-schema": ^7.0.7 json-pointer: 0.6.2 - checksum: 65712bfb455345ffb1db603ce7964db56b5eca0aa11267d424ab7515750a502341ed0d22baa7bafd96edd4e6037bcc0da82eebcd6b5ce7afa3605a8bffadeff9 + checksum: 831abc601eb3e43539b0716b938f4e78f2ddfdc164bc47590422be435e46fd2b1a82fb5e954978460fc5a0cef14bb232ff07fc2561ab34bdcd45b67beb6d0e58 languageName: node linkType: hard @@ -31242,9 +30980,9 @@ __metadata: linkType: hard "p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf + version: 2.0.0 + resolution: "p-cancelable@npm:2.0.0" + checksum: dbe887e06ec72a918b3f3d41819aa57b5c4248ddf7162477727046bd2775d6e3e52390521198625599198e9bb5d592f3b0064e96fc0940cdf4e01233e2296664 languageName: node linkType: hard @@ -31361,12 +31099,12 @@ __metadata: linkType: hard "p-retry@npm:^4.5.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" + version: 4.5.0 + resolution: "p-retry@npm:4.5.0" dependencies: - "@types/retry": 0.12.0 - retry: ^0.13.1 - checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + "@types/retry": ^0.12.0 + retry: ^0.12.0 + checksum: 129cbf070401b4b5fea7c959a85a62d26ac29593bcb59e34ce1544a0cace3674cd1f66c370ba8ec95184cf5745546ea2d5e31b75395cf40a4e34358684867b67 languageName: node linkType: hard @@ -31440,9 +31178,9 @@ __metadata: linkType: hard "papi@npm:^1.1.0": - version: 1.1.2 - resolution: "papi@npm:1.1.2" - checksum: e1d1296478b184b4f0024b3e52149ecd486f32f2d81f1d59e910f7ae5c68276f81270a4e215c2611a939e0d994da17383d87a304e771f64ef7a9083f0d5456cb + version: 1.1.0 + resolution: "papi@npm:1.1.0" + checksum: f7c566fa10c27ff1820e76bf83035dab7db4f62a84e4ed1bdd1117bd6a1d796a2b4340fa8df34d19997e33be9306de0147065eeaafc1622964aa94b3073d50c4 languageName: node linkType: hard @@ -31465,36 +31203,28 @@ __metadata: languageName: node linkType: hard -"parent-module@npm:^2.0.0": - version: 2.0.0 - resolution: "parent-module@npm:2.0.0" +"parse-asn1@npm:^5.0.0": + version: 5.1.5 + resolution: "parse-asn1@npm:5.1.5" dependencies: - callsites: ^3.1.0 - checksum: f131f13d687a938556a01033561fb1b274b39921eb4425c7a691f0d91dcfbe9b19759c2b8d425a3ee7c8a46874e57fa418a690643880c3c7c56827aba12f78dd - languageName: node - linkType: hard - -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" - dependencies: - asn1.js: ^5.2.0 + asn1.js: ^4.0.0 browserify-aes: ^1.0.0 + create-hash: ^1.1.0 evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 + checksum: e3bf40ce4953ec66754fd692bafdd99d9f00a6bb05822361f47222f959ddf5d1f9928088cda3892433f81eee6394ac1d1d9dd4dbd5d5cdc567b644a2cf860a0a languageName: node linkType: hard "parse-conflict-json@npm:^2.0.1": - version: 2.0.2 - resolution: "parse-conflict-json@npm:2.0.2" + version: 2.0.1 + resolution: "parse-conflict-json@npm:2.0.1" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 - just-diff-apply: ^5.2.0 - checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 + just-diff-apply: ^4.0.1 + checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba languageName: node linkType: hard @@ -31512,6 +31242,20 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-entities@npm:3.0.0" + dependencies: + character-entities: ^2.0.0 + character-entities-legacy: ^2.0.0 + character-reference-invalid: ^2.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: 78a1039ace8822f641465a52660b84c3018a2e6345ee0534a2f9f8aa064a11cc9dba7523fa24103ce12b617b8e7b378f244a5d070a834b29feb97baf63c657ed + languageName: node + linkType: hard + "parse-filepath@npm:^1.0.2": version: 1.0.2 resolution: "parse-filepath@npm:1.0.2" @@ -31569,12 +31313,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.1": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" +"parse5@npm:^7.0.0": + version: 7.1.1 + resolution: "parse5@npm:7.1.1" dependencies: entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + checksum: 8f72fbfa6df83a3f29f58e1818f7bd46b47ff3e26d79c74e10b8fc7ef7ee76163f205113f1b2f6a5b8dc4e31e726f490444f04890cead6e974dbcbe8172b1321 languageName: node linkType: hard @@ -31654,13 +31398,13 @@ __metadata: linkType: hard "passport-oauth1@npm:1.x.x": - version: 1.3.0 - resolution: "passport-oauth1@npm:1.3.0" + version: 1.1.0 + resolution: "passport-oauth1@npm:1.1.0" dependencies: oauth: 0.9.x passport-strategy: 1.x.x utils-merge: 1.x.x - checksum: 69a0538221f11509aa405de0cadf510e635a6723e1e7e6179db34b4d21d82db8eff8a1e95a6e9eaeca3233e8e1fa5dce87999cd3ec32387238a73a552f95ca16 + checksum: 49ce8b8d17846bfdb6b1e659b7757eb2c0f239539b1901533bc00b7bdaa4c40662db804698364a60d61c284eae69d5f5d312bc04f2b8fc70ea1897a40f107fde languageName: node linkType: hard @@ -31745,14 +31489,14 @@ __metadata: linkType: hard "patch-package@npm:^6.5.0": - version: 6.5.1 - resolution: "patch-package@npm:6.5.1" + version: 6.5.0 + resolution: "patch-package@npm:6.5.0" dependencies: "@yarnpkg/lockfile": ^1.1.0 chalk: ^4.1.2 cross-spawn: ^6.0.5 find-yarn-workspace-root: ^2.0.0 - fs-extra: ^9.0.0 + fs-extra: ^7.0.1 is-ci: ^2.0.0 klaw-sync: ^6.0.0 minimist: ^1.2.6 @@ -31764,7 +31508,7 @@ __metadata: yaml: ^1.10.2 bin: patch-package: index.js - checksum: 8530ffa30f11136b527c6eddf6da48fa12856ee510a47edb1f9cdf8a025636adb82968f5fae778b5e04ce8c87915ebdf5911422b54add59a5a42e372a8f30eb2 + checksum: d300e87617e3fb990d1f78fd5be205b5a5e65dfdf197b1e7f76f3b3dfe1551a03d276cb5ee6b82ab4d57e78f54ddc22bde803eec1b0896560262b276d0b2c4ab languageName: node linkType: hard @@ -31793,9 +31537,9 @@ __metadata: linkType: hard "path-equal@npm:^1.1.2": - version: 1.2.5 - resolution: "path-equal@npm:1.2.5" - checksum: 2bef7bcb98c7ae371c52c1562b2fc515bfd03bc1a5571df9a8591038db8d742ba2d1ff39aa5130853e6afb69e773ccba5095f54d2e6d17422ca03ef9047992d7 + version: 1.2.2 + resolution: "path-equal@npm:1.2.2" + checksum: 948930eb6bbb5ddcc724f7a4339e2a98fe35269b5f46d88f85c588ed4713e7ec1c71da1629608606c6687216ba3afae710a77cfb5146b735a84d6199f06f247d languageName: node linkType: hard @@ -31911,9 +31655,9 @@ __metadata: linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.2.1 - resolution: "path-to-regexp@npm:6.2.1" - checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 + version: 6.2.0 + resolution: "path-to-regexp@npm:6.2.0" + checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc languageName: node linkType: hard @@ -31952,22 +31696,22 @@ __metadata: linkType: hard "pbkdf2@npm:^3.0.3": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" + version: 3.0.17 + resolution: "pbkdf2@npm:3.0.17" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + checksum: 9c9062b4bf300bfc03214a8665ab1c8ede227fca1d5bd8b8d0a9d317a941ff64c80b19810288a8cc0f774d603dce249d4b734e62b68dfc784be4ad1e6c0a81f5 languageName: node linkType: hard -"peek-readable@npm:^4.1.0": - version: 4.1.0 - resolution: "peek-readable@npm:4.1.0" - checksum: 02c673f9bc816f8e4e74a054c097225ad38d457d745b775e2b96faf404a54473b2f62f5bcd496f5ebc28696708bcc5e95bed409856f4bef5ed62eae9b4ac0dab +"peek-readable@npm:^4.0.1": + version: 4.0.1 + resolution: "peek-readable@npm:4.0.1" + checksum: aed788748585fe2dc55ac8a1ea4dd75b9f30c71a790bbd53f785aab757e6b765a6b6a4b19343242f24fdfc416a81d5ec40635ead75379b94af5b0e9d647d087d languageName: node linkType: hard @@ -32049,11 +31793,11 @@ __metadata: linkType: hard "pgpass@npm:1.x": - version: 1.0.5 - resolution: "pgpass@npm:1.0.5" + version: 1.0.2 + resolution: "pgpass@npm:1.0.2" dependencies: - split2: ^4.1.0 - checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 + split: ^1.0.0 + checksum: 377bf4c3e489ff28a93ae3b1cf3f99a8f9b85153ae9c587345a07e40c1b036e81bd414e5d0bdb204a43f45390e728bbb314c71e067d7b0dda39c3b7097df09a0 languageName: node linkType: hard @@ -32181,7 +31925,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.0, pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -32261,169 +32005,169 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^8.2.3": - version: 8.2.4 - resolution: "postcss-calc@npm:8.2.4" +"popper.js@npm:^1.14.1": + version: 1.16.1 + resolution: "popper.js@npm:1.16.1" + checksum: c56ae5001ec50a77ee297a8061a0221d99d25c7348d2e6bcd3e45a0d0f32a1fd81bca29d46cb0d4bdf13efb77685bd6a0ce93f9eb3c608311a461f945fffedbe + languageName: node + linkType: hard + +"postcss-calc@npm:^8.0.0": + version: 8.0.0 + resolution: "postcss-calc@npm:8.0.0" dependencies: - postcss-selector-parser: ^6.0.9 - postcss-value-parser: ^4.2.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.0.2 peerDependencies: postcss: ^8.2.2 - checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb + checksum: d945c49f317d6e8f220bce33075f2eec8e26052158a5a694186c11a26d23098b0300a3d44f666fda2feaa3ec93a636282881ee50b9e32776e08e5338e4a8c887 languageName: node linkType: hard -"postcss-colormin@npm:^5.3.1": - version: 5.3.1 - resolution: "postcss-colormin@npm:5.3.1" +"postcss-colormin@npm:^5.2.1": + version: 5.2.1 + resolution: "postcss-colormin@npm:5.2.1" dependencies: - browserslist: ^4.21.4 + browserslist: ^4.16.6 caniuse-api: ^3.0.0 colord: ^2.9.1 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024 + checksum: c5337ae9477a6ad787a5bd366a6a418da65fd6212e4dade2ba14c5975faec5b16b69533fc0e5130f34b42a81bc2d1db17436b60f204ef7935cfc555187731579 languageName: node linkType: hard -"postcss-convert-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-convert-values@npm:5.1.3" +"postcss-convert-values@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-convert-values@npm:5.0.2" dependencies: - browserslist: ^4.21.4 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: df48cdaffabf9737f9cfdc58a3dc2841cf282506a7a944f6c70236cff295d3a69f63de6e0935eeb8a9d3f504324e5b4e240abc29e21df9e35a02585d3060aeb5 + checksum: 02a31f72b3365345db8aa1d83b084c96975d99a6494359378069431fd810e78ebf3bd96d03a598255daa8f6e2cd63722f119ddec9d24f66b6974b57819feb034 languageName: node linkType: hard -"postcss-discard-comments@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-discard-comments@npm:5.1.2" +"postcss-discard-comments@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-comments@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a + checksum: c561952bbffa799cfc96216098d7ccc14b1dc776f0a8038c52eafe89fbec02701a234f35f7244aa06d58127103e7dd5f0bfd1db18a53c1438fef5c0a9b2dbddf languageName: node linkType: hard -"postcss-discard-duplicates@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-duplicates@npm:5.1.0" +"postcss-discard-duplicates@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-duplicates@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 + checksum: becb68fd5ccd632fe51413a6ab4fd5c8aa3aae9d12947238014c2fb7816a2e0eb9a5454ee7207cac19f4a093c799be6053f13bf4048e97e20d88d5af4a0656bc languageName: node linkType: hard -"postcss-discard-empty@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-discard-empty@npm:5.1.1" +"postcss-discard-empty@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-empty@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 + checksum: 2465ddabb18774c4996c18b8370498cf71597a23c45518ea75e7b73cd8f003b0be52ea9f27f28e24bba408d08ec5152e019cc595611bb097748993c1788d9f4f languageName: node linkType: hard -"postcss-discard-overridden@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-overridden@npm:5.1.0" +"postcss-discard-overridden@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-overridden@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 + checksum: 7da9a4bda963145c45b0b51ddf7684e37072569d6f5d22f6cab9f37ea953426274f52eeec87391cd2bd1dd561a6a26cbd1f39debb124ccd8b665b760eda849b4 languageName: node linkType: hard "postcss-load-config@npm:^3.0.0": - version: 3.1.4 - resolution: "postcss-load-config@npm:3.1.4" + version: 3.0.1 + resolution: "postcss-load-config@npm:3.0.1" dependencies: - lilconfig: ^2.0.5 - yaml: ^1.10.2 - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 + cosmiconfig: ^7.0.0 + import-cwd: ^3.0.0 + checksum: f30ee3945d2534c1ab2f69181924318325bcbfacfcb3e3a48db3b9f7ffd5812ea27515a27c4f8dba127fdb41b1ca28c3d401c72ea6ed7e85decd04c66bd14c07 languageName: node linkType: hard -"postcss-merge-longhand@npm:^5.1.7": - version: 5.1.7 - resolution: "postcss-merge-longhand@npm:5.1.7" +"postcss-merge-longhand@npm:^5.0.4": + version: 5.0.4 + resolution: "postcss-merge-longhand@npm:5.0.4" dependencies: - postcss-value-parser: ^4.2.0 - stylehacks: ^5.1.1 + postcss-value-parser: ^4.1.0 + stylehacks: ^5.0.1 peerDependencies: postcss: ^8.2.15 - checksum: 81c3fc809f001b9b71a940148e242bdd6e2d77713d1bfffa15eb25c1f06f6648d5e57cb21645746d020a2a55ff31e1740d2b27900442913a9d53d8a01fb37e1b + checksum: 6c5ff2ae0e9def05a59cbb432b5cbbdb968816b83c4e38fdf14fa596ef21e36442f61b53984d56dca6165d91e74eadc720270b2887a4a1ef5e25ee171b7d7ea0 languageName: node linkType: hard -"postcss-merge-rules@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-merge-rules@npm:5.1.4" +"postcss-merge-rules@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-merge-rules@npm:5.0.3" dependencies: - browserslist: ^4.21.4 + browserslist: ^4.16.6 caniuse-api: ^3.0.0 - cssnano-utils: ^3.1.0 + cssnano-utils: ^2.0.1 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 8ab6a569babe6cb412d6612adee74f053cea7edb91fa013398515ab36754b1fec830d68782ed8cdfb44cffdc6b78c79eab157bff650f428aa4460d3f3857447e + checksum: 2e701693c6086cc88ac9e4d30a64471bd8da2e33b7e788b7bcbb4e91ecf87bbddc73529a1308a77953e0a2969f57f22714028547b8469db364b3d0d26b39eae2 languageName: node linkType: hard -"postcss-minify-font-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-font-values@npm:5.1.0" +"postcss-minify-font-values@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-minify-font-values@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece + checksum: 56aeb2cad5b3c4ca736b7fd7fa331d82281fbecc47e0e275a6a1203b436dbaa9f0772f668c3265dbf7ea2026c68d77c752cf9abe65bd3c65a53e696ae277e6e6 languageName: node linkType: hard -"postcss-minify-gradients@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-minify-gradients@npm:5.1.1" +"postcss-minify-gradients@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-minify-gradients@npm:5.0.3" dependencies: colord: ^2.9.1 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 + checksum: 9ba5f28baeff45da8a5e759a748d5c26792e955d2cc061975c54f07d18f81518595353ddcd53dc5587342856425eefe909886b0a47bca392a9c9fcff297aab9e languageName: node linkType: hard -"postcss-minify-params@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-minify-params@npm:5.1.4" +"postcss-minify-params@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-minify-params@npm:5.0.2" dependencies: - browserslist: ^4.21.4 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + alphanum-sort: ^1.0.2 + browserslist: ^4.16.6 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5 + checksum: 234e833e0d187106dd949a8973662168ba27e2a036ae4af979921375328ee77673ba5def616426ab9554f9224af8e3c73822193af5cbbdf98aadc0e39775724b languageName: node linkType: hard -"postcss-minify-selectors@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-minify-selectors@npm:5.2.1" +"postcss-minify-selectors@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-selectors@npm:5.1.0" dependencies: + alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 + checksum: bf938e70a77b54d68709ec5e9a500b932e177b2278b5c405c3b59fb6f8315f2013e7b327ba76105949bf3c9ba6d6bef80ced4077cababb8e0015d87b4a086b50 languageName: node linkType: hard @@ -32472,10 +32216,10 @@ __metadata: linkType: hard "postcss-modules@npm:^4.0.0": - version: 4.3.1 - resolution: "postcss-modules@npm:4.3.1" + version: 4.0.0 + resolution: "postcss-modules@npm:4.0.0" dependencies: - generic-names: ^4.0.0 + generic-names: ^2.0.1 icss-replace-symbols: ^1.1.0 lodash.camelcase: ^4.3.0 postcss-modules-extract-imports: ^3.0.0 @@ -32485,174 +32229,180 @@ __metadata: string-hash: ^1.1.1 peerDependencies: postcss: ^8.0.0 - checksum: fa592183bb3d96c4aaf535e3b9b3bcfc54274cbb5b337616543c24ec68cd56675e9fd8aabf994e627513af628d090e43d2f1f4928ff6cdd4b9d3b1ba3fce4d42 + checksum: 8f50c241718955b94807b1066a843fc8c9a356bd28db7f9c30ddcc7dcf0b6a61d7e41c6b41ed5d6d7cfc341891f150fc69d57387910256588bbbe5bfd4ff74d6 languageName: node linkType: hard -"postcss-normalize-charset@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-charset@npm:5.1.0" +"postcss-normalize-charset@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-charset@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 + checksum: b74720bf0487809143a30e1965ff756698650abdd072f4fe81f0a32ce41e84c140f107b39ad0babf4d319aa620d1d4e01d1f89dc7c7b3f55fd3b27f243ee26e1 languageName: node linkType: hard -"postcss-normalize-display-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-display-values@npm:5.1.0" +"postcss-normalize-display-values@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-display-values@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 + checksum: ee84d379abd3fefcb23c09789a5f9d384a7f275d56e51b6ea149bf7a1cf512381bff0c3f00d938d0f91ab7c7fe00b19ace280cc3f84a100cd3cd8a604c4c7406 languageName: node linkType: hard -"postcss-normalize-positions@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-positions@npm:5.1.1" +"postcss-normalize-positions@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-positions@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 + checksum: 71a97ff851b78cdce8cc1ef21f91d40ddb2aca55d1bdc56056df27037efd9c208290f863ce0adf58a3060f8bb6eb3d66b4cf6d9a1e3ccbb03ba4eb0a0d1b6da4 languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-repeat-style@npm:5.1.1" +"postcss-normalize-repeat-style@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-repeat-style@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 + checksum: 24f21dd8eee0f5ef9119e71ba57174f675d16fe9a8f368656d64a4e5f2d69cb41ae42f70b814e5ef40f93857ff759205642f78781ff8854f473b7d726e93bc99 languageName: node linkType: hard -"postcss-normalize-string@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-string@npm:5.1.0" +"postcss-normalize-string@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-string@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada + checksum: 4b42d41a05780517647b9a55888d314bfdfda2042f7a84050555e64da5eccade966fdca645c4ef66503fa95d642e89f2950e5b556b2a38a1a8f3120a24816c73 languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-timing-functions@npm:5.1.0" +"postcss-normalize-timing-functions@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-timing-functions@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa + checksum: fa58de8f9f6f8d4b507f9f029b18a0903a69a3b5088a2a1306e22163d81ca041d0f179888f5696516a9f75e188df904b0e082ec522b497a46ad1bfc24b06f348 languageName: node linkType: hard -"postcss-normalize-unicode@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-unicode@npm:5.1.1" +"postcss-normalize-unicode@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-unicode@npm:5.0.1" dependencies: - browserslist: ^4.21.4 - postcss-value-parser: ^4.2.0 + browserslist: ^4.16.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c + checksum: d5a0e0c107639847709c1e9badf09267ee7c67206ac4c19df4f9479308866f0592773ff4063e58d48a6a1d638637a0f7b187ec429ddd3385bab32a06e2d020fd languageName: node linkType: hard -"postcss-normalize-url@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-url@npm:5.1.0" +"postcss-normalize-url@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-normalize-url@npm:5.0.3" dependencies: + is-absolute-url: ^3.0.3 normalize-url: ^6.0.1 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 + checksum: 34dfc8d1d71f0cf073d3f3edfc94a5381d659275103240c15bb3d4f424e70ceec431dc663c7403e1b813d98f45fb5174f7f0c3fe9fb6b00cdbd62f3ac2f0032c languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-whitespace@npm:5.1.1" +"postcss-normalize-whitespace@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-whitespace@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 + checksum: cefb27d2443d4a8fc34aa2a0aebd470d7d5a58d9adcf39f5e2a80455f4ab37b171a24f58dc47b3111232c1adbb1c8702f80c0ecac1cfcef03e48e00dac6a4a58 languageName: node linkType: hard -"postcss-ordered-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-ordered-values@npm:5.1.3" +"postcss-ordered-values@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-ordered-values@npm:5.0.2" dependencies: - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 + checksum: 80b1cab96e3e9caf23de9b5436b36d7dc1efdd7ff9ee7b02c5ddc88c3564ec5adfa08e66f64c3b335beeb74a8c690a89e1594be14f2d5b708deb2c259de69619 languageName: node linkType: hard -"postcss-reduce-initial@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-reduce-initial@npm:5.1.2" +"postcss-reduce-initial@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-reduce-initial@npm:5.0.1" dependencies: - browserslist: ^4.21.4 + browserslist: ^4.16.0 caniuse-api: ^3.0.0 peerDependencies: postcss: ^8.2.15 - checksum: 55db697f85231a81f1969d54c894e4773912d9ddb914f9b03d2e73abc4030f2e3bef4d7465756d0c1acfcc2c2d69974bfb50a972ab27546a7d68b5a4fc90282b + checksum: c33306694ebd98e8a9402bf9eef1b1724e351e884d0c10f4c77ee34e8f603442d45c20862794ee05793b29d5c10f23b0e3f5697f02600b568911d48be41d421a languageName: node linkType: hard -"postcss-reduce-transforms@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-reduce-transforms@npm:5.1.0" +"postcss-reduce-transforms@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-reduce-transforms@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f + checksum: 89e033ba1fe92057e6196237d5ae6f30b7ca86a98d91a01aa1853baea36ea6c092d29d354d3281000a618445a780c30277868b10d517015317fdc8b97739d34e languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": - version: 6.0.11 - resolution: "postcss-selector-parser@npm:6.0.11" +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5": + version: 6.0.6 + resolution: "postcss-selector-parser@npm:6.0.6" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 languageName: node linkType: hard -"postcss-svgo@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-svgo@npm:5.1.0" +"postcss-svgo@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-svgo@npm:5.0.3" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 svgo: ^2.7.0 peerDependencies: postcss: ^8.2.15 - checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd + checksum: 7da0bfd6ecae300f1d82432d987ed3a4034a1502c4c458a0cf7284e172e8e86aa5098a89d9c23ee6b1360695c969f0f61ed776dd8098e26ee2a0b132ff1a7a5d languageName: node linkType: hard -"postcss-unique-selectors@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-unique-selectors@npm:5.1.1" +"postcss-unique-selectors@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-unique-selectors@npm:5.0.2" dependencies: + alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 + checksum: ad0f7a8a4f1ed958544c1ede62a1c4b0978e01627a6ef0642f7b044d0f9fdb331318a91f8312f418a773b0f2df06c50896cfaf7e5dd3d0142bd1e5ba75dc9eb7 languageName: node linkType: hard @@ -32696,9 +32446,9 @@ __metadata: linkType: hard "postgres-date@npm:~1.0.4": - version: 1.0.7 - resolution: "postgres-date@npm:1.0.7" - checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + version: 1.0.5 + resolution: "postgres-date@npm:1.0.5" + checksum: 67e5b65daf5080394ef9cd12e15dd9e9720a54dcefa5e1f0dbd85512b761c1b837858cac7763c1c29f398a7a39854de9815d13479eab032317313ed50280ebb3 languageName: node linkType: hard @@ -32711,29 +32461,6 @@ __metadata: languageName: node linkType: hard -"prebuild-install@npm:^6.0.1": - version: 6.1.4 - resolution: "prebuild-install@npm:6.1.4" - dependencies: - detect-libc: ^1.0.3 - expand-template: ^2.0.3 - github-from-package: 0.0.0 - minimist: ^1.2.3 - mkdirp-classic: ^0.5.3 - napi-build-utils: ^1.0.1 - node-abi: ^2.21.0 - npmlog: ^4.0.1 - pump: ^3.0.0 - rc: ^1.2.7 - simple-get: ^3.0.3 - tar-fs: ^2.0.0 - tunnel-agent: ^0.6.0 - bin: - prebuild-install: bin.js - checksum: de4313eda821305912af922700a2db04bb8e77fe8aa9c2788550f1000c026cbefc82da468ec0c0a37764c5417bd8169dbd540928535fb38d00bb9bbd673dd217 - languageName: node - linkType: hard - "prebuild-install@npm:^7.1.0, prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -32838,25 +32565,27 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": - version: 29.5.0 - resolution: "pretty-format@npm:29.5.0" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" dependencies: "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 languageName: node linkType: hard -"prismjs@npm:^1.27.0": - version: 1.29.0 - resolution: "prismjs@npm:1.29.0" - checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 +"printj@npm:~1.1.0": + version: 1.1.2 + resolution: "printj@npm:1.1.2" + bin: + printj: ./bin/printj.njs + checksum: 1c0c66844545415e339356ad62009cdc467819817b1e0341aba428087a1414d46b84089edb4e77ef24705829f8aae6349724b9c7bd89d8690302b2de7a89b315 languageName: node linkType: hard -"prismjs@npm:~1.27.0": +"prismjs@npm:^1.27.0, prismjs@npm:~1.27.0": version: 1.27.0 resolution: "prismjs@npm:1.27.0" checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc @@ -32877,7 +32606,7 @@ __metadata: languageName: node linkType: hard -"process@npm:=0.11.10, process@npm:^0.11.10": +"process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -32957,7 +32686,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -32978,9 +32707,9 @@ __metadata: linkType: hard "property-expr@npm:^2.0.4": - version: 2.0.5 - resolution: "property-expr@npm:2.0.5" - checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 + version: 2.0.4 + resolution: "property-expr@npm:2.0.4" + checksum: 7ac142e189f0feef685f327f582efe13bfbc24a0b6e2328afdb38520bc140caa5f91dfa9529f2539b4468d85dc83a593e1ef0e0f7401b525368bb634b323bf54 languageName: node linkType: hard @@ -32994,18 +32723,18 @@ __metadata: linkType: hard "property-information@npm:^6.0.0": - version: 6.2.0 - resolution: "property-information@npm:6.2.0" - checksum: 23afce07ba821cbe7d926e63cdd680991961c82be4bbb6c0b17c47f48894359c1be6e51cd74485fc10a9d3fd361b475388e1e39311ed2b53127718f72aab1955 + version: 6.0.1 + resolution: "property-information@npm:6.0.1" + checksum: 9a147208ae3bb98629012d384cd8184f5021d60aee9f67d0459605e0c94e2f24db9e263d2b67c333e79981cd7349172a524638681d6e167ddf1c7f06cb2ff2c6 languageName: node linkType: hard "proto3-json-serializer@npm:^1.0.0": - version: 1.1.0 - resolution: "proto3-json-serializer@npm:1.1.0" + version: 1.0.0 + resolution: "proto3-json-serializer@npm:1.0.0" dependencies: - protobufjs: ^7.0.0 - checksum: a68f7102746a21e2fe6d7afdf89f47b94084a1165ca3062e284922ecca12f20a3ec911bc5f3fdb63fc0cfc9a0cff2b4396befb988c66061ae686d17ff0b6a9fd + protobufjs: ^6.11.2 + checksum: 47ac3b7c48eb177aba3e59431704c5db24d670827bd47ef7488e3529ab85e0de4833ed22615945fa72597dd382aa505b8dd427c917c4c50d31e7570d8af21294 languageName: node linkType: hard @@ -33052,6 +32781,30 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^6.11.2": + version: 6.11.3 + resolution: "protobufjs@npm:6.11.3" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 + "@types/node": ">=13.7.0" + long: ^4.0.0 + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 4a6ce1964167e4c45c53fd8a312d7646415c777dd31b4ba346719947b88e61654912326101f927da387d6b6473ab52a7ea4f54d6f15d63b31130ce28e2e15070 + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -33076,7 +32829,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.1.0": +"proxy-from-env@npm:1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -33102,9 +32855,9 @@ __metadata: linkType: hard "psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + version: 1.8.0 + resolution: "psl@npm:1.8.0" + checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 languageName: node linkType: hard @@ -33154,9 +32907,9 @@ __metadata: linkType: hard "punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 languageName: node linkType: hard @@ -33179,13 +32932,6 @@ __metadata: languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.0.1 - resolution: "pure-rand@npm:6.0.1" - checksum: 4bb565399993b815658a72e359f574ce4f04827a42a905105d61163ae86f456d91595a0e4241e7bce04328fae0638ae70ac0428d93ecb55971c465bd084f8648 - languageName: node - linkType: hard - "pvtsutils@npm:^1.3.2": version: 1.3.2 resolution: "pvtsutils@npm:1.3.2" @@ -33202,7 +32948,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": +"qs@npm:6.11.0, qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -33211,24 +32957,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": - version: 6.11.1 - resolution: "qs@npm:6.11.1" - dependencies: - side-channel: ^1.0.4 - checksum: 82ee78ef12a16f3372fae5b64f76f8aedecb000feea882bbff1af146c147f6eb66b08f9c3f34d7e076f28563586956318b9b2ca41141846cdd6d5ad6f241d52f - languageName: node - linkType: hard - -"qs@npm:~6.10.3": - version: 6.10.4 - resolution: "qs@npm:6.10.4" - dependencies: - side-channel: ^1.0.4 - checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb - languageName: node - linkType: hard - "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -33237,14 +32965,14 @@ __metadata: linkType: hard "query-string@npm:^7.0.0": - version: 7.1.3 - resolution: "query-string@npm:7.1.3" + version: 7.0.0 + resolution: "query-string@npm:7.0.0" dependencies: - decode-uri-component: ^0.2.2 + decode-uri-component: ^0.2.0 filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 + checksum: 6e3c4376ff01f49bf2300b36e37291e2d3be8df4fe1839d048dd89d4166b92ecd67525c88ca66b61cbc5612ca29fa4e40002d25a74f59b99f7022045b9e7abd2 languageName: node linkType: hard @@ -33269,13 +32997,6 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - "quick-format-unescaped@npm:^3.0.3": version: 3.0.3 resolution: "quick-format-unescaped@npm:3.0.3" @@ -33298,22 +33019,13 @@ __metadata: linkType: hard "raf-schd@npm:^4.0.2": - version: 4.0.3 - resolution: "raf-schd@npm:4.0.3" - checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 + version: 4.0.2 + resolution: "raf-schd@npm:4.0.2" + checksum: 9af6e00e36b2844371c61da071cf1fa0d6093dc20eadc654fbb3d940a713df61f037c2e24287eebe8201a41b6acc910b865a4e24010b3a09aba7f4a9616b975a languageName: node linkType: hard -"ramda-adjunct@npm:=3.4.0": - version: 3.4.0 - resolution: "ramda-adjunct@npm:3.4.0" - peerDependencies: - ramda: ">= 0.28.0 <= 0.28.0" - checksum: 05d4daa44a28879dafc75adba6d0b660f8fc0280c03ad62c51ba779d93b11fdaa28a039b28f7ea4a8ca42fdb0a2a750b793fa073125bcc74799630e58cd4770f - languageName: node - linkType: hard - -"ramda@npm:=0.28.0, ramda@npm:^0.28.0": +"ramda@npm:^0.28.0": version: 0.28.0 resolution: "ramda@npm:0.28.0" checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 @@ -33409,15 +33121,16 @@ __metadata: linkType: hard "rc-util@npm:^5.16.1": - version: 5.29.2 - resolution: "rc-util@npm:5.29.2" + version: 5.16.1 + resolution: "rc-util@npm:5.16.1" dependencies: - "@babel/runtime": ^7.18.3 + "@babel/runtime": ^7.12.5 react-is: ^16.12.0 + shallowequal: ^1.1.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 68c6bcf2bd2d34ff0d3b6f8a8007e309c498a9714b19d9b84fdf523bd2f6838ab392326381ed4c9854f632cc5cc74157bfbf487829a7a01c954bca18b603947d + checksum: f2a6fd262d91d0b2ee1d84853c5ab212c9138b535ce5df8fa807fad4d8772539cbf0fee8cf7044ce9d47d8847950dfa5ae2f884c40eda9b0e9879050e4d549ec languageName: node linkType: hard @@ -33436,20 +33149,20 @@ __metadata: linkType: hard "react-beautiful-dnd@npm:^13.0.0": - version: 13.1.1 - resolution: "react-beautiful-dnd@npm:13.1.1" + version: 13.0.0 + resolution: "react-beautiful-dnd@npm:13.0.0" dependencies: - "@babel/runtime": ^7.9.2 + "@babel/runtime": ^7.8.4 css-box-model: ^1.2.0 memoize-one: ^5.1.1 raf-schd: ^4.0.2 - react-redux: ^7.2.0 + react-redux: ^7.1.1 redux: ^4.0.4 use-memo-one: ^1.1.1 peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 - checksum: 5f90f7c0ab77a14dfcd496cbd94bbde457612f380c6fc815f3bba7b52effd75132948fcaa661a902a184bb1e6ae5896dcf5b0c77c4ddf809a2c65288f3eed5a7 + react: ^16.8.5 + react-dom: ^16.8.5 + checksum: ccf98ce502b5a290daa304d24a1b3ea0e54d43627cda0cdc8eeb65bb84c99e3928098f13e2b09452d02e94974800adaa0a269756500716f19b40ba0bcf9b597b languageName: node linkType: hard @@ -33546,13 +33259,13 @@ __metadata: linkType: hard "react-error-boundary@npm:^3.1.0": - version: 3.1.4 - resolution: "react-error-boundary@npm:3.1.4" + version: 3.1.3 + resolution: "react-error-boundary@npm:3.1.3" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: react: ">=16.13.1" - checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b + checksum: 0a05af404aa054c54d7bc65a1814810093bf136c3ad4b3576a51d8509ee8fc302adfb66405da501fc01e839db557dd0d994b487e651897e36293907bb61458cf languageName: node linkType: hard @@ -33563,10 +33276,23 @@ __metadata: languageName: node linkType: hard +"react-event-listener@npm:^0.6.2": + version: 0.6.6 + resolution: "react-event-listener@npm:0.6.6" + dependencies: + "@babel/runtime": ^7.2.0 + prop-types: ^15.6.0 + warning: ^4.0.1 + peerDependencies: + react: ^16.3.0 + checksum: 0287e0ae8cbf0a4c03889ffc2b745f5494b3edea0f4667357d709f5646dd78c7289ce305b6f473ec6ac5789f8a937c86b7e543d0249f0bf787bccdb1eab7ecd0 + languageName: node + linkType: hard + "react-fast-compare@npm:^3.1.1": - version: 3.2.1 - resolution: "react-fast-compare@npm:3.2.1" - checksum: 209b4dc3a9cc79c074a26ec020459efd8be279accaca612db2edb8ada2a28849ea51cf3d246fc0fafb344949b93a63a43798b6c1787559b0a128571883fe6859 + version: 3.2.0 + resolution: "react-fast-compare@npm:3.2.0" + checksum: 8ef272c825ae329f61633ce4ce7f15aa5b84e5214d88bc0823880236e03e985a13195befa2c7a4eda7db3b017dc7985729152d88445823f652403cf36c2b86aa languageName: node linkType: hard @@ -33595,11 +33321,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.43.7 - resolution: "react-hook-form@npm:7.43.7" + version: 7.32.2 + resolution: "react-hook-form@npm:7.32.2" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: c1679fc5119f3f910f30424b846f9a05ecbc9cce1c7408e4e8eb907aa5a4366d5228a7b41d818868c85017f2be4e1854a1536ba5c1cddf2c27818bd045df9589 + checksum: abe8ba146c313d206f99a01260457bc72af03b2c73d7bd4be5af11598140ec45ef1ef37bac64b80c4dbc298d6aa21af4caa259a133f305a04ddf583faa18e7d0 languageName: node linkType: hard @@ -33634,14 +33360,14 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": +"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.6.3, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard -"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": +"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 @@ -33655,7 +33381,7 @@ __metadata: languageName: node linkType: hard -"react-lifecycles-compat@npm:^3.0.4": +"react-lifecycles-compat@npm:^3.0.2, react-lifecycles-compat@npm:^3.0.4": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" checksum: a904b0fc0a8eeb15a148c9feb7bc17cec7ef96e71188280061fc340043fd6d8ee3ff233381f0e8f95c1cf926210b2c4a31f38182c8f35ac55057e453d6df204f @@ -33688,56 +33414,24 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.2.0": - version: 7.2.9 - resolution: "react-redux@npm:7.2.9" +"react-redux@npm:^7.1.1, react-redux@npm:^7.2.4": + version: 7.2.5 + resolution: "react-redux@npm:7.2.5" dependencies: - "@babel/runtime": ^7.15.4 - "@types/react-redux": ^7.1.20 + "@babel/runtime": ^7.12.1 + "@types/react-redux": ^7.1.16 hoist-non-react-statics: ^3.3.2 loose-envify: ^1.4.0 prop-types: ^15.7.2 - react-is: ^17.0.2 + react-is: ^16.13.1 peerDependencies: - react: ^16.8.3 || ^17 || ^18 + react: ^16.8.3 || ^17 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 369a2bdcf87915659af9e5c55abfd9f52a84e43e0d12dcc108ed17dbe6933558b7b7fc12caa9c10c1a10a8be7df89454b6c96989d8573fedec1a772c94a1f145 - languageName: node - linkType: hard - -"react-redux@npm:^8.0.5": - version: 8.0.5 - resolution: "react-redux@npm:8.0.5" - dependencies: - "@babel/runtime": ^7.12.1 - "@types/hoist-non-react-statics": ^3.3.1 - "@types/use-sync-external-store": ^0.0.3 - hoist-non-react-statics: ^3.3.2 - react-is: ^18.0.0 - use-sync-external-store: ^1.0.0 - peerDependencies: - "@types/react": ^16.8 || ^17.0 || ^18.0 - "@types/react-dom": ^16.8 || ^17.0 || ^18.0 - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - react-native: ">=0.59" - redux: ^4 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - react-dom: - optional: true - react-native: - optional: true - redux: - optional: true - checksum: a108f4f7ead6ac005e656d46051474a2bbdb31ede481bbbb3d8d779c1a35e1940b8655577cc5021313411864d305f67fc719aa48d6e5ed8288cf9cbe8b7042e4 + checksum: 04ac4a4178067cbcfc05506dfea9f7e01730093a5752f050567f7ae4a38c03c96da9d8fed051f8ab1ecede5ea8a15ee41c5f6c5eeb7f04f37e4d13e431ec7830 languageName: node linkType: hard @@ -33748,15 +33442,17 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:^8.0.4": - version: 8.0.4 - resolution: "react-resize-detector@npm:8.0.4" +"react-resize-detector@npm:^6.6.3": + version: 6.7.8 + resolution: "react-resize-detector@npm:6.7.8" dependencies: + "@types/resize-observer-browser": ^0.1.6 lodash: ^4.17.21 + resize-observer-polyfill: ^1.5.1 peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: f53a99cc5413844a6fc2a713b0b1094d23947897c14ab64481938632f4e77fadded52d91a6619055abf6240c7cacd6cc7dd492ea866639b302f81df680709d45 + react: ^16.0.0 || ^17.0.0 + react-dom: ^16.0.0 || ^17.0.0 + checksum: dc8acbe216f70a60466d55d4f47c1468fecf074544a1e07234461b36eefed2b222f6e550c91e7ae02983e2842308d2a48ba8383029efb5d27ac749c48e3a09ae languageName: node linkType: hard @@ -33786,7 +33482,20 @@ __metadata: languageName: node linkType: hard -"react-router-dom-stable@npm:react-router-dom@^6.3.0, react-router-dom@npm:^6.3.0": +"react-router-dom-stable@npm:react-router-dom@^6.3.0": + version: 6.8.1 + resolution: "react-router-dom@npm:6.8.1" + dependencies: + "@remix-run/router": 1.3.2 + react-router: 6.8.1 + peerDependencies: + react: ">=16.8" + react-dom: ">=16.8" + checksum: fb1a9f5c7e4c83536ee7e6493f3c13f6abda66da69f9191fb8b087ab188ecc18a3a32575813a280cbeca67bcb8b0dcb6dbcef7ed599e03f38a44d694f4abcf14 + languageName: node + linkType: hard + +"react-router-dom@npm:^6.3.0": version: 6.9.0 resolution: "react-router-dom@npm:6.9.0" dependencies: @@ -33799,7 +33508,18 @@ __metadata: languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.9.0": +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.8.1": + version: 6.8.1 + resolution: "react-router@npm:6.8.1" + dependencies: + "@remix-run/router": 1.3.2 + peerDependencies: + react: ">=16.8" + checksum: 8e7cc7a516adeb6060911861af99d9b512893c15ec732cbf8574872919be4f3fe439ffa8c0876d1bcbced880d081bfeda3c01cb505b5a243565d10500ee0ac36 + languageName: node + linkType: hard + +"react-router@npm:6.9.0": version: 6.9.0 resolution: "react-router@npm:6.9.0" dependencies: @@ -33811,25 +33531,25 @@ __metadata: linkType: hard "react-side-effect@npm:^2.1.0": - version: 2.1.2 - resolution: "react-side-effect@npm:2.1.2" + version: 2.1.0 + resolution: "react-side-effect@npm:2.1.0" peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 + react: ^16.3.0 + checksum: 9bd58e63d6b38246f5a7f2e11aeaa57e52edf117eb3fc1304acee1b4de96d4b0a73cebf4cc874445edddb8196b72d015c60714e4b03152323fac8a70cdcecde6 languageName: node linkType: hard -"react-smooth@npm:^2.0.2": - version: 2.0.2 - resolution: "react-smooth@npm:2.0.2" +"react-smooth@npm:^2.0.0": + version: 2.0.1 + resolution: "react-smooth@npm:2.0.1" dependencies: - fast-equals: ^4.0.3 + fast-equals: ^2.0.0 react-transition-group: 2.9.0 peerDependencies: prop-types: ^15.6.0 react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 6b0a40a17314657ac6a187a3ad01fcdaa61d498979b6a07c424e20832110c99b4394c33209a0b39b897c13d113d8cb044e7a691b4965386a11b15bbfbacfba25 + checksum: 65678491cbd506573f2dba82778ebf8259714d68dd227e0ee7c0e204bcbc7839cf97401620b4223814066581f1dce0493f97162a03dc2a68058b5a7ad2b41085 languageName: node linkType: hard @@ -33886,7 +33606,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:2.9.0": +"react-transition-group@npm:2.9.0, react-transition-group@npm:^2.2.1": version: 2.9.0 resolution: "react-transition-group@npm:2.9.0" dependencies: @@ -33901,9 +33621,9 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0, react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" +"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": + version: 4.4.1 + resolution: "react-transition-group@npm:4.4.1" dependencies: "@babel/runtime": ^7.5.5 dom-helpers: ^5.0.1 @@ -33912,7 +33632,7 @@ __metadata: peerDependencies: react: ">=16.6.0" react-dom: ">=16.6.0" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad languageName: node linkType: hard @@ -33984,14 +33704,14 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:^3.0.0": - version: 3.0.1 - resolution: "read-cmd-shim@npm:3.0.1" - checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 +"read-cmd-shim@npm:^2.0.0": + version: 2.0.0 + resolution: "read-cmd-shim@npm:2.0.0" + checksum: 024f0a092d3630ad344af63eb0539bce90978883dd06a93e7bfbb26913168ab034473eae4a85685ea76a982eb31b0e8e16dee9c1138dabb3a925e7c4757952bc languageName: node linkType: hard -"read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": +"read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" dependencies: @@ -34058,19 +33778,19 @@ __metadata: linkType: hard "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 languageName: node linkType: hard "readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -34079,7 +33799,7 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 languageName: node linkType: hard @@ -34093,11 +33813,11 @@ __metadata: linkType: hard "readdir-glob@npm:^1.0.0": - version: 1.1.2 - resolution: "readdir-glob@npm:1.1.2" + version: 1.1.1 + resolution: "readdir-glob@npm:1.1.1" dependencies: - minimatch: ^5.1.0 - checksum: 1e5f701d3c94af5653e1736dfef99e991869c6e1c87bf08835d8c641f767e73ae25b829d3d1f8504fab8cad49b70b718ef960d3afee5be45cd779ccaeb264ed4 + minimatch: ^3.0.4 + checksum: 8dc4ff606aa9ac8f6ac628dfad918aed6514c8b427922928f2ef380a1be106d5b6f1d106af34607955ad504f89f39d83a9b42c5316ed8b96b5f75391e33a6afc languageName: node linkType: hard @@ -34123,14 +33843,14 @@ __metadata: linkType: hard "recast@npm:^0.20.3": - version: 0.20.5 - resolution: "recast@npm:0.20.5" + version: 0.20.4 + resolution: "recast@npm:0.20.4" dependencies: ast-types: 0.14.2 esprima: ~4.0.0 source-map: ~0.6.1 tslib: ^2.0.1 - checksum: 14c35115cd9965950724cb2968f069a247fa79ce890643ab6dc3795c705b363f7b92a45238e9f765387c306763be9955f72047bb9d15b5d60b0a55f9e7912d5a + checksum: d858095cbd89908e401c5f51734c410a3a80b7dfcc099fe2e4b1ec4cf8b6f046d24830628edad5047cc3ff3cbed9828dc90271a81f5a243a4722d0a8078e6d57 languageName: node linkType: hard @@ -34156,23 +33876,27 @@ __metadata: linkType: hard "recharts@npm:^2.0.0, recharts@npm:^2.1.5": - version: 2.5.0 - resolution: "recharts@npm:2.5.0" + version: 2.1.9 + resolution: "recharts@npm:2.1.9" dependencies: + "@types/d3-interpolate": ^2.0.0 + "@types/d3-scale": ^3.0.0 + "@types/d3-shape": ^2.0.0 classnames: ^2.2.5 + d3-interpolate: ^2.0.0 + d3-scale: ^3.0.0 + d3-shape: ^2.0.0 eventemitter3: ^4.0.1 lodash: ^4.17.19 react-is: ^16.10.2 - react-resize-detector: ^8.0.4 - react-smooth: ^2.0.2 + react-resize-detector: ^6.6.3 + react-smooth: ^2.0.0 recharts-scale: ^0.4.4 reduce-css-calc: ^2.1.8 - victory-vendor: ^36.6.8 peerDependencies: - prop-types: ^15.6.0 - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: a40d1788589926fa8a5844868a338aae75a2077a2bc2ac57fc5d61ad21fb62660aed6f00ae8d8a94948b9143255c1760db0d386ecb257ed8290dd7f164b5bd5f + react: ^16.0.0 || ^17.0.0 + react-dom: ^16.0.0 || ^17.0.0 + checksum: 5751ba78b08c9bf43b381750e302716df7ebc838a26bc8695892b1dd8293f858256d5b949defbb2d07395e7cf8873484b397ea804a60743e366e3211309c7433 languageName: node linkType: hard @@ -34194,6 +33918,22 @@ __metadata: languageName: node linkType: hard +"recompose@npm:0.28.0 - 0.30.0": + version: 0.30.0 + resolution: "recompose@npm:0.30.0" + dependencies: + "@babel/runtime": ^7.0.0 + change-emitter: ^0.1.2 + fbjs: ^0.8.1 + hoist-non-react-statics: ^2.3.1 + react-lifecycles-compat: ^3.0.2 + symbol-observable: ^1.0.4 + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + checksum: 18e58252336d0628b22db1e38407d32e836648e6d5c9453ba37c9f8030138b3429ee3952b053a13b60311f8b60893b207a761466bb293083542db0cf317b7a41 + languageName: node + linkType: hard + "recursive-readdir@npm:^2.2.2": version: 2.2.3 resolution: "recursive-readdir@npm:2.2.3" @@ -34249,11 +33989,11 @@ __metadata: linkType: hard "redux@npm:^4.0.0, redux@npm:^4.0.4, redux@npm:^4.1.2": - version: 4.2.1 - resolution: "redux@npm:4.2.1" + version: 4.1.2 + resolution: "redux@npm:4.1.2" dependencies: "@babel/runtime": ^7.9.2 - checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + checksum: 6a839cee5bd580c5298d968e9e2302150e961318253819bcd97f9d945a5a409559eacddf6026f4118bb68b681c593d90e8a2c5bbf278f014aff9bf0d2d8fa084 languageName: node linkType: hard @@ -34275,12 +34015,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" +"regenerate-unicode-properties@npm:^10.0.1": + version: 10.0.1 + resolution: "regenerate-unicode-properties@npm:10.0.1" dependencies: regenerate: ^1.4.2 - checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + checksum: 1b638b7087d8143e5be3e20e2cda197ea0440fa0bc2cc49646b2f50c5a2b1acdc54b21e4215805a5a2dd487c686b2291accd5ad00619534098d2667e76247754 languageName: node linkType: hard @@ -34305,19 +34045,19 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11": +"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.4": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 languageName: node linkType: hard -"regenerator-transform@npm:^0.15.1": - version: 0.15.1 - resolution: "regenerator-transform@npm:0.15.1" +"regenerator-transform@npm:^0.15.0": + version: 0.15.0 + resolution: "regenerator-transform@npm:0.15.0" dependencies: "@babel/runtime": ^7.8.4 - checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + checksum: 86e54849ab1167618d28bb56d214c52a983daf29b0d115c976d79840511420049b6b42c9ebdf187defa8e7129bdd74b6dd266420d0d3868c9fa7f793b5d15d49 languageName: node linkType: hard @@ -34332,28 +34072,42 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - dependencies: - "@babel/regjsgen": ^0.8.0 - regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsparser: ^0.9.1 - unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.1.0 - checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 +"regexpp@npm:^3.2.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regexpu-core@npm:^5.1.0": + version: 5.1.0 + resolution: "regexpu-core@npm:5.1.0" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.0.1 + regjsgen: ^0.6.0 + regjsparser: ^0.8.2 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.0.0 + checksum: 7b4eb8d182d9d10537a220a93138df5bc7eaf4ed53e36b95e8427d33ed8a2b081468f1a15d3e5fcee66517e1df7f5ca180b999e046d060badd97150f2ffe87b2 + languageName: node + linkType: hard + +"regjsgen@npm:^0.6.0": + version: 0.6.0 + resolution: "regjsgen@npm:0.6.0" + checksum: c5158ebd735e75074e41292ade1ff05d85566d205426cc61501e360c450a63baced8512ee3ae238e5c0a0e42969563c7875b08fa69d6f0402daf36bcb3e4d348 + languageName: node + linkType: hard + +"regjsparser@npm:^0.8.2": + version: 0.8.4 + resolution: "regjsparser@npm:0.8.4" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + checksum: d069b932491761cda127ce11f6bd2729c3b1b394a35200ec33f1199e937423db28ceb86cf33f0a97c76ecd7c0f8db996476579eaf0d80a1f74c1934f4ca8b27a languageName: node linkType: hard @@ -34395,13 +34149,13 @@ __metadata: linkType: hard "remark-parse@npm:^10.0.0": - version: 10.0.1 - resolution: "remark-parse@npm:10.0.1" + version: 10.0.0 + resolution: "remark-parse@npm:10.0.0" dependencies: "@types/mdast": ^3.0.0 mdast-util-from-markdown: ^1.0.0 unified: ^10.0.0 - checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 + checksum: cebd0d8f95b7b0b827277773ddafd05d295a450a2a712f085ccedad2572678712785869b7a0dea53c215f124c22dad5b5247c29d461729933565ed7b5f262e6d languageName: node linkType: hard @@ -34463,7 +34217,7 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": +"repeat-string@npm:^1.5.2": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 @@ -34563,18 +34317,18 @@ __metadata: linkType: hard "requizzle@npm:^0.2.3": - version: 0.2.4 - resolution: "requizzle@npm:0.2.4" + version: 0.2.3 + resolution: "requizzle@npm:0.2.3" dependencies: - lodash: ^4.17.21 - checksum: fceaa448b235f9ed111aa58360129225a3cec1a897a23293dc08d2a00f001756c042a62df0a9d4d1e2669ace52dec960aea73437f407b30c51bfba2e9da208b7 + lodash: ^4.17.14 + checksum: b1b27c6ad16a2621d4cdb57cd44f01d302974df60f84f94b4d9d313dfe1d375e5b1a12f46010929fe508e83c40696a2105d38c1d1906c228500ac72b23a0d0c6 languageName: node linkType: hard "reselect@npm:^4.1.5": - version: 4.1.7 - resolution: "reselect@npm:4.1.7" - checksum: 738d8e2b8f0dca154ad29de6a209c9fbca2d70ae6788fd85df87f2c74b95a65bbf2d16d43a9e2faff39de34d17a29d706ba08a6b2ee5660c09589edbd19af7e1 + version: 4.1.5 + resolution: "reselect@npm:4.1.5" + checksum: 54c13c1e795b2ea70cba8384138aebe78adda00cbea303cc94b64da0a70d74c896cc9a03115ae38b8bff990e7a60dcd6452ab68cbec01b0b38c1afda70714cf0 languageName: node linkType: hard @@ -34586,9 +34340,9 @@ __metadata: linkType: hard "resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + version: 1.0.0 + resolution: "resolve-alpn@npm:1.0.0" + checksum: 146b739f14fad759bc137e7642b4859a7d7a290b61e00db37a468f159932ccefe610006604e6aa7ba2a2991cbd627246f0c74717e8942b7c805c346da35c3f3f languageName: node linkType: hard @@ -34615,19 +34369,10 @@ __metadata: languageName: node linkType: hard -"resolve-global@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-global@npm:1.0.0" - dependencies: - global-dirs: ^0.1.1 - checksum: c4e11d33e84bde7516b824503ffbe4b6cce863d5ce485680fd3db997b7c64da1df98321b1fd0703b58be8bc9bc83bc96bd83043f96194386b45eb47229efb6b6 - languageName: node - linkType: hard - "resolve.exports@npm:^2.0.0": - version: 2.0.1 - resolution: "resolve.exports@npm:2.0.1" - checksum: 03be177026b4fe8dc1b2ffb421bce9cbf7fe3446e9f0c958df9fc8e144864b3eeea19fe788e057fd8be6b5655e65ce245b4f379258c1336e2e8f9205cbd4a9b4 + version: 2.0.0 + resolution: "resolve.exports@npm:2.0.0" + checksum: d8bee3b0cc0a0ae6c8323710983505bc6a3a2574f718e96f01e048a0f0af035941434b386cc9efc7eededc5e1199726185c306ec6f6a1aa55d5fbad926fd0634 languageName: node linkType: hard @@ -34657,6 +34402,15 @@ __metadata: languageName: node linkType: hard +"resolve@npm:~1.17.0": + version: 1.17.0 + resolution: "resolve@npm:1.17.0" + dependencies: + path-parse: ^1.0.6 + checksum: 9ceaf83b3429f2d7ff5d0281b8d8f18a1f05b6ca86efea7633e76b8f76547f33800799dfdd24434942dec4fbd9e651ed3aef577d9a6b5ec87ad89c1060e24759 + languageName: node + linkType: hard + "resolve@npm:~1.19.0": version: 1.19.0 resolution: "resolve@npm:1.19.0" @@ -34693,6 +34447,15 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@~1.17.0#~builtin": + version: 1.17.0 + resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin::version=1.17.0&hash=07638b" + dependencies: + path-parse: ^1.0.6 + checksum: 6fd799f282ddf078c4bc20ce863e3af01fa8cb218f0658d9162c57161a2dbafe092b13015b9a4c58d0e1e801cf7aa7a4f13115fea9db98c3f9a0c43e429bad6f + languageName: node + linkType: hard + "resolve@patch:resolve@~1.19.0#~builtin": version: 1.19.0 resolution: "resolve@patch:resolve@npm%3A1.19.0#~builtin::version=1.19.0&hash=07638b" @@ -34711,11 +34474,11 @@ __metadata: linkType: hard "responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" + version: 2.0.0 + resolution: "responselike@npm:2.0.0" dependencies: lowercase-keys: ^2.0.0 - checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + checksum: 6a4d32c37d4e88678ae0a9d69fcc90aafa15b1a3eab455bd65c06af3c6c4976afc47d07a0e5a60d277ab041a465f43bf0a581e0d7ab33786e7a7741573f2e487 languageName: node linkType: hard @@ -34737,16 +34500,16 @@ __metadata: linkType: hard "retry-request@npm:^5.0.0": - version: 5.0.2 - resolution: "retry-request@npm:5.0.2" + version: 5.0.0 + resolution: "retry-request@npm:5.0.0" dependencies: debug: ^4.1.1 extend: ^3.0.2 - checksum: d6c95d27f4468aa5557605d811cfaa5862be0eaff9fc5f18a338a7c17a7972fbec5b6142abb6b1e494b4c02df875fec2f1c3a281bf79900d33607d8536277ffe + checksum: f1c6eba3a380e994f2693d1734320e1291de16c11d25b3c4ac2f636b60dff02d8b6a977388a60c5a7d269a3ce5f9a72eb65734e0a614ce91e927fba549ed390e languageName: node linkType: hard -"retry@npm:0.13.1, retry@npm:^0.13.1": +"retry@npm:0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b @@ -34768,9 +34531,9 @@ __metadata: linkType: hard "rfc4648@npm:^1.3.0": - version: 1.5.2 - resolution: "rfc4648@npm:1.5.2" - checksum: bc3d9c4fbfdbbb363c640f9cb56fc01d2e1ca64305b2b6409aaf59cb85c1adecb2545c03deee8889cce2685e15fb7dd47581665c288e4f45068ffece2642f2e8 + version: 1.4.0 + resolution: "rfc4648@npm:1.4.0" + checksum: 4bcbc88d0625197d733b4927d470385a0894e2f0eb58e26e85d94a31d26d0d7b3640f947066d991698062b0d6232195fccef60cc54c1222b7d017114cf00c767 languageName: node linkType: hard @@ -34953,8 +34716,8 @@ __metadata: linkType: hard "rollup@npm:^2.60.2": - version: 2.79.1 - resolution: "rollup@npm:2.79.1" + version: 2.77.3 + resolution: "rollup@npm:2.77.3" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -34962,7 +34725,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6 + checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c languageName: node linkType: hard @@ -35005,27 +34768,27 @@ __metadata: linkType: soft "rtl-css-js@npm:^1.14.0": - version: 1.16.1 - resolution: "rtl-css-js@npm:1.16.1" + version: 1.14.0 + resolution: "rtl-css-js@npm:1.14.0" dependencies: "@babel/runtime": ^7.1.2 - checksum: 7d9ab942098eee565784ccf957f6b7dfa78ea1eec7c6bffedc6641575d274189e90752537c7bdba1f43ae6534648144f467fd6d581527455ba626a4300e62c7a + checksum: 46e7f52058d7ac2dc7a6271f6858ce2e05f64be4d6a3eae712b52bf29c4de97fda8e30490c425bed620db87cc0b8a3ab4a457489ab0dba0868724bac27e6f893 languageName: node linkType: hard "run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + version: 2.4.0 + resolution: "run-async@npm:2.4.0" + dependencies: + is-promise: ^2.1.0 + checksum: 268b64e78c4f0dbeaabfdfdc809930a6ed97b7235c191fc337629fac3d38f04d7b838eb942f6bb5645dbb5bd9019d573cfe0f74e187f95ed042657bb4e4aa70d languageName: node linkType: hard "run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + version: 1.1.9 + resolution: "run-parallel@npm:1.1.9" + checksum: 8bbeda89c2c1dbfeaa0cdb9f17e93a011ac58ef77339ef1e61a62208b67c8e7b661891df677bb7c5be84b8792e27061177368d500b3c731bb019b0c71e667591 languageName: node linkType: hard @@ -35079,7 +34842,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -35114,9 +34877,9 @@ __metadata: linkType: hard "safe-stable-stringify@npm:^2.2.0, safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + version: 2.3.1 + resolution: "safe-stable-stringify@npm:2.3.1" + checksum: a0a0bad0294c3e2a9d1bf3cf2b1096dfb83c162d09a5e4891e488cce082120bd69161d2a92aae7fc48255290f17700decae9c89a07fe139794e61b5c8b411377 languageName: node linkType: hard @@ -35221,9 +34984,9 @@ __metadata: linkType: hard "screenfull@npm:^5.1.0": - version: 5.2.0 - resolution: "screenfull@npm:5.2.0" - checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a + version: 5.1.0 + resolution: "screenfull@npm:5.1.0" + checksum: e8ab486ba2310055aeabd84d8f76f1c9e729669942a4b1bdd675131333076ac9ee6655fb41c2507de3be93865e120cf3641e5ff636090f9e2458170827e650c7 languageName: node linkType: hard @@ -35235,9 +34998,9 @@ __metadata: linkType: hard "secure-json-parse@npm:^2.4.0": - version: 2.7.0 - resolution: "secure-json-parse@npm:2.7.0" - checksum: d9d7d5a01fc6db6115744ba23cf9e67ecfe8c524d771537c062ee05ad5c11b64c730bc58c7f33f60bd6877f96b86f0ceb9ea29644e4040cb757f6912d4dd6737 + version: 2.4.0 + resolution: "secure-json-parse@npm:2.4.0" + checksum: efaafcaa08a4646ca829b29168474f57fb289a0ca7a1d77b66b55a0292785bc6eb9143b21cfc50b37dd12a823c25b12aa1771f18314ed5a616a1f8f12a318533 languageName: node linkType: hard @@ -35248,6 +35011,13 @@ __metadata: languageName: node linkType: hard +"select@npm:^1.1.2": + version: 1.1.2 + resolution: "select@npm:1.1.2" + checksum: 4346151e94f226ea6131e44e68e6d837f3fdee64831b756dd657cc0b02f4cb5107f867cb34a1d1216ab7737d0bf0645d44546afb030bbd8d64e891f5e4c4814e + languageName: node + linkType: hard + "selfsigned@npm:^2.0.0, selfsigned@npm:^2.1.1": version: 2.1.1 resolution: "selfsigned@npm:2.1.1" @@ -35280,6 +35050,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.0.0, semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -35300,15 +35079,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -35426,9 +35196,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.6.0 - resolution: "set-cookie-parser@npm:2.6.0" - checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 + version: 2.4.8 + resolution: "set-cookie-parser@npm:2.4.8" + checksum: e15b5df9a56ab06d4895286033a6aff7b318ad024310df058b5821b3539cc06f716ef529618cac0dd78df40e37830de715f388c0f97f84062dd9be2326efcd0c languageName: node linkType: hard @@ -35548,9 +35318,9 @@ __metadata: linkType: hard "shell-quote@npm:^1.7.3": - version: 1.8.0 - resolution: "shell-quote@npm:1.8.0" - checksum: 6ef7c5e308b9c77eedded882653a132214fa98b4a1512bb507588cf6cd2fc78bfee73e945d0c3211af028a1eabe09c6a19b96edd8977dc149810797e93809749 + version: 1.7.3 + resolution: "shell-quote@npm:1.7.3" + checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34 languageName: node linkType: hard @@ -35567,16 +35337,6 @@ __metadata: languageName: node linkType: hard -"short-unique-id@npm:=4.4.4": - version: 4.4.4 - resolution: "short-unique-id@npm:4.4.4" - bin: - short-unique-id: bin/short-unique-id - suid: bin/short-unique-id - checksum: 3507f2e97326e49180dd4edbf41dd762a76c591df3fd5b7c1e7592bfb0c2f5724d63e626cc6f581c717d3111374811ca1d77a728ac07b0b9041b2355700124d4 - languageName: node - linkType: hard - "shx@npm:^0.3.2": version: 0.3.4 resolution: "shx@npm:0.3.4" @@ -35653,11 +35413,11 @@ __metadata: linkType: hard "simple-update-notifier@npm:^1.0.7": - version: 1.1.0 - resolution: "simple-update-notifier@npm:1.1.0" + version: 1.0.7 + resolution: "simple-update-notifier@npm:1.0.7" dependencies: semver: ~7.0.0 - checksum: 1012e9b6c504e559a948078177b3eedbb9d7e4d15878e2bda56314d08db609ca5da485be4ac9f838759faae8057935ee0246fcdf63f1233c86bd9fecb2a5544b + checksum: aaadc1f158ad5101b363d1c7aed1f30fc1cac59a760aa31702633e0e6fe423348f07d0e78185aef0aad29130a7b7f0f188c21c7bc7353f897a0ea3682e051a70 languageName: node linkType: hard @@ -35787,13 +35547,13 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^6.0.0": - version: 6.2.1 - resolution: "socks-proxy-agent@npm:6.2.1" + version: 6.1.1 + resolution: "socks-proxy-agent@npm:6.1.1" dependencies: agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 + debug: ^4.3.1 + socks: ^2.6.1 + checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c languageName: node linkType: hard @@ -35808,13 +35568,13 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" +"socks@npm:^2.6.1, socks@npm:^2.6.2": + version: 2.6.2 + resolution: "socks@npm:2.6.2" dependencies: - ip: ^2.0.0 + ip: ^1.1.5 smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e languageName: node linkType: hard @@ -35877,13 +35637,13 @@ __metadata: linkType: hard "source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + version: 0.7.3 + resolution: "source-map@npm:0.7.3" + checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": +"sourcemap-codec@npm:^1.4.4, sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -35898,16 +35658,16 @@ __metadata: linkType: hard "space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 + version: 2.0.1 + resolution: "space-separated-tokens@npm:2.0.1" + checksum: 66e30a6382d6e3ab0a6573d510235a198202071d4ebfef8c198f10433166f0cdced4dbf0946cad3c4b2ecc336896a11f98b2ec93047e140fe7aef6fd3a21365b languageName: node linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + version: 0.0.2-1 + resolution: "spawn-command@npm:0.0.2-1" + checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b languageName: node linkType: hard @@ -35922,12 +35682,12 @@ __metadata: linkType: hard "spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" + version: 3.1.1 + resolution: "spdx-correct@npm:3.1.1" dependencies: spdx-expression-parse: ^3.0.0 spdx-license-ids: ^3.0.0 - checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 languageName: node linkType: hard @@ -35949,9 +35709,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + version: 3.0.12 + resolution: "spdx-license-ids@npm:3.0.12" + checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 languageName: node linkType: hard @@ -36005,13 +35765,6 @@ __metadata: languageName: node linkType: hard -"split2@npm:^4.1.0": - version: 4.1.0 - resolution: "split2@npm:4.1.0" - checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 - languageName: node - linkType: hard - "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -36021,6 +35774,15 @@ __metadata: languageName: node linkType: hard +"split@npm:^1.0.0": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + "sponge-case@npm:^1.0.1": version: 1.0.1 resolution: "sponge-case@npm:1.0.1" @@ -36045,9 +35807,9 @@ __metadata: linkType: hard "sqlstring@npm:^2.3.2": - version: 2.3.3 - resolution: "sqlstring@npm:2.3.3" - checksum: 1e7e2d51c38a0cf7372e875408ca100b6e0c9a941ab7773975ea41fb36e5528e404dc787689be855780cf6d0a829ff71027964ae3a05a7446e91dce26672fda7 + version: 2.3.2 + resolution: "sqlstring@npm:2.3.2" + checksum: 6d17a604dcf724046ff0f0dec562164fc217968e7a962e6ed6cca6ae8d8cd7b264c595627fe74d485200274ad8913f88d4fb9e75469d0305b1a647492b7168e0 languageName: node linkType: hard @@ -36061,26 +35823,26 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.11.0, ssh2@npm:^1.4.0": - version: 1.11.0 - resolution: "ssh2@npm:1.11.0" +"ssh2@npm:^1.4.0": + version: 1.5.0 + resolution: "ssh2@npm:1.5.0" dependencies: asn1: ^0.2.4 bcrypt-pbkdf: ^1.0.2 - cpu-features: ~0.0.4 - nan: ^2.16.0 + cpu-features: 0.0.2 + nan: ^2.15.0 dependenciesMeta: cpu-features: optional: true nan: optional: true - checksum: e40cb9f171741a807c170dc555078aa8c49dc93dd36fc9c8be026fce1cfd31f0d37078d9b60a0f2cfb11d0e007ed5407376b72f8a0ef9f2cb89574632bbfb824 + checksum: 6a2252c12d9587eeb31c499d1d13bb14a255d08243762e1a92b2db76add8912b2c8c25103c79b92e156d598c1e2781c5523b58aa9e85aee06fea365e4cc188bb languageName: node linkType: hard "sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" + version: 1.16.1 + resolution: "sshpk@npm:1.16.1" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -36095,7 +35857,7 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 languageName: node linkType: hard @@ -36125,11 +35887,11 @@ __metadata: linkType: hard "stack-generator@npm:^2.0.5": - version: 2.0.10 - resolution: "stack-generator@npm:2.0.10" + version: 2.0.5 + resolution: "stack-generator@npm:2.0.5" dependencies: - stackframe: ^1.3.4 - checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 + stackframe: ^1.1.1 + checksum: a85c45a6f166319b31e9298da1e05b778b768553c2126eeeccfa5c4402fc810de1c541ec0b92db63238d68b3e08f4f57544adc27255e52f25f8edcabcc9caf63 languageName: node linkType: hard @@ -36141,28 +35903,28 @@ __metadata: linkType: hard "stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" + version: 2.0.5 + resolution: "stack-utils@npm:2.0.5" dependencies: escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 languageName: node linkType: hard -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d +"stackframe@npm:^1.1.1": + version: 1.1.1 + resolution: "stackframe@npm:1.1.1" + checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a languageName: node linkType: hard "stacktrace-gps@npm:^3.0.4": - version: 3.1.2 - resolution: "stacktrace-gps@npm:3.1.2" + version: 3.0.4 + resolution: "stacktrace-gps@npm:3.0.4" dependencies: source-map: 0.5.6 - stackframe: ^1.3.4 - checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c + stackframe: ^1.1.1 + checksum: b98cb77632d38e6cbc243da4c47ca5f4bef918985c233bb4cfe8bfdc60fde92b53ce0630b16cf24d81560f1442e2ff92ccf6e2fe19031c90fb775d8e86037d9b languageName: node linkType: hard @@ -36177,13 +35939,6 @@ __metadata: languageName: node linkType: hard -"stampit@npm:=4.3.2": - version: 4.3.2 - resolution: "stampit@npm:4.3.2" - checksum: 731dfe564b98371293bb5e7cb76bb195336dd3589af4e448d1478ac6c99091fd302fd7f41a255daa4b0ec2c1f14ea4f0cc0a2f05cd3d786b29ba531850ad7f62 - languageName: node - linkType: hard - "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -36225,15 +35980,6 @@ __metadata: languageName: node linkType: hard -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" - dependencies: - internal-slot: ^1.0.4 - checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 - languageName: node - linkType: hard - "stoppable@npm:^1.1.0": version: 1.1.0 resolution: "stoppable@npm:1.1.0" @@ -36323,18 +36069,18 @@ __metadata: linkType: hard "strict-event-emitter@npm:^0.2.4": - version: 0.2.8 - resolution: "strict-event-emitter@npm:0.2.8" + version: 0.2.7 + resolution: "strict-event-emitter@npm:0.2.7" dependencies: events: ^3.3.0 - checksum: 6ac06fe72a6ee6ae64d20f1dd42838ea67342f1b5f32b03b3050d73ee6ecee44b4d5c4ed2965a7154b47991e215f373d4e789e2b2be2769cd80e356126c2ca53 + checksum: 111691e7d3fce0810586ccd8e8234af883ad3b121ef69091c7e260c32299d1ba085a95238ad09b43478bc5e9e80370f2fcb8114716e343be6f44bfc08fab4142 languageName: node linkType: hard "strict-event-emitter@npm:^0.4.3": - version: 0.4.6 - resolution: "strict-event-emitter@npm:0.4.6" - checksum: 4f4f2909613e7811de789991c06bfb770d6d6987e2ec5c66fa7485d0f07cc4e7e32eba0dcf26cee6d86af6c92946d7f4acdfaff57d0c4114df2cfa1bf0e3c091 + version: 0.4.3 + resolution: "strict-event-emitter@npm:0.4.3" + checksum: ee335aba8a43bc6749d3337d78b9f6dbe8358d34b6eb38e7075dadf7f1cae621d96588663dda22dce17e6e7c7e281ddac79ca47421da8250bb4bf53b979508a5 languageName: node linkType: hard @@ -36367,12 +36113,12 @@ __metadata: linkType: hard "string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" + version: 4.0.1 + resolution: "string-length@npm:4.0.1" dependencies: char-regex: ^1.0.2 strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e languageName: node linkType: hard @@ -36432,36 +36178,25 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" +"string.prototype.trimend@npm:^1.0.5": + version: 1.0.5 + resolution: "string.prototype.trimend@npm:1.0.5" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + es-abstract: ^1.19.5 + checksum: d44f543833112f57224e79182debadc9f4f3bf9d48a0414d6f0cbd2a86f2b3e8c0ca1f95c3f8e5b32ae83e91554d79d932fc746b411895f03f93d89ed3dfb6bc languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" +"string.prototype.trimstart@npm:^1.0.5": + version: 1.0.5 + resolution: "string.prototype.trimstart@npm:1.0.5" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + es-abstract: ^1.19.5 + checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 languageName: node linkType: hard @@ -36606,12 +36341,12 @@ __metadata: linkType: hard "strtok3@npm:^6.2.4": - version: 6.3.0 - resolution: "strtok3@npm:6.3.0" + version: 6.2.4 + resolution: "strtok3@npm:6.2.4" dependencies: "@tokenizer/token": ^0.3.0 - peek-readable: ^4.1.0 - checksum: 90732cff3f325aef7c47c511f609b593e0873ec77b5081810071cde941344e6a0ee3ccb0cae1a9f5b4e12c81a2546fd6b322fabcdfbd1dd08362c2ce5291334a + peek-readable: ^4.0.1 + checksum: 327b48a79d464542e9ae922c1af3aacc6e6673be31442ab82648ee4afa8cf67f23b426d3e6e77a496ff6e0c9ddc009d9242a224ee05186a100325b633759d0ec languageName: node linkType: hard @@ -36639,9 +36374,9 @@ __metadata: linkType: hard "style-mod@npm:^4.0.0": - version: 4.0.2 - resolution: "style-mod@npm:4.0.2" - checksum: 4bac8877e039c61481fc729981378791979c3ebb2f827a54240e95ccca5bca92a6d660566cacb87a8d7cc1ffb26bcd5eafa10c697e131adb5ca9541f3a9cbff6 + version: 4.0.0 + resolution: "style-mod@npm:4.0.0" + checksum: c19f73d660a94244f0715180a6141bf75d05e5b156cc956ba11970b83cd303c3f7edafe5fb61a3192da6186cc008bdcdd803a979070f9b64e13046463644043c languageName: node linkType: hard @@ -36655,8 +36390,8 @@ __metadata: linkType: hard "styled-components@npm:^5.3.3": - version: 5.3.9 - resolution: "styled-components@npm:5.3.9" + version: 5.3.5 + resolution: "styled-components@npm:5.3.5" dependencies: "@babel/helper-module-imports": ^7.0.0 "@babel/traverse": ^7.4.5 @@ -36672,26 +36407,26 @@ __metadata: react: ">= 16.8.0" react-dom: ">= 16.8.0" react-is: ">= 16.8.0" - checksum: 404311cc7028259218674d3f9f39bdda2342fc02f2ebbba8f057ef560b2ad205c5bd63b82deed4d0bf217ac7eb960d0e1127510b0b606e32cbd5a48c10373ce8 + checksum: 05a664dfe423c2906959a0f3f47f9b1ad630e493eb2e06deea0dc0906af33ba5ca17277b98948a6c9642e73894d6533391aebf45576489f5afe920c974e9f8eb languageName: node linkType: hard -"stylehacks@npm:^5.1.1": - version: 5.1.1 - resolution: "stylehacks@npm:5.1.1" +"stylehacks@npm:^5.0.1": + version: 5.0.1 + resolution: "stylehacks@npm:5.0.1" dependencies: - browserslist: ^4.21.4 + browserslist: ^4.16.0 postcss-selector-parser: ^6.0.4 peerDependencies: postcss: ^8.2.15 - checksum: 11175366ef52de65bf06cefba0ddc9db286dc3a1451fd2989e74c6ea47091a02329a4bf6ce10b1a36950056927b6bbbe47c5ab3a1f4c7032df932d010fbde5a2 + checksum: 777dbed3987e04f713b9d74e08f66ab4c23c76cabb07c666c0ae9a06e58e8961063e17b5c7b9c23421b75e9caa9fb78084688e509624e57b19c92c174fbd964d languageName: node linkType: hard -"stylis@npm:4.1.3, stylis@npm:^4.0.6": - version: 4.1.3 - resolution: "stylis@npm:4.1.3" - checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6 +"stylis@npm:^4.0.6": + version: 4.0.7 + resolution: "stylis@npm:4.0.7" + checksum: 4f9fdc4b131b54cdc5988aaf23e796fcf77927c9d2f3147f6b23b8f3a9568eb38ce91b338b9d1b50a50391da32969c34ff68ff971c453fc3a5af89941c60ab06 languageName: node linkType: hard @@ -36711,8 +36446,8 @@ __metadata: linkType: hard "sucrase@npm:^3.20.2": - version: 3.30.0 - resolution: "sucrase@npm:3.30.0" + version: 3.29.0 + resolution: "sucrase@npm:3.29.0" dependencies: commander: ^4.0.0 glob: 7.1.6 @@ -36723,35 +36458,36 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: 9d53ee132f8063573c9f336c2dbc00a1f91fb976a4ad4dca29a15a898d361e6d4a06ada086c6881fe63389d96392cbd761d790a8175a6ecb184eaa337d58f363 + checksum: fc8f04c34f29c0e9ca63109815df138182d62663dbe9565fcd94161b77a88a639f40c46559d0bb84d7acf9346ce23ea102476fd9168ec279330c7faecefb81eb languageName: node linkType: hard -"superagent@npm:^8.0.5": - version: 8.0.9 - resolution: "superagent@npm:8.0.9" +"superagent@npm:^8.0.0": + version: 8.0.0 + resolution: "superagent@npm:8.0.0" dependencies: component-emitter: ^1.3.0 - cookiejar: ^2.1.4 + cookiejar: ^2.1.3 debug: ^4.3.4 fast-safe-stringify: ^2.1.1 form-data: ^4.0.0 - formidable: ^2.1.2 + formidable: ^2.0.1 methods: ^1.1.2 mime: 2.6.0 - qs: ^6.11.0 - semver: ^7.3.8 - checksum: 5d00cdc7ceb5570663da80604965750e6b1b8d7d7442b7791e285c62bcd8d578a8ead0242a2426432b59a255fb42eb3a196d636157538a1392e7b6c5f1624810 + qs: ^6.10.3 + readable-stream: ^3.6.0 + semver: ^7.3.7 + checksum: 14343e59327eafd85fa230acb876017079d5efcecc72a56566abc0f965220bb460af2e070dddecd9e2856410b2d2b318d81d9cc1d342aa5922da93c29a295dd7 languageName: node linkType: hard "supertest@npm:^6.1.3, supertest@npm:^6.1.6, supertest@npm:^6.2.4": - version: 6.3.3 - resolution: "supertest@npm:6.3.3" + version: 6.2.4 + resolution: "supertest@npm:6.2.4" dependencies: methods: ^1.1.2 - superagent: ^8.0.5 - checksum: 38239e517f7ba62b7a139a79c5c48d55f8d67b5ff4b6e51d5b07732ca8bbc4a28ffa1b10916fbb403dd013a054dbf028edc5850057d9a43aecbff439d494673e + superagent: ^8.0.0 + checksum: f2ddc4f3ba467a5c4036dd4aad41351e4b60eb13c39ecf5233ccd2ebb425504073b2b7036c973a70c7047f5c6bc1b9fef096b7bbff114d357cbe80654441db23 languageName: node linkType: hard @@ -36789,7 +36525,7 @@ __metadata: languageName: node linkType: hard -"svg-pan-zoom@npm:^3.6.1": +"svg-pan-zoom@npm:^3.6.0": version: 3.6.1 resolution: "svg-pan-zoom@npm:3.6.1" checksum: 500b99378d321315e1668067ef6a73af3f61f9adfab75a575b21d2d216cb446def61d60ad12265203463cca9bef56b090f00e48118fa9b7f0ffa1c691e4c1621 @@ -36820,18 +36556,14 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.19.1": - version: 3.19.2 - resolution: "swagger-client@npm:3.19.2" +"swagger-client@npm:^3.18.5": + version: 3.18.5 + resolution: "swagger-client@npm:3.18.5" dependencies: - "@babel/runtime-corejs3": ^7.20.13 - "@swagger-api/apidom-core": =0.69.0 - "@swagger-api/apidom-json-pointer": =0.69.0 - "@swagger-api/apidom-ns-openapi-3-1": =0.69.0 - "@swagger-api/apidom-reference": =0.69.0 + "@babel/runtime-corejs3": ^7.11.2 cookie: ~0.5.0 cross-fetch: ^3.1.5 - deepmerge: ~4.3.0 + deepmerge: ~4.2.2 fast-json-patch: ^3.0.0-1 form-data-encoder: ^1.4.3 formdata-node: ^4.0.0 @@ -36841,16 +36573,16 @@ __metadata: qs: ^6.10.2 traverse: ~0.6.6 url: ~0.11.0 - checksum: 9613387191b6e72afbe1e551d70646b7c74a136160d2a69ac3220cf23007175c500d3035b0c9ebf1ef0b49769a65d54cf343eb3b0c0d260c5797338776c872ba + checksum: 804260814abffbb97266b23be20ef8503cf21143684fb81f134ce4f7e0287e6b47b403f0fc0d9e2121bedb1309af6d50f76701ee4bf3390365558d82f4b40786 languageName: node linkType: hard "swagger-ui-react@npm:^4.11.1": - version: 4.18.1 - resolution: "swagger-ui-react@npm:4.18.1" + version: 4.15.5 + resolution: "swagger-ui-react@npm:4.15.5" dependencies: "@babel/runtime-corejs3": ^7.18.9 - "@braintree/sanitize-url": =6.0.2 + "@braintree/sanitize-url": =6.0.0 base64-js: ^1.5.1 classnames: ^2.3.1 css.escape: 1.5.1 @@ -36870,7 +36602,7 @@ __metadata: react-immutable-proptypes: 2.2.0 react-immutable-pure-component: ^2.2.0 react-inspector: ^6.0.1 - react-redux: ^8.0.5 + react-redux: ^7.2.4 react-syntax-highlighter: ^15.5.0 redux: ^4.1.2 redux-immutable: ^4.0.0 @@ -36878,7 +36610,7 @@ __metadata: reselect: ^4.1.5 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.19.1 + swagger-client: ^3.18.5 url-parse: ^1.5.8 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -36886,7 +36618,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 183e15d7ccab2ef9197b3695029b66fe1e0556c48bab10f63150feabc304492ae87529a1f1b3e0ee689d19f8b3645a168dff0f3edf421737ac7e8a2d320d26c4 + checksum: 22a72947da865ebfa9269f66b42c2b50105b6285bcb6546f8f356cf73961f76e397b7d79003641c9569bfb2163ea98e2f3f73a27b5b66843d308786c37362e1c languageName: node linkType: hard @@ -36920,7 +36652,7 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.0.4": +"symbol-observable@npm:1.2.0, symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": version: 1.2.0 resolution: "symbol-observable@npm:1.2.0" checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 @@ -37014,11 +36746,11 @@ __metadata: linkType: hard "tdigest@npm:^0.1.1": - version: 0.1.2 - resolution: "tdigest@npm:0.1.2" + version: 0.1.1 + resolution: "tdigest@npm:0.1.1" dependencies: - bintrees: 1.0.2 - checksum: 44de8246752b6f8c2924685f969fd3d94c36949f22b0907e99bef2b2220726dd8467f4730ea96b06040b9aa2587c0866049640039d1b956952dfa962bc2075a3 + bintrees: 1.0.1 + checksum: 4d05fd70fb0aa70aa101d01557722b7ef9a91b2ebf8dfc274ca9852220397a74e4ed6e59c55335b4b1dd0ac5e1b65d25b8d32ae01278fc3b783c40f6d84303e2 languageName: node linkType: hard @@ -37065,15 +36797,15 @@ __metadata: linkType: soft "teeny-request@npm:^8.0.0": - version: 8.0.3 - resolution: "teeny-request@npm:8.0.3" + version: 8.0.0 + resolution: "teeny-request@npm:8.0.0" dependencies: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 node-fetch: ^2.6.1 stream-events: ^1.0.5 - uuid: ^9.0.0 - checksum: 6682a14df3708068db147c91af5f2b2e097e2e53c03dddaef40f6f974297f2da9e6112c615af9fbc84a1685c6846b8a9e485771d1a350aa25e9ff5fcf63dd821 + uuid: ^8.0.0 + checksum: a867fb58406308e3ee8415f6b6612471a78af136971575bb51eb3ecf4b76d2ea363936da5eb68bbc28ef3d3af59e24dcf0803f1e80c8eb658c73cc9a53881c52 languageName: node linkType: hard @@ -37093,7 +36825,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.1.3": +"terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3": version: 5.3.7 resolution: "terser-webpack-plugin@npm:5.3.7" dependencies: @@ -37115,7 +36847,7 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.5, terser@npm:^5.3.8": +"terser@npm:^5.10.0, terser@npm:^5.16.5": version: 5.16.6 resolution: "terser@npm:5.16.6" dependencies: @@ -37182,9 +36914,9 @@ __metadata: linkType: hard "textextensions@npm:^5.12.0, textextensions@npm:^5.13.0": - version: 5.15.0 - resolution: "textextensions@npm:5.15.0" - checksum: aa172e941e81b44e0d35fa217f758a0d8ba0342dac31539914225a2382b5792ef58bff3ec9009b9c85b0c0605f5a79a906bd97827a2e591d647137fcdbf867d3 + version: 5.14.0 + resolution: "textextensions@npm:5.14.0" + checksum: 1f610ccf2a2c1445fb7156c23b5c8defd608c74e8047df18abd4b9ee44c74d29b453ba104d14c53c91f9026670f7c923114cd12200ee5ec458cc518fd0798c74 languageName: node linkType: hard @@ -37251,18 +36983,32 @@ __metadata: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" + version: 2.0.11 + resolution: "timers-browserify@npm:2.0.11" dependencies: setimmediate: ^1.0.4 - checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + checksum: 2a2ecbfd0c2380078d4a1e63e4eeb46884156d8fca0efe34d6fd8c615d68ef1a7785888629157ab0e5720e3c0d7f57bf1766b2ad037feb9aea07cbff1623092c + languageName: node + linkType: hard + +"timsort@npm:^0.3.0": + version: 0.3.0 + resolution: "timsort@npm:0.3.0" + checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a + languageName: node + linkType: hard + +"tiny-emitter@npm:^2.0.0": + version: 2.1.0 + resolution: "tiny-emitter@npm:2.1.0" + checksum: fbcfb5145751a0e3b109507a828eb6d6d4501352ab7bb33eccef46e22e9d9ad3953158870a6966a59e57ab7c3f9cfac7cab8521db4de6a5e757012f4677df2dd languageName: node linkType: hard "tiny-invariant@npm:^1.0.6": - version: 1.3.1 - resolution: "tiny-invariant@npm:1.3.1" - checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c + version: 1.1.0 + resolution: "tiny-invariant@npm:1.1.0" + checksum: 27d29bbb9e1d1d86e25766711c28ad91af6d67c87d561167077ac7fbce5212b97bbfe875e70bc369808e075748c825864c9b61f0e9f8652275ec86bcf4dcc924 languageName: node linkType: hard @@ -37290,11 +37036,11 @@ __metadata: linkType: hard "tmp-promise@npm:^3.0.2": - version: 3.0.3 - resolution: "tmp-promise@npm:3.0.3" + version: 3.0.2 + resolution: "tmp-promise@npm:3.0.2" dependencies: tmp: ^0.2.0 - checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c + checksum: 2d8457c9512e896633f64fab33e5e3fd273c4d8fca33cfc74a04a104a0b921d15ed3e832c4f2a50108635ac88264afef85abddbe5ad8480e15f55fc7f8e76969 languageName: node linkType: hard @@ -37361,12 +37107,12 @@ __metadata: linkType: hard "token-types@npm:^4.1.1": - version: 4.2.1 - resolution: "token-types@npm:4.2.1" + version: 4.1.1 + resolution: "token-types@npm:4.1.1" dependencies: "@tokenizer/token": ^0.3.0 ieee754: ^1.2.1 - checksum: cce256766b33e0f08ceffefa2198fb4961a417866d00780e58625999ab5c0699821407053e64eadc41b00bbb6c0d0c4d02fbd2199940d8a3ccb71e1b148ab9a2 + checksum: 8fe4e84611f6c575439b24003650064a2abe8f7c848cdf84dfa233792e4081226e538d567825954d536eadee3a17d902db62ce652b2b1191b772caf1c7d0e312 languageName: node linkType: hard @@ -37406,15 +37152,14 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" +"tough-cookie@npm:^4.0.0": + version: 4.0.0 + resolution: "tough-cookie@npm:4.0.0" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + universalify: ^0.1.2 + checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 languageName: node linkType: hard @@ -37454,9 +37199,9 @@ __metadata: linkType: hard "traverse@npm:^0.6.6, traverse@npm:~0.6.6": - version: 0.6.7 - resolution: "traverse@npm:0.6.7" - checksum: 21018085ab72f717991597e12e2b52446962ed59df591502e4d7e1a709bc0a989f7c3d451aa7d882666ad0634f1546d696c5edecda1f2fc228777df7bb529a1e + version: 0.6.6 + resolution: "traverse@npm:0.6.6" + checksum: e2afa72f11efa9ba31ed763d2d9d2aa244612f22015d16c0ea3ba5f6ca8bf071de87f8108b721885cce06ea4a36ef4605d9228c67e431d9015ea4685cb364420 languageName: node linkType: hard @@ -37469,37 +37214,6 @@ __metadata: languageName: node linkType: hard -"tree-sitter-json@npm:=0.20.0": - version: 0.20.0 - resolution: "tree-sitter-json@npm:0.20.0" - dependencies: - nan: ^2.14.1 - node-gyp: latest - checksum: 820e27b644e3ec62d8753976572660fbc314b0ffb10178384ae0d187187797c3d87223bec6b034e602445e4095484a28fb89ca67653a1d4f41fa13dd6adad0d2 - languageName: node - linkType: hard - -"tree-sitter-yaml@npm:=0.5.0": - version: 0.5.0 - resolution: "tree-sitter-yaml@npm:0.5.0" - dependencies: - nan: ^2.14.0 - node-gyp: latest - checksum: 7962aea3784dd67098daff4ae984145189eb49b8f981f5a9e72bac97b77859a75030580d199712d671cdced5326599192b3549a428e162e9858a3bbb4cb2fff6 - languageName: node - linkType: hard - -"tree-sitter@npm:=0.20.1": - version: 0.20.1 - resolution: "tree-sitter@npm:0.20.1" - dependencies: - nan: ^2.14.0 - node-gyp: latest - prebuild-install: ^6.0.1 - checksum: a33bf01f9dc558aa0075c9634d06743ed9b7fbf273d2acfbe96daf83f48aec46be7dc42d80d2423c36593d36d3bf189d3fa023d6ce389e20ff9527fae118b215 - languageName: node - linkType: hard - "treeverse@npm:^1.0.4": version: 1.0.4 resolution: "treeverse@npm:1.0.4" @@ -37507,13 +37221,6 @@ __metadata: languageName: node linkType: hard -"trim-lines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-lines@npm:3.0.1" - checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed - languageName: node - linkType: hard - "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -37529,9 +37236,9 @@ __metadata: linkType: hard "trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 + version: 2.0.2 + resolution: "trough@npm:2.0.2" + checksum: e0c18f3fb4c26e84d7864528f49a3f43a8fef8245d6ffe1fced90a867ea88be9838948fd98cf838da448700f5e4ec909576a469719db5e9833f5b58fed26dfa0 languageName: node linkType: hard @@ -37566,9 +37273,9 @@ __metadata: linkType: hard "ts-log@npm:^2.2.3": - version: 2.2.5 - resolution: "ts-log@npm:2.2.5" - checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d + version: 2.2.3 + resolution: "ts-log@npm:2.2.3" + checksum: 8aa34a2724d7915ddc6de8d0c27eb48f67206b52c42656f1ea2a7ffb080fa664db5fb22b42bd3c72b5b95cc6eb4612196b7d1e28f4bc146191ebc2a9683af548 languageName: node linkType: hard @@ -37620,22 +37327,15 @@ __metadata: languageName: node linkType: hard -"ts-toolbelt@npm:^6.15.1": - version: 6.15.5 - resolution: "ts-toolbelt@npm:6.15.5" - checksum: 24ad00cfd9ce735c76c873a9b1347eac475b94e39ebbdf100c9019dce88dd5f4babed52884cf82bb456a38c28edd0099ab6f704b84b2e5e034852b618472c1f3 - languageName: node - linkType: hard - "tsconfig-paths@npm:^3.14.1": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" + version: 3.14.1 + resolution: "tsconfig-paths@npm:3.14.1" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.2 + json5: ^1.0.1 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d languageName: node linkType: hard @@ -37653,7 +37353,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd @@ -37667,6 +37367,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:~2.4.0": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -37686,19 +37393,19 @@ __metadata: linkType: hard "tty-table@npm:^4.1.5": - version: 4.2.1 - resolution: "tty-table@npm:4.2.1" + version: 4.1.6 + resolution: "tty-table@npm:4.1.6" dependencies: chalk: ^4.1.2 - csv: ^5.5.3 - kleur: ^4.1.5 + csv: ^5.5.0 + kleur: ^4.1.4 smartwrap: ^2.0.2 - strip-ansi: ^6.0.1 + strip-ansi: ^6.0.0 wcwidth: ^1.0.1 - yargs: ^17.7.1 + yargs: ^17.1.1 bin: tty-table: adapters/terminal-adapter.js - checksum: e058c0bd553c515d2ed908eb5f6a220a412e160168ef5c87847c62dacf78a7de9ccb548d7f6cd5edbcce2301c389ac2858c10aa330dccea2764809beb63d1d7b + checksum: 0f689b7d79ad6b9e608299e667a493309901fe802f1c4d66627a90cacb6fe11e0521e1a2dc5a75f793750ecdd849e98292d4874e5e6e988edd928b67045eb847 languageName: node linkType: hard @@ -37809,34 +37516,14 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" - dependencies: - call-bind: ^1.0.2 - for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 - languageName: node - linkType: hard - "typed-rest-client@npm:^1.8.4": - version: 1.8.9 - resolution: "typed-rest-client@npm:1.8.9" + version: 1.8.4 + resolution: "typed-rest-client@npm:1.8.4" dependencies: qs: ^6.9.1 tunnel: 0.0.6 underscore: ^1.12.1 - checksum: 615c95872d9b4d4caa7eb44d639d9044fc41602a16c3855b87deae9e97d6df168c9501a40a1fe003ced4984335684b3dfdadcf24ac0b50657f4cd9026df40e1c - languageName: node - linkType: hard - -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + checksum: 238e2139724310fed39756ae734fbc811e803abaa7598720ad6cc5ab7f160d415d8107551422b186f6b2e08c5761c0e7b66ca47d60b2ccd952bb5e20d3b92f3c languageName: node linkType: hard @@ -37905,10 +37592,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.30": - version: 0.7.34 - resolution: "ua-parser-js@npm:0.7.34" - checksum: ddb7b8b590af49f37eaac37579ac98274f59fff3990610f45e33893aa62ce5b8fc265459cb78b9c9fa3fbbbaad5b2d7939303f18cbd7e8c25c96e57009443c42 +"ua-parser-js@npm:^0.7.18, ua-parser-js@npm:^0.7.30": + version: 0.7.33 + resolution: "ua-parser-js@npm:0.7.33" + checksum: 1510e9ec26fcaf0d8c6ae8f1078a8230e8816f083e1b5f453ea19d06b8ef2b8a596601c92148fd41899e8b3e5f83fa69c42332bd5729b931a721040339831696 languageName: node linkType: hard @@ -37920,11 +37607,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4, uglify-js@npm:^3.7.7": - version: 3.17.4 - resolution: "uglify-js@npm:3.17.4" + version: 3.17.0 + resolution: "uglify-js@npm:3.17.0" bin: uglifyjs: bin/uglifyjs - checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + checksum: 20d1fcac05e74db949a9579a36f9a1af88430e590bc9c22410b76686035c55cef65247ca1935d2f6440c78928227684219c8b1ddfcd858213049cb2890821392 languageName: node linkType: hard @@ -37937,20 +37624,13 @@ __metadata: languageName: node linkType: hard -"uid2@npm:0.0.3": +"uid2@npm:0.0.3, uid2@npm:0.0.x": version: 0.0.3 resolution: "uid2@npm:0.0.3" checksum: c8f64acfa94aa42d90c1a61ba9df0162f0db0d28c211e21cf5792b3d70b7ad9fd75d19c7cadcce81896ea111335e57e65891a3b6d0a1343a9adf45abf3d4c47d languageName: node linkType: hard -"uid2@npm:0.0.x": - version: 0.0.4 - resolution: "uid2@npm:0.0.4" - checksum: e92325ce2e3b7be504b19e835dbb5a8b0495031f364b08ca46745468ed0ae0f202a4fdaf99a1a2715844156efc3ab410456ae24a0f7c0ae4b0a2e9f2784edfd9 - languageName: node - linkType: hard - "uid2@npm:^1.0.0": version: 1.0.0 resolution: "uid2@npm:1.0.0" @@ -38001,6 +37681,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.12.0, undici@npm:^5.8.0": + version: 5.19.1 + resolution: "undici@npm:5.19.1" + dependencies: + busboy: ^1.6.0 + checksum: 57ee94ee74d944faa41dbcb2faf4e0c90069708d3aaae860185884e51376b5d457728352a8396d69a3c9cb752b62ff99a19a664c5aacb7ee61cc488af499a01c + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -38018,23 +37707,23 @@ __metadata: languageName: node linkType: hard -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 +"unicode-match-property-value-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" + checksum: 8fe6a09d9085a625cabcead5d95bdbc1a2d5d481712856092ce0347231e81a60b93a68f1b69e82b3076a07e415a72c708044efa2aa40ae23e2e7b5c99ed4a9ea languageName: node linkType: hard "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + version: 2.0.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" + checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 languageName: node linkType: hard "unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" + version: 10.1.0 + resolution: "unified@npm:10.1.0" dependencies: "@types/unist": ^2.0.0 bail: ^2.0.0 @@ -38043,7 +37732,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + checksum: b7e1d8dcf61d139ff57df1d393b177098a7fa53bddd47dd8c44cdfe983557d653719fd0ba3668a0be89a4a6189907327d56c2d13b21361e3d07b74f51b0d98ef languageName: node linkType: hard @@ -38056,15 +37745,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -38074,76 +37754,84 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": +"unist-builder@npm:^3.0.0": version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" + resolution: "unist-builder@npm:3.0.0" dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: ^2.0.0 - checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + "@types/unist": ^2.0.0 + checksum: 80459ee3c2ece90bbc4f4b4faeed524d144c1a09ee07ff3e9004648d9b71a652e80a3b3ef60311a1e92f6ab915caf27c6f08062b5f8c84fa725bc0d7c5759e84 languageName: node linkType: hard "unist-util-generated@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-generated@npm:2.0.1" - checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 + version: 2.0.0 + resolution: "unist-util-generated@npm:2.0.0" + checksum: 3a806793fa24a75190c217740ce706340d6cb0d51eff677134253d628f8e4355ebd8a243fe8045c583463f6bebfd50f902d653161da87c1359fcd1a14b99c8e0 languageName: node linkType: hard "unist-util-is@npm:^5.0.0": - version: 5.2.1 - resolution: "unist-util-is@npm:5.2.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 + version: 5.1.1 + resolution: "unist-util-is@npm:5.1.1" + checksum: e8743a19a304d8a8f5684f3e5ddb5546f2655847b42123687277d76566a2aba89beb7b4a8a9e9ebc4d904cd1cecc285356d7923d973a43cfc19a1e10ff6bdee4 languageName: node linkType: hard "unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" - dependencies: - "@types/unist": ^2.0.0 - checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 + version: 4.0.1 + resolution: "unist-util-position@npm:4.0.1" + checksum: 0fad25db3906eda7a4f6b769e094f124ab99c528db2f3d140d85abd9133e0e89dde2e4b593c69830d58921b089323067bbc6c4832529352d879b32b7297a3aa3 languageName: node linkType: hard "unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" + version: 3.0.0 + resolution: "unist-util-stringify-position@npm:3.0.0" dependencies: "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 + checksum: 460d5e16065942da7acd2578e92f4b8421c5af1f3f15ebc858db90865be69a5454dd6638d73f855cc82b1fa9e6e941a258f97b3f5f3be4f2766b0e6f6c45a031 languageName: node linkType: hard -"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" +"unist-util-visit-parents@npm:^4.0.0": + version: 4.1.1 + resolution: "unist-util-visit-parents@npm:4.1.1" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa + checksum: 49d78984a6dd858a989f849d2b4330c8a04d1ee99c0e9920a5e37668cf847dab95db77a3bf0c8aaeb3e66abeae12e2d454949ec401614efef377d8f82d215662 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^5.0.0": + version: 5.1.0 + resolution: "unist-util-visit-parents@npm:5.1.0" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 7c413dbb3dfcb679109fa8f0965d9abf117c3c53fa7b8823f68cac0ea53adbe98c1ce954d36c034e086c966b48b1d44d42c85f7bf6b42a032f728ac338929513 + languageName: node + linkType: hard + +"unist-util-visit@npm:^3.0.0": + version: 3.1.0 + resolution: "unist-util-visit@npm:3.1.0" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^4.0.0 + checksum: c37dbc0c5509f85f3abdf46d927b3dd11e6c419159771b1f1a5ce446d36ac993d04b087e28bc6173a172e0fbe9d77e997f120029b2b449766ebe55b6f6e0cc2c languageName: node linkType: hard "unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" + version: 4.1.0 + resolution: "unist-util-visit@npm:4.1.0" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee + unist-util-visit-parents: ^5.0.0 + checksum: 3521abee2ed4535092aac073d05f46255475c89781b8e9d8c951a473d91b5d6e4d5912ae4a68a4c1cf17a42ed0108cb93103c7f5c736977529969997451363fb languageName: node linkType: hard @@ -38164,20 +37852,13 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": +"universalify@npm:^0.1.0, universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -38201,13 +37882,6 @@ __metadata: languageName: node linkType: hard -"unraw@npm:=2.0.1": - version: 2.0.1 - resolution: "unraw@npm:2.0.1" - checksum: af9a9d2f6e420cb4f52fe2f1f5982e6b0be95da640d6ae8d6d9ff631d864771793cb9fe7e2a16ef1ce631b94065f4438e7bd7f1701076fc69296edc4e704d42f - languageName: node - linkType: hard - "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -38215,9 +37889,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.10": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" +"update-browserslist-db@npm:^1.0.9": + version: 1.0.9 + resolution: "update-browserslist-db@npm:1.0.9" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -38225,7 +37899,7 @@ __metadata: browserslist: ">= 4.21.0" bin: browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + checksum: f625899b236f6a4d7f62b56be1b8da230c5563d1fef84d3ef148f2e1a3f11a5a4b3be4fd7e3703e51274c116194017775b10afb4de09eb2c0d09d36b90f1f578 languageName: node linkType: hard @@ -38248,15 +37922,15 @@ __metadata: linkType: hard "uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" + version: 4.2.2 + resolution: "uri-js@npm:4.2.2" dependencies: punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + checksum: 5a91c55d8ae6d9a1ff9dc1b0774888a99aae7cc6e9056c57b709275c0f6753b05cd1a9f2728a1479244b93a9f57ab37c60d277a48d9f2d032d6ae65837bf9bc7 languageName: node linkType: hard -"url-parse@npm:^1.5.3, url-parse@npm:^1.5.8": +"url-parse@npm:^1.5.8": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -38267,9 +37941,9 @@ __metadata: linkType: hard "url-value-parser@npm:^2.0.0": - version: 2.2.0 - resolution: "url-value-parser@npm:2.2.0" - checksum: d5fd52b3526bb5db20384c6ab95ff8f8d1f37daaadfb2a8d8c70f60810997a60d80dbff35de681850356d2117c948ca9cb9c5d903d75fb63f021c890d63440c6 + version: 2.0.3 + resolution: "url-value-parser@npm:2.0.3" + checksum: f13a2693b633896329956372a58a1c0f6666d72b87c85dff05564a132c1a5d2a698ca3097a481bf06afc1f5007c08ec67499136736c25c38f3ee84e877d72732 languageName: node linkType: hard @@ -38325,11 +37999,11 @@ __metadata: linkType: hard "use-memo-one@npm:^1.1.1": - version: 1.1.3 - resolution: "use-memo-one@npm:1.1.3" + version: 1.1.1 + resolution: "use-memo-one@npm:1.1.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac + react: ^16.8.0 + checksum: 39ede232b8c95e6e1ff4f9d9b3f45826b6c1a51a8baae562f49867c569929323ec1e100186aa5111b84f6650bcf273746faf2739091cbe13d6c2e8d3306cc254 languageName: node linkType: hard @@ -38345,7 +38019,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": +"use-sync-external-store@npm:^1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: @@ -38424,7 +38098,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2, uuid@npm:^3.4.0": +"uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -38443,8 +38117,8 @@ __metadata: linkType: hard "uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" + version: 0.5.3 + resolution: "uvu@npm:0.5.3" dependencies: dequal: ^2.0.0 diff: ^5.0.0 @@ -38452,7 +38126,7 @@ __metadata: sade: ^1.7.3 bin: uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + checksum: 0cf8e9e6ec79199dacc64fe0e9f82b5bf1d2308f3c54ec1aba5d1ca0a4beff4f173cae0f87bc52d35121565fd232b969fbf52cca3707e20517e62645e19b898e languageName: node linkType: hard @@ -38464,13 +38138,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.1.0 - resolution: "v8-to-istanbul@npm:9.1.0" + version: 9.0.1 + resolution: "v8-to-istanbul@npm:9.0.1" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 languageName: node linkType: hard @@ -38541,9 +38215,16 @@ __metadata: linkType: hard "validator@npm:^13.7.0": - version: 13.9.0 - resolution: "validator@npm:13.9.0" - checksum: e2c936f041f61faa42bafd17c6faddf939498666cd82e88d733621c286893730b008959f4cb12ab3e236148a4f3805c30b85e3dcf5e0efd8b0cbcd36c02bfc0c + version: 13.7.0 + resolution: "validator@npm:13.7.0" + checksum: 2b83283de1222ca549a7ef57f46e8d49c6669213348db78b7045bce36a3b5843ff1e9f709ebf74574e06223461ee1f264f8cc9a26a0060a79a27de079d8286ef + languageName: node + linkType: hard + +"value-or-promise@npm:1.0.11": + version: 1.0.11 + resolution: "value-or-promise@npm:1.0.11" + checksum: 13f8f2ef620118c73b4d1beee8ce6045d7182bbf15090ecfbcafb677ec43698506a5e9ace6bea5ea35c32bc612c9b1f824bb59b6581cdfb5c919052745c277d5 languageName: node linkType: hard @@ -38562,15 +38243,15 @@ __metadata: linkType: hard "vasync@npm:^2.2.0": - version: 2.2.1 - resolution: "vasync@npm:2.2.1" + version: 2.2.0 + resolution: "vasync@npm:2.2.0" dependencies: verror: 1.10.0 - checksum: dca14090436f1b30d4887737af47bc8333795a6d45e520e583ca2c4476d841bf68606cbc79071cfd980e3e42e630736d66a598b9100a505663442ae2e7c2f92f + checksum: dcfafe19a6d3e51b6cc30e98f8e25dec5b4b71bb699eafa5e1840275337f8345753a86a036428442abae7c2cb4ff8f352cd64e245f8c7aaeac89efc512081e91 languageName: node linkType: hard -"verror@npm:1.10.0": +"verror@npm:1.10.0, verror@npm:^1.8.1": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: @@ -38581,58 +38262,25 @@ __metadata: languageName: node linkType: hard -"verror@npm:^1.8.1": - version: 1.10.1 - resolution: "verror@npm:1.10.1" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: 690a8d6ad5a4001672290e9719e3107c86269bc45fe19f844758eecf502e59f8aa9631b19b839f6d3dea562334884d22d1eb95ae7c863032075a9212c889e116 - languageName: node - linkType: hard - "vfile-message@npm:^3.0.0": - version: 3.1.4 - resolution: "vfile-message@npm:3.1.4" + version: 3.0.2 + resolution: "vfile-message@npm:3.0.2" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 + checksum: 02d50c6652a38c96dbb8cbcc1e8d5b083799a3bf99ba1cf85332e2129e9b569582201fca03839a4205161fe578ebbb31d9bdc52b2cff352051546c99bdd97df3 languageName: node linkType: hard "vfile@npm:^5.0.0": - version: 5.3.7 - resolution: "vfile@npm:5.3.7" + version: 5.1.0 + resolution: "vfile@npm:5.1.0" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 unist-util-stringify-position: ^3.0.0 vfile-message: ^3.0.0 - checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 - languageName: node - linkType: hard - -"victory-vendor@npm:^36.6.8": - version: 36.6.8 - resolution: "victory-vendor@npm:36.6.8" - dependencies: - "@types/d3-array": ^3.0.3 - "@types/d3-ease": ^3.0.0 - "@types/d3-interpolate": ^3.0.1 - "@types/d3-scale": ^4.0.2 - "@types/d3-shape": ^3.1.0 - "@types/d3-time": ^3.0.0 - "@types/d3-timer": ^3.0.0 - d3-array: ^3.1.6 - d3-ease: ^3.0.1 - d3-interpolate: ^3.0.1 - d3-scale: ^4.0.2 - d3-shape: ^3.1.0 - d3-time: ^3.0.0 - d3-timer: ^3.0.1 - checksum: 6411f7c19a776cef3919946d429293cfe33c93a6e4dcfdfa2ba1edecad3a28ed2cd6b0d117169b8917ab6a7679e2bade5e7bfc1fed3fc8b464b842f21dac5f49 + checksum: f626578bfdff42bd38c4117ad1f43d2c4bebe2df9ca1a861ece542f4f42dfa415405cb96c4a01759fee1bdcf778281c936467497c71a0d097c73367e8c11f30a languageName: node linkType: hard @@ -38663,6 +38311,13 @@ __metadata: languageName: node linkType: hard +"viz.js@npm:2.1.2": + version: 2.1.2 + resolution: "viz.js@npm:2.1.2" + checksum: 299e5a8519a472e0e98197c5f39c0ca6f3f6c4642b6ae007ed888fea998d82455c7ae0118d09cb888bfd2c46ebe3b03d7ce321a4eef1c822a5f5719d3a6ef3bb + languageName: node + linkType: hard + "vm-browserify@npm:^1.0.1": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" @@ -38682,24 +38337,10 @@ __metadata: languageName: node linkType: hard -"vscode-languageserver-textdocument@npm:^1.0.8": - version: 1.0.9 - resolution: "vscode-languageserver-textdocument@npm:1.0.9" - checksum: 36b76f725098d3e0d97885c05c51fca47388d9b62e936f6c8824c44a4fac7a96e1406538538a0f46ef1fdb9f1053ddc1cacb5e7b168cecb36d3c018942ec6f52 - languageName: node - linkType: hard - -"vscode-languageserver-types@npm:^3.17.1": - version: 3.17.3 - resolution: "vscode-languageserver-types@npm:3.17.3" - checksum: fbc8221297261f659a6482875ff2a419dc9d55965dc53745797da569ff9f819cd832e6f2699017baadd946548bbfe212e3f6971f3d960f12dc0ee9c629dacc07 - languageName: node - linkType: hard - -"vscode-uri@npm:^3.0.7": - version: 3.0.7 - resolution: "vscode-uri@npm:3.0.7" - checksum: c899a0334f9f6ba53021328e083f6307978c09b94407d7e5fe86fcd8fcb8f1da0cb344123a335e55769055007a46d51aff83f9ee1dfc0296ee54b78f34ef0e4f +"vscode-languageserver-types@npm:^3.15.1": + version: 3.15.1 + resolution: "vscode-languageserver-types@npm:3.15.1" + checksum: 28c1cb0d5b7ad7c719015a6eb5f774c000fe68c41bbd4a3fd0cbe6d862f27eec075d6bfb14c9d86c22d0e8711c2df8194295bf1e7d6ac0c359cab348c5e14887 languageName: node linkType: hard @@ -38713,9 +38354,9 @@ __metadata: linkType: hard "w3c-keyname@npm:^2.2.4": - version: 2.2.6 - resolution: "w3c-keyname@npm:2.2.6" - checksum: 59a31d23ca9953c01c99ed6695fee5b6ea36eb2412d76a21fe4302ab33a3f5cd96c006a763940b6115c3d042c16d3564eeee1156832217d028af0518098b3a42 + version: 2.2.4 + resolution: "w3c-keyname@npm:2.2.4" + checksum: 890180452bdd7d25f05deb97b3c0839911264432a7c5dd8dc4c9d9b6384237a66d66b7c2a145440b607826d5aa61cd90098cfffcf50b50c0e4c2259b0d208038 languageName: node linkType: hard @@ -38728,12 +38369,12 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" +"w3c-xmlserializer@npm:^3.0.0": + version: 3.0.0 + resolution: "w3c-xmlserializer@npm:3.0.0" dependencies: xml-name-validator: ^4.0.0 - checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + checksum: 0af8589942eeb11c9fe29eb31a1a09f3d5dd136aea53a9848dfbabff79ac0dd26fe13eb54d330d5555fe27bb50b28dca0715e09f9cc2bfa7670ccc8b7f919ca2 languageName: node linkType: hard @@ -38775,6 +38416,24 @@ __metadata: languageName: node linkType: hard +"warning@npm:^3.0.0": + version: 3.0.0 + resolution: "warning@npm:3.0.0" + dependencies: + loose-envify: ^1.0.0 + checksum: c9f99a12803aab81b29858e7dc3415bf98b41baee3a4c3acdeb680d98c47b6e17490f1087dccc54432deed5711a5ce0ebcda2b27e9b5eb054c32ae50acb4419c + languageName: node + linkType: hard + +"warning@npm:^4.0.1": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: ^1.0.0 + checksum: 4f2cb6a9575e4faf71ddad9ad1ae7a00d0a75d24521c193fa464f30e6b04027bd97aa5d9546b0e13d3a150ab402eda216d59c1d0f2d6ca60124d96cd40dfa35c + languageName: node + linkType: hard + "watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -38816,37 +38475,30 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:4.0.0-beta.3": - version: 4.0.0-beta.3 - resolution: "web-streams-polyfill@npm:4.0.0-beta.3" - checksum: dfec1fbf52b9140e4183a941e380487b6c3d5d3838dd1259be81506c1c9f2abfcf5aeb670aeeecfd9dff4271a6d8fef931b193c7bedfb42542a3b05ff36c0d16 +"web-streams-polyfill@npm:4.0.0-beta.1": + version: 4.0.0-beta.1 + resolution: "web-streams-polyfill@npm:4.0.0-beta.1" + checksum: 94c21d3aba1c26e5942bb210ffd60c6990cbc750d34bdf548ed93ed845f0a6eac89cdae1dd0195afaba15fbcf4aaca9e397ee40fa4d1f2c191d04d43717bd065 languageName: node linkType: hard -"web-streams-polyfill@npm:^3.2.1": +"web-streams-polyfill@npm:^3.2.0, web-streams-polyfill@npm:^3.2.1": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 languageName: node linkType: hard -"web-tree-sitter@npm:=0.20.7": - version: 0.20.7 - resolution: "web-tree-sitter@npm:0.20.7" - checksum: f2949a679bbca5ecb225ab26a67ff99e6e3907fa905c6bd62bfe6d2cfa216347f8cc481efcd32f181cb6b964bc03c42f9611e16da0825bff43de389b17ff9f7f - languageName: node - linkType: hard - "webcrypto-core@npm:^1.7.4": - version: 1.7.6 - resolution: "webcrypto-core@npm:1.7.6" + version: 1.7.5 + resolution: "webcrypto-core@npm:1.7.5" dependencies: "@peculiar/asn1-schema": ^2.1.6 "@peculiar/json-schema": ^1.1.12 asn1js: ^3.0.1 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: 0503c92cd1fc8861383872774963104bf3d7ddf0a35cadd841862f0488e4613bdf23499d06b31938a4f2cf333bfde8dacc24e349c5e943e44246f3fcb623c7d0 + checksum: f6e529ca5c1175b8ccead3547f60efa7a1f8e247aaeab3bd4f096eb9fda11cfc8e6b6fb574bbc5696f608958c491a27e9682c89204412f73fb430e5fcbe9ebac languageName: node linkType: hard @@ -38879,23 +38531,23 @@ __metadata: linkType: hard "webpack-dev-middleware@npm:^5.3.1": - version: 5.3.3 - resolution: "webpack-dev-middleware@npm:5.3.3" + version: 5.3.1 + resolution: "webpack-dev-middleware@npm:5.3.1" dependencies: colorette: ^2.0.10 - memfs: ^3.4.3 + memfs: ^3.4.1 mime-types: ^2.1.31 range-parser: ^1.2.1 schema-utils: ^4.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 + checksum: 32e36b5893dde4107e5bb758afdc7fc61fd238a62635cb2964ed6b61e363793275a40870479daeae3fa3b87678c1311f44ba7492f6ebf30fe9360f2aab30bae1 languageName: node linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.13.1 - resolution: "webpack-dev-server@npm:4.13.1" + version: 4.11.1 + resolution: "webpack-dev-server@npm:4.11.1" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -38916,7 +38568,6 @@ __metadata: html-entities: ^2.3.2 http-proxy-middleware: ^2.0.3 ipaddr.js: ^2.0.1 - launch-editor: ^2.6.0 open: ^8.0.9 p-retry: ^4.5.0 rimraf: ^3.0.2 @@ -38926,17 +38577,15 @@ __metadata: sockjs: ^0.3.24 spdy: ^4.0.2 webpack-dev-middleware: ^5.3.1 - ws: ^8.13.0 + ws: ^8.4.2 peerDependencies: webpack: ^4.37.0 || ^5.0.0 peerDependenciesMeta: - webpack: - optional: true webpack-cli: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: f70611544b7d964a31eb3d934d7c2b376b97e6927a89e03b2e21cfa5812bb639625cd18fd350de1604ba6c455b324135523a894032f28c69d90d90682e4f3b7d + checksum: b7601a39ee0f413988259e29a36835b0a68522cfaa161de5b7ec99b3399acdd99d44189add4aaf4a5191258bb130f9cf3e68919324a1955c7557f5fe6ab0d96c languageName: node linkType: hard @@ -38964,7 +38613,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.1.0, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.70.0": version: 5.76.2 resolution: "webpack@npm:5.76.2" dependencies: @@ -39037,7 +38686,7 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:^3.4.1": +"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.4.1": version: 3.6.2 resolution: "whatwg-fetch@npm:3.6.2" checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed @@ -39174,7 +38823,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": +"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: @@ -39286,18 +38935,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" - dependencies: - imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - "write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" @@ -39308,18 +38945,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.12.1": - version: 8.12.1 - resolution: "ws@npm:8.12.1" +"ws@npm:8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" + utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 97301c1c4d838fc81bd413f370f75c12aabe44527b31323b761eab3043a9ecb7e32ffd668548382c9a6a5ad3a1c3a9249608e8338e6b939f2f9540f1e21970b5 + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 languageName: node linkType: hard @@ -39353,9 +38990,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" +"ws@npm:^8.11.0, ws@npm:^8.4.2, ws@npm:^8.8.0": + version: 8.12.0 + resolution: "ws@npm:8.12.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -39364,7 +39001,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 languageName: node linkType: hard @@ -39375,13 +39012,6 @@ __metadata: languageName: node linkType: hard -"xdg-basedir@npm:^4.0.0": - version: 4.0.0 - resolution: "xdg-basedir@npm:4.0.0" - checksum: 0073d5b59a37224ed3a5ac0dd2ec1d36f09c49f0afd769008a6e9cd3cd666bd6317bd1c7ce2eab47e1de285a286bad11a9b038196413cd753b79770361855f3c - languageName: node - linkType: hard - "xml-but-prettier@npm:^1.0.1": version: 1.0.1 resolution: "xml-but-prettier@npm:1.0.1" @@ -39392,12 +39022,12 @@ __metadata: linkType: hard "xml-crypto@npm:^2.1.3": - version: 2.1.5 - resolution: "xml-crypto@npm:2.1.5" + version: 2.1.3 + resolution: "xml-crypto@npm:2.1.3" dependencies: - "@xmldom/xmldom": ^0.7.9 + "@xmldom/xmldom": ^0.7.0 xpath: 0.0.32 - checksum: 387ed6aa812f9ea7fb33385bd3e934042152ee9a97870f28ebfa5c7931eee23a7a2d36ca35916fbe5eadd65163ce9483db661cf3f569c9177773e8efa1acfa37 + checksum: 04273568b4ed3d1422b7e93ae7c5e8e14180e9d377038a5767ef6af4d1da2ec766f3a476f4cf0140ecedb93036dac63e563f60d9bb249c5a344d77c93c07ff87 languageName: node linkType: hard @@ -39582,7 +39212,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.0.0": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c @@ -39633,18 +39263,18 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.7.1": - version: 17.7.1 - resolution: "yargs@npm:17.7.1" +"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1": + version: 17.5.1 + resolution: "yargs@npm:17.5.1" dependencies: - cliui: ^8.0.1 + cliui: ^7.0.2 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.3 y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 + yargs-parser: ^21.0.0 + checksum: 00d58a2c052937fa044834313f07910fd0a115dec5ee35919e857eeee3736b21a4eafa8264535800ba8bac312991ce785ecb8a51f4d2cc8c4676d865af1cfbde languageName: node linkType: hard @@ -39790,10 +39420,10 @@ __metadata: linkType: hard "z-schema@npm:~5.0.2": - version: 5.0.5 - resolution: "z-schema@npm:5.0.5" + version: 5.0.2 + resolution: "z-schema@npm:5.0.2" dependencies: - commander: ^9.4.1 + commander: ^2.7.1 lodash.get: ^4.4.2 lodash.isequal: ^4.5.0 validator: ^13.7.0 @@ -39802,7 +39432,7 @@ __metadata: optional: true bin: z-schema: bin/z-schema - checksum: 8a1d66817ae4384dc3f63311f0cccaadd95cc9640eaade5fd3fbf91aa80d6bb82fb95d9b9171fa82ac371a0155b32b7f5f77bbe84dabaca611b66f74c628f0b8 + checksum: 084b2f16043ac0a892914ee29cc0b4fafd9338133eec0345cd6ced25e814f647fa67be1090ad5f606759c2c1f2f8c28127960ba187f437f1caf6fb8cd45d7336 languageName: node linkType: hard @@ -39876,8 +39506,8 @@ __metadata: linkType: hard "zwitch@npm:^2.0.0": - version: 2.0.4 - resolution: "zwitch@npm:2.0.4" - checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 + version: 2.0.2 + resolution: "zwitch@npm:2.0.2" + checksum: 8edd7af8375f12f64d8dbef815af32cd77bd9237d0b013210ba4e3aef25fdc460fe264cd0a19deabe9f86ef0c607240ebac1a336bf4a70bf06ef53e0652de116 languageName: node linkType: hard From 73771660a9246e7abc1207a57942e027964d677b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:04:10 +0000 Subject: [PATCH 341/511] fix(deps): update dependency sucrase to v3.30.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79842e27e7..13641a135b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36431,8 +36431,8 @@ __metadata: linkType: hard "sucrase@npm:^3.20.2": - version: 3.29.0 - resolution: "sucrase@npm:3.29.0" + version: 3.30.0 + resolution: "sucrase@npm:3.30.0" dependencies: commander: ^4.0.0 glob: 7.1.6 @@ -36443,7 +36443,7 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: fc8f04c34f29c0e9ca63109815df138182d62663dbe9565fcd94161b77a88a639f40c46559d0bb84d7acf9346ce23ea102476fd9168ec279330c7faecefb81eb + checksum: 9d53ee132f8063573c9f336c2dbc00a1f91fb976a4ad4dca29a15a898d361e6d4a06ada086c6881fe63389d96392cbd761d790a8175a6ecb184eaa337d58f363 languageName: node linkType: hard From 133459bd941b34297d22944ad8c6cee6d41aca73 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:04:51 +0000 Subject: [PATCH 342/511] fix(deps): update dependency swagger-ui-react to v4.18.1 Signed-off-by: Renovate Bot --- yarn.lock | 638 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 597 insertions(+), 41 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79842e27e7..664468f705 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3352,13 +3352,13 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/runtime-corejs3@npm:7.18.9" +"@babel/runtime-corejs3@npm:^7.18.9, @babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7": + version: 7.21.0 + resolution: "@babel/runtime-corejs3@npm:7.21.0" dependencies: - core-js-pure: ^3.20.2 - regenerator-runtime: ^0.13.4 - checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d + core-js-pure: ^3.25.1 + regenerator-runtime: ^0.13.11 + checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d languageName: node linkType: hard @@ -8863,10 +8863,10 @@ __metadata: languageName: node linkType: hard -"@braintree/sanitize-url@npm:=6.0.0": - version: 6.0.0 - resolution: "@braintree/sanitize-url@npm:6.0.0" - checksum: 409ce7709dc1a0c67bc887d20af1becd4145d5c62cc5124b1c4c1f3ea2a8d69b0ee9f582d446469c6f5294b56442b99048cbbba6861dd5c834d4e019b95e1f40 +"@braintree/sanitize-url@npm:=6.0.2": + version: 6.0.2 + resolution: "@braintree/sanitize-url@npm:6.0.2" + checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a languageName: node linkType: hard @@ -13627,6 +13627,371 @@ __metadata: languageName: node linkType: hard +"@swagger-api/apidom-ast@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ast@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + unraw: =2.0.1 + checksum: 59625e7f3543766d901227d9afec0ebce0cc1368cc63d22ad5f348a9da0b3777ea83acce7eb0eecdbe6210022f3bf0fafdb46d59b0e90d630ad55c428ede14a2 + languageName: node + linkType: hard + +"@swagger-api/apidom-core@npm:=0.69.0, @swagger-api/apidom-core@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-core@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@types/ramda": =0.28.23 + minim: =0.23.8 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + short-unique-id: =4.4.4 + stampit: =4.3.2 + checksum: 036dc1198014fff9d7e879529186c4b0db423ae4c933eecec90650985e198cb3745638feff8681f85940f124703484d1b071dfca4eaf7b9457a4f99186c98972 + languageName: node + linkType: hard + +"@swagger-api/apidom-json-pointer@npm:=0.69.0, @swagger-api/apidom-json-pointer@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-json-pointer@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 7930d938011c608d5c227c3b1cbfcb120eeebd32aedd447220219b079d030af6387a9a61e74461fe53578c06ba29aa78e5e5fdfcd561d5611d5a07ef5534ee49 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-api-design-systems@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: 1c3047d4081cd07bbbdce6fa19c62407d1c57f7bf05b85947fd1e9b3cc2c2792fb85a926a54d3376c761a123ce3b130b06e38830ca68743a20c684aae89275f1 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: c5b9161166ddce0be047a474e7257520a756ed3fe426b806c19122334535d07b48529be60638dd560ab6ff23899641cee1110932cad16b4bf93f8fbe8f52ca05 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: d308227f5849071be3481bd8d4a8dc16d0e9e99edb61250927da88ed34595d176d59792003a2a666a49585643ff659a16774826790aab718a316beda9ce617c3 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: df237753d0c9aa7d22029c22b5355310a14aa7a77aa484cc86d46850bd994db3f0901804510a6c62196e181c150e15fc7a031b97f0f45983b6f819fb7ed71ccb + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: a2059092cfb1797c90b15384270df65fadd6d1e8b469350082ab46d25a1840fd05ff0bea72a8005068f77ab277a049110962a15f1fbeeac63b9c0a34d21d78c2 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: e53bda9fada416e23a5220dd8987b3e4082b3020e3db40c5532fdd454aaa02953d4d72223fd0372897b0a6a73b321f89e83504d60bb8b52fa4fbcdfb5f097e59 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-1@npm:=0.69.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + checksum: 7f194ebb36891655fdcd8dfe88e664e70f6efcd713ac6defc75dadefb0087d3fd0358b656dec4920d876342d23c44ff1cee034fa32cfa1f8b3d49ceba9509dbb + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 68b43e19effd7b9c26e52381903a39fff7ef0990ad3cbcbf4aa7de01cf3454d915dc10d8f688aa0fa4405b11f1a6d8f49bc160e6b72c482fadb484bd787bdebd + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 6ded590b93087ad4b848ba4f742c6baeb35a572195d763a1ae0b479b8de4ae7d331175d5042116dab26684413ca6a58680080fb4b28ca5c66c7d72d6e624e174 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: c13b4ea5a603d7422ebf4dd87851a72a999c0036ff451b080cd37b96aa1b455f6483c447e4962303af52b44ac0fca3517573dfeeddbdb7f8d04cb7ff8796089f + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: f3415e86371f98e3677d22f432214f4b4e2267b80da2f505ed28d89c711fa32a627cea94040c6071e83d2ea3cf6aabc454331951d2fd3bcc138b091e78286423 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-json@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + node-gyp: latest + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + tree-sitter: =0.20.1 + tree-sitter-json: =0.20.0 + web-tree-sitter: =0.20.7 + checksum: e640ffbf749285f70ea4d125cbb030ff9920b011e8694e3cd5c379b3a6f3f387805c9535af7786c2bed6f0f67bfd9f6daad6eb65a64ca76b48b45f283933f4d5 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 50c61b46d16ed2a24816665ee810c295f6e82cad8a031ebc91d91aa3650bae92ddcede99ceea4346dcb69ca6edd811213018ebe8b23929012c08b425103a807d + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: 9c657b1eb82814958ed2b2c4e710a51378cbb11ca6957d0cc57ec544e0cba4a3bac412475f923e47c1fff8130f5a42cf8edcd99080703316150de8f1b30891b8 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: ee32fc65e053ccda7eae265ad1a43e5acd0688460620912363156ada3babf3115fbec0dd35423ca633aaf78e9e4ed71ee4be030385cfdcc9ed69e8438319cc19 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + checksum: c21f6ad4b149f64bb5af24d7d7ba5bd8342c2ab2e0e37d85617ca0d4d3333ee45a4603ce7cdca460d4dcb17c6d41b47f733390d3ef6754664ae11705a628fe9c + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-ast": ^0.69.0 + "@swagger-api/apidom-core": ^0.69.0 + "@types/ramda": =0.28.23 + node-gyp: latest + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + tree-sitter: =0.20.1 + tree-sitter-yaml: =0.5.0 + web-tree-sitter: =0.20.7 + checksum: 6067347f6ab9d2cfbbe55f13345609c86b1660bebb7cea215c90739eab011498695d785bc7bb75fc95055ea98bafc765bbc0d304ad19f72647b72ee4308d249e + languageName: node + linkType: hard + +"@swagger-api/apidom-reference@npm:=0.69.0": + version: 0.69.0 + resolution: "@swagger-api/apidom-reference@npm:0.69.0" + dependencies: + "@babel/runtime-corejs3": ^7.20.7 + "@swagger-api/apidom-core": ^0.69.0 + "@swagger-api/apidom-json-pointer": ^0.69.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.69.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.69.0 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.69.0 + "@swagger-api/apidom-parser-adapter-json": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.69.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.69.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.0 + "@types/ramda": =0.28.23 + axios: =1.3.4 + minimatch: =7.3.0 + process: =0.11.10 + ramda: =0.28.0 + ramda-adjunct: =3.4.0 + stampit: =4.3.2 + dependenciesMeta: + "@swagger-api/apidom-json-pointer": + optional: true + "@swagger-api/apidom-ns-asyncapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-3-0": + optional: true + "@swagger-api/apidom-ns-openapi-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-json": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-json": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-yaml-1-2": + optional: true + checksum: f176e51e64377c09449e9f5bf50438be7a05fa63d4ff2f9ec5c45cf0722439537aafbe4804e2197661a652cec013c1aaa78f6a2a7ac4f6d63083aa07875c8671 + languageName: node + linkType: hard + "@swc/core-darwin-arm64@npm:1.3.41": version: 1.3.41 resolution: "@swc/core-darwin-arm64@npm:1.3.41" @@ -14631,7 +14996,7 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.0": +"@types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" dependencies: @@ -15286,6 +15651,15 @@ __metadata: languageName: node linkType: hard +"@types/ramda@npm:=0.28.23": + version: 0.28.23 + resolution: "@types/ramda@npm:0.28.23" + dependencies: + ts-toolbelt: ^6.15.1 + checksum: 61d7416c0f4f189c6524e093c7546ca2f159553e54d7933836d46aac1332611aa7b02fd8c8bfa98c0865f262fd9e99e06e3d9538deba0bab1f6153cbcf841160 + languageName: node + linkType: hard + "@types/range-parser@npm:*": version: 1.2.3 resolution: "@types/range-parser@npm:1.2.3" @@ -15775,6 +16149,13 @@ __metadata: languageName: node linkType: hard +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + "@types/uuid@npm:^8.0.0": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -17248,6 +17629,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:=1.3.4": + version: 1.3.4 + resolution: "axios@npm:1.3.4" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c + languageName: node + linkType: hard + "axios@npm:^0.21.1": version: 0.21.4 resolution: "axios@npm:0.21.4" @@ -19459,10 +19851,10 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.6.5": - version: 3.25.5 - resolution: "core-js-pure@npm:3.25.5" - checksum: e48799a8ab28f00ef3db18377142ff2c578574ab2b18ebddde6cbf12823e0181a57c80e3caa6046ce2a2e439d603a252be767583ddc54248e3d1060bc5012127 +"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5": + version: 3.29.1 + resolution: "core-js-pure@npm:3.29.1" + checksum: 2ed91f79c13f23c1b70c31edf4224aca99a9ac3db38c79127798c294a36faac0ea0b21070218621741057cf84b3dadff595475580c1fac3a43e02cae575dc27b languageName: node linkType: hard @@ -20514,10 +20906,10 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2, deepmerge@npm:~4.2.2": - version: 4.2.2 - resolution: "deepmerge@npm:4.2.2" - checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b +"deepmerge@npm:^4.2.2, deepmerge@npm:~4.3.0": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard @@ -23276,7 +23668,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -28367,7 +28759,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -29541,6 +29933,15 @@ __metadata: languageName: node linkType: hard +"minim@npm:=0.23.8": + version: 0.23.8 + resolution: "minim@npm:0.23.8" + dependencies: + lodash: ^4.15.0 + checksum: 98e19a431189cee4dfad766e19948fb65b3607780bda2dc3f76b7bb35f9a468f372fb1b4c4b2ebfe348191e09f2b981579967b29cf02038798efe4eab326ffca + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -29573,6 +29974,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:=7.3.0": + version: 7.3.0 + resolution: "minimatch@npm:7.3.0" + dependencies: + brace-expansion: ^2.0.1 + checksum: c4d9af992958339d5fc593c9ce496f4b9615597e57cdd663e57bd3a745ebd208c2bba19c3290c25ed8dcf259586fa1f68e4e1acf304f8694927b84c5381167d0 + languageName: node + linkType: hard + "minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": version: 5.1.2 resolution: "minimatch@npm:5.1.2" @@ -29954,7 +30364,7 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.17.0": +"nan@npm:^2.14.0, nan@npm:^2.14.1, nan@npm:^2.15.0, nan@npm:^2.17.0": version: 2.17.0 resolution: "nan@npm:2.17.0" dependencies: @@ -30078,6 +30488,15 @@ __metadata: languageName: node linkType: hard +"node-abi@npm:^2.21.0": + version: 2.30.1 + resolution: "node-abi@npm:2.30.1" + dependencies: + semver: ^5.4.1 + checksum: 3f4b0c912ce4befcd7ceab4493ba90b51d60dfcc90f567c93f731d897ef8691add601cb64c181683b800f21d479d68f9a6e15d8ab8acd16a5706333b9e30a881 + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": version: 3.8.0 resolution: "node-abi@npm:3.8.0" @@ -30517,7 +30936,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.1.2": +"npmlog@npm:^4.0.1, npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -32446,6 +32865,29 @@ __metadata: languageName: node linkType: hard +"prebuild-install@npm:^6.0.1": + version: 6.1.4 + resolution: "prebuild-install@npm:6.1.4" + dependencies: + detect-libc: ^1.0.3 + expand-template: ^2.0.3 + github-from-package: 0.0.0 + minimist: ^1.2.3 + mkdirp-classic: ^0.5.3 + napi-build-utils: ^1.0.1 + node-abi: ^2.21.0 + npmlog: ^4.0.1 + pump: ^3.0.0 + rc: ^1.2.7 + simple-get: ^3.0.3 + tar-fs: ^2.0.0 + tunnel-agent: ^0.6.0 + bin: + prebuild-install: bin.js + checksum: de4313eda821305912af922700a2db04bb8e77fe8aa9c2788550f1000c026cbefc82da468ec0c0a37764c5417bd8169dbd540928535fb38d00bb9bbd673dd217 + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.0, prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -32591,7 +33033,7 @@ __metadata: languageName: node linkType: hard -"process@npm:^0.11.10": +"process@npm:=0.11.10, process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -32814,7 +33256,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.1.0": +"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -33010,7 +33452,16 @@ __metadata: languageName: node linkType: hard -"ramda@npm:^0.28.0": +"ramda-adjunct@npm:=3.4.0": + version: 3.4.0 + resolution: "ramda-adjunct@npm:3.4.0" + peerDependencies: + ramda: ">= 0.28.0 <= 0.28.0" + checksum: 05d4daa44a28879dafc75adba6d0b660f8fc0280c03ad62c51ba779d93b11fdaa28a039b28f7ea4a8ca42fdb0a2a750b793fa073125bcc74799630e58cd4770f + languageName: node + linkType: hard + +"ramda@npm:=0.28.0, ramda@npm:^0.28.0": version: 0.28.0 resolution: "ramda@npm:0.28.0" checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 @@ -33399,7 +33850,7 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.1.1, react-redux@npm:^7.2.4": +"react-redux@npm:^7.1.1": version: 7.2.5 resolution: "react-redux@npm:7.2.5" dependencies: @@ -33420,6 +33871,38 @@ __metadata: languageName: node linkType: hard +"react-redux@npm:^8.0.5": + version: 8.0.5 + resolution: "react-redux@npm:8.0.5" + dependencies: + "@babel/runtime": ^7.12.1 + "@types/hoist-non-react-statics": ^3.3.1 + "@types/use-sync-external-store": ^0.0.3 + hoist-non-react-statics: ^3.3.2 + react-is: ^18.0.0 + use-sync-external-store: ^1.0.0 + peerDependencies: + "@types/react": ^16.8 || ^17.0 || ^18.0 + "@types/react-dom": ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: ">=0.59" + redux: ^4 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + checksum: a108f4f7ead6ac005e656d46051474a2bbdb31ede481bbbb3d8d779c1a35e1940b8655577cc5021313411864d305f67fc719aa48d6e5ed8288cf9cbe8b7042e4 + languageName: node + linkType: hard + "react-refresh@npm:^0.14.0": version: 0.14.0 resolution: "react-refresh@npm:0.14.0" @@ -34030,7 +34513,7 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.4": +"regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 @@ -35322,6 +35805,16 @@ __metadata: languageName: node linkType: hard +"short-unique-id@npm:=4.4.4": + version: 4.4.4 + resolution: "short-unique-id@npm:4.4.4" + bin: + short-unique-id: bin/short-unique-id + suid: bin/short-unique-id + checksum: 3507f2e97326e49180dd4edbf41dd762a76c591df3fd5b7c1e7592bfb0c2f5724d63e626cc6f581c717d3111374811ca1d77a728ac07b0b9041b2355700124d4 + languageName: node + linkType: hard + "shx@npm:^0.3.2": version: 0.3.4 resolution: "shx@npm:0.3.4" @@ -35924,6 +36417,13 @@ __metadata: languageName: node linkType: hard +"stampit@npm:=4.3.2": + version: 4.3.2 + resolution: "stampit@npm:4.3.2" + checksum: 731dfe564b98371293bb5e7cb76bb195336dd3589af4e448d1478ac6c99091fd302fd7f41a255daa4b0ec2c1f14ea4f0cc0a2f05cd3d786b29ba531850ad7f62 + languageName: node + linkType: hard + "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -36541,14 +37041,18 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.18.5": - version: 3.18.5 - resolution: "swagger-client@npm:3.18.5" +"swagger-client@npm:^3.19.1": + version: 3.19.2 + resolution: "swagger-client@npm:3.19.2" dependencies: - "@babel/runtime-corejs3": ^7.11.2 + "@babel/runtime-corejs3": ^7.20.13 + "@swagger-api/apidom-core": =0.69.0 + "@swagger-api/apidom-json-pointer": =0.69.0 + "@swagger-api/apidom-ns-openapi-3-1": =0.69.0 + "@swagger-api/apidom-reference": =0.69.0 cookie: ~0.5.0 cross-fetch: ^3.1.5 - deepmerge: ~4.2.2 + deepmerge: ~4.3.0 fast-json-patch: ^3.0.0-1 form-data-encoder: ^1.4.3 formdata-node: ^4.0.0 @@ -36558,16 +37062,16 @@ __metadata: qs: ^6.10.2 traverse: ~0.6.6 url: ~0.11.0 - checksum: 804260814abffbb97266b23be20ef8503cf21143684fb81f134ce4f7e0287e6b47b403f0fc0d9e2121bedb1309af6d50f76701ee4bf3390365558d82f4b40786 + checksum: 9613387191b6e72afbe1e551d70646b7c74a136160d2a69ac3220cf23007175c500d3035b0c9ebf1ef0b49769a65d54cf343eb3b0c0d260c5797338776c872ba languageName: node linkType: hard "swagger-ui-react@npm:^4.11.1": - version: 4.15.5 - resolution: "swagger-ui-react@npm:4.15.5" + version: 4.18.1 + resolution: "swagger-ui-react@npm:4.18.1" dependencies: "@babel/runtime-corejs3": ^7.18.9 - "@braintree/sanitize-url": =6.0.0 + "@braintree/sanitize-url": =6.0.2 base64-js: ^1.5.1 classnames: ^2.3.1 css.escape: 1.5.1 @@ -36587,7 +37091,7 @@ __metadata: react-immutable-proptypes: 2.2.0 react-immutable-pure-component: ^2.2.0 react-inspector: ^6.0.1 - react-redux: ^7.2.4 + react-redux: ^8.0.5 react-syntax-highlighter: ^15.5.0 redux: ^4.1.2 redux-immutable: ^4.0.0 @@ -36595,7 +37099,7 @@ __metadata: reselect: ^4.1.5 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.18.5 + swagger-client: ^3.19.1 url-parse: ^1.5.8 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -36603,7 +37107,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 22a72947da865ebfa9269f66b42c2b50105b6285bcb6546f8f356cf73961f76e397b7d79003641c9569bfb2163ea98e2f3f73a27b5b66843d308786c37362e1c + checksum: 183e15d7ccab2ef9197b3695029b66fe1e0556c48bab10f63150feabc304492ae87529a1f1b3e0ee689d19f8b3645a168dff0f3edf421737ac7e8a2d320d26c4 languageName: node linkType: hard @@ -37199,6 +37703,37 @@ __metadata: languageName: node linkType: hard +"tree-sitter-json@npm:=0.20.0": + version: 0.20.0 + resolution: "tree-sitter-json@npm:0.20.0" + dependencies: + nan: ^2.14.1 + node-gyp: latest + checksum: 820e27b644e3ec62d8753976572660fbc314b0ffb10178384ae0d187187797c3d87223bec6b034e602445e4095484a28fb89ca67653a1d4f41fa13dd6adad0d2 + languageName: node + linkType: hard + +"tree-sitter-yaml@npm:=0.5.0": + version: 0.5.0 + resolution: "tree-sitter-yaml@npm:0.5.0" + dependencies: + nan: ^2.14.0 + node-gyp: latest + checksum: 7962aea3784dd67098daff4ae984145189eb49b8f981f5a9e72bac97b77859a75030580d199712d671cdced5326599192b3549a428e162e9858a3bbb4cb2fff6 + languageName: node + linkType: hard + +"tree-sitter@npm:=0.20.1": + version: 0.20.1 + resolution: "tree-sitter@npm:0.20.1" + dependencies: + nan: ^2.14.0 + node-gyp: latest + prebuild-install: ^6.0.1 + checksum: a33bf01f9dc558aa0075c9634d06743ed9b7fbf273d2acfbe96daf83f48aec46be7dc42d80d2423c36593d36d3bf189d3fa023d6ce389e20ff9527fae118b215 + languageName: node + linkType: hard + "treeverse@npm:^1.0.4": version: 1.0.4 resolution: "treeverse@npm:1.0.4" @@ -37312,6 +37847,13 @@ __metadata: languageName: node linkType: hard +"ts-toolbelt@npm:^6.15.1": + version: 6.15.5 + resolution: "ts-toolbelt@npm:6.15.5" + checksum: 24ad00cfd9ce735c76c873a9b1347eac475b94e39ebbdf100c9019dce88dd5f4babed52884cf82bb456a38c28edd0099ab6f704b84b2e5e034852b618472c1f3 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -37867,6 +38409,13 @@ __metadata: languageName: node linkType: hard +"unraw@npm:=2.0.1": + version: 2.0.1 + resolution: "unraw@npm:2.0.1" + checksum: af9a9d2f6e420cb4f52fe2f1f5982e6b0be95da640d6ae8d6d9ff631d864771793cb9fe7e2a16ef1ce631b94065f4438e7bd7f1701076fc69296edc4e704d42f + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -38004,7 +38553,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.2.0": +"use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: @@ -38474,6 +39023,13 @@ __metadata: languageName: node linkType: hard +"web-tree-sitter@npm:=0.20.7": + version: 0.20.7 + resolution: "web-tree-sitter@npm:0.20.7" + checksum: f2949a679bbca5ecb225ab26a67ff99e6e3907fa905c6bd62bfe6d2cfa216347f8cc481efcd32f181cb6b964bc03c42f9611e16da0825bff43de389b17ff9f7f + languageName: node + linkType: hard + "webcrypto-core@npm:^1.7.4": version: 1.7.5 resolution: "webcrypto-core@npm:1.7.5" From 7d51e8cb0ada97a4b03f284a19529dd8bf7d9541 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Fri, 17 Mar 2023 15:25:57 -0400 Subject: [PATCH 343/511] Move `CategoryPicker` to scaffolder-react Signed-off-by: Min Kim --- plugins/scaffolder-react/alpha-api-report.md | 3 +++ .../TemplateCategoryPicker.test.tsx} | 16 ++++++++-------- .../TemplateCategoryPicker.tsx} | 4 +++- .../components/TemplateCategoryPicker/index.ts | 16 ++++++++++++++++ .../src/next/components/index.ts | 1 + .../next/TemplateListPage/TemplateListPage.tsx | 5 +++-- 6 files changed, 34 insertions(+), 11 deletions(-) rename plugins/{scaffolder/src/next/TemplateListPage/CategoryPicker.test.tsx => scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.test.tsx} (93%) rename plugins/{scaffolder/src/next/TemplateListPage/CategoryPicker.tsx => scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx} (97%) create mode 100644 plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/index.ts diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index 35029cb796..8d3b593816 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -190,6 +190,9 @@ export interface TemplateCardProps { template: TemplateEntityV1beta3; } +// @alpha +export const TemplateCategoryPicker: () => JSX.Element | null; + // @alpha export const TemplateGroup: (props: TemplateGroupProps) => JSX.Element; diff --git a/plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.test.tsx b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.test.tsx similarity index 93% rename from plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.test.tsx rename to plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.test.tsx index f02ca51354..ce6e342809 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.test.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.test.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { useEntityTypeFilter } from '@backstage/plugin-catalog-react'; -import { CategoryPicker } from './CategoryPicker'; +import { TemplateCategoryPicker } from './TemplateCategoryPicker'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { alertApiRef } from '@backstage/core-plugin-api'; import { fireEvent } from '@testing-library/react'; @@ -25,7 +25,7 @@ jest.mock('@backstage/plugin-catalog-react', () => ({ useEntityTypeFilter: jest.fn(), })); -describe('CategoryPicker', () => { +describe('TemplateCategoryPicker', () => { const mockAlertApi = { post: jest.fn() }; beforeEach(() => { @@ -39,7 +39,7 @@ describe('CategoryPicker', () => { await renderInTestApp( - + , ); @@ -56,7 +56,7 @@ describe('CategoryPicker', () => { const { findByTestId } = await renderInTestApp( - + , ); @@ -70,7 +70,7 @@ describe('CategoryPicker', () => { const { queryByText } = await renderInTestApp( - + , ); @@ -86,7 +86,7 @@ describe('CategoryPicker', () => { const { getByRole } = await renderInTestApp( - + , ); @@ -108,7 +108,7 @@ describe('CategoryPicker', () => { const { getByRole } = await renderInTestApp( - + , ); @@ -139,7 +139,7 @@ describe('CategoryPicker', () => { const { getByRole } = await renderInTestApp( - + , ); diff --git a/plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.tsx b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx similarity index 97% rename from plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.tsx rename to plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx index 483751f2e2..5d7021bc8c 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/CategoryPicker.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx @@ -37,8 +37,10 @@ const checkedIcon = ; /** * The Category Picker that is rendered on the left side for picking * categories and filtering the template list. + * + * @alpha */ -export const CategoryPicker = () => { +export const TemplateCategoryPicker = () => { const alertApi = useApi(alertApiRef); const { error, loading, availableTypes, selectedTypes, setSelectedTypes } = useEntityTypeFilter(); diff --git a/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/index.ts b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/index.ts new file mode 100644 index 0000000000..cf41f3f7f9 --- /dev/null +++ b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export { TemplateCategoryPicker } from './TemplateCategoryPicker'; diff --git a/plugins/scaffolder-react/src/next/components/index.ts b/plugins/scaffolder-react/src/next/components/index.ts index 083d88927e..f63faa9e41 100644 --- a/plugins/scaffolder-react/src/next/components/index.ts +++ b/plugins/scaffolder-react/src/next/components/index.ts @@ -22,3 +22,4 @@ export * from './TemplateOutputs'; export * from './Form'; export * from './TaskSteps'; export * from './TaskLogStream'; +export * from './TemplateCategoryPicker'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 0af20db6c9..74d6e07c52 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -32,7 +32,8 @@ import { CatalogFilterLayout, UserListPicker, } from '@backstage/plugin-catalog-react'; -import { CategoryPicker } from './CategoryPicker'; +import { TemplateCategoryPicker } from '@backstage/plugin-scaffolder-react/alpha'; + import { RegisterExistingButton } from './RegisterExistingButton'; import { useRouteRef } from '@backstage/core-plugin-api'; import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; @@ -110,7 +111,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { initialFilter="all" availableFilters={['all', 'starred']} /> - + From 7b315f5917a9d8831b8774aa6e799821374595b3 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Mon, 20 Mar 2023 11:38:50 -0400 Subject: [PATCH 344/511] Move and rename `ContextMenu` to -react/`ScaffolderPageContextMenu` Signed-off-by: Min Kim --- .../ScaffolderPageContextMenu.tsx} | 39 +++++++------------ .../ScaffolderPageContextMenu/index.ts | 19 +++++++++ .../src/next/components/index.ts | 1 + .../TemplateListPage/TemplateListPage.tsx | 24 ++++++++++-- 4 files changed, 55 insertions(+), 28 deletions(-) rename plugins/{scaffolder/src/next/TemplateListPage/ContextMenu.tsx => scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx} (77%) create mode 100644 plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/index.ts diff --git a/plugins/scaffolder/src/next/TemplateListPage/ContextMenu.tsx b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx similarity index 77% rename from plugins/scaffolder/src/next/TemplateListPage/ContextMenu.tsx rename to plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx index c3c2abc39f..0194137521 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/ContextMenu.tsx +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { useRouteRef } from '@backstage/core-plugin-api'; +import { RouteFunc, AnyParams } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import IconButton from '@material-ui/core/IconButton'; import ListItemIcon from '@material-ui/core/ListItemIcon'; @@ -29,11 +29,6 @@ import List from '@material-ui/icons/List'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { - actionsRouteRef, - editRouteRef, - scaffolderListTaskRouteRef, -} from '../../routes'; const useStyles = makeStyles((theme: BackstageTheme) => ({ button: { @@ -42,25 +37,21 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ })); export type ScaffolderPageContextMenuProps = { - editor?: boolean; - actions?: boolean; - tasks?: boolean; + editor?: RouteFunc; + actions?: RouteFunc; + tasks?: RouteFunc; }; -export function ContextMenu(props: ScaffolderPageContextMenuProps) { +export function ScaffolderPageContextMenu( + props: ScaffolderPageContextMenuProps, +) { + const { editor, actions, tasks } = props; const classes = useStyles(); const [anchorEl, setAnchorEl] = useState(); - const editLink = useRouteRef(editRouteRef); - const actionsLink = useRouteRef(actionsRouteRef); - const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const navigate = useNavigate(); - const showEditor = props.editor !== false; - const showActions = props.actions !== false; - const showTasks = props.tasks !== false; - - if (!showEditor && !showActions) { + if (!editor && !actions) { return null; } @@ -93,24 +84,24 @@ export function ContextMenu(props: ScaffolderPageContextMenuProps) { transformOrigin={{ vertical: 'top', horizontal: 'right' }} > - {showEditor && ( - navigate(editLink())}> + {editor && ( + navigate(editor())}> )} - {showActions && ( - navigate(actionsLink())}> + {actions && ( + navigate(actions())}> )} - {showTasks && ( - navigate(tasksLink())}> + {tasks && ( + navigate(tasks())}> diff --git a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/index.ts b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/index.ts new file mode 100644 index 0000000000..ae6774a1e6 --- /dev/null +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/index.ts @@ -0,0 +1,19 @@ +/* + * 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. + */ +export { + ScaffolderPageContextMenu, + type ScaffolderPageContextMenuProps, +} from './ScaffolderPageContextMenu'; diff --git a/plugins/scaffolder-react/src/next/components/index.ts b/plugins/scaffolder-react/src/next/components/index.ts index f63faa9e41..a38b0689d5 100644 --- a/plugins/scaffolder-react/src/next/components/index.ts +++ b/plugins/scaffolder-react/src/next/components/index.ts @@ -23,3 +23,4 @@ export * from './Form'; export * from './TaskSteps'; export * from './TaskLogStream'; export * from './TemplateCategoryPicker'; +export * from './ScaffolderPageContextMenu'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 74d6e07c52..dc5d75d034 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -32,13 +32,20 @@ import { CatalogFilterLayout, UserListPicker, } from '@backstage/plugin-catalog-react'; -import { TemplateCategoryPicker } from '@backstage/plugin-scaffolder-react/alpha'; +import { + ScaffolderPageContextMenu, + TemplateCategoryPicker, +} from '@backstage/plugin-scaffolder-react/alpha'; import { RegisterExistingButton } from './RegisterExistingButton'; import { useRouteRef } from '@backstage/core-plugin-api'; import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; -import { registerComponentRouteRef } from '../../routes'; -import { ContextMenu } from './ContextMenu'; +import { + actionsRouteRef, + editRouteRef, + registerComponentRouteRef, + scaffolderListTaskRouteRef, +} from '../../routes'; export type TemplateListPageProps = { TemplateCardComponent?: React.ComponentType<{ @@ -75,11 +82,20 @@ export const TemplateListPage = (props: TemplateListPageProps) => { groups: givenGroups = [], templateFilter, } = props; + const editorLink = useRouteRef(editRouteRef); + const actionsLink = useRouteRef(actionsRouteRef); + const tasksLink = useRouteRef(scaffolderListTaskRouteRef); const groups = givenGroups.length ? createGroupsWithOther(givenGroups) : [defaultGroup]; + const scaffolderPageContextMenuProps = { + editor: props?.contextMenu?.editor !== false ? editorLink : undefined, + actions: props?.contextMenu?.actions !== false ? actionsLink : undefined, + tasks: props?.contextMenu?.tasks !== false ? tasksLink : undefined, + }; + return ( @@ -88,7 +104,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { title="Create a new component" subtitle="Create new software components using standard templates in your organization" > - + From 0606d5bf783ee869a25883346ce079970d584193 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Mon, 20 Mar 2023 13:15:15 -0400 Subject: [PATCH 345/511] Add router tests for the new scaffolder context menu Signed-off-by: Min Kim --- .../TemplateListPage.test.tsx | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx index d5a76d2a47..ee36d876cf 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.test.tsx @@ -135,4 +135,54 @@ describe('TemplateListPage', () => { expect(getByText('Tags')).toBeInTheDocument(); }); + + describe('scaffolder page context menu', () => { + it('should render if context menu props are not set to false', async () => { + const { queryByTestId } = await renderInTestApp( + + + , + { mountedRoutes: { '/': rootRouteRef } }, + ); + expect(queryByTestId('menu-button')).toBeInTheDocument(); + }); + + it('should not render if context menu props are set to false', async () => { + const { queryByTestId } = await renderInTestApp( + + + , + { mountedRoutes: { '/': rootRouteRef } }, + ); + expect(queryByTestId('menu-button')).not.toBeInTheDocument(); + }); + }); }); From 259d3407b9b44b273a9e47e535ea6b3a94280f4c Mon Sep 17 00:00:00 2001 From: Min Kim Date: Mon, 20 Mar 2023 13:24:11 -0400 Subject: [PATCH 346/511] Add changesets and update api report Signed-off-by: Min Kim --- .changeset/thick-forks-prove.md | 7 +++++++ plugins/scaffolder-react/alpha-api-report.md | 14 ++++++++++++++ .../ScaffolderPageContextMenu.tsx | 6 ++++++ 3 files changed, 27 insertions(+) create mode 100644 .changeset/thick-forks-prove.md diff --git a/.changeset/thick-forks-prove.md b/.changeset/thick-forks-prove.md new file mode 100644 index 0000000000..5025852e79 --- /dev/null +++ b/.changeset/thick-forks-prove.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-react': minor +'@backstage/plugin-scaffolder': minor +--- + +Move `CategoryPicker` from `scaffolder` into `scaffolder-react` +Move `ContextMenu` into `scaffolder-react` and rename it to `ScaffolderPageContextMenu` diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index 8d3b593816..6eeb80d927 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -5,6 +5,7 @@ ```ts /// +import { AnyParams } from '@backstage/core-plugin-api'; import { ApiHolder } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { CustomFieldExtensionSchema } from '@backstage/plugin-scaffolder-react'; @@ -22,6 +23,7 @@ import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; import { RJSFSchema } from '@rjsf/utils'; +import { RouteFunc } from '@backstage/core-plugin-api'; import { ScaffolderStep } from '@backstage/plugin-scaffolder-react'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; import { SetStateAction } from 'react'; @@ -132,6 +134,18 @@ export type ReviewStateProps = { formState: JsonObject; }; +// @alpha (undocumented) +export function ScaffolderPageContextMenu( + props: ScaffolderPageContextMenuProps, +): JSX.Element | null; + +// @alpha (undocumented) +export type ScaffolderPageContextMenuProps = { + editor?: RouteFunc; + actions?: RouteFunc; + tasks?: RouteFunc; +}; + // @alpha export const Stepper: (stepperProps: StepperProps) => JSX.Element; diff --git a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx index 0194137521..0e5bc3b6a9 100644 --- a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx @@ -36,12 +36,18 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ }, })); +/** + * @alpha + */ export type ScaffolderPageContextMenuProps = { editor?: RouteFunc; actions?: RouteFunc; tasks?: RouteFunc; }; +/** + * @alpha + */ export function ScaffolderPageContextMenu( props: ScaffolderPageContextMenuProps, ) { From c1db0317f6218bb845986c45c2f333d001070ede Mon Sep 17 00:00:00 2001 From: Claire Casey Date: Mon, 20 Mar 2023 10:45:24 -0700 Subject: [PATCH 347/511] specify zod version in workspace install command Signed-off-by: Claire Casey --- .../plugin-authors/03-adding-a-resource-permission-check.md | 2 +- plugins/example-todo-list-backend/package.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index d405c2ac4f..103e463cda 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -91,7 +91,7 @@ This enables decisions based on characteristics of the resource, but it's import Install the missing module: ```bash -$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node +$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod@~3.18.0 ``` Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code: diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 11c7b849e1..5579f748b2 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -34,8 +34,7 @@ "express-promise-router": "^4.1.0", "uuid": "^8.3.2", "winston": "^3.2.1", - "yn": "^4.0.0", - "zod": "~3.18.0" + "yn": "^4.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^", From 2cfd03d7376a528e3574e2203f2f1f71ea47f202 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Mon, 20 Mar 2023 14:39:20 -0400 Subject: [PATCH 348/511] Update `ScaffolderPageContextMenu` props to take callbacks Signed-off-by: Min Kim --- .changeset/thin-spoons-prove.md | 5 ++++ plugins/scaffolder-react/alpha-api-report.md | 8 +++--- .../ScaffolderPageContextMenu.tsx | 26 ++++++++----------- .../TemplateListPage/TemplateListPage.tsx | 19 +++++++++++--- 4 files changed, 34 insertions(+), 24 deletions(-) create mode 100644 .changeset/thin-spoons-prove.md diff --git a/.changeset/thin-spoons-prove.md b/.changeset/thin-spoons-prove.md new file mode 100644 index 0000000000..a9bf3052f5 --- /dev/null +++ b/.changeset/thin-spoons-prove.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': minor +--- + +To offer better customization options, `ScaffolderPageContextMenu` takes callbacks as props instead of booleans diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index 6eeb80d927..c51f7ba518 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -5,7 +5,6 @@ ```ts /// -import { AnyParams } from '@backstage/core-plugin-api'; import { ApiHolder } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { CustomFieldExtensionSchema } from '@backstage/plugin-scaffolder-react'; @@ -23,7 +22,6 @@ import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; import { RJSFSchema } from '@rjsf/utils'; -import { RouteFunc } from '@backstage/core-plugin-api'; import { ScaffolderStep } from '@backstage/plugin-scaffolder-react'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; import { SetStateAction } from 'react'; @@ -141,9 +139,9 @@ export function ScaffolderPageContextMenu( // @alpha (undocumented) export type ScaffolderPageContextMenuProps = { - editor?: RouteFunc; - actions?: RouteFunc; - tasks?: RouteFunc; + onEditorClicked?: () => void; + onActionsClicked?: () => void; + onTasksClicked?: () => void; }; // @alpha diff --git a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx index 0e5bc3b6a9..fc3c0249a0 100644 --- a/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx +++ b/plugins/scaffolder-react/src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { RouteFunc, AnyParams } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import IconButton from '@material-ui/core/IconButton'; import ListItemIcon from '@material-ui/core/ListItemIcon'; @@ -28,7 +27,6 @@ import Edit from '@material-ui/icons/Edit'; import List from '@material-ui/icons/List'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; const useStyles = makeStyles((theme: BackstageTheme) => ({ button: { @@ -40,9 +38,9 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ * @alpha */ export type ScaffolderPageContextMenuProps = { - editor?: RouteFunc; - actions?: RouteFunc; - tasks?: RouteFunc; + onEditorClicked?: () => void; + onActionsClicked?: () => void; + onTasksClicked?: () => void; }; /** @@ -51,13 +49,11 @@ export type ScaffolderPageContextMenuProps = { export function ScaffolderPageContextMenu( props: ScaffolderPageContextMenuProps, ) { - const { editor, actions, tasks } = props; + const { onEditorClicked, onActionsClicked, onTasksClicked } = props; const classes = useStyles(); const [anchorEl, setAnchorEl] = useState(); - const navigate = useNavigate(); - - if (!editor && !actions) { + if (!onEditorClicked && !onActionsClicked) { return null; } @@ -90,24 +86,24 @@ export function ScaffolderPageContextMenu( transformOrigin={{ vertical: 'top', horizontal: 'right' }} > - {editor && ( - navigate(editor())}> + {onEditorClicked && ( + )} - {actions && ( - navigate(actions())}> + {onActionsClicked && ( + )} - {tasks && ( - navigate(tasks())}> + {onTasksClicked && ( + diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index dc5d75d034..424293665b 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -15,7 +15,9 @@ */ import React from 'react'; +import { useNavigate } from 'react-router-dom'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { useRouteRef } from '@backstage/core-plugin-api'; import { Content, @@ -38,7 +40,6 @@ import { } from '@backstage/plugin-scaffolder-react/alpha'; import { RegisterExistingButton } from './RegisterExistingButton'; -import { useRouteRef } from '@backstage/core-plugin-api'; import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; import { actionsRouteRef, @@ -82,6 +83,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { groups: givenGroups = [], templateFilter, } = props; + const navigate = useNavigate(); const editorLink = useRouteRef(editRouteRef); const actionsLink = useRouteRef(actionsRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); @@ -91,9 +93,18 @@ export const TemplateListPage = (props: TemplateListPageProps) => { : [defaultGroup]; const scaffolderPageContextMenuProps = { - editor: props?.contextMenu?.editor !== false ? editorLink : undefined, - actions: props?.contextMenu?.actions !== false ? actionsLink : undefined, - tasks: props?.contextMenu?.tasks !== false ? tasksLink : undefined, + onEditorClicked: + props?.contextMenu?.editor !== false + ? () => navigate(editorLink()) + : undefined, + onActionsClicked: + props?.contextMenu?.actions !== false + ? () => navigate(actionsLink()) + : undefined, + onTasksClicked: + props?.contextMenu?.tasks !== false + ? () => navigate(tasksLink()) + : undefined, }; return ( From 8f8d0641cea969483910b66237878ae3ccca3e9b Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Mon, 20 Mar 2023 19:42:55 +0100 Subject: [PATCH 349/511] change readme Signed-off-by: Dominik Pfaffenbauer --- plugins/scaffolder-backend-module-gitlab/README.md | 10 +++++----- .../actions/createGitlabProjectAccessTokenAction.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md index a6277d4387..35353cf9c1 100644 --- a/plugins/scaffolder-backend-module-gitlab/README.md +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -116,7 +116,7 @@ spec: - id: gitlab-deploy-token name: Create Deploy Token - action: gitlab:pdt:create + action: gitlab:projectDeployToken:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" @@ -125,8 +125,8 @@ spec: scopes: ['read_registry'] - id: gitlab-access-token - name: Gitlab Access Token - action: gitlab:pat:create + name: Gitlab Project Access Token + action: gitlab:projectAccessToken:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish-manifest'].output.projectId }}" @@ -135,8 +135,8 @@ spec: scopes: ['read_repository', 'write_repository'] - id: gitlab-project-variable - name: Manifest CI/CD Variable - action: gitlab:pv:create + name: Gitlab Project Variable + action: gitlab:projectVariable:create input: repoUrl: ${{ parameters.repoUrl }} projectId: "${{ steps['publish'].output.projectId }}" diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts index 29e3a06a44..0f39e3bc33 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabProjectAccessTokenAction.ts @@ -36,7 +36,7 @@ export const createGitlabProjectAccessTokenAction = (options: { scopes: string[]; token?: string; }>({ - id: 'gitlab:personalAccessToken:create', + id: 'gitlab:projectAccessToken:create', schema: { input: { required: ['projectId', 'repoUrl'], From ff459ea5d05a6caede0ad4fe046cb3444099392f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:06:35 +0000 Subject: [PATCH 350/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.295.0 Signed-off-by: Renovate Bot --- yarn.lock | 1618 ++++++++++++++++++++++++++--------------------------- 1 file changed, 809 insertions(+), 809 deletions(-) diff --git a/yarn.lock b/yarn.lock index 30543edd01..8e28fd42bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -489,1078 +489,1078 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.292.0, @aws-sdk/abort-controller@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/abort-controller@npm:3.292.0" +"@aws-sdk/abort-controller@npm:3.295.0, @aws-sdk/abort-controller@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/abort-controller@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: dc290c1191de6026a5a0b5a4c5b57b7e2b9373d5d47934e32ea458c48dc513fa1a06c5a796ee65ca42fcc9d12e168b7fbbde82979b58ce8e224bba19797de5d4 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 73067abed748eacfa5298d84f4c4a67fa764cc41af8a1d80fb61fedf5a50ffe88ed06e51f70ce8dedb6e1ff53cdddabb7b909898e6c666d6abcf8c7584cd5511 languageName: node linkType: hard -"@aws-sdk/chunked-blob-reader-native@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.292.0" +"@aws-sdk/chunked-blob-reader-native@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.295.0" dependencies: - "@aws-sdk/util-base64": 3.292.0 - tslib: ^2.3.1 - checksum: ffafa1f23a848fbdf95740557c99462556f5996be0ef05a1d7dd652661fce686d6789d6cd7781d8c2e41903702e5ff75359c5255c97ce9982c4a6dd1e9a30902 + "@aws-sdk/util-base64": 3.295.0 + tslib: ^2.5.0 + checksum: eab9ddf813bf36fd462c3ea8e4e2ce122717f4200e9d0fb621f241e8e839b1c2ea76df627632516ab6258bbd6005ad93c84c058a9c73d5d5788428e35118db95 languageName: node linkType: hard -"@aws-sdk/chunked-blob-reader@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/chunked-blob-reader@npm:3.292.0" +"@aws-sdk/chunked-blob-reader@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/chunked-blob-reader@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: d35547620814071dd5f89448b8d54b17c97e743ca441423fcba20ad794ab830d023a0c921d43e3b02f7b114444e6ea795afd24f6c51d411be68b808b3c422812 + tslib: ^2.5.0 + checksum: 229903d1092a4367fcd4b9e9f9a0b5f33dece397e97e8266406fb17cb40ad3ce212d48d7b6fe4dc5e7b2cf4563fd2f61652e0b4803df9c5079ccb05fccb15ec7 languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.294.0" +"@aws-sdk/client-cognito-identity@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.295.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.294.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 438789bc1c3ce038666a981087682f451a79b911d8455b2eaa20539a4be86b78392a7dfa765591569cf8e2475aa2e18c797c9dcc1cf1b6f04fe327041111ac9b + "@aws-sdk/client-sts": 3.295.0 + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/credential-provider-node": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-signing": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: a8a3b8b0a3b40b5719ed7867359f1e8f0cc5fb26ea789781a73ebec4235e7cd38cee4320bdf1b49db7c726fe8174dc7a742b5df5bae7df0e911745df63ba7500 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/client-s3@npm:3.294.0" + version: 3.295.0 + resolution: "@aws-sdk/client-s3@npm:3.295.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.294.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/eventstream-serde-browser": 3.292.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.292.0 - "@aws-sdk/eventstream-serde-node": 3.292.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-blob-browser": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/hash-stream-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/md5-js": 3.292.0 - "@aws-sdk/middleware-bucket-endpoint": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-expect-continue": 3.292.0 - "@aws-sdk/middleware-flexible-checksums": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-location-constraint": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-sdk-s3": 3.292.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/middleware-ssec": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4-multi-region": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-stream-browser": 3.292.0 - "@aws-sdk/util-stream-node": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - "@aws-sdk/util-waiter": 3.292.0 - "@aws-sdk/xml-builder": 3.292.0 + "@aws-sdk/client-sts": 3.295.0 + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/credential-provider-node": 3.295.0 + "@aws-sdk/eventstream-serde-browser": 3.295.0 + "@aws-sdk/eventstream-serde-config-resolver": 3.295.0 + "@aws-sdk/eventstream-serde-node": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-blob-browser": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/hash-stream-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/md5-js": 3.295.0 + "@aws-sdk/middleware-bucket-endpoint": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-expect-continue": 3.295.0 + "@aws-sdk/middleware-flexible-checksums": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-location-constraint": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-sdk-s3": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-signing": 3.295.0 + "@aws-sdk/middleware-ssec": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/signature-v4-multi-region": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-stream-browser": 3.295.0 + "@aws-sdk/util-stream-node": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + "@aws-sdk/util-waiter": 3.295.0 + "@aws-sdk/xml-builder": 3.295.0 fast-xml-parser: 4.1.2 - tslib: ^2.3.1 - checksum: 1511b57f49833c5f22a54acc49eb7778bcca682498f2594ea889e7e725bc9232dab2ca47d77e3986df85f0549d0e190b90e478e33fe9be0ee3a0332fef9d0f97 + tslib: ^2.5.0 + checksum: 84c6163b64e6e0c4408ed203dc3fb05b995a223a8875f6f75b58d8f976f9e5788549e7a28a9c09418c6ed471a85456f3d4e6d2e856b389f0b7c9e61603a1f1b7 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/client-sqs@npm:3.294.0" + version: 3.295.0 + resolution: "@aws-sdk/client-sqs@npm:3.295.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.294.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/md5-js": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-sdk-sqs": 3.292.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + "@aws-sdk/client-sts": 3.295.0 + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/credential-provider-node": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/md5-js": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-sdk-sqs": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-signing": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 - tslib: ^2.3.1 - checksum: 1fd2df404b9c0111c6f4b0b13919c0b1b671417a01fd6675a6b5dc563068a5b3feb0b7342442c0608980c03f6940ee575d48d702ab077e9e5a19c004e348fe7d + tslib: ^2.5.0 + checksum: 21e0ea18a53b7135ae3786e23cc31421654d615ed42637686c458fd5fe0c67ce97d643604379e6e70c8e6883e331caf0ee4deb67d4762da419af9ef8401553e9 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.294.0" +"@aws-sdk/client-sso-oidc@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.295.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: ac2ef9fb1d96cdb0ad53a373a18b929d214bfad52208465466006443aef8f4704f646e5f4e00a0165922d97aa419c74f43390ae1f92cf1d4015af7a23ec06491 + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 705c36f039ccab9cb8b0aab22c907c8023cb2254a252728d81c18debc6414ea8ad2174c7f7296c0e4c571c8e23fd52c600ab330b258d9c94fb57cb349af5ba40 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/client-sso@npm:3.294.0" +"@aws-sdk/client-sso@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/client-sso@npm:3.295.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 5c6cda16e7204fc1993af198de32e9f00821cb29e1f43a73252d77876cb453535a4e985d55e4cc27e903183c123c9df2eb100ec6841d5bbbfc017f99c3b1bf4b + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 060c66d6c16910b488826d967d9dbc7b13901ccf95c7d56e0ed7a74128ae50881b7af565683cd53fcee81b69ba0dc6d45ddbda8ed448adf2a7fdc871174386f9 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.294.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/client-sts@npm:3.294.0" +"@aws-sdk/client-sts@npm:3.295.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/client-sts@npm:3.295.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/hash-node": 3.292.0 - "@aws-sdk/invalid-dependency": 3.292.0 - "@aws-sdk/middleware-content-length": 3.292.0 - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/middleware-host-header": 3.292.0 - "@aws-sdk/middleware-logger": 3.292.0 - "@aws-sdk/middleware-recursion-detection": 3.292.0 - "@aws-sdk/middleware-retry": 3.293.0 - "@aws-sdk/middleware-sdk-sts": 3.292.0 - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/middleware-user-agent": 3.293.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-body-length-browser": 3.292.0 - "@aws-sdk/util-body-length-node": 3.292.0 - "@aws-sdk/util-defaults-mode-browser": 3.292.0 - "@aws-sdk/util-defaults-mode-node": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - "@aws-sdk/util-retry": 3.292.0 - "@aws-sdk/util-user-agent-browser": 3.292.0 - "@aws-sdk/util-user-agent-node": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/credential-provider-node": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/hash-node": 3.295.0 + "@aws-sdk/invalid-dependency": 3.295.0 + "@aws-sdk/middleware-content-length": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/middleware-host-header": 3.295.0 + "@aws-sdk/middleware-logger": 3.295.0 + "@aws-sdk/middleware-recursion-detection": 3.295.0 + "@aws-sdk/middleware-retry": 3.295.0 + "@aws-sdk/middleware-sdk-sts": 3.295.0 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/middleware-signing": 3.295.0 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/middleware-user-agent": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-body-length-browser": 3.295.0 + "@aws-sdk/util-body-length-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.295.0 + "@aws-sdk/util-defaults-mode-node": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/util-user-agent-browser": 3.295.0 + "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 - tslib: ^2.3.1 - checksum: 75cb38df86db0880e82bd55002377f6089ac9c59fb9aa9a68cca12057cf98d49aaa6b9d9cfd5ed06691c99ceb4e363567cb7e3f96785463578431fe2121e18aa + tslib: ^2.5.0 + checksum: 62af2df1f538123c38199c78ac04a42c54a20f8ff22f9d7d6f170a21ce681a32256600416176b1fc63d0536f880d1f70805d6e0604bc72c32efab4608f7cda79 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/config-resolver@npm:3.292.0" +"@aws-sdk/config-resolver@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/config-resolver@npm:3.295.0" dependencies: - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-config-provider": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - tslib: ^2.3.1 - checksum: 990aa47171b9ab7ee5eaf0d5367b7ad5487dc4ecafb776eb120aa98d0c5081e5ef685263fb3a316267d86be4a737ee26e306f1be68b29bcf86179a5b4fefbd9c + "@aws-sdk/signature-v4": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-config-provider": 3.295.0 + "@aws-sdk/util-middleware": 3.295.0 + tslib: ^2.5.0 + checksum: e2e8e05fab234565891a7dbb32887a5b247d90da1386279978d733d7c96d489c4259aeef0aa6ea45427d7b9785e62a9339bfb85f576c4a0321f9af76838ac2e2 languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.294.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.295.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.294.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: d4e3a8990edb7e6a468c291a471d27c3debed4566a657f0e20ee3e607778b7c908021c4dee90276f75fb3f3f0c220fefb7b1077099139721e6fd009f306e8827 + "@aws-sdk/client-cognito-identity": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 16586c78863575f49bdebcce2dc4be6a41a85918da324baaae1bf7b1ee2e70561cc6215146b97c7a7080b9d0430d71e7d83d629eda95296ea23315545c613c69 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.292.0" +"@aws-sdk/credential-provider-env@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 86f28ecc0834848bbf60b32a939d090d66f1996d8db4f3128d56c308cb624c4b1dd1b720c1a111e2f6d863b710f533f4b1e6e863dad402cd02d9cfb732f7767c + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 436ebafb9f2a3bf3af53c6133494a07fff7452b9ff6a72ebacc09b25ac65695b0b5ac00d619214ddc6e9b1cba4652ad1729c56d55dffa7e2b9769359e934045d languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.292.0" +"@aws-sdk/credential-provider-imds@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.295.0" dependencies: - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - tslib: ^2.3.1 - checksum: 421c72fe36e6f7c9dc7ff53d226fe5a8986ba99033ac79bdc4699c5c5bfed7d45096a3f5f3088d39dd68ff4895bfc914a14eb8909728111e0c411302102a3c48 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + tslib: ^2.5.0 + checksum: 07cceb7bf4238efc7401a042b2c964f5c049edadebbdda1d4b82fa69f5536c9c2e22d3d74a11fc13185a59e794ee5757acd0e7c1528883ecd75c8dbf4bb6f887 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.294.0" +"@aws-sdk/credential-provider-ini@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.295.0" dependencies: - "@aws-sdk/credential-provider-env": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.294.0 - "@aws-sdk/credential-provider-web-identity": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 9ff139aeb7ccc8cac8822fa86ede6c49226f625d76ecd83ca861fda7508c3f939df2bf96e026c7542ffbf2372eebfc85ad6c28dd50083bd40c711df2638e7747 + "@aws-sdk/credential-provider-env": 3.295.0 + "@aws-sdk/credential-provider-imds": 3.295.0 + "@aws-sdk/credential-provider-process": 3.295.0 + "@aws-sdk/credential-provider-sso": 3.295.0 + "@aws-sdk/credential-provider-web-identity": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: eaea51cbcc32addd80a1462ab291c8fa9170760ac53ba9ab3626723086b6b329e60b6e8d5bb4ad2ec497c6100611d45f5d64e686fe09f19a83a7d13d95a7599d languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.294.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.294.0" +"@aws-sdk/credential-provider-node@npm:3.295.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.295.0" dependencies: - "@aws-sdk/credential-provider-env": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.294.0 - "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.294.0 - "@aws-sdk/credential-provider-web-identity": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 7182ca60b6208b0be3ac5416397725a6f0975ed80326925eec268342419d7dd99baa37941bbca3098390577cd057d22e6625bd99b5bf42f38688279936a8ae9e + "@aws-sdk/credential-provider-env": 3.295.0 + "@aws-sdk/credential-provider-imds": 3.295.0 + "@aws-sdk/credential-provider-ini": 3.295.0 + "@aws-sdk/credential-provider-process": 3.295.0 + "@aws-sdk/credential-provider-sso": 3.295.0 + "@aws-sdk/credential-provider-web-identity": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: df670420d5ceb22d754f37caac590ebc30ffa979a33e76fb37a8f8d80f02354a8339f4630df9d7fc5a71b19686474b2e8b08f40bfdc0bfe8cbd3c19407bc3008 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.292.0" +"@aws-sdk/credential-provider-process@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 2cad4d73e2f07ad5cd613f053e5fb7c146c33020dd13a8cc664d6705a9f33f257a4d3e2fbbfe7c34fc8582593eaa1b0ded67dcf2022842d421a465de760420b0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 0b5dc603d2437b91f3933c78c150c98592bc6e5ef09b7d838d9b8b6c343f13dead545d809c035c3dad250e3023d44418aafb4fc0f0e25df941abd1e54d3456c8 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.294.0" +"@aws-sdk/credential-provider-sso@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.295.0" dependencies: - "@aws-sdk/client-sso": 3.294.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/token-providers": 3.294.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: c9e05370b1334cf73311d13b5bdb67ccd7d10781eac952c57bc00c2f850bb0676dab3306ac9d6b9588d1e9f01942a14bbed0b14272e413a9e2c7181128852fbd + "@aws-sdk/client-sso": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/token-providers": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: e3764111f8bbef747397ddecc83d7b32d5316b08673d810d7c98c67ddfc2b0450e504254ee50494ab0fa03ac04ea1b12ebd5a3e54cc754025b670a1fa0e55cea languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.292.0" +"@aws-sdk/credential-provider-web-identity@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 02e0e30df966c6b623d68517ae360bc4efa7a04fcfba17baf48e4398e899e225c507d5280d682e222ba9f48a484e912de3946b9dde8512baefc5493d28f7b486 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 40fa0d1e47be13505973bc48bebee15360e322402c68f02fac03b777f971abfed3d51704d18f38c130c8149a69d2f45f38ccb8945f5edd2634683cad13b07980 languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/credential-providers@npm:3.294.0" + version: 3.295.0 + resolution: "@aws-sdk/credential-providers@npm:3.295.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.294.0 - "@aws-sdk/client-sso": 3.294.0 - "@aws-sdk/client-sts": 3.294.0 - "@aws-sdk/credential-provider-cognito-identity": 3.294.0 - "@aws-sdk/credential-provider-env": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/credential-provider-ini": 3.294.0 - "@aws-sdk/credential-provider-node": 3.294.0 - "@aws-sdk/credential-provider-process": 3.292.0 - "@aws-sdk/credential-provider-sso": 3.294.0 - "@aws-sdk/credential-provider-web-identity": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 6921e5d71e61d5e4cbb7de52c696f40a3babb7d6fe3460d7d425ace4f0a88d3925242392fda49f2d83d17b33b7954ba42290e6f054aa19d386b9d66912f25305 + "@aws-sdk/client-cognito-identity": 3.295.0 + "@aws-sdk/client-sso": 3.295.0 + "@aws-sdk/client-sts": 3.295.0 + "@aws-sdk/credential-provider-cognito-identity": 3.295.0 + "@aws-sdk/credential-provider-env": 3.295.0 + "@aws-sdk/credential-provider-imds": 3.295.0 + "@aws-sdk/credential-provider-ini": 3.295.0 + "@aws-sdk/credential-provider-node": 3.295.0 + "@aws-sdk/credential-provider-process": 3.295.0 + "@aws-sdk/credential-provider-sso": 3.295.0 + "@aws-sdk/credential-provider-web-identity": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 7a6f811392a7bb56eef4da0091b55ef67303c3dc667bda853c117b4f4b5ff82016242788fa82f3a5189cc2e1245fc1fbf0f64e4d7c83dc3885b9be4dac3c0741 languageName: node linkType: hard -"@aws-sdk/eventstream-codec@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/eventstream-codec@npm:3.292.0" +"@aws-sdk/eventstream-codec@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/eventstream-codec@npm:3.295.0" dependencies: "@aws-crypto/crc32": 3.0.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-hex-encoding": 3.292.0 - tslib: ^2.3.1 - checksum: 6a246d7944074d4a5332ccc7b848f9e3f4b928161c0c31f9ef6306a989c012d92bae606910179f6f44be26cb530308ca0f1d4cd3656a9247a6c9f6ed2446a952 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-hex-encoding": 3.295.0 + tslib: ^2.5.0 + checksum: a09054c3bd25f3502e089511682dcb4b2db4849e2a7e21df8ae79a9950fe39339774565d790086bb921a4fa2a50519c3f6d8d2a709ace632b927a2361b897325 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/eventstream-serde-browser@npm:3.292.0" +"@aws-sdk/eventstream-serde-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/eventstream-serde-browser@npm:3.295.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 53ae27259d1c117b0acb84e07f6258b76970cfc221f5c531b17c4c04ef262bd799e6157831c480a6a0861847b5500d389af83cee7021abbbc4f5c983c69a3948 + "@aws-sdk/eventstream-serde-universal": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: da2545cd9fd1eeef261ab1a2a57b6fb0cfc1bb1c68e10fcb41e6c6f5579526d9ea828be3232ae115215838d4b450e7d4cdcfbed318b6f030fc402347700aad9e languageName: node linkType: hard -"@aws-sdk/eventstream-serde-config-resolver@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.292.0" +"@aws-sdk/eventstream-serde-config-resolver@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 6f7d25386ddf86dd90fc7a5b83fe0bab3789a2ddad8017c8bb07a74cd2d7fb0fa9ea2216e66237a492cc25a8525df2b09485fbfa9f3ec9029981a830a89f0c81 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: d5fbecb368e9a7adb5c3a6bafe2b1bbbe72dd9323d27b61cb24756045f9aa4f9e9ed88ba147dcd24416d9c5f248872402ba2287ac7d4cf67a7b41ec95cbe69f3 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/eventstream-serde-node@npm:3.292.0" +"@aws-sdk/eventstream-serde-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/eventstream-serde-node@npm:3.295.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 981f007ab42bd2cfc781e26ee3d2b9f1ac81656a519bc9fbceefd68c31b5a1d6c55594b7001de68a354cdcf29e92820fe063ac6877c84035b320ccfeaafdc038 + "@aws-sdk/eventstream-serde-universal": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: ccd10a1f42478dc7056a65159ef0302347ab76f202656063b93003ed80e5fc8140238ed70853ff28bd57343dd24ab0a55dfeb09a22a81b545d05cb62cbd70316 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-universal@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/eventstream-serde-universal@npm:3.292.0" +"@aws-sdk/eventstream-serde-universal@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/eventstream-serde-universal@npm:3.295.0" dependencies: - "@aws-sdk/eventstream-codec": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 9c2c8ea67a81ef95753af8c16e14134df7f642b61fc83ec58a147d417718c64a750a2c5410efec09e37af847e290660395e1e261fe5e931e06d06c52110983cb + "@aws-sdk/eventstream-codec": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 3ded9ff551a24b5fd44bace0a3f3c220cc667ce0284a3a64e85cc53e17ac0ac0e1de45a392249a8246c3156dbaf013db28510966aa87dfa3a02188c8a5e17163 languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.292.0" +"@aws-sdk/fetch-http-handler@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/querystring-builder": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - tslib: ^2.3.1 - checksum: d779d52bd0d3d2ad5ab5232f5e08c1f9489f83c50a5d8df899c1ad25ae14f97fdf8c28c4465e0fb6f2b7554db89f78afa65fddb24cbbe7983bbd7efdd455934e + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/querystring-builder": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + tslib: ^2.5.0 + checksum: 45e23da49cd8df791308c01e68da21359304d07bc349424e85187bbf0c6357534f5cd4c42d3d2cbc094207315ee62231c0699e0d407c926637d849086cd59713 languageName: node linkType: hard -"@aws-sdk/hash-blob-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/hash-blob-browser@npm:3.292.0" +"@aws-sdk/hash-blob-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/hash-blob-browser@npm:3.295.0" dependencies: - "@aws-sdk/chunked-blob-reader": 3.292.0 - "@aws-sdk/chunked-blob-reader-native": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: d560e6de563019d55fe4ef8b385dec52da9b7a76ffa3d5ab4e5d87986c675a7cc2e468088408316ee13aa78f43d1d5393cf19000bb037c385341dddb35c7765c + "@aws-sdk/chunked-blob-reader": 3.295.0 + "@aws-sdk/chunked-blob-reader-native": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: d9ca71a121be656a64e5443bdf92efcf9d7c3bc0e30accf34051021ca987dcc60b33d8a04bd88fd040883c4620322839e7dff2fcf6304432021bc74e158d9163 languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/hash-node@npm:3.292.0" +"@aws-sdk/hash-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/hash-node@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-buffer-from": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 4b7e77be7331951fd4a894a629f52d5ffc0ed19565f9e5a64934fd1b3741a0a30aed90cded058e6d4981cf51e3e8bc9849cd7b0bff8f80d7e5269665abd25713 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-buffer-from": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 3f82dc9904648c0a5984850f0d079dace990c109241d4f55be6560687a710ace41859ceda3528c20ed18d314215b6b650ef7b61c0771232d033bcee0ac71f68e languageName: node linkType: hard -"@aws-sdk/hash-stream-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/hash-stream-node@npm:3.292.0" +"@aws-sdk/hash-stream-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/hash-stream-node@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: af7cbdddc17801cd50bca24aa80d3ee837b1eda505290725c853847682451497249b018411e723acfee0004723b10a54517c314a8d69cfd6e67fa901fe530184 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 8fd3871db335022bfdb4602578d05cb27dc35d4fcde86fb31533eeb72676e05a2d361bc131d2c9acc0e2c32d1bbbc55466b25fad1347eb3be5b8ce86b16fa2a7 languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.292.0" +"@aws-sdk/invalid-dependency@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 90b78b9b2a0458b3c473f5d9921dd697aa6923a934a1bd40f4a3bc600366923302d8202827509436ba5f9baddac88ef851344a22bbe7de972a746226823abe82 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 706451bbe6cf819b4438d06330211890cd8a173c0242c5b0e367c1ab4cd70ffe1ec4f585e0eb66bfd1054a51e4dd0057c24cc529e78ef8dd3dec52c4ee2c675b languageName: node linkType: hard -"@aws-sdk/is-array-buffer@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/is-array-buffer@npm:3.292.0" +"@aws-sdk/is-array-buffer@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/is-array-buffer@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 31d425754071a50f90a8011a76776d2bee76ddc75d41378b539ccf7982245999a3711d444d0247021a5174064069d6e543c39bc95bd14fd37da4b26a62440cac + tslib: ^2.5.0 + checksum: 23de81a3ab63a51ae61183792db4a9faf74f02c7c9cb5cfa6d4b36781d7832070090bb406dc8591dd74a07fa3d3c27bac11d7a931e75163f8e018987a995f3ce languageName: node linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.294.0 - resolution: "@aws-sdk/lib-storage@npm:3.294.0" + version: 3.295.0 + resolution: "@aws-sdk/lib-storage@npm:3.295.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.292.0 - "@aws-sdk/smithy-client": 3.292.0 + "@aws-sdk/middleware-endpoint": 3.295.0 + "@aws-sdk/smithy-client": 3.295.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 - tslib: ^2.3.1 + tslib: ^2.5.0 peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 26c0db366050efd252acbc067b56b11b7c6d450aa5561f7b0108646e766b34a0129fa7a89efe028d8a8196ad0a1d5bd22554724277e606216b5873804bc4f648 + checksum: 4d8c75e886774f7bd6ef49348ad0d65e3bf333d0f9f8029fa5e2b64234d2b8334cd8164c41e66f5799c39559e49425e1dbf1c6f1346bb8e792085c1d153ba654 languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/md5-js@npm:3.292.0" +"@aws-sdk/md5-js@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/md5-js@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 130f1f3cf4f4bb1365f2beafbd760d9c651af2cf4eecf8829cf9c68fb0909f9722c01e0e1fcd016b36c060662090257955e3c16a7fe7139cfa824179142635eb + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 0dddb57a0c460ea2ccf95c5e7268a54f7f40e1dadb33b248baa65cb08bbd2d39cd94a9186bdf0d74a1af84d0af38288f2026447fae414b608de4f312dd3e0c3b languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.292.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-arn-parser": 3.292.0 - "@aws-sdk/util-config-provider": 3.292.0 - tslib: ^2.3.1 - checksum: b57e3674a826d503fa28e7eac0813b54f6c2ad246f7b14746394aa7bf79808c61dd058e8ebb8657edef05d4d6d2ff8accc96a44e8d06afc86ba8005c1147419d + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-arn-parser": 3.295.0 + "@aws-sdk/util-config-provider": 3.295.0 + tslib: ^2.5.0 + checksum: a4ebceee6d843df3042310c076df511a0121c8cb0928b34729dad19a21cb3e36f26f7521855142b2f39f06fbaf8d4e8c290a217f742346aa6c261e61bee32b55 languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.292.0" +"@aws-sdk/middleware-content-length@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 83f8a92ebcd680bc05d859fd40b68278f32f89d6af2617dbc08857afd0e42853bbea00b97bb9b834dcf431742ccbb0b1ce441977c702f4fa81ea48f36923081c + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 1dfc9892390198e18b069c5e6a8f3bda37eefb397aa84935110c161620324b58856c3a75dc08c0b11671f080e68f60d6fd1f5e6ab025bc84fd028f7d91ca638e languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.292.0" +"@aws-sdk/middleware-endpoint@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.295.0" dependencies: - "@aws-sdk/middleware-serde": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/url-parser": 3.292.0 - "@aws-sdk/util-config-provider": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - tslib: ^2.3.1 - checksum: f2ac4d63acceb34f377176f3aa98f18f572c064adbf6a0652c7d5a7b1fd85e249723bab2aae0c19d702aaee0d5f56300c256c93f1b8775aee4ab727cd461ab62 + "@aws-sdk/middleware-serde": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/signature-v4": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/util-config-provider": 3.295.0 + "@aws-sdk/util-middleware": 3.295.0 + tslib: ^2.5.0 + checksum: b7c69dbf44f3dd8cd22e4bb818352e74ef2460fc682e29c9394e93a2c49466aed5ee25996b0338bc2548d01748cfeca1c5547bef6c2741f54cc8528771d69cd6 languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.292.0" +"@aws-sdk/middleware-expect-continue@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 950f154018f2e9e165538edc732f133e89df17e95df0300ddd725e79c3b031834c58bf9891aa89ce988a800e847e23e6a4f8010941b0e338850c606ab8f68191 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: f070c75c1b91ee2a171c8973aa6421c0efdbe9a6e3825649ddf1cabfc4341100c46945408c26520a682d54c808082f2c2844d3b8d96e012388d0d56f92f9422e languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.292.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.295.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/is-array-buffer": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 33b29ada23851e227a1af6e70f22b548f2e137fdd1c9cd5d356b01343f95afb319023f491bf51330f6e2640b243cb6fbb5ac71b319a033fe6ec1ad61293d4889 + "@aws-sdk/is-array-buffer": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 5b070132211ccb24e6bcd4d4ef0cd89339e72e5abb9cd9e05bcdda270f55b8594e6b37a18ecdd03ca9e7f72ea955bc1446896ac69ca830fe4b8d39c14aa6b520 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.292.0" +"@aws-sdk/middleware-host-header@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 3f760a3641c07432f3247a07b86ae82d9e4f29ba3b266685e8adac64dc1a5ef510eff467329a514a5ed7a673173869acb88ef7b467ea8b91573841a4028afafa + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: c335cf962da30451b57980d677a154759805c695f44e0c9bd678ece156d017cfd578db20a8b862bde90fd7a0b07952809dc2b84f354c6ac6c0c3bb10e08dbede languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.292.0" +"@aws-sdk/middleware-location-constraint@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 1322eb31b0e49093a19c8e62ec324cde79a74a71cf0de9f59856c2dc87b40a1e26f91ea06cd9e2d817bad2dac36a5098aaeacca3cbe3692489413bb7d153c8c1 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: cc526f8d4094c4d62b0493324b5706b860cda274aecc72559474cd11818d58a8050e821d3f7115db1bc456495b73041946f6fbd69cb385db51dfd1bd812d8bec languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-logger@npm:3.292.0" +"@aws-sdk/middleware-logger@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-logger@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: ad60ad1efefb4c47dc1a3a488cfc959ec1f0a5cf4bb5a4da00fff006e796a8b57a02eca64304048624c4a4757e86834ddc9d2ad25e3539391a694d970b565fb9 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 205cb8355500d3a7c0284801b593ad3d201838f9fcd15f646b3e4d2d538bb5db3277e4cf89df5e10fc372f1ed36286c1a275f37f64e311421cfb0566d9ae74fd languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.292.0" +"@aws-sdk/middleware-recursion-detection@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: abbe68e6ef40b4a7541f2398dceeaa4604566f70215ba2884ed1a652cf49991b286270f9983255003d26ca3e62ef8c353c250feccdd796cc45abec2fc3b70bc3 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 08697fab478216a879c478e34818e414388221101daa4495c080ec963493a236bb357133acb5eb4a6919626593dcf6b5df8efca0cd743681c065ad67de1f824f languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/middleware-retry@npm:3.293.0" +"@aws-sdk/middleware-retry@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-retry@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/service-error-classification": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - "@aws-sdk/util-retry": 3.292.0 - tslib: ^2.3.1 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/service-error-classification": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/util-retry": 3.295.0 + tslib: ^2.5.0 uuid: ^8.3.2 - checksum: 249094515c4353142846b8dbdf9365f6cccdad69cad8f8028fd03ffeb533fade46be1a781feb60089a9321eda720959ef2f1f25329defa1affc40a889a8ed5d3 + checksum: 0766abb3a7d97620d1a6201e716f19ba123ee45a3179d261e38f2ce73e163cc3b8d42d76acd08c7bfc96190b9a65fd2e39a38cf59aeceea8d59dbd3eb2e618d4 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.292.0" +"@aws-sdk/middleware-sdk-s3@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-arn-parser": 3.292.0 - tslib: ^2.3.1 - checksum: 22a118e51c8c0fda76d85794c5b017bc8c8a5a156b72614f05151d9e2b2e2b730fdb35b72a08b227474218fdf5c6b2c9019304baba2dc4761498dd95a3de9ea5 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-arn-parser": 3.295.0 + tslib: ^2.5.0 + checksum: b0883f962228188bfc9835901b78fcb2ea43aac0e8c51e996baed0a4fc161c04cb383863bd0b42183ccae787cca59e126eb005e588c90b579a984f329be94708 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.292.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-hex-encoding": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: c05ec7552e9f72062208566f1fd9383e7b40caff07a543091ea82b74bb099945c28776957d030e7f7d317cfd3a6fff255d5932c14149971f335008bd1915d994 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-hex-encoding": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 24858600b1d3a79385a2b6da6dcd1fc161cc53390550bcb3553a2c4f25e5c781ffcde2c827013f6530141f478bbaacf33b847f745d968ec36e42a2a29d1c1032 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.292.0" +"@aws-sdk/middleware-sdk-sts@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.295.0" dependencies: - "@aws-sdk/middleware-signing": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: bcd719d306befe814111cc4e4a89e08c81c5a28dce18e8b856838f8bd19d336ecfaa3a5a733066fc375ab630421a2156a804df0b1255fb470ea07c2eb5360ace + "@aws-sdk/middleware-signing": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/signature-v4": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 758f0194f82d67571b0d093a006df121c9efeac5950b818c85a18ece255854c81492c007e24862c1d2bdb0e5fbd054e4a879fbb277bcd036a4b286093ccf606e languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-serde@npm:3.292.0" +"@aws-sdk/middleware-serde@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-serde@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: f8d4e246c4fbd86c8071fb69a55721c8641709d0696fc9e4bbaac4de546f402f641f331a16bb5c3b7b28b57ffc84be3cd1e203c7d378438b9cde31104dc7e453 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: ab5db265dc21a431cd8d617e3d87f815eeebdd145459892e0ae57eeed40f73af1f26d4eb2bd592e2132523ea944000ff6c5e748db04982f686e8f1c8b46643c1 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-signing@npm:3.292.0" +"@aws-sdk/middleware-signing@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-signing@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - tslib: ^2.3.1 - checksum: deb453f7e5d99270780fa3ee5285b5956fd90b9a5b4b37e221d97620df9bb2e30bd84e47f8168cb24849577ec30cf6991d9e57a9ae1b21ffb75d9fd3a4f196e8 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/signature-v4": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-middleware": 3.295.0 + tslib: ^2.5.0 + checksum: a7fd077475576874666f9baca92fe768403472f36113fa0ada7bcafb943765f025a2fe2ff32cee58bf1d9454f769ea2e2b1b1ca872cbf27f072dd899f4136552 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.292.0" +"@aws-sdk/middleware-ssec@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 4f8cdec2dc55d395575e7265ec1f20d82427298eb887936f8dea3d9d704ba761619a518ae9d130b3e861d7d1f558122b38c5b218ee433dcc9fea17ce2057af8f + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: bbdfc6304961c6a47be55aa13691afaec5cb9741637ac224caee1ac760e2e1dd047258b614242147400a3ff23040bf637e7b8bc19b5b1109cf357913e4619217 languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/middleware-stack@npm:3.292.0" +"@aws-sdk/middleware-stack@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-stack@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 8be745177d96cc2f72b02f0b3c9374f0ee08b5c261715a9e86feeaf4bb6bdeacfa9b7dbd7e054145ca3dde9001d38096a311eca2ca02e8432b8266482e6645f2 + tslib: ^2.5.0 + checksum: 53f524b29829019e51654d93caa0836b23956fb97827fc6c9fc3359ed4a1440d7e5ad9f3141fd854481de3724bba19eedd736bf67e91fca95175606990058b49 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.293.0" +"@aws-sdk/middleware-user-agent@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-endpoints": 3.293.0 - tslib: ^2.3.1 - checksum: 315c11feb58e99625380a4f1274bcdd54a275dc323bab789a809911d66e86cde15d2a9fc536e31cef6621325aed80fb0cb7cb524dd707bcb5fb8b1a1284e87e3 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-endpoints": 3.295.0 + tslib: ^2.5.0 + checksum: bdd62ea49f85b2a85791c5851e407da78065e0b9805bb8f9a614435b5ed75788b59e4efa8286b38afb5adc0902919e4d3060bc47500c8ead364119b72dce4558 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/node-config-provider@npm:3.292.0" +"@aws-sdk/node-config-provider@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/node-config-provider@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 3af6a0f0566acdd834aa5f3125bb0837a4fee54930f15621970ea66d1643b75d222ef17a0e8f12a2d191b355f3b10430dfa0bc773a3c59b8a23ad463316d503e + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: daa6a26dd1c244e2d14bd35fa0258997cb9991cd47fa4d1fb1aa366a9bf7f8566a5997afadf34068acea4926daefcea589f09912585ca170ce2e57ba2f6bd5de languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.292.0, @aws-sdk/node-http-handler@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/node-http-handler@npm:3.292.0" +"@aws-sdk/node-http-handler@npm:3.295.0, @aws-sdk/node-http-handler@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/node-http-handler@npm:3.295.0" dependencies: - "@aws-sdk/abort-controller": 3.292.0 - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/querystring-builder": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: b842943bb517b4c9cfb5aa13636463ea3415f0ad87960f0c7e3d6a8165ee722f40aa73d8d1806c5b462a0b26e2003a83f4e00e62e4c266cdbc909b4fa726a603 + "@aws-sdk/abort-controller": 3.295.0 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/querystring-builder": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: b8cef019fe989bce4d4f0cb1c70355519e8d05f084ab0c9799b959dbaa5ac88c6efd00d72e76636f999afac896787dfdde69b06695efcbf77e7b868bc618bae4 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/property-provider@npm:3.292.0" +"@aws-sdk/property-provider@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/property-provider@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 1c15501edb5eda72a99bcebf8f5c2a7c9d9c60b3708d1b42faefc2a931c08a6c8010733ae88587266eebb70949ab2cb13e5c7f8335af6290c5f33ef288921828 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 1678c7a1bf3957659923ef9566293027c0c1b08df6fd01f189d4c2ba8f46591a6424371d0958786bf15c277e2f72daf54d98f8eeb8ae91117b839cc7cafa8d23 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/protocol-http@npm:3.292.0" +"@aws-sdk/protocol-http@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/protocol-http@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 4983aa6ae1bdf5dccab71331ae001009c84b5c1d99d05b0f5e5f1c65f56c1295411fd73be4ec88adc1d5f494dce67516c92932e86290879c4a3ca8f0c6f66256 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 88b4cb31027b372d1b00e136db49e6170dc24782c31f064ce45971dc7b0324a6af491cab061e56b7cd5abfdc0af887899f8d4f9eba967c808c46cf1f99ba9b5e languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/querystring-builder@npm:3.292.0" +"@aws-sdk/querystring-builder@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/querystring-builder@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-uri-escape": 3.292.0 - tslib: ^2.3.1 - checksum: 134810b9c8a248a13faad270592e75ff5afc6ce0df2598a5f319774b29a5a0cc7a05334e62eb04eda9ce0dc921a4407223e96ed6b6345c0c487814d31d1fdcac + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-uri-escape": 3.295.0 + tslib: ^2.5.0 + checksum: 328c9ab43cc8216298d8ca35b398eaf94f87d7819f38d62763eecfbaeeb9abe5919de24b861d6e5d4b1537477c150cc313dd6f24ad03d1f94f96c31c858fa815 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/querystring-parser@npm:3.292.0" +"@aws-sdk/querystring-parser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/querystring-parser@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 921b15ecc46751b9b0b59b2093f2159ac3fcaecf31a22c34ecb77c8157667cc89528ad0ca3f2298839cff65642f2ec1829510652d334c87f86d9205394256093 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 378cbd5520abeca2d521a9b6e94721572b95c4c09e4930df07e2692ab1a89bcfe922da2e8ef6c193bb5814aebff898c799815a1470b24119e71069a05d66e66c languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/service-error-classification@npm:3.292.0" - checksum: 38b154832b32c9e84a68f77ea7d0da1fc23331cb6f83a774ca9c9ecd577ede506f6245b0e0844f7556d14879219f16dbd8f141d948cc8d19f375008f1800d22b +"@aws-sdk/service-error-classification@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/service-error-classification@npm:3.295.0" + checksum: 1d062e3d836b579a468c082ad159a58636aa85b3c8c60b68e3be97eb27dd45bb62844278a9a2da8093524721e3e27e343d8229ae48dc9f64f6139cbc34eaf9be languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.292.0" +"@aws-sdk/shared-ini-file-loader@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: da14f79fcdabde68d2c103d61e477f7f90f43d6f41e3cfba7ae1a30b2d06c64121f70e0046f1797a5b8a785ccb8ca1969188a4f8e330a1fb9dac93794e5336f0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: c09e552bdd2a4e21a8316aaf2625d09923de007b72b9edbed797701886c8ccc5a6e06fc183f5b1cfcc7c4eae76511934c1c37f2458074cfae34abe78cf496a7c languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.292.0" +"@aws-sdk/signature-v4-multi-region@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.295.0" dependencies: - "@aws-sdk/protocol-http": 3.292.0 - "@aws-sdk/signature-v4": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-arn-parser": 3.292.0 - tslib: ^2.3.1 + "@aws-sdk/protocol-http": 3.295.0 + "@aws-sdk/signature-v4": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-arn-parser": 3.295.0 + tslib: ^2.5.0 peerDependencies: "@aws-sdk/signature-v4-crt": ^3.118.0 peerDependenciesMeta: "@aws-sdk/signature-v4-crt": optional: true - checksum: 27e5a1ddaaffc0fafcb19e75976206c53912c3605924c254abda8d566f43d62f1f7d42d3180d94f1288c32a0dd065aa983ae065e4c5860394073c88b23fc33ca + checksum: 6917d64472a36223bec6a7d1020a244db6f9f0e3374d1309a323b0d86c32d83af4a0d1727d9b907a8c6108a01b55878fd95dd47342d2b41de2df9f82a9dd8afe languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/signature-v4@npm:3.292.0" +"@aws-sdk/signature-v4@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/signature-v4@npm:3.295.0" dependencies: - "@aws-sdk/is-array-buffer": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-hex-encoding": 3.292.0 - "@aws-sdk/util-middleware": 3.292.0 - "@aws-sdk/util-uri-escape": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: b45d1a69f2b5ffa266dd0e7abf08740bb08ac10435e558cc3786a5a5b174ceae8868b9892ccaf7039b84c6c0346ac4cf531ddeba1f5dfa97e5c69ad79f4779fd + "@aws-sdk/is-array-buffer": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-hex-encoding": 3.295.0 + "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/util-uri-escape": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: 431b0c528a710cdbc49c73887acc9d5eb296bd88cbcceba04eeb6be5cfb33a2ffd7e4c4bccba124263c249198924d58a7391e2d4b19b98df43e03f74faeb96af languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/smithy-client@npm:3.292.0" +"@aws-sdk/smithy-client@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/smithy-client@npm:3.295.0" dependencies: - "@aws-sdk/middleware-stack": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: ffee8a9d3b569fa44bf48440df3abce7fd73204004262728af83a8a74764331205b42927f62ac13e68c6d3c23085ffa93ea62a948af2c8936e19b52d225109d1 + "@aws-sdk/middleware-stack": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 82c485644b617bdf4659b48d5f4c9b34e27adafe01b9f59b3ed6970cf541fe326e22ecc206df4021ec357cf4e98c3dc64e0877fb2afd79c68302b7770c4a5d7d languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.294.0": - version: 3.294.0 - resolution: "@aws-sdk/token-providers@npm:3.294.0" +"@aws-sdk/token-providers@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/token-providers@npm:3.295.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.294.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/shared-ini-file-loader": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 7d982876b2083a06810f6df62fce140b2408177debbd078eb3e4c591007db38b769abac308c7ebd86598784bc690a92619e6d5d917bef005242e02c4978b64b9 + "@aws-sdk/client-sso-oidc": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/shared-ini-file-loader": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 6c35af6049c2a4c4abba16d332a3f1724de9c28b4e7c81b2f73e0a11c53726fe8ab00116c9340193fb32711fedbcea3e661a1aa833139962dce31d2dc6813fc1 languageName: node linkType: hard -"@aws-sdk/types@npm:3.292.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": - version: 3.292.0 - resolution: "@aws-sdk/types@npm:3.292.0" +"@aws-sdk/types@npm:3.295.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": + version: 3.295.0 + resolution: "@aws-sdk/types@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 0c3c62092f3b400da57cd817d73c7e54bf193f649a508fed550bd927e0307b4f2b873036f8df9977e9f7bf2bcfc4a1233c6f662dcaeea4e049586bea93003cb7 + tslib: ^2.5.0 + checksum: 4f2661b9f7ac7e441bf07f720c1cdecfa9d24089bc262693aebc9e747fc72e8dbd11dc69415a4abea4c8065564a8f135eac6705302b9fece0687b427028bf66e languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/url-parser@npm:3.292.0" +"@aws-sdk/url-parser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/url-parser@npm:3.295.0" dependencies: - "@aws-sdk/querystring-parser": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 16ce1861c6afe5fe3085f8a9a85fe0b83f870af30b8f75e69a6eccac7f66978461d4753e1ebdc6b3ce34d84bb2df10c4775843a9817d86af521ac350c19f6a30 + "@aws-sdk/querystring-parser": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 3ceab4ed2e7faf0952934a6cd58f7fc76e0785aacfd163caa95360bb0669c0ffd2d9556f3a98add31d0ee2746757664a3a98f5868e8549f8eac1bddd043d2a32 languageName: node linkType: hard -"@aws-sdk/util-arn-parser@npm:3.292.0, @aws-sdk/util-arn-parser@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/util-arn-parser@npm:3.292.0" +"@aws-sdk/util-arn-parser@npm:3.295.0, @aws-sdk/util-arn-parser@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/util-arn-parser@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 50bd76e561b035ae1af22a396a665cf9db82c46177e23a8d023a197560365a1e33763782401f454c3de58f0ae9dfc2b88599389f20084da8c046993b7171e2a9 + tslib: ^2.5.0 + checksum: 207dadcd23efc318bd9c028157a302999403749722b3b9cd4f2701cf2fd4c7b588bbcede45d949f583c4e41bb4e66ca7df923f9d4123574744497c961cd1c673 languageName: node linkType: hard -"@aws-sdk/util-base64@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-base64@npm:3.292.0" +"@aws-sdk/util-base64@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-base64@npm:3.295.0" dependencies: - "@aws-sdk/util-buffer-from": 3.292.0 - tslib: ^2.3.1 - checksum: 4ee530ff15b667963e00fd59202b210a3427f91ab7d88b700bd378b6fa9c9738f4cc106aae9bcf7bf2e9447c84946c73e6ae06d0f42d7bea094954b8c45f3c84 + "@aws-sdk/util-buffer-from": 3.295.0 + tslib: ^2.5.0 + checksum: 047329e37dd6946f63b47ae415a988c32022b883b9fcf113120973b2d5e97679bc19f5183b264474f3201cb0560d3a4cb4b9d07d4d70b823945387e20869b41d languageName: node linkType: hard -"@aws-sdk/util-body-length-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-body-length-browser@npm:3.292.0" +"@aws-sdk/util-body-length-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-body-length-browser@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 769f8782b0de412a070f13c45885af83b4ee9c1a43051ae26bef236ffb7295ea1aed47fe5494fb820ea603198bf009c7c3b6029d37a4a946b17d248d415811f3 + tslib: ^2.5.0 + checksum: 15100fa717f98a58475c934944108f98b811025039a04eeaaed71380bb2d4444fe44af7c527b74bb6ebd5a3ce277e28896d2e60ea73084f2b9e6cce6873b5592 languageName: node linkType: hard -"@aws-sdk/util-body-length-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-body-length-node@npm:3.292.0" +"@aws-sdk/util-body-length-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-body-length-node@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: c0066444c0734b1207e344b95ff71b9859f1ef3f70749fc813d9d1a1da06a46bdfa364809aebbad69fdb5371f038f06b11e9ec54d534870714869dae88facf4a + tslib: ^2.5.0 + checksum: e44fa83139d0e7e61152cce8f7709e772c920996fbd3ae4acc545df75ea3f7f28fd2959c97029411802b3e12277f775f3e2dbb34c797369635d0881bcf6b0a12 languageName: node linkType: hard -"@aws-sdk/util-buffer-from@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-buffer-from@npm:3.292.0" +"@aws-sdk/util-buffer-from@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-buffer-from@npm:3.295.0" dependencies: - "@aws-sdk/is-array-buffer": 3.292.0 - tslib: ^2.3.1 - checksum: 08e59c3e88bf76ae0149f63101a7a65bed7998f62db4851dfb4cb39b060937c46d6d9a281c4504ce6b816dba33ef64c459e8ffe351388dae3298a661632cf8ea + "@aws-sdk/is-array-buffer": 3.295.0 + tslib: ^2.5.0 + checksum: c93e6f0cf66927230588365995d0e94ee874857dae6753529f44ebd7f2d9c1bc6e8fdef0a6459bd96f0c29a2fdc9eaa35145102d074249f4e8ff8bb070708f24 languageName: node linkType: hard -"@aws-sdk/util-config-provider@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-config-provider@npm:3.292.0" +"@aws-sdk/util-config-provider@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-config-provider@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: d554881b8690ae2a5b594f276528ede52d02719e2d6bcf13fa9f2eba91d7c711e1fc0822db32f0069b4435c8488cb2d3b009385ca932fcb5f9bebc41a6c40c7e + tslib: ^2.5.0 + checksum: 2b6cd2b118465a36c9908dfc330f9f107a0a67cbde2293101af8b3ca0cb2d9f29f76394261880535d62da74b10cf89c5433a2d4524272d5b8776ad8085b0489b languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.292.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.295.0" dependencies: - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: 0f372e3425d81cabafe2dde0e51b4373b05da91f2015108779f50206eb7b758f95aaf6f8fcee64090d3940fbd9d4e8c09c83e040ab1618551069dd3e433a122e + tslib: ^2.5.0 + checksum: 7b0bbad70d23cab20b6e8c47b5b1625e45f5f51d982b95890a75d2d8b9ede9635f20fc3ed5cc0cd9d7d7df08754a4ba94d1ea219d860c0514467cfe628fbb084 languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.292.0" +"@aws-sdk/util-defaults-mode-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.295.0" dependencies: - "@aws-sdk/config-resolver": 3.292.0 - "@aws-sdk/credential-provider-imds": 3.292.0 - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/property-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: c808df5777e0c0ae2e6941ef63bc3b54bba4ff70c58a6b0f2438f668c3b6e15be0576cdb9f63a093e781ab42232b151eb4ea5375025aa841d34315680b11c0df + "@aws-sdk/config-resolver": 3.295.0 + "@aws-sdk/credential-provider-imds": 3.295.0 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/property-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 43b9e277bd2ef485b5c0a1c86ffbbfd314b2ae6718d2802de45a53ab5c532dd5c5d6cd177ed8849c6c2bf42919382057ff157cf06722229a3f8b0e9eceaf7275 languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.293.0": - version: 3.293.0 - resolution: "@aws-sdk/util-endpoints@npm:3.293.0" +"@aws-sdk/util-endpoints@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-endpoints@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: 801602e9b4317cb1250e626167525dfe354a790bf243a63de3325f255c5d53a759bd6bd5aa1c35837be2a1960025d02070038747dac7a6909579c33c0bd1cb1f + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 3574f29269dbb42ade8c4b8e95adf98e89d6cc9653b186a2e0e32f3a65c9a30c8d3f45e86c76ec17503c24638beac84e31120d71d7db59cf773c62bcb32e69b0 languageName: node linkType: hard -"@aws-sdk/util-hex-encoding@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-hex-encoding@npm:3.292.0" +"@aws-sdk/util-hex-encoding@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-hex-encoding@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 5940aa80509395957c08dc59da57727af09bec93f609a7083da4f2469353bc67a52823f9c13d5f9affd4eac59a38e3d24c1d79893fb46db4b9d7c3008e2a9f76 + tslib: ^2.5.0 + checksum: 4b85f087de5c2a8317ff13df4947e355b4c4acae1dd283133e53139457252fb83951194c85e07b89a1e12cecec1b3c0dbd11b7d0f9f2a7775d8c6d3d9c21371e languageName: node linkType: hard @@ -1573,84 +1573,84 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-middleware@npm:3.292.0" +"@aws-sdk/util-middleware@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-middleware@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: b49ee36c77d0996f3a7636bdec6685033eebf6385b546d867bd2503747334a67e7d9adc59842f492c269ab8838c38812d0d7d5b7ececc19988c268f33a3bd072 + tslib: ^2.5.0 + checksum: 7b59b64d3d7ea09b899ddd1cffdae710be7a6f21b1431c27184529bf6db804ca859ee738e7425f5557e6810ed0f5f800a8ecd866170a63d1fe3721938aa038bc languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-retry@npm:3.292.0" +"@aws-sdk/util-retry@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-retry@npm:3.295.0" dependencies: - "@aws-sdk/service-error-classification": 3.292.0 - tslib: ^2.3.1 - checksum: 6f5d0df53eab52ac9ec8d661ae7c38c7e9b4d57ddaca79524726d6ee98b4e739bd6d0b810c0d3d8aa77ac60ca775d4f803cb5b15d6a262204c18f26ec2924b3c + "@aws-sdk/service-error-classification": 3.295.0 + tslib: ^2.5.0 + checksum: a1825de57584d0670b90f2d234430c46960e2076b6d05241cf754c0366ba9daeb700fa866d0084ce66a6b13d4a9305e22a6eeadd16b90516eb9b3b92b63c9934 languageName: node linkType: hard -"@aws-sdk/util-stream-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-stream-browser@npm:3.292.0" +"@aws-sdk/util-stream-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-stream-browser@npm:3.295.0" dependencies: - "@aws-sdk/fetch-http-handler": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-base64": 3.292.0 - "@aws-sdk/util-hex-encoding": 3.292.0 - "@aws-sdk/util-utf8": 3.292.0 - tslib: ^2.3.1 - checksum: 8525867445ccd5bfc7da0c8728c13ee902184d675a9a85f46d57bec3d26cceced7576b137db4b0ce164133d64c42867092f8961e4ce52ef1ac47b915b019e0ba + "@aws-sdk/fetch-http-handler": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-base64": 3.295.0 + "@aws-sdk/util-hex-encoding": 3.295.0 + "@aws-sdk/util-utf8": 3.295.0 + tslib: ^2.5.0 + checksum: c343e2c7185ebd4a2dc289f6ed9ee882a9024fd772f9ff40be5692bec20bc281e19248b94c7b6a59957363990b64a3b488ee50ef450c552e268170334ffb0fe8 languageName: node linkType: hard -"@aws-sdk/util-stream-node@npm:3.292.0, @aws-sdk/util-stream-node@npm:^3.208.0": - version: 3.292.0 - resolution: "@aws-sdk/util-stream-node@npm:3.292.0" +"@aws-sdk/util-stream-node@npm:3.295.0, @aws-sdk/util-stream-node@npm:^3.208.0": + version: 3.295.0 + resolution: "@aws-sdk/util-stream-node@npm:3.295.0" dependencies: - "@aws-sdk/node-http-handler": 3.292.0 - "@aws-sdk/types": 3.292.0 - "@aws-sdk/util-buffer-from": 3.292.0 - tslib: ^2.3.1 - checksum: d185622ec8a804235ec3f9c25ad275d0c38077427fa1b36cc9702b777d7da71b54b12235cbcdfd014e2d1f6cbb315370ac32480a9ed8dc1efcd6ee27ed577def + "@aws-sdk/node-http-handler": 3.295.0 + "@aws-sdk/types": 3.295.0 + "@aws-sdk/util-buffer-from": 3.295.0 + tslib: ^2.5.0 + checksum: c3adcbfe13416e604284fccb4cafbedf7fdfdaf1905cfcab9e8d35db57ffcbac68631085139803a30e56b96c59ec93c47573aabe5106fe05a855b41ccc4bd4b3 languageName: node linkType: hard -"@aws-sdk/util-uri-escape@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-uri-escape@npm:3.292.0" +"@aws-sdk/util-uri-escape@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-uri-escape@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: 34cbe5ba5cc2678cfa9d88adb1adab2810f1a7879a105c4a2827a95af8903505190a8fc4d73cfeb3548ae024caf50420e7377120e59bb62018b0c783a9e4fb71 + tslib: ^2.5.0 + checksum: 2334baedd339161aa2fb6ae880c04730b072a217ed42b40aa0c0df526aba5a663302da50ba550ad657a4b3cf44070696d91501bf2ba33722f452247f5c2d0fde languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.292.0" +"@aws-sdk/util-user-agent-browser@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.295.0" dependencies: - "@aws-sdk/types": 3.292.0 + "@aws-sdk/types": 3.295.0 bowser: ^2.11.0 - tslib: ^2.3.1 - checksum: ececf366f8d40101ea0a72d2791ba0ac6cf4c820263567eb074f4dc7aafc03c8e2152bc05ccf9b0a7c10a50578366d8ec2c42987f9b565f0fb14b33d7dd792a9 + tslib: ^2.5.0 + checksum: 7048f1f4f0d9308586dc2ed9c7ddf49fb5bd095a98a65ff7425430e584292e88402573ddf0366581deb77ebf30b788190c3b59bb3fd8845c1ef8316b1c47c754 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.292.0" +"@aws-sdk/util-user-agent-node@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.295.0" dependencies: - "@aws-sdk/node-config-provider": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 + "@aws-sdk/node-config-provider": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: 7aa660de99967d33527dec9fc11fa5b311ca0121450627b5f96e6be0bc6db1501694f5fbc036773fecd9b107228f615a239628213b9ab9cde3dc28f49ed92b8a + checksum: a1dc47812eec1483d8d407e47ab6a23d4dce558a7696079704f05b1d0ee5c2384ce9ceea5cb3315236fec91dccf78bd80500558f301d9b303ca85e7707376cba languageName: node linkType: hard @@ -1663,33 +1663,33 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-utf8@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-utf8@npm:3.292.0" +"@aws-sdk/util-utf8@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-utf8@npm:3.295.0" dependencies: - "@aws-sdk/util-buffer-from": 3.292.0 - tslib: ^2.3.1 - checksum: 7b0177e9e49bf52f95049ea7bc50e3b3552a1785d5511941ce29239fb35c54fcface18d0f1e859c98275e174efb3ad8d00d151224ebfdd39170dc1ace32236a8 + "@aws-sdk/util-buffer-from": 3.295.0 + tslib: ^2.5.0 + checksum: 098058651aa48bb2a6652ea6a1a0a1520e9964a91920e67eed023eacc0956b75475d25025e888ee193140aa800ed89faafa67653914b78c7ffb98e8f96f6d54c languageName: node linkType: hard -"@aws-sdk/util-waiter@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/util-waiter@npm:3.292.0" +"@aws-sdk/util-waiter@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/util-waiter@npm:3.295.0" dependencies: - "@aws-sdk/abort-controller": 3.292.0 - "@aws-sdk/types": 3.292.0 - tslib: ^2.3.1 - checksum: eb863d7ceb88830fafc8c76b698912174526a0de42ee3f1b12d5a619a0df9bb00fd7e8d5dfdcc78a6b1deb546d56dc7ca198a9af11e4ad3997c67c622ccde852 + "@aws-sdk/abort-controller": 3.295.0 + "@aws-sdk/types": 3.295.0 + tslib: ^2.5.0 + checksum: 41b38c064849b47d0ebffd599917ef5fee3e23fb0f13aff57f8699ad0289591e8d9c363084133de662043dfbf7b5e9e3580a19745b28c09e7eb3078470b02578 languageName: node linkType: hard -"@aws-sdk/xml-builder@npm:3.292.0": - version: 3.292.0 - resolution: "@aws-sdk/xml-builder@npm:3.292.0" +"@aws-sdk/xml-builder@npm:3.295.0": + version: 3.295.0 + resolution: "@aws-sdk/xml-builder@npm:3.295.0" dependencies: - tslib: ^2.3.1 - checksum: b3f9a07b7f33eab08b1a1a3c5df5c9c294903171e721ffbbd524580846991ee3a8de0e7b205ef3b2b17696984eb50e0abb576119c125a762a1d86f43f55e383e + tslib: ^2.5.0 + checksum: a32bcea43104c049b995c967ea416887fac45da8a8ecf55f06836a08aff878683c702852b383a36c04a09368ebb091388169f46f0d0a49cf477392966b4bdbdd languageName: node linkType: hard From 33fdb2526a47e9525223c9645c6568988e9d9e45 Mon Sep 17 00:00:00 2001 From: Brian Phillips <28457+brianphillips@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:28:46 -0500 Subject: [PATCH 351/511] mark EntityPredicates as @public Signed-off-by: Brian Phillips <28457+brianphillips@users.noreply.github.com> --- plugins/catalog/api-report.md | 2 -- plugins/catalog/src/components/EntitySwitch/conditions.ts | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 52b2c958a7..ca91296913 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -355,8 +355,6 @@ export const EntityListContainer: (props: { // @public export function EntityOrphanWarning(): JSX.Element; -// Warning: (ae-missing-release-tag) "EntityPredicates" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface EntityPredicates { // (undocumented) diff --git a/plugins/catalog/src/components/EntitySwitch/conditions.ts b/plugins/catalog/src/components/EntitySwitch/conditions.ts index 02d7cf9bcf..f834804141 100644 --- a/plugins/catalog/src/components/EntitySwitch/conditions.ts +++ b/plugins/catalog/src/components/EntitySwitch/conditions.ts @@ -16,6 +16,7 @@ import { Entity } from '@backstage/catalog-model'; +/** @public */ export interface EntityPredicates { kind?: string | string[]; type?: string | string[]; From 605b43ad762c7459be9cb3b848936f048d9fb979 Mon Sep 17 00:00:00 2001 From: Tracey Date: Mon, 20 Mar 2023 16:13:08 -0700 Subject: [PATCH 352/511] cleaned up tests, fixed yarn.lock, and updated to .pdf Signed-off-by: Tracey --- .../README.md | 2 +- .../confluence/confluenceToMarkdown.test.ts | 15 +- .../confluence/confluenceToMarkdown.ts | 2 +- yarn.lock | 631 +++++++++--------- 4 files changed, 315 insertions(+), 335 deletions(-) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md index 7f526db553..740706b556 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md @@ -119,6 +119,6 @@ spec: forceAdmin: true ``` -Replace `` with your GitHub url without `https://`. +Replace `` with your GitHub URL without `https://`. You can find a list of all registered actions including their parameters at the /create/actions route in your Backstage application. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts index a7d0ea7b25..b95d8ae520 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts @@ -36,7 +36,7 @@ jest.mock('fs-extra', () => ({ outputFile: jest.fn(), openSync: jest.fn(), createWriteStream: jest.fn().mockReturnValue(new PassThrough()), - writeStream: jest.fn(), + ensureDir: jest.fn(), })); describe('confluence:transform:markdown', () => { @@ -148,16 +148,6 @@ describe('confluence:transform:markdown', () => { ), ); - const mockCreateWriteStream = jest.fn().mockReturnValue({ - on: jest.fn(), - once: jest.fn((_event, callback) => { - callback(); - }), - }); - jest.mock('fs', () => ({ - openSync: jest.fn(), - createWriteStream: jest.fn().mockReturnValue(mockCreateWriteStream), - })); const action = createConfluenceToMarkdownAction(options); await action.handler(mockContext); @@ -205,9 +195,6 @@ describe('confluence:transform:markdown', () => { ), ); - jest.mock('fs-extra', () => ({ - readFile: jest.fn().mockResolvedValue('File contents'), - })); const action = createConfluenceToMarkdownAction(options); await action.handler(mockContext); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts index 6cbf4da53a..ad58ed11c5 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts @@ -155,7 +155,7 @@ export const createConfluenceToMarkdownAction = (options: { let newString: string = markdownToPublish; productArray.forEach((product: string[]) => { // This regex is looking for either [](link to confluence) or ![](link to confluence) in the newly created markdown doc and updating it to point to the versions saved(in ./docs/img) in the local version of GitHub Repo during getAndWriteAttachments - const regex = product[0].includes('pdf') + const regex = product[0].includes('.pdf') ? new RegExp(`(\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi') : new RegExp(`(\\!\\[.*?\\]\\()(.*?${product[0]}.*?)(\\))`, 'gi'); newString = newString.replace(regex, `$1./img/${product[1]}$3`); diff --git a/yarn.lock b/yarn.lock index e4434d5168..60b3adf461 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11173,50 +11173,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/console@npm:29.5.0" +"@jest/console@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/console@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 - checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 + checksum: 8d9b163febe735153b523db527742309f4d598eda22f17f04e030060329bd3da4de7420fc1f7812f7a16f08273654a7de094c4b4e8b81a99dbfc17cfb1629008 languageName: node linkType: hard -"@jest/core@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/core@npm:29.5.0" +"@jest/core@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/core@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/reporters": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/reporters": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.5.0 - jest-config: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 + jest-changed-files: ^29.4.3 + jest-config: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-resolve-dependencies: ^29.5.0 - jest-runner: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 - jest-watcher: ^29.5.0 + jest-resolve: ^29.4.3 + jest-resolve-dependencies: ^29.4.3 + jest-runner: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 + jest-watcher: ^29.4.3 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -11224,7 +11224,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 + checksum: 4aa10644d66f44f051d5dd9cdcedce27acc71216dbcc5e7adebdea458e27aefe27c78f457d7efd49f58b968c35f42de5a521590876e2013593e675120b9e6ab1 languageName: node linkType: hard @@ -11237,15 +11237,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.4.3, @jest/environment@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/environment@npm:29.5.0" +"@jest/environment@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/environment@npm:29.4.3" dependencies: - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.5.0 - checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + jest-mock: ^29.4.3 + checksum: 7c1b0cc4e84b90f8a3bbeca9bbf088882c88aee70a81b3b8e24265dcb1cbc302cd1eee3319089cf65bfd39adbaea344903c712afea106cb8da6c86088d99c5fb languageName: node linkType: hard @@ -11258,60 +11258,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect-utils@npm:29.5.0" +"@jest/expect-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect-utils@npm:29.4.3" dependencies: jest-get-type: ^29.4.3 - checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + checksum: 2bbed39ff2fb59f5acac465a1ce7303e3b4b62b479e4f386261986c9827f7f799ea912761e22629c5daf10addf8513f16733c14a29c2647bb66d4ee625e9ff92 languageName: node linkType: hard -"@jest/expect@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/expect@npm:29.5.0" +"@jest/expect@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/expect@npm:29.4.3" dependencies: - expect: ^29.5.0 - jest-snapshot: ^29.5.0 - checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 + expect: ^29.4.3 + jest-snapshot: ^29.4.3 + checksum: 08d0d40077ec99a7491fe59d05821dbd31126cfba70875855d8a063698b7126b5f6c309c50811caacc6ae2f727c6e44f51bdcf1d6c1ea832b4f020045ef22d45 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.4.3, @jest/fake-timers@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/fake-timers@npm:29.5.0" +"@jest/fake-timers@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/fake-timers@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: adaceb9143c395cccf3d7baa0e49b7042c3092a554e8283146df19926247e34c21b5bde5688bb90e9e87b4a02e4587926c5d858ee0a38d397a63175d0a127874 languageName: node linkType: hard -"@jest/globals@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/globals@npm:29.5.0" +"@jest/globals@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/globals@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/types": ^29.5.0 - jest-mock: ^29.5.0 - checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/types": ^29.4.3 + jest-mock: ^29.4.3 + checksum: ea76b546ceb4aa5ce2bb3726df12f989b23150b51c9f7664790caa81b943012a657cf3a8525498af1c3518cdb387f54b816cfba1b0ddd22c7b20f03b1d7290b4 languageName: node linkType: hard -"@jest/reporters@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/reporters@npm:29.5.0" +"@jest/reporters@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/reporters@npm:29.4.3" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -11324,9 +11324,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -11336,7 +11336,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + checksum: 7aa2e429c915bd96c3334962addd69d2bbf52065725757ddde26b293f8c4420a1e8c65363cc3e1e5ec89100a5273ccd3771bec58325a2cc0d97afdc81995073a languageName: node linkType: hard @@ -11369,50 +11369,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-result@npm:29.5.0" +"@jest/test-result@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-result@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/types": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 + checksum: 164f102b96619ec283c2c39e208b8048e4674f75bf3c3a4f2e95048ae0f9226105add684b25f10d286d91c221625f877e2c1cfc3da46c42d7e1804da239318cb languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/test-sequencer@npm:29.5.0" +"@jest/test-sequencer@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/test-sequencer@npm:29.4.3" dependencies: - "@jest/test-result": ^29.5.0 + "@jest/test-result": ^29.4.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 slash: ^3.0.0 - checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e + checksum: 145e1fa9379e5be3587bde6d585b8aee5cf4442b06926928a87e9aec7de5be91b581711d627c6ca13144d244fe05e5d248c13b366b51bedc404f9dcfbfd79e9e languageName: node linkType: hard -"@jest/transform@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/transform@npm:29.5.0" +"@jest/transform@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/transform@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 + jest-util: ^29.4.3 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.2 - checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d + checksum: 082d74e04044213aa7baa8de29f8383e5010034f867969c8602a2447a4ef2f484cfaf2491eba3179ce42f369f7a0af419cbd087910f7e5caf7aa5d1fe03f2ff9 languageName: node linkType: hard @@ -11443,9 +11443,9 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.4.3, @jest/types@npm:^29.5.0": - version: 29.5.0 - resolution: "@jest/types@npm:29.5.0" +"@jest/types@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/types@npm:29.4.3" dependencies: "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 @@ -11453,7 +11453,7 @@ __metadata: "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 + checksum: 1756f4149d360f98567f56f434144f7af23ed49a2c42889261a314df6b6654c2de70af618fb2ee0ee39cadaf10835b885845557184509503646c9cb9dcc02bac languageName: node linkType: hard @@ -17711,20 +17711,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-jest@npm:29.5.0" +"babel-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-jest@npm:29.4.3" dependencies: - "@jest/transform": ^29.5.0 + "@jest/transform": ^29.4.3 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.5.0 + babel-preset-jest: ^29.4.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede + checksum: a1a95937adb5e717dbffc2eb9e583fa6d26c7e5d5b07bb492a2d7f68631510a363e9ff097eafb642ad642dfac9dc2b13872b584f680e166a4f0922c98ea95853 languageName: node linkType: hard @@ -17750,15 +17750,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-plugin-jest-hoist@npm:29.5.0" +"babel-plugin-jest-hoist@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-plugin-jest-hoist@npm:29.4.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + checksum: c8702a6db6b30ec39dfb9f8e72b501c13895231ed80b15ed2648448f9f0c7b7cc4b1529beac31802ae655f63479a05110ca612815aa25fb1b0e6c874e1589137 languageName: node linkType: hard @@ -17897,15 +17897,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.5.0": - version: 29.5.0 - resolution: "babel-preset-jest@npm:29.5.0" +"babel-preset-jest@npm:^29.4.3": + version: 29.4.3 + resolution: "babel-preset-jest@npm:29.4.3" dependencies: - babel-plugin-jest-hoist: ^29.5.0 + babel-plugin-jest-hoist: ^29.4.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + checksum: a091721861ea2f8d969ace8fe06570cff8f2e847dbc6e4800abacbe63f72131abde615ce0a3b6648472c97e55a5be7f8bf7ae381e2b194ad2fa1737096febcf5 languageName: node linkType: hard @@ -23081,16 +23081,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.5.0": - version: 29.5.0 - resolution: "expect@npm:29.5.0" +"expect@npm:^29.0.0, expect@npm:^29.4.3": + version: 29.4.3 + resolution: "expect@npm:29.4.3" dependencies: - "@jest/expect-utils": ^29.5.0 + "@jest/expect-utils": ^29.4.3 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 - checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 + checksum: ff9dd8c50c0c6fd4b2b00f6dbd7ab0e2063fe1953be81a8c10ae1c005c7f5667ba452918e2efb055504b72b701a4f82575a081a0a7158efb16d87991b0366feb languageName: node linkType: hard @@ -26679,58 +26679,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-changed-files@npm:29.5.0" +"jest-changed-files@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-changed-files@npm:29.4.3" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + checksum: 9a70bd8e92b37e18ad26d8bea97c516f41119fb7046b4255a13c76d557b0e54fa0629726de5a093fadfd6a0a08ce45da65a57086664d505b8db4b3133133e141 languageName: node linkType: hard -"jest-circus@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-circus@npm:29.5.0" +"jest-circus@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-circus@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/expect": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/expect": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.5.0 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-runtime: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-each: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-runtime: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 p-limit: ^3.1.0 - pretty-format: ^29.5.0 - pure-rand: ^6.0.0 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 + checksum: 2739bef9c888743b49ff3fe303131381618e5d2f250f613a91240d9c86e19e6874fc904cbd8bcb02ec9ec59a84e5dae4ffec929f0c6171e87ddbc05508a137f4 languageName: node linkType: hard -"jest-cli@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-cli@npm:29.5.0" +"jest-cli@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-cli@npm:29.4.3" dependencies: - "@jest/core": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-config: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -26740,34 +26739,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba + checksum: f4c9f6d76cde2c60a4169acbebb3f862728be03bcf3fe0077d2e55da7f9f3c3e9483cfa6e936832d35eabf96ee5ebf0300c4b0bd43cffff099801793466bfdd8 languageName: node linkType: hard -"jest-config@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-config@npm:29.5.0" +"jest-config@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-config@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.5.0 - "@jest/types": ^29.5.0 - babel-jest: ^29.5.0 + "@jest/test-sequencer": ^29.4.3 + "@jest/types": ^29.4.3 + babel-jest: ^29.4.3 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.5.0 - jest-environment-node: ^29.5.0 + jest-circus: ^29.4.3 + jest-environment-node: ^29.4.3 jest-get-type: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-runner: ^29.5.0 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-resolve: ^29.4.3 + jest-runner: ^29.4.3 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -26778,7 +26777,7 @@ __metadata: optional: true ts-node: optional: true - checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c + checksum: 92f9a9c6850b18682cb01892774a33967472af23a5844438d8c68077d5f2a29b15b665e4e4db7de3d74002a6dca158cd5b2cb9f5debfd2cce5e1aee6c74e3873 languageName: node linkType: hard @@ -26803,15 +26802,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-diff@npm:29.5.0" +"jest-diff@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-diff@npm:29.4.3" dependencies: chalk: ^4.0.0 diff-sequences: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 + pretty-format: ^29.4.3 + checksum: 877fd1edffef6b319688c27b152e5b28e2bc4bcda5ce0ca90d7e137f9fafda4280bae25403d4c0bfd9806c2c0b15d966aa2dfaf5f9928ec8f1ccea7fa1d08ed6 languageName: node linkType: hard @@ -26824,16 +26823,16 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-each@npm:29.5.0" +"jest-each@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-each@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 chalk: ^4.0.0 jest-get-type: ^29.4.3 - jest-util: ^29.5.0 - pretty-format: ^29.5.0 - checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 + jest-util: ^29.4.3 + pretty-format: ^29.4.3 + checksum: 1f72738338399efab0139eaea18bc198be0c6ed889770c8cbfa70bf9c724e8171fe1d3a29a94f9f39b8493ee6b2529bb350fb7c7c75e0d7eddfd28c253c79f9d languageName: node linkType: hard @@ -26858,17 +26857,17 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-environment-node@npm:29.5.0" +"jest-environment-node@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-environment-node@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-mock: ^29.5.0 - jest-util: ^29.5.0 - checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 + jest-mock: ^29.4.3 + jest-util: ^29.4.3 + checksum: 3c7362edfdbd516e83af7367c95dde35761a482b174de9735c07633405486ec73e19624e9bea4333fca33c24e8d65eaa1aa6594e0cb6bfeeeb564ccc431ee61d languageName: node linkType: hard @@ -26886,11 +26885,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-haste-map@npm:29.5.0" +"jest-haste-map@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-haste-map@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -26898,24 +26897,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.4.3 - jest-util: ^29.5.0 - jest-worker: ^29.5.0 + jest-util: ^29.4.3 + jest-worker: ^29.4.3 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 + checksum: c7a83ebe6008b3fe96a96235e8153092e54b14df68e0f4205faedec57450df26b658578495a71c6d82494c01fbb44bca98c1506a6b2b9c920696dcc5d2e2bc59 languageName: node linkType: hard -"jest-leak-detector@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-leak-detector@npm:29.5.0" +"jest-leak-detector@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-leak-detector@npm:29.4.3" dependencies: jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 + pretty-format: ^29.4.3 + checksum: ec2b45e6f0abce81bd0dd0f6fd06b433c24d1ec865267af7640fae540ec868b93752598e407a9184d9c7419cbf32e8789007cc8c1be1a84f8f7321a0f8ad01f1 languageName: node linkType: hard @@ -26931,15 +26930,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-matcher-utils@npm:29.5.0" +"jest-matcher-utils@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-matcher-utils@npm:29.4.3" dependencies: chalk: ^4.0.0 - jest-diff: ^29.5.0 + jest-diff: ^29.4.3 jest-get-type: ^29.4.3 - pretty-format: ^29.5.0 - checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 + pretty-format: ^29.4.3 + checksum: 9e13cbe42d2113bab2691110c7c3ba5cec3b94abad2727e1de90929d0f67da444e9b2066da3b476b5bf788df53a8ede0e0a950cfb06a04e4d6d566d115ee4f1d languageName: node linkType: hard @@ -26960,31 +26959,31 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-message-util@npm:29.5.0" +"jest-message-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-message-util@npm:29.4.3" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf + checksum: 64f06b9550021e68da0059020bea8691283cf818918810bb67192d7b7fb9b691c7eadf55c2ca3cd04df5394918f2327245077095cdc0d6b04be3532d2c7d0ced languageName: node linkType: hard -"jest-mock@npm:^29.4.3, jest-mock@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-mock@npm:29.5.0" +"jest-mock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-mock@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" - jest-util: ^29.5.0 - checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c + jest-util: ^29.4.3 + checksum: 8eb4a29b02d2cd03faac0290b6df6d23b4ffa43f72b21c7fff3c7dd04a2797355b1e85862b70b15341dd33ee3a693b17db5520a6f6e6b81ee75601987de6a1a2 languageName: node linkType: hard @@ -27007,95 +27006,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve-dependencies@npm:29.5.0" +"jest-resolve-dependencies@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve-dependencies@npm:29.4.3" dependencies: jest-regex-util: ^29.4.3 - jest-snapshot: ^29.5.0 - checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf + jest-snapshot: ^29.4.3 + checksum: 3ad934cd2170c9658d8800f84a975dafc866ec85b7ce391c640c09c3744ced337787620d8667dc8d1fa5e0b1493f973caa1a1bb980e4e6a50b46a1720baf0bd1 languageName: node linkType: hard -"jest-resolve@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-resolve@npm:29.5.0" +"jest-resolve@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-resolve@npm:29.4.3" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 + jest-haste-map: ^29.4.3 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.5.0 - jest-validate: ^29.5.0 + jest-util: ^29.4.3 + jest-validate: ^29.4.3 resolve: ^1.20.0 resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f + checksum: 056a66beccf833f3c7e5a8fc9bfec218886e87b0b103decdbdf11893669539df489d1490cd6d5f0eea35731e8be0d2e955a6710498f970d2eae734da4df029dc languageName: node linkType: hard -"jest-runner@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runner@npm:29.5.0" +"jest-runner@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runner@npm:29.4.3" dependencies: - "@jest/console": ^29.5.0 - "@jest/environment": ^29.5.0 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/console": ^29.4.3 + "@jest/environment": ^29.4.3 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.4.3 - jest-environment-node: ^29.5.0 - jest-haste-map: ^29.5.0 - jest-leak-detector: ^29.5.0 - jest-message-util: ^29.5.0 - jest-resolve: ^29.5.0 - jest-runtime: ^29.5.0 - jest-util: ^29.5.0 - jest-watcher: ^29.5.0 - jest-worker: ^29.5.0 + jest-environment-node: ^29.4.3 + jest-haste-map: ^29.4.3 + jest-leak-detector: ^29.4.3 + jest-message-util: ^29.4.3 + jest-resolve: ^29.4.3 + jest-runtime: ^29.4.3 + jest-util: ^29.4.3 + jest-watcher: ^29.4.3 + jest-worker: ^29.4.3 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + checksum: c41108e5da01e0b8fdc2a06c5042eb49bb1d8db0e0d4651769fd1b9fe84ab45188617c11a3a8e1c83748b29bfe57dd77001ec57e86e3e3c30f3534e0314f8882 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-runtime@npm:29.5.0" +"jest-runtime@npm:^29.0.2, jest-runtime@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-runtime@npm:29.4.3" dependencies: - "@jest/environment": ^29.5.0 - "@jest/fake-timers": ^29.5.0 - "@jest/globals": ^29.5.0 + "@jest/environment": ^29.4.3 + "@jest/fake-timers": ^29.4.3 + "@jest/globals": ^29.4.3 "@jest/source-map": ^29.4.3 - "@jest/test-result": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/test-result": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.5.0 - jest-message-util: ^29.5.0 - jest-mock: ^29.5.0 + jest-haste-map: ^29.4.3 + jest-message-util: ^29.4.3 + jest-mock: ^29.4.3 jest-regex-util: ^29.4.3 - jest-resolve: ^29.5.0 - jest-snapshot: ^29.5.0 - jest-util: ^29.5.0 + jest-resolve: ^29.4.3 + jest-snapshot: ^29.4.3 + jest-util: ^29.4.3 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d + checksum: b99f8a910d1a38e7476058ba04ad44dfd3d93e837bb7c301d691e646a1085412fde87f06fbe271c9145f0e72d89400bfa7f6994bc30d456c7742269f37d0f570 languageName: node linkType: hard -"jest-snapshot@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-snapshot@npm:29.5.0" +"jest-snapshot@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-snapshot@npm:29.4.3" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -27103,24 +27102,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.5.0 - "@jest/transform": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/expect-utils": ^29.4.3 + "@jest/transform": ^29.4.3 + "@jest/types": ^29.4.3 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.5.0 + expect: ^29.4.3 graceful-fs: ^4.2.9 - jest-diff: ^29.5.0 + jest-diff: ^29.4.3 jest-get-type: ^29.4.3 - jest-matcher-utils: ^29.5.0 - jest-message-util: ^29.5.0 - jest-util: ^29.5.0 + jest-haste-map: ^29.4.3 + jest-matcher-utils: ^29.4.3 + jest-message-util: ^29.4.3 + jest-util: ^29.4.3 natural-compare: ^1.4.0 - pretty-format: ^29.5.0 + pretty-format: ^29.4.3 semver: ^7.3.5 - checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b + checksum: 79ba52f2435e23ce72b1309be4b17fdbcb299d1c2ce97ebb61df9a62711e9463035f63b4c849181b2fe5aa17b3e09d30ee4668cc25fb3c6f59511c010b4d9494 languageName: node linkType: hard @@ -27138,47 +27138,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.4.3, jest-util@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-util@npm:29.5.0" +"jest-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-util@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 + checksum: 606b3e6077895baf8fb4ad4d08c134f37a6b81d5ba77ae654c942b1ae4b7294ab3b5a0eb93db34f129407b367970cf3b76bf5c80897b30f215f2bc8bf20a5f3f languageName: node linkType: hard -"jest-validate@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-validate@npm:29.5.0" +"jest-validate@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-validate@npm:29.4.3" dependencies: - "@jest/types": ^29.5.0 + "@jest/types": ^29.4.3 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^29.5.0 - checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 + pretty-format: ^29.4.3 + checksum: 983e56430d86bed238448cae031535c1d908f760aa312cd4a4ec0e92f3bc1b6675415ddf57cdeceedb8ad9c698e5bcd10f0a856dfc93a8923bdecc7733f4ba80 languageName: node linkType: hard -"jest-watcher@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-watcher@npm:29.5.0" +"jest-watcher@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-watcher@npm:29.4.3" dependencies: - "@jest/test-result": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/test-result": ^29.4.3 + "@jest/types": ^29.4.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.5.0 + jest-util: ^29.4.3 string-length: ^4.0.1 - checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 + checksum: 44b64991b3414db853c3756f14690028f4edef7aebfb204a4291cc1901c2239fa27a8687c5c5abbecc74bf613e0bb9b1378bf766430c9febcc71e9c0cb5ad8fc languageName: node linkType: hard @@ -27213,26 +27213,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-worker@npm:29.5.0" +"jest-worker@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-worker@npm:29.4.3" dependencies: "@types/node": "*" - jest-util: ^29.5.0 + jest-util: ^29.4.3 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + checksum: c99ae66f257564613e72c5797c3a68f21a22e1c1fb5f30d14695ff5b508a0d2405f22748f13a3df8d1015b5e16abb130170f81f047ff68f58b6b1d2ff6ebc51b languageName: node linkType: hard "jest@npm:^29.0.2": - version: 29.5.0 - resolution: "jest@npm:29.5.0" + version: 29.4.3 + resolution: "jest@npm:29.4.3" dependencies: - "@jest/core": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.4.3 + "@jest/types": ^29.4.3 import-local: ^3.0.2 - jest-cli: ^29.5.0 + jest-cli: ^29.4.3 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -27240,7 +27240,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + checksum: 084d10d1ceaade3c40e6d3bbd71b9b71b8919ba6fbd6f1f6699bdc259a6ba2f7350c7ccbfa10c11f7e3e01662853650a6244210179542fe4ba87e77dc3f3109f languageName: node linkType: hard @@ -30241,8 +30241,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1": - version: 1.1.0 - resolution: "msw@npm:1.1.0" + version: 1.0.1 + resolution: "msw@npm:1.0.1" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -30270,7 +30270,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: e555547defbc3f07532bdadcbf9f4e3a32b92156d3869e85c9038ecaac220cfc93901727da097b7f9d3ecf9cbbc5a9178c0ecdd3999a9201db4c85c99b92c361 + checksum: e5d6cbe67067ca46f42aaa33011f53a4e5a873abcf81c52a6996536b3c41a88f522821d3a4cf589658252581506afddb58fd8c3dfd79a5cbf06e26e14f9570b6 languageName: node linkType: hard @@ -32934,14 +32934,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": - version: 29.5.0 - resolution: "pretty-format@npm:29.5.0" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.4.3": + version: 29.4.3 + resolution: "pretty-format@npm:29.4.3" dependencies: "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 + checksum: 3258b9a010bd79b3cf73783ad1e4592b6326fc981b6e31b742f316f14e7fbac09b48a9dbf274d092d9bde404db9fe16f518370e121837dc078a597392e6e5cc5 languageName: node linkType: hard @@ -33301,13 +33301,6 @@ __metadata: languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.0.1 - resolution: "pure-rand@npm:6.0.1" - checksum: 4bb565399993b815658a72e359f574ce4f04827a42a905105d61163ae86f456d91595a0e4241e7bce04328fae0638ae70ac0428d93ecb55971c465bd084f8648 - languageName: node - linkType: hard - "pvtsutils@npm:^1.3.2": version: 1.3.2 resolution: "pvtsutils@npm:1.3.2" @@ -39530,9 +39523,9 @@ __metadata: linkType: hard "yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.1.3": - version: 2.2.1 - resolution: "yaml@npm:2.2.1" - checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 + version: 2.1.3 + resolution: "yaml@npm:2.1.3" + checksum: 91316062324a93f9cb547469092392e7d004ff8f70c40fecb420f042a4870b2181557350da56c92f07bd44b8f7a252b0be26e6ade1f548e1f4351bdd01c9d3c7 languageName: node linkType: hard From 3f43bd960b4e581d00be9d172bece947fad38052 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 00:15:07 +0000 Subject: [PATCH 353/511] chore(deps): update dependency @types/cron to v2.0.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8e28fd42bb..599ad74668 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14642,12 +14642,12 @@ __metadata: linkType: hard "@types/cron@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/cron@npm:2.0.0" + version: 2.0.1 + resolution: "@types/cron@npm:2.0.1" dependencies: "@types/luxon": "*" "@types/node": "*" - checksum: 392d2cfca51504140397533c30be8facd2196251074eb26ee09232a7e983144ff1d8364cd64922ed22d142686a4724934a70672fc8353b441fea729ac0ed0611 + checksum: 4268c784750a1373036b4de95cd1f35ab4fa5227c1639302eedb25a35900d7805271e33b557ad7ccccd6d1829944963df25cd0d9d0d603abf3bcdf148b69ea5d languageName: node linkType: hard From 84ff4822b21fab07c19c51454880691eed9ac8f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 01:28:11 +0000 Subject: [PATCH 354/511] fix(deps): update dependency eslint-config-prettier to v8.8.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8e28fd42bb..3026a93e82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22278,13 +22278,13 @@ __metadata: linkType: hard "eslint-config-prettier@npm:^8.3.0": - version: 8.7.0 - resolution: "eslint-config-prettier@npm:8.7.0" + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: b05bc7f2296ce3e0925c14147849706544870e0382d38af2352d709a6cf8521bdaff2bd8e5021f1780e570775a8ffa1d2bac28b8065d90d43a3f1f98fd26ce52 + checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c languageName: node linkType: hard From 7972729c60e5790f6b43d2b24dde0ef6f7abd999 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 04:37:03 +0000 Subject: [PATCH 355/511] fix(deps): update dependency webpack-dev-server to v4.13.1 Signed-off-by: Renovate Bot --- yarn.lock | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8e28fd42bb..77b720ee77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28226,6 +28226,16 @@ __metadata: languageName: node linkType: hard +"launch-editor@npm:^2.6.0": + version: 2.6.0 + resolution: "launch-editor@npm:2.6.0" + dependencies: + picocolors: ^1.0.0 + shell-quote: ^1.7.3 + checksum: 48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d + languageName: node + linkType: hard + "lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -39087,8 +39097,8 @@ __metadata: linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.11.1 - resolution: "webpack-dev-server@npm:4.11.1" + version: 4.13.1 + resolution: "webpack-dev-server@npm:4.13.1" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -39109,6 +39119,7 @@ __metadata: html-entities: ^2.3.2 http-proxy-middleware: ^2.0.3 ipaddr.js: ^2.0.1 + launch-editor: ^2.6.0 open: ^8.0.9 p-retry: ^4.5.0 rimraf: ^3.0.2 @@ -39118,15 +39129,17 @@ __metadata: sockjs: ^0.3.24 spdy: ^4.0.2 webpack-dev-middleware: ^5.3.1 - ws: ^8.4.2 + ws: ^8.13.0 peerDependencies: webpack: ^4.37.0 || ^5.0.0 peerDependenciesMeta: + webpack: + optional: true webpack-cli: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: b7601a39ee0f413988259e29a36835b0a68522cfaa161de5b7ec99b3399acdd99d44189add4aaf4a5191258bb130f9cf3e68919324a1955c7557f5fe6ab0d96c + checksum: f70611544b7d964a31eb3d934d7c2b376b97e6927a89e03b2e21cfa5812bb639625cd18fd350de1604ba6c455b324135523a894032f28c69d90d90682e4f3b7d languageName: node linkType: hard @@ -39531,9 +39544,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.4.2, ws@npm:^8.8.0": - version: 8.12.0 - resolution: "ws@npm:8.12.0" +"ws@npm:^8.11.0, ws@npm:^8.13.0, ws@npm:^8.8.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -39542,7 +39555,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c languageName: node linkType: hard From 1adc2c787e7ddb04c31d2c74abd18d5c772bacf3 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 7 Mar 2023 13:53:58 +0100 Subject: [PATCH 356/511] feat(search): create search collator modules Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- packages/backend-next/package.json | 4 +- packages/backend-next/src/index.ts | 28 ++++- packages/backend-next/src/plugins/search.ts | 82 -------------- plugins/catalog-backend/api-report.md | 46 +++----- plugins/catalog-backend/package.json | 1 + plugins/catalog-backend/src/index.ts | 14 +++ plugins/catalog-backend/src/search/index.ts | 5 - plugins/explore-backend/api-report.md | 34 +----- plugins/explore-backend/package.json | 1 + plugins/explore-backend/src/index.ts | 16 ++- .../.eslintrc.js | 1 + .../CHANGELOG.md | 1 + .../search-backend-module-catalog/README.md | 7 ++ .../alpha-api-report.md | 66 +++++++++++ .../api-report.md | 52 +++++++++ .../package.json | 70 ++++++++++++ .../src/alpha.ts | 90 +++++++++++++++ .../CatalogCollatorEntityTransformer.ts | 0 .../DefaultCatalogCollatorFactory.test.ts | 0 .../DefaultCatalogCollatorFactory.ts | 0 ...ltCatalogCollatorEntityTransformer.test.ts | 0 ...defaultCatalogCollatorEntityTransformer.ts | 0 .../src/collators/index.ts | 21 ++++ .../src/index.ts | 22 ++++ .../alpha-api-report.md | 22 ++-- .../src/alpha.ts | 13 ++- .../.eslintrc.js | 1 + .../CHANGELOG.md | 1 + .../search-backend-module-explore/README.md | 7 ++ .../alpha-api-report.md | 56 ++++++++++ .../api-report.md | 39 +++++++ .../package.json | 71 ++++++++++++ .../src/alpha.ts | 85 ++++++++++++++ .../collators}/ToolDocumentCollatorFactory.ts | 0 .../src/collators}/index.ts | 1 + .../src/index.ts | 22 ++++ .../alpha-api-report.md | 2 +- plugins/search-backend-module-pg/src/alpha.ts | 4 +- .../.eslintrc.js | 1 + .../CHANGELOG.md | 1 + .../search-backend-module-techdocs/README.md | 7 ++ .../alpha-api-report.md | 40 +++++++ .../api-report.md | 42 +++++++ .../package.json | 71 ++++++++++++ .../src/alpha.ts | 89 +++++++++++++++ .../DefaultTechDocsCollatorFactory.test.ts | 0 .../DefaultTechDocsCollatorFactory.ts | 0 .../src/collators/index.ts | 19 ++++ .../src/index.ts | 22 ++++ plugins/techdocs-backend/api-report.md | 32 +----- plugins/techdocs-backend/package.json | 1 + plugins/techdocs-backend/src/search/index.ts | 15 ++- yarn.lock | 105 +++++++++++++++++- 53 files changed, 1124 insertions(+), 206 deletions(-) delete mode 100644 packages/backend-next/src/plugins/search.ts create mode 100644 plugins/search-backend-module-catalog/.eslintrc.js create mode 100644 plugins/search-backend-module-catalog/CHANGELOG.md create mode 100644 plugins/search-backend-module-catalog/README.md create mode 100644 plugins/search-backend-module-catalog/alpha-api-report.md create mode 100644 plugins/search-backend-module-catalog/api-report.md create mode 100644 plugins/search-backend-module-catalog/package.json create mode 100644 plugins/search-backend-module-catalog/src/alpha.ts rename plugins/{catalog-backend/src/search => search-backend-module-catalog/src/collators}/CatalogCollatorEntityTransformer.ts (100%) rename plugins/{catalog-backend/src/search => search-backend-module-catalog/src/collators}/DefaultCatalogCollatorFactory.test.ts (100%) rename plugins/{catalog-backend/src/search => search-backend-module-catalog/src/collators}/DefaultCatalogCollatorFactory.ts (100%) rename plugins/{catalog-backend/src/search => search-backend-module-catalog/src/collators}/defaultCatalogCollatorEntityTransformer.test.ts (100%) rename plugins/{catalog-backend/src/search => search-backend-module-catalog/src/collators}/defaultCatalogCollatorEntityTransformer.ts (100%) create mode 100644 plugins/search-backend-module-catalog/src/collators/index.ts create mode 100644 plugins/search-backend-module-catalog/src/index.ts create mode 100644 plugins/search-backend-module-explore/.eslintrc.js create mode 100644 plugins/search-backend-module-explore/CHANGELOG.md create mode 100644 plugins/search-backend-module-explore/README.md create mode 100644 plugins/search-backend-module-explore/alpha-api-report.md create mode 100644 plugins/search-backend-module-explore/api-report.md create mode 100644 plugins/search-backend-module-explore/package.json create mode 100644 plugins/search-backend-module-explore/src/alpha.ts rename plugins/{explore-backend/src/search => search-backend-module-explore/src/collators}/ToolDocumentCollatorFactory.ts (100%) rename plugins/{explore-backend/src/search => search-backend-module-explore/src/collators}/index.ts (99%) create mode 100644 plugins/search-backend-module-explore/src/index.ts create mode 100644 plugins/search-backend-module-techdocs/.eslintrc.js create mode 100644 plugins/search-backend-module-techdocs/CHANGELOG.md create mode 100644 plugins/search-backend-module-techdocs/README.md create mode 100644 plugins/search-backend-module-techdocs/alpha-api-report.md create mode 100644 plugins/search-backend-module-techdocs/api-report.md create mode 100644 plugins/search-backend-module-techdocs/package.json create mode 100644 plugins/search-backend-module-techdocs/src/alpha.ts rename plugins/{techdocs-backend/src/search => search-backend-module-techdocs/src/collators}/DefaultTechDocsCollatorFactory.test.ts (100%) rename plugins/{techdocs-backend/src/search => search-backend-module-techdocs/src/collators}/DefaultTechDocsCollatorFactory.ts (100%) create mode 100644 plugins/search-backend-module-techdocs/src/collators/index.ts create mode 100644 plugins/search-backend-module-techdocs/src/index.ts diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 8df5ace282..9859717fd5 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -30,9 +30,11 @@ "@backstage/backend-plugin-api": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", - "@backstage/plugin-explore-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-search-backend": "workspace:^", + "@backstage/plugin-search-backend-module-catalog": "workspace:^", + "@backstage/plugin-search-backend-module-explore": "workspace:^", + "@backstage/plugin-search-backend-module-techdocs": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-techdocs-backend": "workspace:^", "@backstage/plugin-todo-backend": "workspace:^" diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 10680ca798..231343203a 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -14,24 +14,40 @@ * limitations under the License. */ -import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha'; -import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha'; import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; +import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha'; +import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha'; import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; -import { searchIndexRegistry } from './plugins/search'; +import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; +import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; +import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; const backend = createBackend(); -backend.add(catalogPlugin()); -backend.add(catalogModuleTemplateKind()); backend.add(appPlugin({ appPackageName: 'example-app' })); + +// Todo backend.add(todoPlugin()); + +// Techdocs backend.add(techdocsPlugin()); +// Catalog +backend.add(catalogPlugin()); +backend.add(catalogModuleTemplateKind()); + +// Search +const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, +}; backend.add(searchPlugin()); -backend.add(searchIndexRegistry()); +backend.add(searchModuleCatalogCollator({ schedule })); +backend.add(searchModuleTechDocsCollator({ schedule })); +backend.add(searchModuleExploreCollator({ schedule })); backend.start(); diff --git a/packages/backend-next/src/plugins/search.ts b/packages/backend-next/src/plugins/search.ts deleted file mode 100644 index 1329135e56..0000000000 --- a/packages/backend-next/src/plugins/search.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2023 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 { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; -import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; -import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; -import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; - -export const searchIndexRegistry = createBackendModule({ - moduleId: 'searchIndexRegistry', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - indexRegistry: searchIndexRegistryExtensionPoint, - config: coreServices.config, - discovery: coreServices.discovery, - tokenManager: coreServices.tokenManager, - logger: coreServices.logger, - scheduler: coreServices.scheduler, - }, - async init({ - indexRegistry, - config, - logger, - discovery, - tokenManager, - scheduler, - }) { - const schedule = scheduler.createScheduledTaskRunner({ - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - // A 3 second delay gives the backend server a chance to initialize before - // any collators are executed, which may attempt requests against the API. - initialDelay: { seconds: 3 }, - }); - - indexRegistry.addCollator({ - schedule, - factory: DefaultCatalogCollatorFactory.fromConfig(config, { - discovery, - tokenManager, - }), - }); - - indexRegistry.addCollator({ - schedule, - factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - discovery, - logger: loggerToWinstonLogger(logger), - tokenManager, - }), - }); - - indexRegistry.addCollator({ - schedule, - factory: ToolDocumentCollatorFactory.fromConfig(config, { - discovery, - logger: loggerToWinstonLogger(logger), - }), - }); - }, - }); - }, -}); diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 5e7b2dee02..3d6a33fbf9 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -11,6 +11,7 @@ import { AnalyzeLocationGenerateEntity as AnalyzeLocationGenerateEntity_2 } from import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/plugin-catalog-common'; import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common'; import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogCollatorEntityTransformer } from '@backstage/plugin-search-backend-module-catalog'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; import { CatalogProcessor as CatalogProcessor_2 } from '@backstage/plugin-catalog-node'; import { CatalogProcessorCache as CatalogProcessorCache_2 } from '@backstage/plugin-catalog-node'; @@ -23,8 +24,15 @@ import { CatalogProcessorRefreshKeysResult as CatalogProcessorRefreshKeysResult_ import { CatalogProcessorRelationResult as CatalogProcessorRelationResult_2 } from '@backstage/plugin-catalog-node'; import { CatalogProcessorResult as CatalogProcessorResult_2 } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; +<<<<<<< HEAD import { DeferredEntity as DeferredEntity_2 } from '@backstage/plugin-catalog-node'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +======= +import { defaultCatalogCollatorEntityTransformer } from '@backstage/plugin-search-backend-module-catalog'; +import { DefaultCatalogCollatorFactory } from '@backstage/plugin-search-backend-module-catalog'; +import { DefaultCatalogCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-catalog'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; +>>>>>>> 56a45401d3d (feat(search): create search collator modules) import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; import { EntityProvider as EntityProvider_2 } from '@backstage/plugin-catalog-node'; @@ -44,7 +52,11 @@ import { PermissionRule } from '@backstage/plugin-permission-node'; import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; +<<<<<<< HEAD import { Readable } from 'stream'; +======= +import { processingResult } from '@backstage/plugin-catalog-node'; +>>>>>>> 56a45401d3d (feat(search): create search collator modules) import { Router } from 'express'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { TokenManager } from '@backstage/backend-common'; @@ -160,10 +172,7 @@ export class CatalogBuilder { useLegacySingleProcessorValidation(): this; } -// @public (undocumented) -export type CatalogCollatorEntityTransformer = ( - entity: Entity, -) => Omit; +export { CatalogCollatorEntityTransformer }; // @public (undocumented) export type CatalogEnvironment = { @@ -286,34 +295,11 @@ export class DefaultCatalogCollator { readonly visibilityPermission: Permission; } -// @public (undocumented) -export const defaultCatalogCollatorEntityTransformer: CatalogCollatorEntityTransformer; +export { defaultCatalogCollatorEntityTransformer }; -// @public (undocumented) -export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { - // (undocumented) - static fromConfig( - _config: Config, - options: DefaultCatalogCollatorFactoryOptions, - ): DefaultCatalogCollatorFactory; - // (undocumented) - getCollator(): Promise; - // (undocumented) - readonly type = 'software-catalog'; - // (undocumented) - readonly visibilityPermission: Permission; -} +export { DefaultCatalogCollatorFactory }; -// @public (undocumented) -export type DefaultCatalogCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - tokenManager: TokenManager; - locationTemplate?: string; - filter?: GetEntitiesRequest['filter']; - batchSize?: number; - catalogClient?: CatalogApi; - entityTransformer?: CatalogCollatorEntityTransformer; -}; +export { DefaultCatalogCollatorFactoryOptions }; // @public @deprecated (undocumented) export type DeferredEntity = DeferredEntity_2; diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 1e837fd9ba..203a89b730 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -57,6 +57,7 @@ "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", + "@backstage/plugin-search-backend-module-catalog": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/types": "workspace:^", "@opentelemetry/api": "^1.3.0", diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index b3d2bc95c7..594b96b347 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -27,3 +27,17 @@ export * from './processing'; export * from './search'; export * from './service'; export * from './deprecated'; + +import { + DefaultCatalogCollatorFactory as _DefaultCatalogCollatorFactory, + defaultCatalogCollatorEntityTransformer as _defaultCatalogCollatorEntityTransformer, +} from '@backstage/plugin-search-backend-module-catalog'; + +/** + * @deprecated + * import from @backstage/search-backend-module-catalog instead + */ +export type { + DefaultCatalogCollatorFactoryOptions, + CatalogCollatorEntityTransformer, +} from '@backstage/plugin-search-backend-module-catalog'; diff --git a/plugins/catalog-backend/src/search/index.ts b/plugins/catalog-backend/src/search/index.ts index 3603ab2e60..50966e4c5b 100644 --- a/plugins/catalog-backend/src/search/index.ts +++ b/plugins/catalog-backend/src/search/index.ts @@ -14,11 +14,6 @@ * limitations under the License. */ -export { DefaultCatalogCollatorFactory } from './DefaultCatalogCollatorFactory'; -export type { DefaultCatalogCollatorFactoryOptions } from './DefaultCatalogCollatorFactory'; -export type { CatalogCollatorEntityTransformer } from './CatalogCollatorEntityTransformer'; -export { defaultCatalogCollatorEntityTransformer } from './defaultCatalogCollatorEntityTransformer'; - /** * todo(backstage/techdocs-core): stop exporting this in a future release. */ diff --git a/plugins/explore-backend/api-report.md b/plugins/explore-backend/api-report.md index cc112ed3cc..4bcdc07079 100644 --- a/plugins/explore-backend/api-report.md +++ b/plugins/explore-backend/api-report.md @@ -3,18 +3,14 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - -import { Config } from '@backstage/config'; -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { ExploreTool } from '@backstage/plugin-explore-common'; import express from 'express'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; import { GetExploreToolsResponse } from '@backstage/plugin-explore-common'; -import { IndexableDocument } from '@backstage/plugin-search-common'; import { Logger } from 'winston'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { Readable } from 'stream'; +import { ToolDocument } from '@backstage/plugin-search-backend-module-explore'; +import { ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; +import { ToolDocumentCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-explore'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -40,27 +36,9 @@ export class StaticExploreToolProvider implements ExploreToolProvider { getTools(request: GetExploreToolsRequest): Promise; } -// @public -export interface ToolDocument extends IndexableDocument, ExploreTool {} +export { ToolDocument }; -// @public -export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { - // (undocumented) - execute(): AsyncGenerator; - // (undocumented) - static fromConfig( - _config: Config, - options: ToolDocumentCollatorFactoryOptions, - ): ToolDocumentCollatorFactory; - // (undocumented) - getCollator(): Promise; - // (undocumented) - readonly type: string; -} +export { ToolDocumentCollatorFactory }; -// @public -export type ToolDocumentCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - logger: Logger; -}; +export { ToolDocumentCollatorFactoryOptions }; ``` diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 00629c8da4..ce1a22e502 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -25,6 +25,7 @@ "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-explore-common": "workspace:^", + "@backstage/plugin-search-backend-module-explore": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@types/express": "*", "express": "^4.18.1", diff --git a/plugins/explore-backend/src/index.ts b/plugins/explore-backend/src/index.ts index a0e7216621..6c456bffc2 100644 --- a/plugins/explore-backend/src/index.ts +++ b/plugins/explore-backend/src/index.ts @@ -20,7 +20,6 @@ * @packageDocumentation */ -export * from './search'; export * from './service'; export * from './tools'; @@ -28,3 +27,18 @@ export * from './tools'; * @internal Example only - do not use in production */ export { exampleTools } from './example/exampleTools'; + +/** + * @deprecated + * import from @backstage/plugin-search-backend-module-explore instead + */ +export { ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; + +/** + * @deprecated + * import from @backstage/plugin-search-backend-module-explore instead + */ +export type { + ToolDocument, + ToolDocumentCollatorFactoryOptions, +} from '@backstage/plugin-search-backend-module-explore'; diff --git a/plugins/search-backend-module-catalog/.eslintrc.js b/plugins/search-backend-module-catalog/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/search-backend-module-catalog/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md new file mode 100644 index 0000000000..c870819424 --- /dev/null +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -0,0 +1 @@ +# @backstage/plugin-search-backend-module-catalog diff --git a/plugins/search-backend-module-catalog/README.md b/plugins/search-backend-module-catalog/README.md new file mode 100644 index 0000000000..9860f86b1d --- /dev/null +++ b/plugins/search-backend-module-catalog/README.md @@ -0,0 +1,7 @@ +# search-backend-module-catalog + +... + +## Getting started + +... diff --git a/plugins/search-backend-module-catalog/alpha-api-report.md b/plugins/search-backend-module-catalog/alpha-api-report.md new file mode 100644 index 0000000000..e0173fce74 --- /dev/null +++ b/plugins/search-backend-module-catalog/alpha-api-report.md @@ -0,0 +1,66 @@ +## API Report File for "@backstage/plugin-search-backend-module-catalog" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; +import { Config } from '@backstage/config'; +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { Entity } from '@backstage/catalog-model'; +import { GetEntitiesRequest } from '@backstage/catalog-client'; +import { Permission } from '@backstage/plugin-permission-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Readable } from 'stream'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { TokenManager } from '@backstage/backend-common'; + +// @public (undocumented) +export type CatalogCollatorEntityTransformer = ( + entity: Entity, +) => Omit; + +// @public (undocumented) +export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { + // (undocumented) + static fromConfig( + _config: Config, + options: DefaultCatalogCollatorFactoryOptions, + ): DefaultCatalogCollatorFactory; + // (undocumented) + getCollator(): Promise; + // (undocumented) + readonly type = 'software-catalog'; + // (undocumented) + readonly visibilityPermission: Permission; +} + +// @public (undocumented) +export type DefaultCatalogCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + tokenManager: TokenManager; + locationTemplate?: string; + filter?: GetEntitiesRequest['filter']; + batchSize?: number; + catalogClient?: CatalogApi; + entityTransformer?: CatalogCollatorEntityTransformer; +}; + +// @alpha +export const searchModuleCatalogCollator: ( + options: SearchModuleCatalogCollatorOptions, +) => BackendFeature; + +// @alpha +export type SearchModuleCatalogCollatorOptions = Omit< + DefaultCatalogCollatorFactoryOptions, + 'discovery' | 'tokenManager' +> & { + schedule: TaskScheduleDefinition; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-module-catalog/api-report.md b/plugins/search-backend-module-catalog/api-report.md new file mode 100644 index 0000000000..b773860fe8 --- /dev/null +++ b/plugins/search-backend-module-catalog/api-report.md @@ -0,0 +1,52 @@ +## API Report File for "@backstage/plugin-search-backend-module-catalog" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; +import { Config } from '@backstage/config'; +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { Entity } from '@backstage/catalog-model'; +import { GetEntitiesRequest } from '@backstage/catalog-client'; +import { Permission } from '@backstage/plugin-permission-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Readable } from 'stream'; +import { TokenManager } from '@backstage/backend-common'; + +// @public (undocumented) +export type CatalogCollatorEntityTransformer = ( + entity: Entity, +) => Omit; + +// @public (undocumented) +export const defaultCatalogCollatorEntityTransformer: CatalogCollatorEntityTransformer; + +// @public (undocumented) +export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { + // (undocumented) + static fromConfig( + _config: Config, + options: DefaultCatalogCollatorFactoryOptions, + ): DefaultCatalogCollatorFactory; + // (undocumented) + getCollator(): Promise; + // (undocumented) + readonly type = 'software-catalog'; + // (undocumented) + readonly visibilityPermission: Permission; +} + +// @public (undocumented) +export type DefaultCatalogCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + tokenManager: TokenManager; + locationTemplate?: string; + filter?: GetEntitiesRequest['filter']; + batchSize?: number; + catalogClient?: CatalogApi; + entityTransformer?: CatalogCollatorEntityTransformer; +}; +``` diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json new file mode 100644 index 0000000000..6c7b78437c --- /dev/null +++ b/plugins/search-backend-module-catalog/package.json @@ -0,0 +1,70 @@ +{ + "name": "@backstage/plugin-search-backend-module-catalog", + "description": "A module for the search backend that exports catalog modules", + "version": "1.1.4-next.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/backend-tasks": "workspace:^", + "@backstage/catalog-client": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", + "@backstage/plugin-search-common": "workspace:^", + "@elastic/elasticsearch": "^7.13.0", + "@opensearch-project/opensearch": "^2.0.0", + "aws-os-connection": "^0.2.0", + "aws-sdk": "^2.948.0", + "elastic-builder": "^2.16.0", + "lodash": "^4.17.21", + "uuid": "^8.3.2", + "winston": "^3.2.1" + }, + "devDependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@elastic/elasticsearch-mock": "^1.0.0", + "@short.io/opensearch-mock": "^0.3.1", + "msw": "^1.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/search-backend-module-catalog/src/alpha.ts b/plugins/search-backend-module-catalog/src/alpha.ts new file mode 100644 index 0000000000..d4530b582b --- /dev/null +++ b/plugins/search-backend-module-catalog/src/alpha.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports Catalog modules. + */ + +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; + +import { + CatalogCollatorEntityTransformer, + DefaultCatalogCollatorFactory, + DefaultCatalogCollatorFactoryOptions, +} from './collators'; + +export type { + CatalogCollatorEntityTransformer, + DefaultCatalogCollatorFactory, + DefaultCatalogCollatorFactoryOptions, +}; + +/** + * @alpha + * Options for {@link searchModuleCatalogCollator}. + */ +export type SearchModuleCatalogCollatorOptions = Omit< + DefaultCatalogCollatorFactoryOptions, + 'discovery' | 'tokenManager' +> & { + schedule: TaskScheduleDefinition; +}; + +/** + * @alpha + * Search backend module for the Catalog index. + */ +export const searchModuleCatalogCollator = createBackendModule( + (options: SearchModuleCatalogCollatorOptions) => ({ + moduleId: 'catalogCollator', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + config: coreServices.config, + discovery: coreServices.discovery, + tokenManager: coreServices.tokenManager, + scheduler: coreServices.scheduler, + indexRegistry: searchIndexRegistryExtensionPoint, + }, + async init({ + config, + discovery, + tokenManager, + scheduler, + indexRegistry, + }) { + const { schedule, ...rest } = options; + + indexRegistry.addCollator({ + schedule: scheduler.createScheduledTaskRunner(schedule), + factory: DefaultCatalogCollatorFactory.fromConfig(config, { + ...rest, + discovery, + tokenManager, + }), + }); + }, + }); + }, + }), +); diff --git a/plugins/catalog-backend/src/search/CatalogCollatorEntityTransformer.ts b/plugins/search-backend-module-catalog/src/collators/CatalogCollatorEntityTransformer.ts similarity index 100% rename from plugins/catalog-backend/src/search/CatalogCollatorEntityTransformer.ts rename to plugins/search-backend-module-catalog/src/collators/CatalogCollatorEntityTransformer.ts diff --git a/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.test.ts b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts similarity index 100% rename from plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.test.ts rename to plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.test.ts diff --git a/plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts b/plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts similarity index 100% rename from plugins/catalog-backend/src/search/DefaultCatalogCollatorFactory.ts rename to plugins/search-backend-module-catalog/src/collators/DefaultCatalogCollatorFactory.ts diff --git a/plugins/catalog-backend/src/search/defaultCatalogCollatorEntityTransformer.test.ts b/plugins/search-backend-module-catalog/src/collators/defaultCatalogCollatorEntityTransformer.test.ts similarity index 100% rename from plugins/catalog-backend/src/search/defaultCatalogCollatorEntityTransformer.test.ts rename to plugins/search-backend-module-catalog/src/collators/defaultCatalogCollatorEntityTransformer.test.ts diff --git a/plugins/catalog-backend/src/search/defaultCatalogCollatorEntityTransformer.ts b/plugins/search-backend-module-catalog/src/collators/defaultCatalogCollatorEntityTransformer.ts similarity index 100% rename from plugins/catalog-backend/src/search/defaultCatalogCollatorEntityTransformer.ts rename to plugins/search-backend-module-catalog/src/collators/defaultCatalogCollatorEntityTransformer.ts diff --git a/plugins/search-backend-module-catalog/src/collators/index.ts b/plugins/search-backend-module-catalog/src/collators/index.ts new file mode 100644 index 0000000000..5876e71a02 --- /dev/null +++ b/plugins/search-backend-module-catalog/src/collators/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2023 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. + */ + +export { DefaultCatalogCollatorFactory } from './DefaultCatalogCollatorFactory'; +export type { DefaultCatalogCollatorFactoryOptions } from './DefaultCatalogCollatorFactory'; + +export { defaultCatalogCollatorEntityTransformer } from './defaultCatalogCollatorEntityTransformer'; +export type { CatalogCollatorEntityTransformer } from './CatalogCollatorEntityTransformer'; diff --git a/plugins/search-backend-module-catalog/src/index.ts b/plugins/search-backend-module-catalog/src/index.ts new file mode 100644 index 0000000000..7998562311 --- /dev/null +++ b/plugins/search-backend-module-catalog/src/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports Catalog modules. + */ + +export * from './collators'; diff --git a/plugins/search-backend-module-elasticsearch/alpha-api-report.md b/plugins/search-backend-module-elasticsearch/alpha-api-report.md index acdd14e781..fca920f3d1 100644 --- a/plugins/search-backend-module-elasticsearch/alpha-api-report.md +++ b/plugins/search-backend-module-elasticsearch/alpha-api-report.md @@ -26,17 +26,6 @@ export type ElasticSearchCustomIndexTemplateBody = { template?: Record; }; -// @alpha -export const elasticSearchEngineModule: ( - options?: ElasticsearchEngineModuleOptions | undefined, -) => BackendFeature; - -// @alpha -export type ElasticsearchEngineModuleOptions = { - translator?: ElasticSearchQueryTranslator; - indexTemplate?: ElasticSearchCustomIndexTemplate; -}; - // @public (undocumented) export type ElasticSearchHighlightConfig = { fragmentDelimiter: string; @@ -57,5 +46,16 @@ export type ElasticSearchQueryTranslatorOptions = { highlightOptions?: ElasticSearchHighlightConfig; }; +// @alpha +export const searchModuleElasticsearchEngine: ( + options?: SearchModuleElasticsearchEngineOptions | undefined, +) => BackendFeature; + +// @alpha +export type SearchModuleElasticsearchEngineOptions = { + translator?: ElasticSearchQueryTranslator; + indexTemplate?: ElasticSearchCustomIndexTemplate; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-module-elasticsearch/src/alpha.ts b/plugins/search-backend-module-elasticsearch/src/alpha.ts index 8e75c9f603..d2ff1568f6 100644 --- a/plugins/search-backend-module-elasticsearch/src/alpha.ts +++ b/plugins/search-backend-module-elasticsearch/src/alpha.ts @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { coreServices, createBackendModule, } from '@backstage/backend-plugin-api'; import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; + import { ElasticSearchHighlightConfig, ElasticSearchQueryTranslatorOptions, @@ -31,9 +32,9 @@ import { /** * @alpha - * Options for {@link elasticSearchEngineModule}. + * Options for {@link searchModuleElasticsearchEngine}. */ -export type ElasticsearchEngineModuleOptions = { +export type SearchModuleElasticsearchEngineOptions = { translator?: ElasticSearchQueryTranslator; indexTemplate?: ElasticSearchCustomIndexTemplate; }; @@ -42,9 +43,9 @@ export type ElasticsearchEngineModuleOptions = { * @alpha * Search backend module for the Elasticsearch engine. */ -export const elasticSearchEngineModule = createBackendModule( - (options?: ElasticsearchEngineModuleOptions) => ({ - moduleId: 'elasticSearchEngineModule', +export const searchModuleElasticsearchEngine = createBackendModule( + (options?: SearchModuleElasticsearchEngineOptions) => ({ + moduleId: 'elasticsearchEngine', pluginId: 'search', register(env) { env.registerInit({ diff --git a/plugins/search-backend-module-explore/.eslintrc.js b/plugins/search-backend-module-explore/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/search-backend-module-explore/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md new file mode 100644 index 0000000000..8640d14b73 --- /dev/null +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -0,0 +1 @@ +# @backstage/plugin-search-backend-module-explore diff --git a/plugins/search-backend-module-explore/README.md b/plugins/search-backend-module-explore/README.md new file mode 100644 index 0000000000..bbc8392f14 --- /dev/null +++ b/plugins/search-backend-module-explore/README.md @@ -0,0 +1,7 @@ +# search-backend-module-explore + +... + +## Getting started + +... diff --git a/plugins/search-backend-module-explore/alpha-api-report.md b/plugins/search-backend-module-explore/alpha-api-report.md new file mode 100644 index 0000000000..5c5189c8bd --- /dev/null +++ b/plugins/search-backend-module-explore/alpha-api-report.md @@ -0,0 +1,56 @@ +## API Report File for "@backstage/plugin-search-backend-module-explore" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { Config } from '@backstage/config'; +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { ExploreTool } from '@backstage/plugin-explore-common'; +import { IndexableDocument } from '@backstage/plugin-search-common'; +import { Logger } from 'winston'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Readable } from 'stream'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; + +// @alpha +export const searchModuleExploreCollator: ( + options: SearchModuleExploreCollatorOptions, +) => BackendFeature; + +// @alpha +export type SearchModuleExploreCollatorOptions = Omit< + ToolDocumentCollatorFactoryOptions, + 'logger' | 'discovery' +> & { + schedule: TaskScheduleDefinition; +}; + +// @public +export interface ToolDocument extends IndexableDocument, ExploreTool {} + +// @public +export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { + // (undocumented) + execute(): AsyncGenerator; + // (undocumented) + static fromConfig( + _config: Config, + options: ToolDocumentCollatorFactoryOptions, + ): ToolDocumentCollatorFactory; + // (undocumented) + getCollator(): Promise; + // (undocumented) + readonly type: string; +} + +// @public +export type ToolDocumentCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + logger: Logger; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-module-explore/api-report.md b/plugins/search-backend-module-explore/api-report.md new file mode 100644 index 0000000000..80e8c0c06b --- /dev/null +++ b/plugins/search-backend-module-explore/api-report.md @@ -0,0 +1,39 @@ +## API Report File for "@backstage/plugin-search-backend-module-explore" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { Config } from '@backstage/config'; +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { ExploreTool } from '@backstage/plugin-explore-common'; +import { IndexableDocument } from '@backstage/plugin-search-common'; +import { Logger } from 'winston'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Readable } from 'stream'; + +// @public +export interface ToolDocument extends IndexableDocument, ExploreTool {} + +// @public +export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { + // (undocumented) + execute(): AsyncGenerator; + // (undocumented) + static fromConfig( + _config: Config, + options: ToolDocumentCollatorFactoryOptions, + ): ToolDocumentCollatorFactory; + // (undocumented) + getCollator(): Promise; + // (undocumented) + readonly type: string; +} + +// @public +export type ToolDocumentCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + logger: Logger; +}; +``` diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json new file mode 100644 index 0000000000..356059f845 --- /dev/null +++ b/plugins/search-backend-module-explore/package.json @@ -0,0 +1,71 @@ +{ + "name": "@backstage/plugin-search-backend-module-explore", + "description": "A module for the search backend that exports explore modules", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/backend-tasks": "workspace:^", + "@backstage/catalog-client": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-explore-common": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", + "@backstage/plugin-search-common": "workspace:^", + "@types/express": "^4.17.6", + "dockerode": "^3.3.1", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "fs-extra": "10.1.0", + "knex": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "p-limit": "^3.1.0", + "winston": "^3.2.1" + }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "msw": "^1.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/search-backend-module-explore/src/alpha.ts b/plugins/search-backend-module-explore/src/alpha.ts new file mode 100644 index 0000000000..357bb4233e --- /dev/null +++ b/plugins/search-backend-module-explore/src/alpha.ts @@ -0,0 +1,85 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports Explore modules. + */ + +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; + +import { + ToolDocument, + ToolDocumentCollatorFactory, + ToolDocumentCollatorFactoryOptions, +} from './collators'; + +export type { + ToolDocumentCollatorFactoryOptions, + ToolDocument, + ToolDocumentCollatorFactory, +}; + +/** + * @alpha + * Options for {@link searchModuleExploreCollator}. + */ +export type SearchModuleExploreCollatorOptions = Omit< + ToolDocumentCollatorFactoryOptions, + 'logger' | 'discovery' +> & { + schedule: TaskScheduleDefinition; +}; + +/** + * @alpha + * Search backend module for the Explore index. + */ +export const searchModuleExploreCollator = createBackendModule( + (options: SearchModuleExploreCollatorOptions) => ({ + moduleId: 'exploreCollator', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + config: coreServices.config, + logger: coreServices.logger, + discovery: coreServices.discovery, + scheduler: coreServices.scheduler, + indexRegistry: searchIndexRegistryExtensionPoint, + }, + async init({ config, logger, discovery, scheduler, indexRegistry }) { + const { schedule, ...rest } = options; + + indexRegistry.addCollator({ + schedule: scheduler.createScheduledTaskRunner(schedule), + factory: ToolDocumentCollatorFactory.fromConfig(config, { + ...rest, + discovery, + logger: loggerToWinstonLogger(logger), + }), + }); + }, + }); + }, + }), +); diff --git a/plugins/explore-backend/src/search/ToolDocumentCollatorFactory.ts b/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts similarity index 100% rename from plugins/explore-backend/src/search/ToolDocumentCollatorFactory.ts rename to plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts diff --git a/plugins/explore-backend/src/search/index.ts b/plugins/search-backend-module-explore/src/collators/index.ts similarity index 99% rename from plugins/explore-backend/src/search/index.ts rename to plugins/search-backend-module-explore/src/collators/index.ts index 70e9414652..45f0c933e2 100644 --- a/plugins/explore-backend/src/search/index.ts +++ b/plugins/search-backend-module-explore/src/collators/index.ts @@ -15,6 +15,7 @@ */ export { ToolDocumentCollatorFactory } from './ToolDocumentCollatorFactory'; + export type { ToolDocument, ToolDocumentCollatorFactoryOptions, diff --git a/plugins/search-backend-module-explore/src/index.ts b/plugins/search-backend-module-explore/src/index.ts new file mode 100644 index 0000000000..ea94071984 --- /dev/null +++ b/plugins/search-backend-module-explore/src/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports Explore modules. + */ + +export * from './collators'; diff --git a/plugins/search-backend-module-pg/alpha-api-report.md b/plugins/search-backend-module-pg/alpha-api-report.md index 01a83bace4..eaee78e944 100644 --- a/plugins/search-backend-module-pg/alpha-api-report.md +++ b/plugins/search-backend-module-pg/alpha-api-report.md @@ -6,7 +6,7 @@ import { BackendFeature } from '@backstage/backend-plugin-api'; // @alpha -export const pgSearchEngineModule: () => BackendFeature; +export const searchModulePostgresEngine: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/search-backend-module-pg/src/alpha.ts b/plugins/search-backend-module-pg/src/alpha.ts index 80ce31adf6..e3e0087957 100644 --- a/plugins/search-backend-module-pg/src/alpha.ts +++ b/plugins/search-backend-module-pg/src/alpha.ts @@ -24,8 +24,8 @@ import { PgSearchEngine } from './PgSearchEngine'; * @alpha * Search backend module for the Postgres engine. */ -export const pgSearchEngineModule = createBackendModule({ - moduleId: 'pgSearchEngineModule', +export const searchModulePostgresEngine = createBackendModule({ + moduleId: 'postgresEngine', pluginId: 'search', register(env) { env.registerInit({ diff --git a/plugins/search-backend-module-techdocs/.eslintrc.js b/plugins/search-backend-module-techdocs/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/search-backend-module-techdocs/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md new file mode 100644 index 0000000000..85d533ae87 --- /dev/null +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -0,0 +1 @@ +# @backstage/plugin-search-backend-module-techdocs diff --git a/plugins/search-backend-module-techdocs/README.md b/plugins/search-backend-module-techdocs/README.md new file mode 100644 index 0000000000..2711150d56 --- /dev/null +++ b/plugins/search-backend-module-techdocs/README.md @@ -0,0 +1,7 @@ +# search-backend-module-techdocs + +... + +## Getting started + +... diff --git a/plugins/search-backend-module-techdocs/alpha-api-report.md b/plugins/search-backend-module-techdocs/alpha-api-report.md new file mode 100644 index 0000000000..3360055c62 --- /dev/null +++ b/plugins/search-backend-module-techdocs/alpha-api-report.md @@ -0,0 +1,40 @@ +## API Report File for "@backstage/plugin-search-backend-module-techdocs" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { CatalogApi } from '@backstage/catalog-client'; +import { Logger } from 'winston'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { TokenManager } from '@backstage/backend-common'; + +// @alpha +export const searchModuleTechDocsCollator: ( + options: SearchModuleTechDocsCollatorOptions, +) => BackendFeature; + +// @alpha +export type SearchModuleTechDocsCollatorOptions = Omit< + TechDocsCollatorFactoryOptions, + 'logger' | 'discovery' | 'tokenManager' +> & { + schedule: TaskScheduleDefinition; +}; + +// @public +export type TechDocsCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + logger: Logger; + tokenManager: TokenManager; + locationTemplate?: string; + catalogClient?: CatalogApi; + parallelismLimit?: number; + legacyPathCasing?: boolean; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/search-backend-module-techdocs/api-report.md b/plugins/search-backend-module-techdocs/api-report.md new file mode 100644 index 0000000000..9f72b1c487 --- /dev/null +++ b/plugins/search-backend-module-techdocs/api-report.md @@ -0,0 +1,42 @@ +## API Report File for "@backstage/plugin-search-backend-module-techdocs" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { CatalogApi } from '@backstage/catalog-client'; +import { Config } from '@backstage/config'; +import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { Logger } from 'winston'; +import { Permission } from '@backstage/plugin-permission-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Readable } from 'stream'; +import { TokenManager } from '@backstage/backend-common'; + +// @public +export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { + // (undocumented) + static fromConfig( + config: Config, + options: TechDocsCollatorFactoryOptions, + ): DefaultTechDocsCollatorFactory; + // (undocumented) + getCollator(): Promise; + // (undocumented) + readonly type: string; + // (undocumented) + readonly visibilityPermission: Permission; +} + +// @public +export type TechDocsCollatorFactoryOptions = { + discovery: PluginEndpointDiscovery; + logger: Logger; + tokenManager: TokenManager; + locationTemplate?: string; + catalogClient?: CatalogApi; + parallelismLimit?: number; + legacyPathCasing?: boolean; +}; +``` diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json new file mode 100644 index 0000000000..555e34ebdf --- /dev/null +++ b/plugins/search-backend-module-techdocs/package.json @@ -0,0 +1,71 @@ +{ + "name": "@backstage/plugin-search-backend-module-techdocs", + "description": "A module for the search backend that exports techdocs modules", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/backend-tasks": "workspace:^", + "@backstage/catalog-client": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", + "@backstage/plugin-search-common": "workspace:^", + "@backstage/plugin-techdocs-node": "workspace:^", + "@types/express": "^4.17.6", + "dockerode": "^3.3.1", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "fs-extra": "10.1.0", + "knex": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "p-limit": "^3.1.0", + "winston": "^3.2.1" + }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "msw": "^1.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/search-backend-module-techdocs/src/alpha.ts b/plugins/search-backend-module-techdocs/src/alpha.ts new file mode 100644 index 0000000000..f58c439c80 --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/alpha.ts @@ -0,0 +1,89 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports TechDocs modules. + */ + +import { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; + +import { + DefaultTechDocsCollatorFactory, + TechDocsCollatorFactoryOptions, +} from './collators'; + +export type { TechDocsCollatorFactoryOptions }; + +/** + * @alpha + * Options for {@link searchModuleTechDocsCollator}. + */ +export type SearchModuleTechDocsCollatorOptions = Omit< + TechDocsCollatorFactoryOptions, + 'logger' | 'discovery' | 'tokenManager' +> & { + schedule: TaskScheduleDefinition; +}; + +/** + * @alpha + * Search backend module for the TechDocs index. + */ +export const searchModuleTechDocsCollator = createBackendModule( + (options: SearchModuleTechDocsCollatorOptions) => ({ + moduleId: 'techDocsCollator', + pluginId: 'search', + register(env) { + env.registerInit({ + deps: { + config: coreServices.config, + logger: coreServices.logger, + discovery: coreServices.discovery, + tokenManager: coreServices.tokenManager, + scheduler: coreServices.scheduler, + indexRegistry: searchIndexRegistryExtensionPoint, + }, + async init({ + config, + logger, + discovery, + tokenManager, + scheduler, + indexRegistry, + }) { + const { schedule, ...rest } = options; + + indexRegistry.addCollator({ + schedule: scheduler.createScheduledTaskRunner(schedule), + factory: DefaultTechDocsCollatorFactory.fromConfig(config, { + ...rest, + discovery, + tokenManager, + logger: loggerToWinstonLogger(logger), + }), + }); + }, + }); + }, + }), +); diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts similarity index 100% rename from plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts rename to plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.test.ts diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts b/plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts similarity index 100% rename from plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts rename to plugins/search-backend-module-techdocs/src/collators/DefaultTechDocsCollatorFactory.ts diff --git a/plugins/search-backend-module-techdocs/src/collators/index.ts b/plugins/search-backend-module-techdocs/src/collators/index.ts new file mode 100644 index 0000000000..8c5fd122f1 --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/collators/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2023 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. + */ + +export { DefaultTechDocsCollatorFactory } from './DefaultTechDocsCollatorFactory'; + +export type { TechDocsCollatorFactoryOptions } from './DefaultTechDocsCollatorFactory'; diff --git a/plugins/search-backend-module-techdocs/src/index.ts b/plugins/search-backend-module-techdocs/src/index.ts new file mode 100644 index 0000000000..c28175fd61 --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/index.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 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. + */ + +/** + * @packageDocumentation + * A module for the search backend that exports TechDocs modules. + */ + +export * from './collators'; diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index 1f6aa1d66a..2abd9783f7 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -3,12 +3,10 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { CatalogApi } from '@backstage/catalog-client'; import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; +import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; import { GeneratorBuilder } from '@backstage/plugin-techdocs-node'; @@ -19,7 +17,7 @@ import { PluginCacheManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PreparerBuilder } from '@backstage/plugin-techdocs-node'; import { PublisherBase } from '@backstage/plugin-techdocs-node'; -import { Readable } from 'stream'; +import { TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; import { TokenManager } from '@backstage/backend-common'; import * as winston from 'winston'; @@ -47,20 +45,7 @@ export class DefaultTechDocsCollator { readonly visibilityPermission: Permission; } -// @public -export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { - // (undocumented) - static fromConfig( - config: Config, - options: TechDocsCollatorFactoryOptions, - ): DefaultTechDocsCollatorFactory; - // (undocumented) - getCollator(): Promise; - // (undocumented) - readonly type: string; - // (undocumented) - readonly visibilityPermission: Permission; -} +export { DefaultTechDocsCollatorFactory }; // @public export interface DocsBuildStrategy { @@ -105,16 +90,7 @@ export type ShouldBuildParameters = { entity: Entity; }; -// @public -export type TechDocsCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - logger: Logger; - tokenManager: TokenManager; - locationTemplate?: string; - catalogClient?: CatalogApi; - parallelismLimit?: number; - legacyPathCasing?: boolean; -}; +export { TechDocsCollatorFactoryOptions }; // @public export type TechDocsCollatorOptions = { diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 1d6ca8931e..a9f7a5c9b2 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -57,6 +57,7 @@ "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-search-backend-module-techdocs": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-techdocs-node": "workspace:^", "@types/express": "^4.17.6", diff --git a/plugins/techdocs-backend/src/search/index.ts b/plugins/techdocs-backend/src/search/index.ts index 68e3b4edc7..0c403ef0d7 100644 --- a/plugins/techdocs-backend/src/search/index.ts +++ b/plugins/techdocs-backend/src/search/index.ts @@ -14,11 +14,20 @@ * limitations under the License. */ -export { DefaultTechDocsCollatorFactory } from './DefaultTechDocsCollatorFactory'; -export type { TechDocsCollatorFactoryOptions } from './DefaultTechDocsCollatorFactory'; - /** * todo(backstage/techdocs-core): stop exporting these in a future release. */ export { DefaultTechDocsCollator } from './DefaultTechDocsCollator'; export type { TechDocsCollatorOptions } from './DefaultTechDocsCollator'; + +/** + * @deprecated + * import from @backstage/search-backend-module-techdocs instead + */ +export type { TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; + +/** + * @deprecated + * import from @backstage/search-backend-module-techdocs instead + */ +export { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; diff --git a/yarn.lock b/yarn.lock index b5203fbe29..2046cd9ece 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5207,6 +5207,7 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-scaffolder-common": "workspace:^" + "@backstage/plugin-search-backend-module-catalog": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/types": "workspace:^" @@ -6048,6 +6049,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/plugin-explore-common": "workspace:^" + "@backstage/plugin-search-backend-module-explore": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@types/express": "*" "@types/supertest": ^2.0.8 @@ -7768,6 +7770,37 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-search-backend-module-catalog@workspace:^, @backstage/plugin-search-backend-module-catalog@workspace:plugins/search-backend-module-catalog": + version: 0.0.0-use.local + resolution: "@backstage/plugin-search-backend-module-catalog@workspace:plugins/search-backend-module-catalog" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-client": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" + "@backstage/plugin-search-common": "workspace:^" + "@elastic/elasticsearch": ^7.13.0 + "@elastic/elasticsearch-mock": ^1.0.0 + "@opensearch-project/opensearch": ^2.0.0 + "@short.io/opensearch-mock": ^0.3.1 + aws-os-connection: ^0.2.0 + aws-sdk: ^2.948.0 + elastic-builder: ^2.16.0 + lodash: ^4.17.21 + msw: ^1.0.0 + uuid: ^8.3.2 + winston: ^3.2.1 + languageName: unknown + linkType: soft + "@backstage/plugin-search-backend-module-elasticsearch@workspace:^, @backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch" @@ -7791,6 +7824,39 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-search-backend-module-explore@workspace:^, @backstage/plugin-search-backend-module-explore@workspace:plugins/search-backend-module-explore": + version: 0.0.0-use.local + resolution: "@backstage/plugin-search-backend-module-explore@workspace:plugins/search-backend-module-explore" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-client": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-explore-common": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" + "@backstage/plugin-search-common": "workspace:^" + "@types/express": ^4.17.6 + dockerode: ^3.3.1 + express: ^4.17.1 + express-promise-router: ^4.1.0 + fs-extra: 10.1.0 + knex: ^2.0.0 + lodash: ^4.17.21 + msw: ^1.0.0 + node-fetch: ^2.6.7 + p-limit: ^3.1.0 + winston: ^3.2.1 + languageName: unknown + linkType: soft + "@backstage/plugin-search-backend-module-pg@workspace:^, @backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg" @@ -7809,6 +7875,39 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-search-backend-module-techdocs@workspace:^, @backstage/plugin-search-backend-module-techdocs@workspace:plugins/search-backend-module-techdocs": + version: 0.0.0-use.local + resolution: "@backstage/plugin-search-backend-module-techdocs@workspace:plugins/search-backend-module-techdocs" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-client": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" + "@backstage/plugin-search-common": "workspace:^" + "@backstage/plugin-techdocs-node": "workspace:^" + "@types/express": ^4.17.6 + dockerode: ^3.3.1 + express: ^4.17.1 + express-promise-router: ^4.1.0 + fs-extra: 10.1.0 + knex: ^2.0.0 + lodash: ^4.17.21 + msw: ^1.0.0 + node-fetch: ^2.6.7 + p-limit: ^3.1.0 + winston: ^3.2.1 + languageName: unknown + linkType: soft + "@backstage/plugin-search-backend-node@workspace:^, @backstage/plugin-search-backend-node@workspace:plugins/search-backend-node": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-node@workspace:plugins/search-backend-node" @@ -8371,6 +8470,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-search-backend-module-techdocs": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-techdocs-node": "workspace:^" @@ -22490,11 +22590,12 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" - "@backstage/plugin-explore-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-search-backend": "workspace:^" + "@backstage/plugin-search-backend-module-catalog": "workspace:^" + "@backstage/plugin-search-backend-module-explore": "workspace:^" + "@backstage/plugin-search-backend-module-techdocs": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" - "@backstage/plugin-techdocs-backend": "workspace:^" "@backstage/plugin-todo-backend": "workspace:^" languageName: unknown linkType: soft From d4c66877b07b93e630b30ad2a6d4c7487e25186c Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 7 Mar 2023 15:12:19 +0100 Subject: [PATCH 357/511] feat(search): add tests for modules Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .../src/alpha.test.ts | 46 +++++++++++++++++++ .../src/alpha.test.ts | 46 +++++++++++++++++++ .../src/alpha.test.ts | 46 +++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 plugins/search-backend-module-catalog/src/alpha.test.ts create mode 100644 plugins/search-backend-module-explore/src/alpha.test.ts create mode 100644 plugins/search-backend-module-techdocs/src/alpha.test.ts diff --git a/plugins/search-backend-module-catalog/src/alpha.test.ts b/plugins/search-backend-module-catalog/src/alpha.test.ts new file mode 100644 index 0000000000..8a3082c6aa --- /dev/null +++ b/plugins/search-backend-module-catalog/src/alpha.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2023 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 { startTestBackend } from '@backstage/backend-test-utils'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { searchModuleCatalogCollator } from './alpha'; + +describe('searchModuleCatalogCollator', () => { + const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; + + it('should register the catalog collator to the search index registry extension point with factory and schedule', async () => { + const extensionPointMock = { + addCollator: jest.fn(), + }; + + await startTestBackend({ + extensionPoints: [ + [searchIndexRegistryExtensionPoint, extensionPointMock], + ], + features: [searchModuleCatalogCollator({ schedule })], + }); + + expect(extensionPointMock.addCollator).toHaveBeenCalledTimes(1); + expect(extensionPointMock.addCollator).toHaveBeenCalledWith({ + factory: expect.objectContaining({ type: 'software-catalog' }), + schedule: expect.objectContaining({ run: expect.any(Function) }), + }); + }); +}); diff --git a/plugins/search-backend-module-explore/src/alpha.test.ts b/plugins/search-backend-module-explore/src/alpha.test.ts new file mode 100644 index 0000000000..9b133f0fd5 --- /dev/null +++ b/plugins/search-backend-module-explore/src/alpha.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2023 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 { startTestBackend } from '@backstage/backend-test-utils'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { searchModuleExploreCollator } from './alpha'; + +describe('searchModuleExploreCollator', () => { + const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; + + it('should register the explore collator to the search index registry extension point with factory and schedule', async () => { + const extensionPointMock = { + addCollator: jest.fn(), + }; + + await startTestBackend({ + extensionPoints: [ + [searchIndexRegistryExtensionPoint, extensionPointMock], + ], + features: [searchModuleExploreCollator({ schedule })], + }); + + expect(extensionPointMock.addCollator).toHaveBeenCalledTimes(1); + expect(extensionPointMock.addCollator).toHaveBeenCalledWith({ + factory: expect.objectContaining({ type: 'tools' }), + schedule: expect.objectContaining({ run: expect.any(Function) }), + }); + }); +}); diff --git a/plugins/search-backend-module-techdocs/src/alpha.test.ts b/plugins/search-backend-module-techdocs/src/alpha.test.ts new file mode 100644 index 0000000000..011b00b12c --- /dev/null +++ b/plugins/search-backend-module-techdocs/src/alpha.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2023 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 { startTestBackend } from '@backstage/backend-test-utils'; +import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { searchModuleTechDocsCollator } from './alpha'; + +describe('searchModuleTechDocsCollator', () => { + const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; + + it('should register the techdocs collator to the search index registry extension point with factory and schedule', async () => { + const extensionPointMock = { + addCollator: jest.fn(), + }; + + await startTestBackend({ + extensionPoints: [ + [searchIndexRegistryExtensionPoint, extensionPointMock], + ], + features: [searchModuleTechDocsCollator({ schedule })], + }); + + expect(extensionPointMock.addCollator).toHaveBeenCalledTimes(1); + expect(extensionPointMock.addCollator).toHaveBeenCalledWith({ + factory: expect.objectContaining({ type: 'techdocs' }), + schedule: expect.objectContaining({ run: expect.any(Function) }), + }); + }); +}); From 01ae205352e1890bb32dd32bfc67d3e84024fde2 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 7 Mar 2023 15:23:28 +0100 Subject: [PATCH 358/511] feat(search): update docs Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .changeset/nine-clouds-flow.md | 5 -- .changeset/tall-chairs-explain.md | 7 ++ .changeset/wet-lamps-happen.md | 7 ++ docs/features/search/how-to-guides.md | 86 ++++--------------- .../integrating-search-into-plugins.md | 2 +- .../CHANGELOG.md | 1 - .../search-backend-module-catalog/README.md | 24 +++++- .../CHANGELOG.md | 1 - .../search-backend-module-explore/README.md | 24 +++++- .../package.json | 1 - .../CHANGELOG.md | 1 - .../search-backend-module-techdocs/README.md | 24 +++++- .../package.json | 1 - yarn.lock | 3 +- 14 files changed, 101 insertions(+), 86 deletions(-) delete mode 100644 .changeset/nine-clouds-flow.md create mode 100644 .changeset/tall-chairs-explain.md create mode 100644 .changeset/wet-lamps-happen.md delete mode 100644 plugins/search-backend-module-catalog/CHANGELOG.md delete mode 100644 plugins/search-backend-module-explore/CHANGELOG.md delete mode 100644 plugins/search-backend-module-techdocs/CHANGELOG.md diff --git a/.changeset/nine-clouds-flow.md b/.changeset/nine-clouds-flow.md deleted file mode 100644 index fca6bbbf1c..0000000000 --- a/.changeset/nine-clouds-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'example-backend-next': patch ---- - -Adds search plugin and search index registry to backend. diff --git a/.changeset/tall-chairs-explain.md b/.changeset/tall-chairs-explain.md new file mode 100644 index 0000000000..e7367d2d4a --- /dev/null +++ b/.changeset/tall-chairs-explain.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-techdocs-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-explore-backend': patch +--- + +Deprecate the collator files in the backend package by extracting them into a separate module. diff --git a/.changeset/wet-lamps-happen.md b/.changeset/wet-lamps-happen.md new file mode 100644 index 0000000000..76e36d219d --- /dev/null +++ b/.changeset/wet-lamps-happen.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-search-backend-module-techdocs': minor +'@backstage/plugin-search-backend-module-catalog': minor +'@backstage/plugin-search-backend-module-explore': minor +--- + +Extend the index with custom collators by creating search plugin modules. diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index e8f58e9f26..da94bd4ca4 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -51,7 +51,7 @@ The TechDocs plugin has supported integrations to Search, meaning that it provides a default collator factory ready to be used. The purpose of this guide is to walk you through how to register the -[DefaultTechDocsCollatorFactory](https://github.com/backstage/backstage/blob/master/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts) +[DefaultTechDocsCollatorFactory](https://github.com/backstage/backstage/blob/de294ce5c410c9eb56da6870a1fab795268f60e3/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts) in your App, so that you can get TechDocs documents indexed. If you have been through the @@ -376,78 +376,30 @@ There are other more specific search results layout components that also accept Recently, the Backstage maintainers [announced the new Backend System](https://backstage.io/blog/2023/02/15/backend-system-alpha). The search plugins are now migrated to support the new backend system. In this guide you will learn how to update your backend set up. -1. In packages/backend/search.ts - -```ts -import { - coreServices, - createBackendModule, -} from '@backstage/backend-plugin-api'; -import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; -import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; -import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; -import { ToolDocumentCollatorFactory } from '@backstage/plugin-explore-backend'; -import { loggerToWinstonLogger } from '@backstage/backend-common'; - -export const searchIndexRegistry = createBackendModule({ - moduleId: 'searchIndexRegistry', - pluginId: 'search', - register(env) { - env.registerInit({ - deps: { - indexRegistry: searchIndexRegistryExtensionPoint, - config: coreServices.config, - discovery: coreServices.discovery, - tokenManager: coreServices.tokenManager, - logger: coreServices.logger, - scheduler: coreServices.scheduler, - }, - async init({ - indexRegistry, - config, - logger, - discovery, - tokenManager, - scheduler, - }) { - // define scheule, the same way you did it before - const schedule = scheduler.createScheduledTaskRunner({ - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - // A 3 second delay gives the backend server a chance to initialize before - // any collators are executed, which may attempt requests against the API. - initialDelay: { seconds: 3 }, - }); - - indexRegistry.addCollator({ - schedule, - factory: DefaultCatalogCollatorFactory.fromConfig(config, { - discovery, - tokenManager, - }), - }); - - // .... other collators and decorators - }, - }); - }, -}); -``` - -2. In packages/backend/index.ts +In packages/backend-next/index.ts ```ts import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; -import { elasticSearchEngineModule } from '@backstage/plugin-search-backend-module-elasticsearch/alpha'; -import { searchIndexRegistry } from './plugins/search'; +import { searchModuleElasticsearchEngine } from '@backstage/plugin-search-backend-module-elasticsearch/alpha'; +import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; +import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; +import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; + +const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, +}; const backend = createBackend(); -// ...other modules +// adding the search plugin to the backend backend.add(searchPlugin()); -backend.add(searchIndexRegistry()); - -// the default search engine is Lunr, if you want to extend the search backend with another search engine. -backend.add(elasticSearchEngineModule()); +// (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine. +backend.add(searchModuleElasticsearchEngine()); +// extending search with collator modules to start index documents +backend.add(searchModuleCatalogCollator({ schedule })); +backend.add(searchModuleTechDocsCollator({ schedule })); +backend.add(searchModuleExploreCollator({ schedule })); backend.start(); ``` diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md index 4e829b6ae9..7fb8e40b20 100644 --- a/docs/plugins/integrating-search-into-plugins.md +++ b/docs/plugins/integrating-search-into-plugins.md @@ -142,7 +142,7 @@ export class FaqCollatorFactory implements DocumentCollatorFactory { To verify your implementation works as expected make sure to add tests for it. For your convenience, there is the [`TestPipeline`](https://backstage.io/docs/reference/plugin-search-backend-node.testpipeline) utility that emulates a pipeline into which you can integrate your custom collator. -Look at [DefaultTechDocsCollatorFactory test](https://github.com/backstage/backstage/blob/master/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts), for an example. +Look at [DefaultTechDocsCollatorFactory test](https://github.com/backstage/backstage/blob/de294ce5c410c9eb56da6870a1fab795268f60e3/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.test.ts), for an example. #### 6. Make your plugins collator discoverable for others diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md deleted file mode 100644 index c870819424..0000000000 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# @backstage/plugin-search-backend-module-catalog diff --git a/plugins/search-backend-module-catalog/README.md b/plugins/search-backend-module-catalog/README.md index 9860f86b1d..b6c734d893 100644 --- a/plugins/search-backend-module-catalog/README.md +++ b/plugins/search-backend-module-catalog/README.md @@ -1,7 +1,27 @@ # search-backend-module-catalog -... +> DISCLAIMER: The new backend system is in alpha, and so are the search backend module support for the new backend system. We don't recommend you to migrate your backend installations to the new system yet. But if you want to experiment, you can find getting started guides below. -## Getting started +This package exports catalog backend modules responsible for extending search. + +## Example + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; + +const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, +}; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleCatalogCollator({ schedule })); +backend.start(); +``` ... diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md deleted file mode 100644 index 8640d14b73..0000000000 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# @backstage/plugin-search-backend-module-explore diff --git a/plugins/search-backend-module-explore/README.md b/plugins/search-backend-module-explore/README.md index bbc8392f14..d2b00767e2 100644 --- a/plugins/search-backend-module-explore/README.md +++ b/plugins/search-backend-module-explore/README.md @@ -1,7 +1,27 @@ # search-backend-module-explore -... +> DISCLAIMER: The new backend system is in alpha, and so are the search backend module support for the new backend system. We don't recommend you to migrate your backend installations to the new system yet. But if you want to experiment, you can find getting started guides below. -## Getting started +This package exports explore backend modules responsible for extending search. + +## Example + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; + +const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, +}; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleExploreCollator({ schedule })); +backend.start(); +``` ... diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 356059f845..c943f4480d 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -49,7 +49,6 @@ "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", - "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md deleted file mode 100644 index 85d533ae87..0000000000 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# @backstage/plugin-search-backend-module-techdocs diff --git a/plugins/search-backend-module-techdocs/README.md b/plugins/search-backend-module-techdocs/README.md index 2711150d56..817bb40998 100644 --- a/plugins/search-backend-module-techdocs/README.md +++ b/plugins/search-backend-module-techdocs/README.md @@ -1,7 +1,27 @@ # search-backend-module-techdocs -... +> DISCLAIMER: The new backend system is in alpha, and so are the search backend module support for the new backend system. We don't recommend you to migrate your backend installations to the new system yet. But if you want to experiment, you can find getting started guides below. -## Getting started +This package exports techdocs backend modules responsible for extending search. + +## Example + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; + +const schedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, +}; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleTechDocsCollator({ schedule })); +backend.start(); +``` ... diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 555e34ebdf..0e7a350938 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -49,7 +49,6 @@ "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-techdocs-node": "workspace:^", - "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 2046cd9ece..c4d07145e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7843,7 +7843,6 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - "@types/express": ^4.17.6 dockerode: ^3.3.1 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -7894,7 +7893,6 @@ __metadata: "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-techdocs-node": "workspace:^" - "@types/express": ^4.17.6 dockerode: ^3.3.1 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -22596,6 +22594,7 @@ __metadata: "@backstage/plugin-search-backend-module-explore": "workspace:^" "@backstage/plugin-search-backend-module-techdocs": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" + "@backstage/plugin-techdocs-backend": "workspace:^" "@backstage/plugin-todo-backend": "workspace:^" languageName: unknown linkType: soft From 5e2ccf01831d5f8db69d3e6fcc3e750b0b88ee58 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 08:28:18 +0100 Subject: [PATCH 359/511] use correct version of new package Co-authored-by: Patrik Oldsberg Signed-off-by: Emma Indal --- plugins/search-backend-module-catalog/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 6c7b78437c..011e4d93df 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "1.1.4-next.0", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", From 3dc6a4a0811c2d4b368fadd22cc99c2d8a8ee2b7 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 13:37:31 +0100 Subject: [PATCH 360/511] change postgres module to patch in changeset Co-authored-by: Patrik Oldsberg Signed-off-by: Emma Indal --- .changeset/giant-hairs-serve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/giant-hairs-serve.md b/.changeset/giant-hairs-serve.md index ae450234d1..0f77a6fe34 100644 --- a/.changeset/giant-hairs-serve.md +++ b/.changeset/giant-hairs-serve.md @@ -1,6 +1,6 @@ --- '@backstage/plugin-search-backend-module-elasticsearch': minor -'@backstage/plugin-search-backend-module-pg': minor +'@backstage/plugin-search-backend-module-pg': patch --- Search backend modules migrated to the new backend system. For documentation on how to migrate, check out the [how to migrate to the new backend system guide](../docs/features/search/how-to-guides.md#how-to-migrate-to-use-search-together-with-the-new-backend-system). From 6da5eb1e50f7068c0f4ad38994d88c5913c3e055 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 13:53:11 +0100 Subject: [PATCH 361/511] use default schedule for collator modules and make schedule option opotional Signed-off-by: Emma Indal --- docs/features/search/how-to-guides.md | 14 ++++---------- packages/backend-next/src/index.ts | 11 +++-------- .../search-backend-module-catalog/src/alpha.ts | 16 +++++++++++----- .../search-backend-module-explore/src/alpha.ts | 16 +++++++++++----- .../search-backend-module-techdocs/src/alpha.ts | 16 +++++++++++----- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index da94bd4ca4..161ff6844c 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -385,21 +385,15 @@ import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-mo import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; -const schedule = { - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - initialDelay: { seconds: 3 }, -}; - const backend = createBackend(); // adding the search plugin to the backend backend.add(searchPlugin()); // (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine. backend.add(searchModuleElasticsearchEngine()); -// extending search with collator modules to start index documents -backend.add(searchModuleCatalogCollator({ schedule })); -backend.add(searchModuleTechDocsCollator({ schedule })); -backend.add(searchModuleExploreCollator({ schedule })); +// extending search with collator modules to start index documents, take in optional schedule parameters. +backend.add(searchModuleCatalogCollator()); +backend.add(searchModuleTechDocsCollator()); +backend.add(searchModuleExploreCollator()); backend.start(); ``` diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 231343203a..e3cbbd53b8 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -40,14 +40,9 @@ backend.add(catalogPlugin()); backend.add(catalogModuleTemplateKind()); // Search -const schedule = { - frequency: { minutes: 10 }, - timeout: { minutes: 15 }, - initialDelay: { seconds: 3 }, -}; backend.add(searchPlugin()); -backend.add(searchModuleCatalogCollator({ schedule })); -backend.add(searchModuleTechDocsCollator({ schedule })); -backend.add(searchModuleExploreCollator({ schedule })); +backend.add(searchModuleCatalogCollator()); +backend.add(searchModuleTechDocsCollator()); +backend.add(searchModuleExploreCollator()); backend.start(); diff --git a/plugins/search-backend-module-catalog/src/alpha.ts b/plugins/search-backend-module-catalog/src/alpha.ts index d4530b582b..89c7479035 100644 --- a/plugins/search-backend-module-catalog/src/alpha.ts +++ b/plugins/search-backend-module-catalog/src/alpha.ts @@ -46,7 +46,7 @@ export type SearchModuleCatalogCollatorOptions = Omit< DefaultCatalogCollatorFactoryOptions, 'discovery' | 'tokenManager' > & { - schedule: TaskScheduleDefinition; + schedule?: TaskScheduleDefinition; }; /** @@ -54,7 +54,7 @@ export type SearchModuleCatalogCollatorOptions = Omit< * Search backend module for the Catalog index. */ export const searchModuleCatalogCollator = createBackendModule( - (options: SearchModuleCatalogCollatorOptions) => ({ + (options?: SearchModuleCatalogCollatorOptions) => ({ moduleId: 'catalogCollator', pluginId: 'search', register(env) { @@ -73,12 +73,18 @@ export const searchModuleCatalogCollator = createBackendModule( scheduler, indexRegistry, }) { - const { schedule, ...rest } = options; + const defaultSchedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; indexRegistry.addCollator({ - schedule: scheduler.createScheduledTaskRunner(schedule), + schedule: scheduler.createScheduledTaskRunner( + options?.schedule ?? defaultSchedule, + ), factory: DefaultCatalogCollatorFactory.fromConfig(config, { - ...rest, + ...options, discovery, tokenManager, }), diff --git a/plugins/search-backend-module-explore/src/alpha.ts b/plugins/search-backend-module-explore/src/alpha.ts index 357bb4233e..01303db631 100644 --- a/plugins/search-backend-module-explore/src/alpha.ts +++ b/plugins/search-backend-module-explore/src/alpha.ts @@ -47,7 +47,7 @@ export type SearchModuleExploreCollatorOptions = Omit< ToolDocumentCollatorFactoryOptions, 'logger' | 'discovery' > & { - schedule: TaskScheduleDefinition; + schedule?: TaskScheduleDefinition; }; /** @@ -55,7 +55,7 @@ export type SearchModuleExploreCollatorOptions = Omit< * Search backend module for the Explore index. */ export const searchModuleExploreCollator = createBackendModule( - (options: SearchModuleExploreCollatorOptions) => ({ + (options?: SearchModuleExploreCollatorOptions) => ({ moduleId: 'exploreCollator', pluginId: 'search', register(env) { @@ -68,12 +68,18 @@ export const searchModuleExploreCollator = createBackendModule( indexRegistry: searchIndexRegistryExtensionPoint, }, async init({ config, logger, discovery, scheduler, indexRegistry }) { - const { schedule, ...rest } = options; + const defaultSchedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; indexRegistry.addCollator({ - schedule: scheduler.createScheduledTaskRunner(schedule), + schedule: scheduler.createScheduledTaskRunner( + options?.schedule ?? defaultSchedule, + ), factory: ToolDocumentCollatorFactory.fromConfig(config, { - ...rest, + ...options, discovery, logger: loggerToWinstonLogger(logger), }), diff --git a/plugins/search-backend-module-techdocs/src/alpha.ts b/plugins/search-backend-module-techdocs/src/alpha.ts index f58c439c80..c781ad40ca 100644 --- a/plugins/search-backend-module-techdocs/src/alpha.ts +++ b/plugins/search-backend-module-techdocs/src/alpha.ts @@ -42,7 +42,7 @@ export type SearchModuleTechDocsCollatorOptions = Omit< TechDocsCollatorFactoryOptions, 'logger' | 'discovery' | 'tokenManager' > & { - schedule: TaskScheduleDefinition; + schedule?: TaskScheduleDefinition; }; /** @@ -50,7 +50,7 @@ export type SearchModuleTechDocsCollatorOptions = Omit< * Search backend module for the TechDocs index. */ export const searchModuleTechDocsCollator = createBackendModule( - (options: SearchModuleTechDocsCollatorOptions) => ({ + (options?: SearchModuleTechDocsCollatorOptions) => ({ moduleId: 'techDocsCollator', pluginId: 'search', register(env) { @@ -71,12 +71,18 @@ export const searchModuleTechDocsCollator = createBackendModule( scheduler, indexRegistry, }) { - const { schedule, ...rest } = options; + const defaultSchedule = { + frequency: { minutes: 10 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 3 }, + }; indexRegistry.addCollator({ - schedule: scheduler.createScheduledTaskRunner(schedule), + schedule: scheduler.createScheduledTaskRunner( + options?.schedule ?? defaultSchedule, + ), factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - ...rest, + ...options, discovery, tokenManager, logger: loggerToWinstonLogger(logger), From b8267644d846c8082a705efd3aabe71e4700c3c8 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 14:24:03 +0100 Subject: [PATCH 362/511] clean up unused dependencies Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- packages/backend-next/package.json | 2 -- .../package.json | 13 +------ .../package.json | 16 +-------- .../package.json | 7 ---- yarn.lock | 34 ------------------- 5 files changed, 2 insertions(+), 70 deletions(-) diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 9859717fd5..246eb348d4 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -25,9 +25,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "workspace:^", "@backstage/backend-defaults": "workspace:^", - "@backstage/backend-plugin-api": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 011e4d93df..4c323ae7fd 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -42,26 +42,15 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", - "@backstage/plugin-search-common": "workspace:^", - "@elastic/elasticsearch": "^7.13.0", - "@opensearch-project/opensearch": "^2.0.0", - "aws-os-connection": "^0.2.0", - "aws-sdk": "^2.948.0", - "elastic-builder": "^2.16.0", - "lodash": "^4.17.21", - "uuid": "^8.3.2", - "winston": "^3.2.1" + "@backstage/plugin-search-common": "workspace:^" }, "devDependencies": { "@backstage/backend-common": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@elastic/elasticsearch-mock": "^1.0.0", - "@short.io/opensearch-mock": "^0.3.1", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index c943f4480d..e4c71448ff 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -39,30 +39,16 @@ "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", - "@backstage/catalog-client": "workspace:^", - "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", - "@backstage/integration": "workspace:^", - "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-explore-common": "workspace:^", - "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", - "dockerode": "^3.3.1", - "express": "^4.17.1", - "express-promise-router": "^4.1.0", - "fs-extra": "10.1.0", - "knex": "^2.0.0", - "lodash": "^4.17.21", "node-fetch": "^2.6.7", - "p-limit": "^3.1.0", "winston": "^3.2.1" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", - "@backstage/cli": "workspace:^", - "msw": "^1.0.0" + "@backstage/cli": "workspace:^" }, "files": [ "dist" diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 0e7a350938..d08193be29 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -42,18 +42,11 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", - "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-techdocs-node": "workspace:^", - "dockerode": "^3.3.1", - "express": "^4.17.1", - "express-promise-router": "^4.1.0", - "fs-extra": "10.1.0", - "knex": "^2.0.0", "lodash": "^4.17.21", "node-fetch": "^2.6.7", "p-limit": "^3.1.0", diff --git a/yarn.lock b/yarn.lock index c4d07145e8..5e6dfdd242 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7782,22 +7782,11 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - "@elastic/elasticsearch": ^7.13.0 - "@elastic/elasticsearch-mock": ^1.0.0 - "@opensearch-project/opensearch": ^2.0.0 - "@short.io/opensearch-mock": ^0.3.1 - aws-os-connection: ^0.2.0 - aws-sdk: ^2.948.0 - elastic-builder: ^2.16.0 - lodash: ^4.17.21 msw: ^1.0.0 - uuid: ^8.3.2 - winston: ^3.2.1 languageName: unknown linkType: soft @@ -7832,26 +7821,12 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-explore-common": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - dockerode: ^3.3.1 - express: ^4.17.1 - express-promise-router: ^4.1.0 - fs-extra: 10.1.0 - knex: ^2.0.0 - lodash: ^4.17.21 - msw: ^1.0.0 node-fetch: ^2.6.7 - p-limit: ^3.1.0 winston: ^3.2.1 languageName: unknown linkType: soft @@ -7886,18 +7861,11 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-techdocs-node": "workspace:^" - dockerode: ^3.3.1 - express: ^4.17.1 - express-promise-router: ^4.1.0 - fs-extra: 10.1.0 - knex: ^2.0.0 lodash: ^4.17.21 msw: ^1.0.0 node-fetch: ^2.6.7 @@ -22582,9 +22550,7 @@ __metadata: version: 0.0.0-use.local resolution: "example-backend-next@workspace:packages/backend-next" dependencies: - "@backstage/backend-common": "workspace:^" "@backstage/backend-defaults": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" From fea29cf62ae0a12eef6d30c0d4d5fc29d7ea0875 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 14:24:47 +0100 Subject: [PATCH 363/511] import from main entry point to avoid duplicate exports Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- .../search-backend-module-catalog/src/alpha.ts | 9 +-------- .../src/alpha.ts | 15 +-------------- .../search-backend-module-explore/src/alpha.ts | 9 +-------- .../search-backend-module-techdocs/src/alpha.ts | 4 +--- 4 files changed, 4 insertions(+), 33 deletions(-) diff --git a/plugins/search-backend-module-catalog/src/alpha.ts b/plugins/search-backend-module-catalog/src/alpha.ts index 89c7479035..c633dc71b2 100644 --- a/plugins/search-backend-module-catalog/src/alpha.ts +++ b/plugins/search-backend-module-catalog/src/alpha.ts @@ -27,16 +27,9 @@ import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { - CatalogCollatorEntityTransformer, DefaultCatalogCollatorFactory, DefaultCatalogCollatorFactoryOptions, -} from './collators'; - -export type { - CatalogCollatorEntityTransformer, - DefaultCatalogCollatorFactory, - DefaultCatalogCollatorFactoryOptions, -}; +} from '@backstage/plugin-search-backend-module-catalog'; /** * @alpha diff --git a/plugins/search-backend-module-elasticsearch/src/alpha.ts b/plugins/search-backend-module-elasticsearch/src/alpha.ts index d2ff1568f6..538124f004 100644 --- a/plugins/search-backend-module-elasticsearch/src/alpha.ts +++ b/plugins/search-backend-module-elasticsearch/src/alpha.ts @@ -21,14 +21,10 @@ import { loggerToWinstonLogger } from '@backstage/backend-common'; import { searchEngineRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { - ElasticSearchHighlightConfig, - ElasticSearchQueryTranslatorOptions, - ElasticSearchConcreteQuery, ElasticSearchCustomIndexTemplate, - ElasticSearchCustomIndexTemplateBody, ElasticSearchQueryTranslator, ElasticSearchSearchEngine, -} from './engines'; +} from '@backstage/plugin-search-backend-module-elasticsearch'; /** * @alpha @@ -76,12 +72,3 @@ export const searchModuleElasticsearchEngine = createBackendModule( }, }), ); - -export type { - ElasticSearchCustomIndexTemplate, - ElasticSearchCustomIndexTemplateBody, - ElasticSearchQueryTranslator, - ElasticSearchQueryTranslatorOptions, - ElasticSearchHighlightConfig, - ElasticSearchConcreteQuery, -}; diff --git a/plugins/search-backend-module-explore/src/alpha.ts b/plugins/search-backend-module-explore/src/alpha.ts index 01303db631..f13c3c2406 100644 --- a/plugins/search-backend-module-explore/src/alpha.ts +++ b/plugins/search-backend-module-explore/src/alpha.ts @@ -28,16 +28,9 @@ import { loggerToWinstonLogger } from '@backstage/backend-common'; import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; import { - ToolDocument, ToolDocumentCollatorFactory, ToolDocumentCollatorFactoryOptions, -} from './collators'; - -export type { - ToolDocumentCollatorFactoryOptions, - ToolDocument, - ToolDocumentCollatorFactory, -}; +} from '@backstage/plugin-search-backend-module-explore'; /** * @alpha diff --git a/plugins/search-backend-module-techdocs/src/alpha.ts b/plugins/search-backend-module-techdocs/src/alpha.ts index c781ad40ca..1432cc88fb 100644 --- a/plugins/search-backend-module-techdocs/src/alpha.ts +++ b/plugins/search-backend-module-techdocs/src/alpha.ts @@ -30,9 +30,7 @@ import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-back import { DefaultTechDocsCollatorFactory, TechDocsCollatorFactoryOptions, -} from './collators'; - -export type { TechDocsCollatorFactoryOptions }; +} from '@backstage/plugin-search-backend-module-techdocs'; /** * @alpha From 05c132cbed911a125ceb73d176dd3d52f701f011 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 14:27:46 +0100 Subject: [PATCH 364/511] rename type from IndexServiceBuildOptions to SearchIndexServiceStartOptions Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- plugins/search-backend-node/src/alpha.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/search-backend-node/src/alpha.ts b/plugins/search-backend-node/src/alpha.ts index 22c6508b15..1565b6002d 100644 --- a/plugins/search-backend-node/src/alpha.ts +++ b/plugins/search-backend-node/src/alpha.ts @@ -39,7 +39,7 @@ import { IndexBuilder } from './IndexBuilder'; * @alpha * Options for build method on {@link SearchIndexService}. */ -export type IndexServiceBuildOptions = { +export type SearchIndexServiceStartOptions = { searchEngine: SearchEngine; collators: RegisterCollatorParameters[]; decorators: RegisterDecoratorParameters[]; @@ -53,7 +53,7 @@ export interface SearchIndexService { /** * Starts indexing process */ - start(options: IndexServiceBuildOptions): Promise; + start(options: SearchIndexServiceStartOptions): Promise; /** * Returns an index types list. */ @@ -97,7 +97,7 @@ class DefaultSearchIndexService implements SearchIndexService { return new DefaultSearchIndexService(options); } - async start(options: IndexServiceBuildOptions): Promise { + async start(options: SearchIndexServiceStartOptions): Promise { this.indexBuilder = new IndexBuilder({ logger: this.logger, searchEngine: options.searchEngine, From fde0f1951ad749c0874c36db924d2172bcc26c09 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 14:44:37 +0100 Subject: [PATCH 365/511] fix exports of deprecated collators/types Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- plugins/catalog-backend/src/index.ts | 29 ++++++++++++++++++-- plugins/explore-backend/src/index.ts | 28 +++++++++++++------ plugins/techdocs-backend/src/search/index.ts | 15 ++++++---- 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index 594b96b347..0a209def82 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -37,7 +37,30 @@ import { * @deprecated * import from @backstage/search-backend-module-catalog instead */ -export type { - DefaultCatalogCollatorFactoryOptions, - CatalogCollatorEntityTransformer, +export const DefaultCatalogCollatorFactory = _DefaultCatalogCollatorFactory; + +/** + * @deprecated + * import from @backstage/search-backend-module-catalog instead + */ +export const defaultCatalogCollatorEntityTransformer = + _defaultCatalogCollatorEntityTransformer; + +import type { + DefaultCatalogCollatorFactoryOptions as _DefaultCatalogCollatorFactoryOptions, + CatalogCollatorEntityTransformer as _CatalogCollatorEntityTransformer, } from '@backstage/plugin-search-backend-module-catalog'; + +/** + * @deprecated + * import from @backstage/search-backend-module-catalog instead + */ +export type DefaultCatalogCollatorFactoryOptions = + _DefaultCatalogCollatorFactoryOptions; + +/** + * @deprecated + * import from @backstage/search-backend-module-catalog instead + */ +export type CatalogCollatorEntityTransformer = + _CatalogCollatorEntityTransformer; diff --git a/plugins/explore-backend/src/index.ts b/plugins/explore-backend/src/index.ts index 6c456bffc2..335825e592 100644 --- a/plugins/explore-backend/src/index.ts +++ b/plugins/explore-backend/src/index.ts @@ -28,17 +28,27 @@ export * from './tools'; */ export { exampleTools } from './example/exampleTools'; -/** - * @deprecated - * import from @backstage/plugin-search-backend-module-explore instead - */ -export { ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; +import { ToolDocumentCollatorFactory as _ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; +import type { + ToolDocument as _ToolDocument, + ToolDocumentCollatorFactoryOptions as _ToolDocumentCollatorFactoryOptions, +} from '@backstage/plugin-search-backend-module-explore'; /** * @deprecated * import from @backstage/plugin-search-backend-module-explore instead */ -export type { - ToolDocument, - ToolDocumentCollatorFactoryOptions, -} from '@backstage/plugin-search-backend-module-explore'; +export const ToolDocumentCollatorFactory = _ToolDocumentCollatorFactory; + +/** + * @deprecated + * import from @backstage/plugin-search-backend-module-explore instead + */ +export type ToolDocument = _ToolDocument; + +/** + * @deprecated + * import from @backstage/plugin-search-backend-module-explore instead + */ +export type ToolDocumentCollatorFactoryOptions = + _ToolDocumentCollatorFactoryOptions; diff --git a/plugins/techdocs-backend/src/search/index.ts b/plugins/techdocs-backend/src/search/index.ts index 0c403ef0d7..bf0d61687d 100644 --- a/plugins/techdocs-backend/src/search/index.ts +++ b/plugins/techdocs-backend/src/search/index.ts @@ -20,14 +20,17 @@ export { DefaultTechDocsCollator } from './DefaultTechDocsCollator'; export type { TechDocsCollatorOptions } from './DefaultTechDocsCollator'; -/** - * @deprecated - * import from @backstage/search-backend-module-techdocs instead - */ -export type { TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; +import { DefaultTechDocsCollatorFactory as _DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; +import type { TechDocsCollatorFactoryOptions as _TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; /** * @deprecated * import from @backstage/search-backend-module-techdocs instead */ -export { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; +export type TechDocsCollatorFactoryOptions = _TechDocsCollatorFactoryOptions; + +/** + * @deprecated + * import from @backstage/search-backend-module-techdocs instead + */ +export const DefaultTechDocsCollatorFactory = _DefaultTechDocsCollatorFactory; From ab61195ea9790ad01e28733421c58d9fcfb704d4 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 9 Mar 2023 15:02:08 +0100 Subject: [PATCH 366/511] update api reports Signed-off-by: Emma Indal Co-authored-by: Camila Loiola --- plugins/catalog-backend/api-report.md | 31 +++++------- plugins/catalog-backend/src/index.ts | 16 +++---- plugins/explore-backend/api-report.md | 16 ++++--- plugins/explore-backend/src/index.ts | 12 ++--- .../alpha-api-report.md | 48 ++----------------- .../alpha-api-report.md | 43 +---------------- .../alpha-api-report.md | 38 ++------------- .../alpha-api-report.md | 22 ++------- .../search-backend-node/alpha-api-report.md | 16 +++---- plugins/techdocs-backend/api-report.md | 10 ++-- plugins/techdocs-backend/src/search/index.ts | 8 ++-- 11 files changed, 66 insertions(+), 194 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 3d6a33fbf9..d491f391d5 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -11,7 +11,7 @@ import { AnalyzeLocationGenerateEntity as AnalyzeLocationGenerateEntity_2 } from import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/plugin-catalog-common'; import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common'; import { CatalogApi } from '@backstage/catalog-client'; -import { CatalogCollatorEntityTransformer } from '@backstage/plugin-search-backend-module-catalog'; +import type { CatalogCollatorEntityTransformer as CatalogCollatorEntityTransformer_2 } from '@backstage/plugin-search-backend-module-catalog'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; import { CatalogProcessor as CatalogProcessor_2 } from '@backstage/plugin-catalog-node'; import { CatalogProcessorCache as CatalogProcessorCache_2 } from '@backstage/plugin-catalog-node'; @@ -24,15 +24,9 @@ import { CatalogProcessorRefreshKeysResult as CatalogProcessorRefreshKeysResult_ import { CatalogProcessorRelationResult as CatalogProcessorRelationResult_2 } from '@backstage/plugin-catalog-node'; import { CatalogProcessorResult as CatalogProcessorResult_2 } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; -<<<<<<< HEAD +import { DefaultCatalogCollatorFactory as DefaultCatalogCollatorFactory_2 } from '@backstage/plugin-search-backend-module-catalog'; +import type { DefaultCatalogCollatorFactoryOptions as DefaultCatalogCollatorFactoryOptions_2 } from '@backstage/plugin-search-backend-module-catalog'; import { DeferredEntity as DeferredEntity_2 } from '@backstage/plugin-catalog-node'; -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -======= -import { defaultCatalogCollatorEntityTransformer } from '@backstage/plugin-search-backend-module-catalog'; -import { DefaultCatalogCollatorFactory } from '@backstage/plugin-search-backend-module-catalog'; -import { DefaultCatalogCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-catalog'; -import { DeferredEntity } from '@backstage/plugin-catalog-node'; ->>>>>>> 56a45401d3d (feat(search): create search collator modules) import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; import { EntityProvider as EntityProvider_2 } from '@backstage/plugin-catalog-node'; @@ -52,11 +46,6 @@ import { PermissionRule } from '@backstage/plugin-permission-node'; import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -<<<<<<< HEAD -import { Readable } from 'stream'; -======= -import { processingResult } from '@backstage/plugin-catalog-node'; ->>>>>>> 56a45401d3d (feat(search): create search collator modules) import { Router } from 'express'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { TokenManager } from '@backstage/backend-common'; @@ -172,7 +161,9 @@ export class CatalogBuilder { useLegacySingleProcessorValidation(): this; } -export { CatalogCollatorEntityTransformer }; +// @public @deprecated (undocumented) +export type CatalogCollatorEntityTransformer = + CatalogCollatorEntityTransformer_2; // @public (undocumented) export type CatalogEnvironment = { @@ -295,11 +286,15 @@ export class DefaultCatalogCollator { readonly visibilityPermission: Permission; } -export { defaultCatalogCollatorEntityTransformer }; +// @public @deprecated (undocumented) +export const defaultCatalogCollatorEntityTransformer: CatalogCollatorEntityTransformer_2; -export { DefaultCatalogCollatorFactory }; +// @public @deprecated (undocumented) +export const DefaultCatalogCollatorFactory: typeof DefaultCatalogCollatorFactory_2; -export { DefaultCatalogCollatorFactoryOptions }; +// @public @deprecated (undocumented) +export type DefaultCatalogCollatorFactoryOptions = + DefaultCatalogCollatorFactoryOptions_2; // @public @deprecated (undocumented) export type DeferredEntity = DeferredEntity_2; diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index 0a209def82..eca155ce46 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -34,14 +34,14 @@ import { } from '@backstage/plugin-search-backend-module-catalog'; /** - * @deprecated - * import from @backstage/search-backend-module-catalog instead + * @public + * @deprecated import from `@backstage/search-backend-module-catalog` instead */ export const DefaultCatalogCollatorFactory = _DefaultCatalogCollatorFactory; /** - * @deprecated - * import from @backstage/search-backend-module-catalog instead + * @public + * @deprecated import from `@backstage/search-backend-module-catalog` instead */ export const defaultCatalogCollatorEntityTransformer = _defaultCatalogCollatorEntityTransformer; @@ -52,15 +52,15 @@ import type { } from '@backstage/plugin-search-backend-module-catalog'; /** - * @deprecated - * import from @backstage/search-backend-module-catalog instead + * @public + * @deprecated import from `@backstage/search-backend-module-catalog` instead */ export type DefaultCatalogCollatorFactoryOptions = _DefaultCatalogCollatorFactoryOptions; /** - * @deprecated - * import from @backstage/search-backend-module-catalog instead + * @public + * @deprecated import from `@backstage/search-backend-module-catalog` instead */ export type CatalogCollatorEntityTransformer = _CatalogCollatorEntityTransformer; diff --git a/plugins/explore-backend/api-report.md b/plugins/explore-backend/api-report.md index 4bcdc07079..e3933e350b 100644 --- a/plugins/explore-backend/api-report.md +++ b/plugins/explore-backend/api-report.md @@ -8,9 +8,9 @@ import express from 'express'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; import { GetExploreToolsResponse } from '@backstage/plugin-explore-common'; import { Logger } from 'winston'; -import { ToolDocument } from '@backstage/plugin-search-backend-module-explore'; -import { ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; -import { ToolDocumentCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-explore'; +import type { ToolDocument as ToolDocument_2 } from '@backstage/plugin-search-backend-module-explore'; +import { ToolDocumentCollatorFactory as ToolDocumentCollatorFactory_2 } from '@backstage/plugin-search-backend-module-explore'; +import type { ToolDocumentCollatorFactoryOptions as ToolDocumentCollatorFactoryOptions_2 } from '@backstage/plugin-search-backend-module-explore'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -36,9 +36,13 @@ export class StaticExploreToolProvider implements ExploreToolProvider { getTools(request: GetExploreToolsRequest): Promise; } -export { ToolDocument }; +// @public @deprecated (undocumented) +export type ToolDocument = ToolDocument_2; -export { ToolDocumentCollatorFactory }; +// @public @deprecated (undocumented) +export const ToolDocumentCollatorFactory: typeof ToolDocumentCollatorFactory_2; -export { ToolDocumentCollatorFactoryOptions }; +// @public @deprecated (undocumented) +export type ToolDocumentCollatorFactoryOptions = + ToolDocumentCollatorFactoryOptions_2; ``` diff --git a/plugins/explore-backend/src/index.ts b/plugins/explore-backend/src/index.ts index 335825e592..ca501db96b 100644 --- a/plugins/explore-backend/src/index.ts +++ b/plugins/explore-backend/src/index.ts @@ -35,20 +35,20 @@ import type { } from '@backstage/plugin-search-backend-module-explore'; /** - * @deprecated - * import from @backstage/plugin-search-backend-module-explore instead + * @public + * @deprecated import from `@backstage/search-backend-module-explore` instead */ export const ToolDocumentCollatorFactory = _ToolDocumentCollatorFactory; /** - * @deprecated - * import from @backstage/plugin-search-backend-module-explore instead + * @public + * @deprecated import from `@backstage/search-backend-module-explore` instead */ export type ToolDocument = _ToolDocument; /** - * @deprecated - * import from @backstage/plugin-search-backend-module-explore instead + * @public + * @deprecated import from `@backstage/search-backend-module-explore` instead */ export type ToolDocumentCollatorFactoryOptions = _ToolDocumentCollatorFactoryOptions; diff --git a/plugins/search-backend-module-catalog/alpha-api-report.md b/plugins/search-backend-module-catalog/alpha-api-report.md index e0173fce74..70fae9ef93 100644 --- a/plugins/search-backend-module-catalog/alpha-api-report.md +++ b/plugins/search-backend-module-catalog/alpha-api-report.md @@ -3,55 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { BackendFeature } from '@backstage/backend-plugin-api'; -import { CatalogApi } from '@backstage/catalog-client'; -import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; -import { Config } from '@backstage/config'; -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -import { Entity } from '@backstage/catalog-model'; -import { GetEntitiesRequest } from '@backstage/catalog-client'; -import { Permission } from '@backstage/plugin-permission-common'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { Readable } from 'stream'; +import { DefaultCatalogCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-catalog'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { TokenManager } from '@backstage/backend-common'; - -// @public (undocumented) -export type CatalogCollatorEntityTransformer = ( - entity: Entity, -) => Omit; - -// @public (undocumented) -export class DefaultCatalogCollatorFactory implements DocumentCollatorFactory { - // (undocumented) - static fromConfig( - _config: Config, - options: DefaultCatalogCollatorFactoryOptions, - ): DefaultCatalogCollatorFactory; - // (undocumented) - getCollator(): Promise; - // (undocumented) - readonly type = 'software-catalog'; - // (undocumented) - readonly visibilityPermission: Permission; -} - -// @public (undocumented) -export type DefaultCatalogCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - tokenManager: TokenManager; - locationTemplate?: string; - filter?: GetEntitiesRequest['filter']; - batchSize?: number; - catalogClient?: CatalogApi; - entityTransformer?: CatalogCollatorEntityTransformer; -}; // @alpha export const searchModuleCatalogCollator: ( - options: SearchModuleCatalogCollatorOptions, + options?: SearchModuleCatalogCollatorOptions | undefined, ) => BackendFeature; // @alpha @@ -59,7 +17,7 @@ export type SearchModuleCatalogCollatorOptions = Omit< DefaultCatalogCollatorFactoryOptions, 'discovery' | 'tokenManager' > & { - schedule: TaskScheduleDefinition; + schedule?: TaskScheduleDefinition; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/search-backend-module-elasticsearch/alpha-api-report.md b/plugins/search-backend-module-elasticsearch/alpha-api-report.md index fca920f3d1..91007c20de 100644 --- a/plugins/search-backend-module-elasticsearch/alpha-api-report.md +++ b/plugins/search-backend-module-elasticsearch/alpha-api-report.md @@ -4,47 +4,8 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; -import { SearchQuery } from '@backstage/plugin-search-common'; - -// @public -export type ElasticSearchConcreteQuery = { - documentTypes?: string[]; - elasticSearchQuery: Object; - pageSize: number; -}; - -// @public -export type ElasticSearchCustomIndexTemplate = { - name: string; - body: ElasticSearchCustomIndexTemplateBody; -}; - -// @public -export type ElasticSearchCustomIndexTemplateBody = { - index_patterns: string[]; - composed_of?: string[]; - template?: Record; -}; - -// @public (undocumented) -export type ElasticSearchHighlightConfig = { - fragmentDelimiter: string; - fragmentSize: number; - numFragments: number; - preTag: string; - postTag: string; -}; - -// @public -export type ElasticSearchQueryTranslator = ( - query: SearchQuery, - options?: ElasticSearchQueryTranslatorOptions, -) => ElasticSearchConcreteQuery; - -// @public -export type ElasticSearchQueryTranslatorOptions = { - highlightOptions?: ElasticSearchHighlightConfig; -}; +import { ElasticSearchCustomIndexTemplate } from '@backstage/plugin-search-backend-module-elasticsearch'; +import { ElasticSearchQueryTranslator } from '@backstage/plugin-search-backend-module-elasticsearch'; // @alpha export const searchModuleElasticsearchEngine: ( diff --git a/plugins/search-backend-module-explore/alpha-api-report.md b/plugins/search-backend-module-explore/alpha-api-report.md index 5c5189c8bd..cf32b59dd3 100644 --- a/plugins/search-backend-module-explore/alpha-api-report.md +++ b/plugins/search-backend-module-explore/alpha-api-report.md @@ -3,21 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { BackendFeature } from '@backstage/backend-plugin-api'; -import { Config } from '@backstage/config'; -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -import { ExploreTool } from '@backstage/plugin-explore-common'; -import { IndexableDocument } from '@backstage/plugin-search-common'; -import { Logger } from 'winston'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { Readable } from 'stream'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { ToolDocumentCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-explore'; // @alpha export const searchModuleExploreCollator: ( - options: SearchModuleExploreCollatorOptions, + options?: SearchModuleExploreCollatorOptions | undefined, ) => BackendFeature; // @alpha @@ -25,31 +17,7 @@ export type SearchModuleExploreCollatorOptions = Omit< ToolDocumentCollatorFactoryOptions, 'logger' | 'discovery' > & { - schedule: TaskScheduleDefinition; -}; - -// @public -export interface ToolDocument extends IndexableDocument, ExploreTool {} - -// @public -export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { - // (undocumented) - execute(): AsyncGenerator; - // (undocumented) - static fromConfig( - _config: Config, - options: ToolDocumentCollatorFactoryOptions, - ): ToolDocumentCollatorFactory; - // (undocumented) - getCollator(): Promise; - // (undocumented) - readonly type: string; -} - -// @public -export type ToolDocumentCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - logger: Logger; + schedule?: TaskScheduleDefinition; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/search-backend-module-techdocs/alpha-api-report.md b/plugins/search-backend-module-techdocs/alpha-api-report.md index 3360055c62..71ce09b744 100644 --- a/plugins/search-backend-module-techdocs/alpha-api-report.md +++ b/plugins/search-backend-module-techdocs/alpha-api-report.md @@ -3,18 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { BackendFeature } from '@backstage/backend-plugin-api'; -import { CatalogApi } from '@backstage/catalog-client'; -import { Logger } from 'winston'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { TokenManager } from '@backstage/backend-common'; +import { TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; // @alpha export const searchModuleTechDocsCollator: ( - options: SearchModuleTechDocsCollatorOptions, + options?: SearchModuleTechDocsCollatorOptions | undefined, ) => BackendFeature; // @alpha @@ -22,18 +17,7 @@ export type SearchModuleTechDocsCollatorOptions = Omit< TechDocsCollatorFactoryOptions, 'logger' | 'discovery' | 'tokenManager' > & { - schedule: TaskScheduleDefinition; -}; - -// @public -export type TechDocsCollatorFactoryOptions = { - discovery: PluginEndpointDiscovery; - logger: Logger; - tokenManager: TokenManager; - locationTemplate?: string; - catalogClient?: CatalogApi; - parallelismLimit?: number; - legacyPathCasing?: boolean; + schedule?: TaskScheduleDefinition; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/search-backend-node/alpha-api-report.md b/plugins/search-backend-node/alpha-api-report.md index 27d4875bd6..9dd754267d 100644 --- a/plugins/search-backend-node/alpha-api-report.md +++ b/plugins/search-backend-node/alpha-api-report.md @@ -11,13 +11,6 @@ import { SearchEngine } from '@backstage/plugin-search-common'; import { ServiceRef } from '@backstage/backend-plugin-api'; import { TaskRunner } from '@backstage/backend-tasks'; -// @alpha -export type IndexServiceBuildOptions = { - searchEngine: SearchEngine; - collators: RegisterCollatorParameters[]; - decorators: RegisterDecoratorParameters[]; -}; - // @public export interface RegisterCollatorParameters { factory: DocumentCollatorFactory; @@ -52,11 +45,18 @@ export const searchIndexRegistryExtensionPoint: ExtensionPoint; - start(options: IndexServiceBuildOptions): Promise; + start(options: SearchIndexServiceStartOptions): Promise; } // @alpha export const searchIndexServiceRef: ServiceRef; +// @alpha +export type SearchIndexServiceStartOptions = { + searchEngine: SearchEngine; + collators: RegisterCollatorParameters[]; + decorators: RegisterDecoratorParameters[]; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index 2abd9783f7..b8974e6d4f 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -6,7 +6,7 @@ import { CatalogApi } from '@backstage/catalog-client'; import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; -import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-search-backend-module-techdocs'; +import { DefaultTechDocsCollatorFactory as DefaultTechDocsCollatorFactory_2 } from '@backstage/plugin-search-backend-module-techdocs'; import { Entity } from '@backstage/catalog-model'; import express from 'express'; import { GeneratorBuilder } from '@backstage/plugin-techdocs-node'; @@ -17,7 +17,7 @@ import { PluginCacheManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PreparerBuilder } from '@backstage/plugin-techdocs-node'; import { PublisherBase } from '@backstage/plugin-techdocs-node'; -import { TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; +import type { TechDocsCollatorFactoryOptions as TechDocsCollatorFactoryOptions_2 } from '@backstage/plugin-search-backend-module-techdocs'; import { TechDocsDocument } from '@backstage/plugin-techdocs-node'; import { TokenManager } from '@backstage/backend-common'; import * as winston from 'winston'; @@ -45,7 +45,8 @@ export class DefaultTechDocsCollator { readonly visibilityPermission: Permission; } -export { DefaultTechDocsCollatorFactory }; +// @public @deprecated (undocumented) +export const DefaultTechDocsCollatorFactory: typeof DefaultTechDocsCollatorFactory_2; // @public export interface DocsBuildStrategy { @@ -90,7 +91,8 @@ export type ShouldBuildParameters = { entity: Entity; }; -export { TechDocsCollatorFactoryOptions }; +// @public @deprecated (undocumented) +export type TechDocsCollatorFactoryOptions = TechDocsCollatorFactoryOptions_2; // @public export type TechDocsCollatorOptions = { diff --git a/plugins/techdocs-backend/src/search/index.ts b/plugins/techdocs-backend/src/search/index.ts index bf0d61687d..fc2b48375e 100644 --- a/plugins/techdocs-backend/src/search/index.ts +++ b/plugins/techdocs-backend/src/search/index.ts @@ -24,13 +24,13 @@ import { DefaultTechDocsCollatorFactory as _DefaultTechDocsCollatorFactory } fro import type { TechDocsCollatorFactoryOptions as _TechDocsCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-techdocs'; /** - * @deprecated - * import from @backstage/search-backend-module-techdocs instead + * @public + * @deprecated import from `@backstage/search-backend-module-techdocs` instead */ export type TechDocsCollatorFactoryOptions = _TechDocsCollatorFactoryOptions; /** - * @deprecated - * import from @backstage/search-backend-module-techdocs instead + * @public + * @deprecated import from `@backstage/search-backend-module-techdocs` instead */ export const DefaultTechDocsCollatorFactory = _DefaultTechDocsCollatorFactory; From 9d667467374a808c289b72ff082ed73d973b696a Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 20 Mar 2023 13:16:34 +0100 Subject: [PATCH 367/511] Update readme files and api reports Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .changeset/tall-chairs-explain.md | 2 +- .changeset/wet-lamps-happen.md | 2 +- docs/features/search/how-to-guides.md | 2 +- .../search-backend-module-catalog/README.md | 18 ++++++++++++++++-- .../search-backend-module-explore/README.md | 18 ++++++++++++++++-- .../search-backend-module-techdocs/README.md | 18 ++++++++++++++++-- .../search-backend-node/alpha-api-report.md | 16 ++-------------- plugins/search-backend-node/src/alpha.ts | 10 +--------- 8 files changed, 54 insertions(+), 32 deletions(-) diff --git a/.changeset/tall-chairs-explain.md b/.changeset/tall-chairs-explain.md index e7367d2d4a..9709f225b4 100644 --- a/.changeset/tall-chairs-explain.md +++ b/.changeset/tall-chairs-explain.md @@ -4,4 +4,4 @@ '@backstage/plugin-explore-backend': patch --- -Deprecate the collator files in the backend package by extracting them into a separate module. +Collator factories instantiated in new backend system modules and now marked as deprecated. Will be continued to be exported publicly until the new backend system is fully rolled out. diff --git a/.changeset/wet-lamps-happen.md b/.changeset/wet-lamps-happen.md index 76e36d219d..066b34b23c 100644 --- a/.changeset/wet-lamps-happen.md +++ b/.changeset/wet-lamps-happen.md @@ -4,4 +4,4 @@ '@backstage/plugin-search-backend-module-explore': minor --- -Extend the index with custom collators by creating search plugin modules. +Package introduced to export search backend modules that can be used with the new backend system to extend search with plugin specific functionality, such as collators. For documentation on how to migrate, check out the [how to migrate to the new backend system guide](../docs/features/search/how-to-guides.md#how-to-migrate-to-use-search-together-with-the-new-backend-system). diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index 161ff6844c..abb29ab4eb 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -370,7 +370,7 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => ( There are other more specific search results layout components that also accept result item extensions, check their documentation: [SearchResultList](https://backstage.io/storybook/?path=/story/plugins-search-searchresultlist--with-result-item-extensions) and [SearchResultGroup](https://backstage.io/storybook/?path=/story/plugins-search-searchresultgroup--with-result-item-extensions). -## How to migrate to use Search together with the new backend system +## How to migrate your backend installation to use Search together with the new backend system > DISCLAIMER: The new backend system is in alpha, and so are the search backend support for the new backend system. We don't recommend you to migrate your backend installations to the new system yet. But if you want to experiment, this is the guide for you! diff --git a/plugins/search-backend-module-catalog/README.md b/plugins/search-backend-module-catalog/README.md index b6c734d893..b5960e2789 100644 --- a/plugins/search-backend-module-catalog/README.md +++ b/plugins/search-backend-module-catalog/README.md @@ -6,6 +6,22 @@ This package exports catalog backend modules responsible for extending search. ## Example +### Use default schedule + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleCatalogCollator()); +backend.start(); +``` + +### Use custom schedule + ```tsx // packages/backend-next/src/index.ts import { createBackend } from '@backstage/backend-defaults'; @@ -23,5 +39,3 @@ backend.add(searchPlugin()); backend.add(searchModuleCatalogCollator({ schedule })); backend.start(); ``` - -... diff --git a/plugins/search-backend-module-explore/README.md b/plugins/search-backend-module-explore/README.md index d2b00767e2..a87f2d78f9 100644 --- a/plugins/search-backend-module-explore/README.md +++ b/plugins/search-backend-module-explore/README.md @@ -6,6 +6,22 @@ This package exports explore backend modules responsible for extending search. ## Example +### Use default schedule + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleExploreCollator()); +backend.start(); +``` + +### Use custom schedule + ```tsx // packages/backend-next/src/index.ts import { createBackend } from '@backstage/backend-defaults'; @@ -23,5 +39,3 @@ backend.add(searchPlugin()); backend.add(searchModuleExploreCollator({ schedule })); backend.start(); ``` - -... diff --git a/plugins/search-backend-module-techdocs/README.md b/plugins/search-backend-module-techdocs/README.md index 817bb40998..5de310466b 100644 --- a/plugins/search-backend-module-techdocs/README.md +++ b/plugins/search-backend-module-techdocs/README.md @@ -6,6 +6,22 @@ This package exports techdocs backend modules responsible for extending search. ## Example +### Use default schedule + +```tsx +// packages/backend-next/src/index.ts +import { createBackend } from '@backstage/backend-defaults'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; + +const backend = createBackend(); +backend.add(searchPlugin()); +backend.add(searchModuleTechDocsCollator()); +backend.start(); +``` + +### Use custom schedule + ```tsx // packages/backend-next/src/index.ts import { createBackend } from '@backstage/backend-defaults'; @@ -23,5 +39,3 @@ backend.add(searchPlugin()); backend.add(searchModuleTechDocsCollator({ schedule })); backend.start(); ``` - -... diff --git a/plugins/search-backend-node/alpha-api-report.md b/plugins/search-backend-node/alpha-api-report.md index 9dd754267d..74b7a4b4bc 100644 --- a/plugins/search-backend-node/alpha-api-report.md +++ b/plugins/search-backend-node/alpha-api-report.md @@ -3,24 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -import { DocumentDecoratorFactory } from '@backstage/plugin-search-common'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { RegisterCollatorParameters } from '@backstage/plugin-search-backend-node'; +import { RegisterDecoratorParameters } from '@backstage/plugin-search-backend-node'; import { SearchEngine } from '@backstage/plugin-search-common'; import { ServiceRef } from '@backstage/backend-plugin-api'; -import { TaskRunner } from '@backstage/backend-tasks'; - -// @public -export interface RegisterCollatorParameters { - factory: DocumentCollatorFactory; - schedule: TaskRunner; -} - -// @public -export interface RegisterDecoratorParameters { - factory: DocumentDecoratorFactory; -} // @alpha export interface SearchEngineRegistryExtensionPoint { diff --git a/plugins/search-backend-node/src/alpha.ts b/plugins/search-backend-node/src/alpha.ts index 1565b6002d..943e11b580 100644 --- a/plugins/search-backend-node/src/alpha.ts +++ b/plugins/search-backend-node/src/alpha.ts @@ -31,7 +31,7 @@ import { createExtensionPoint } from '@backstage/backend-plugin-api'; import { RegisterCollatorParameters, RegisterDecoratorParameters, -} from './types'; +} from '@backstage/plugin-search-backend-node'; import { IndexBuilder } from './IndexBuilder'; @@ -157,11 +157,3 @@ export const searchIndexRegistryExtensionPoint = createExtensionPoint({ id: 'search.index.registry', }); - -/** - * @alpha - */ -export type { - RegisterCollatorParameters, - RegisterDecoratorParameters, -} from './types'; From a02490f2767750035a5fc5805a2666506429a5fe Mon Sep 17 00:00:00 2001 From: Min Kim Date: Thu, 16 Mar 2023 10:53:32 -0400 Subject: [PATCH 368/511] Export TemplateListPageProps for the router to accept component as prop Signed-off-by: Min Kim Co-authored-by: Taras Mankovski --- plugins/scaffolder/src/next/Router/Router.tsx | 6 ++++-- plugins/scaffolder/src/next/TemplateListPage/index.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 75d87602e4..a1cace928f 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -15,7 +15,7 @@ */ import React, { PropsWithChildren } from 'react'; import { Routes, Route, useOutlet } from 'react-router-dom'; -import { TemplateListPage } from '../TemplateListPage'; +import { TemplateListPage, TemplateListPageProps } from '../TemplateListPage'; import { TemplateWizardPage } from '../TemplateWizardPage'; import { NextFieldExtensionOptions, @@ -59,6 +59,7 @@ export type NextRouterProps = { TemplateOutputsComponent?: React.ComponentType<{ output?: ScaffolderTaskOutput; }>; + TemplateListPageComponent?: React.ComponentType; }; groups?: TemplateGroupFilter[]; templateFilter?: (entity: TemplateEntityV1beta3) => boolean; @@ -85,6 +86,7 @@ export const Router = (props: PropsWithChildren) => { TemplateCardComponent, TemplateOutputsComponent, TaskPageComponent = OngoingTask, + TemplateListPageComponent = TemplateListPage, } = {}, } = props; const outlet = useOutlet() || props.children; @@ -108,7 +110,7 @@ export const Router = (props: PropsWithChildren) => { Date: Thu, 16 Mar 2023 10:54:53 -0400 Subject: [PATCH 369/511] Export necessary components for a custom TemplateListPage Signed-off-by: Min Kim Co-authored-by: Taras Mankovski --- plugins/scaffolder/src/alpha.ts | 7 +++++++ .../scaffolder/src/next/TemplateListPage/index.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index 72eb073fba..b2eac4a0c8 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -16,7 +16,14 @@ export { NextScaffolderPage } from './plugin'; export { + TemplateGroups, type TemplateGroupFilter, + type TemplateGroupsProps, type NextRouterProps, type FormProps, + CategoryPicker, + RegisterExistingButton, + type RegisterExistingButtonProps, + ContextMenu, } from './next'; +export { registerComponentRouteRef } from './routes'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index c404a9352a..74efbef813 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -15,3 +15,16 @@ */ export { TemplateListPage } from './TemplateListPage'; export type { TemplateListPageProps } from './TemplateListPage'; + +export { TemplateGroups } from './TemplateGroups'; +export type { + TemplateGroupFilter, + TemplateGroupsProps, +} from './TemplateGroups'; + +export { CategoryPicker } from './CategoryPicker'; + +export { RegisterExistingButton } from './RegisterExistingButton'; +export type { RegisterExistingButtonProps } from './RegisterExistingButton'; + +export { ContextMenu } from './ContextMenu'; From 001a6e61b46a1198b8e1f23116e62fa9b81e7aa9 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Thu, 16 Mar 2023 11:26:32 -0400 Subject: [PATCH 370/511] Export TemplateWizardPageProps for the router to accept page as prop Signed-off-by: Min Kim Co-authored-by: Taras Mankovski --- plugins/scaffolder/src/next/Router/Router.tsx | 9 +++++++-- plugins/scaffolder/src/next/TemplateWizardPage/index.ts | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index a1cace928f..e36bc7428a 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -16,7 +16,10 @@ import React, { PropsWithChildren } from 'react'; import { Routes, Route, useOutlet } from 'react-router-dom'; import { TemplateListPage, TemplateListPageProps } from '../TemplateListPage'; -import { TemplateWizardPage } from '../TemplateWizardPage'; +import { + TemplateWizardPage, + TemplateWizardPageProps, +} from '../TemplateWizardPage'; import { NextFieldExtensionOptions, FormProps, @@ -60,6 +63,7 @@ export type NextRouterProps = { output?: ScaffolderTaskOutput; }>; TemplateListPageComponent?: React.ComponentType; + TemplateWizardPageComponent?: React.ComponentType; }; groups?: TemplateGroupFilter[]; templateFilter?: (entity: TemplateEntityV1beta3) => boolean; @@ -87,6 +91,7 @@ export const Router = (props: PropsWithChildren) => { TemplateOutputsComponent, TaskPageComponent = OngoingTask, TemplateListPageComponent = TemplateListPage, + TemplateWizardPageComponent = TemplateWizardPage, } = {}, } = props; const outlet = useOutlet() || props.children; @@ -122,7 +127,7 @@ export const Router = (props: PropsWithChildren) => { path={selectedTemplateRouteRef.path} element={ - Date: Thu, 16 Mar 2023 11:46:42 -0400 Subject: [PATCH 371/511] Write tests for custom Wizard and List pages Signed-off-by: Min Kim Co-authored-by: Taras Mankovski --- .../src/next/Router/Router.test.tsx | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/plugins/scaffolder/src/next/Router/Router.test.tsx b/plugins/scaffolder/src/next/Router/Router.test.tsx index 9565572a2f..3d52dd0dd0 100644 --- a/plugins/scaffolder/src/next/Router/Router.test.tsx +++ b/plugins/scaffolder/src/next/Router/Router.test.tsx @@ -47,6 +47,21 @@ describe('Router', () => { expect(TemplateListPage).toHaveBeenCalled(); }); + + it('should render user-provided TemplateListPage', async () => { + const { getByText } = await renderInTestApp( + <>foobar, + }} + />, + { + routeEntries: ['/'], + }, + ); + expect(getByText('foobar')).toBeInTheDocument(); + expect(TemplateListPage).not.toHaveBeenCalled(); + }); }); describe('/templates/:templateName', () => { @@ -58,6 +73,21 @@ describe('Router', () => { expect(TemplateWizardPage).toHaveBeenCalled(); }); + it('should render user-provided TemplateWizardPage', async () => { + const { getByText } = await renderInTestApp( + <>foobar, + }} + />, + { + routeEntries: ['/templates/default/foo'], + }, + ); + expect(getByText('foobar')).toBeInTheDocument(); + expect(TemplateWizardPage).not.toHaveBeenCalled(); + }); + it('should pass through the FormProps property', async () => { const transformErrorsMock = jest.fn(); From e5ad1bd61eca6ca988569422338794a65f254ca8 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Thu, 16 Mar 2023 13:04:08 -0400 Subject: [PATCH 372/511] Add changesets and the new api report Signed-off-by: Min Kim Co-authored-by: Taras Mankovski --- .changeset/swift-meals-live.md | 5 ++ .../TemplateCategoryPicker.tsx | 1 - plugins/scaffolder/alpha-api-report.md | 55 +++++++++++++++++++ plugins/scaffolder/api-report.md | 8 +-- plugins/scaffolder/src/alpha.ts | 4 +- .../next/TemplateListPage/TemplateGroups.tsx | 6 ++ .../TemplateListPage/TemplateListPage.tsx | 6 ++ .../src/next/TemplateListPage/index.ts | 4 -- .../TemplateWizardPage/TemplateWizardPage.tsx | 3 + plugins/scaffolder/src/routes.ts | 3 + 10 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 .changeset/swift-meals-live.md diff --git a/.changeset/swift-meals-live.md b/.changeset/swift-meals-live.md new file mode 100644 index 0000000000..ad8106b04e --- /dev/null +++ b/.changeset/swift-meals-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Allow `TemplateListPage` and `TemplateWizardPage` to be passed in as props diff --git a/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx index 5d7021bc8c..028ce3a701 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx @@ -37,7 +37,6 @@ const checkedIcon = ; /** * The Category Picker that is rendered on the left side for picking * categories and filtering the template list. - * * @alpha */ export const TemplateCategoryPicker = () => { diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index abb0dc9e03..656f79811f 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -5,8 +5,12 @@ ```ts /// +import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FormProps as FormProps_2 } from '@backstage/plugin-scaffolder-react/alpha'; import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; +import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; +import { LinkProps } from 'react-router-dom'; +import { NextFieldExtensionOptions } from '@backstage/plugin-scaffolder-react/alpha'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; @@ -28,6 +32,8 @@ export type NextRouterProps = { TemplateOutputsComponent?: React_2.ComponentType<{ output?: ScaffolderTaskOutput; }>; + TemplateListPageComponent?: React_2.ComponentType; + TemplateWizardPageComponent?: React_2.ComponentType; }; groups?: TemplateGroupFilter[]; templateFilter?: (entity: TemplateEntityV1beta3) => boolean; @@ -44,11 +50,60 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; +// @public (undocumented) +export const registerComponentRouteRef: ExternalRouteRef; + +// @alpha +export const RegisterExistingButton: ( + props: RegisterExistingButtonProps, +) => JSX.Element | null; + +// @alpha +export type RegisterExistingButtonProps = { + title: string; +} & Partial>; + // @alpha (undocumented) export type TemplateGroupFilter = { title?: React_2.ReactNode; filter: (entity: TemplateEntityV1beta3) => boolean; }; +// @alpha (undocumented) +export const TemplateGroups: (props: TemplateGroupsProps) => JSX.Element | null; + +// @alpha (undocumented) +export interface TemplateGroupsProps { + // (undocumented) + groups: TemplateGroupFilter[]; + // (undocumented) + TemplateCardComponent?: React_2.ComponentType<{ + template: TemplateEntityV1beta3; + }>; + // (undocumented) + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; +} + +// @alpha (undocumented) +export type TemplateListPageProps = { + TemplateCardComponent?: React_2.ComponentType<{ + template: TemplateEntityV1beta3; + }>; + groups?: TemplateGroupFilter[]; + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; + contextMenu?: { + editor?: boolean; + actions?: boolean; + tasks?: boolean; + }; +}; + +// @alpha (undocumented) +export type TemplateWizardPageProps = { + customFieldExtensions: NextFieldExtensionOptions[]; + layouts?: LayoutOptions[]; + FormProps?: FormProps_2; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 8f37f7cf50..5b8ea034cc 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -138,8 +138,8 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; } >; @@ -148,8 +148,8 @@ export const EntityTagsPickerFieldSchema: FieldSchema< string[], { showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; } >; @@ -315,8 +315,8 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< | { azure?: string[] | undefined; github?: string[] | undefined; - gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + gitlab?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -341,8 +341,8 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { azure?: string[] | undefined; github?: string[] | undefined; - gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + gitlab?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index b2eac4a0c8..c082878827 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -21,9 +21,9 @@ export { type TemplateGroupsProps, type NextRouterProps, type FormProps, - CategoryPicker, RegisterExistingButton, type RegisterExistingButtonProps, - ContextMenu, + type TemplateListPageProps, + type TemplateWizardPageProps, } from './next'; export { registerComponentRouteRef } from './routes'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx index 79e2648d2f..8d4b3f8470 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx @@ -39,6 +39,9 @@ export type TemplateGroupFilter = { filter: (entity: TemplateEntityV1beta3) => boolean; }; +/** + * @alpha + */ export interface TemplateGroupsProps { groups: TemplateGroupFilter[]; templateFilter?: (entity: TemplateEntityV1beta3) => boolean; @@ -47,6 +50,9 @@ export interface TemplateGroupsProps { }>; } +/** + * @alpha + */ export const TemplateGroups = (props: TemplateGroupsProps) => { const { loading, error, entities } = useEntityList(); const { groups, templateFilter, TemplateCardComponent } = props; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 424293665b..60a932c06d 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -48,6 +48,9 @@ import { scaffolderListTaskRouteRef, } from '../../routes'; +/** + * @alpha + */ export type TemplateListPageProps = { TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; @@ -76,6 +79,9 @@ const createGroupsWithOther = ( }, ]; +/** + * @alpha + */ export const TemplateListPage = (props: TemplateListPageProps) => { const registerComponentLink = useRouteRef(registerComponentRouteRef); const { diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index 74efbef813..bca2e24cb3 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -22,9 +22,5 @@ export type { TemplateGroupsProps, } from './TemplateGroups'; -export { CategoryPicker } from './CategoryPicker'; - export { RegisterExistingButton } from './RegisterExistingButton'; export type { RegisterExistingButtonProps } from './RegisterExistingButton'; - -export { ContextMenu } from './ContextMenu'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index 99f4a3b52d..a7133ae8c7 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -41,6 +41,9 @@ import { selectedTemplateRouteRef, } from '../../routes'; +/** + * @alpha + */ export type TemplateWizardPageProps = { customFieldExtensions: NextFieldExtensionOptions[]; layouts?: LayoutOptions[]; diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index 54b7605eb1..cc197fc60b 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -19,6 +19,9 @@ import { createSubRouteRef, } from '@backstage/core-plugin-api'; +/** + * @public + */ export const registerComponentRouteRef = createExternalRouteRef({ id: 'register-component', optional: true, From 26aea4ddc235fdc93718490c209926e1e963edbd Mon Sep 17 00:00:00 2001 From: Min Kim Date: Fri, 17 Mar 2023 16:33:28 -0400 Subject: [PATCH 373/511] Do not export `registerComponentRouteRef` and `RegisterExistingButton` Signed-off-by: Min Kim --- plugins/scaffolder/src/alpha.ts | 3 --- plugins/scaffolder/src/next/TemplateListPage/index.ts | 3 --- plugins/scaffolder/src/routes.ts | 3 --- 3 files changed, 9 deletions(-) diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index c082878827..90b0680d27 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -21,9 +21,6 @@ export { type TemplateGroupsProps, type NextRouterProps, type FormProps, - RegisterExistingButton, - type RegisterExistingButtonProps, type TemplateListPageProps, type TemplateWizardPageProps, } from './next'; -export { registerComponentRouteRef } from './routes'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index bca2e24cb3..e0eb0bb021 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -21,6 +21,3 @@ export type { TemplateGroupFilter, TemplateGroupsProps, } from './TemplateGroups'; - -export { RegisterExistingButton } from './RegisterExistingButton'; -export type { RegisterExistingButtonProps } from './RegisterExistingButton'; diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index cc197fc60b..54b7605eb1 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -19,9 +19,6 @@ import { createSubRouteRef, } from '@backstage/core-plugin-api'; -/** - * @public - */ export const registerComponentRouteRef = createExternalRouteRef({ id: 'register-component', optional: true, From c9461071fc3c0c3d8a8ef701c5167db6d9e5ba66 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 08:56:18 +0100 Subject: [PATCH 374/511] chore: fixing api-reports Signed-off-by: blam --- plugins/scaffolder/alpha-api-report.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index 656f79811f..d0bb627d4d 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -5,11 +5,9 @@ ```ts /// -import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FormProps as FormProps_2 } from '@backstage/plugin-scaffolder-react/alpha'; import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; import { LayoutOptions } from '@backstage/plugin-scaffolder-react'; -import { LinkProps } from 'react-router-dom'; import { NextFieldExtensionOptions } from '@backstage/plugin-scaffolder-react/alpha'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; @@ -50,19 +48,6 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; -// @public (undocumented) -export const registerComponentRouteRef: ExternalRouteRef; - -// @alpha -export const RegisterExistingButton: ( - props: RegisterExistingButtonProps, -) => JSX.Element | null; - -// @alpha -export type RegisterExistingButtonProps = { - title: string; -} & Partial>; - // @alpha (undocumented) export type TemplateGroupFilter = { title?: React_2.ReactNode; From 2bc8050b151b42b0f685a13a5b176a918cad0fd4 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:10:30 +0100 Subject: [PATCH 375/511] chore: export typegurad from common instead Signed-off-by: blam --- plugins/scaffolder-common/src/TemplateEntityV1beta3.ts | 10 ++++++++++ plugins/scaffolder-common/src/index.ts | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 8ded484ee2..aaba35911e 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -86,3 +86,13 @@ export const templateEntityV1beta3Validator: KindValidator = { return validator(data) === data; }, }; + +/** + * Typeguard for filtering entities and ensuring v1beta3 entities + * @public + */ +export const isTemplateEntityV1beta3 = ( + entity: Entity, +): entity is TemplateEntityV1beta3 => + entity.apiVersion === 'scaffolder.backstage.io/v1beta3' && + entity.kind === 'Template'; diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 521e678ab6..7f9792a1ba 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -21,5 +21,8 @@ */ export * from './TaskSpec'; -export { templateEntityV1beta3Validator } from './TemplateEntityV1beta3'; +export { + templateEntityV1beta3Validator, + isTemplateEntityV1beta3, +} from './TemplateEntityV1beta3'; export type { TemplateEntityV1beta3 } from './TemplateEntityV1beta3'; From 57fb2aecbc9aa8a16361d46326ab7e8474c8d293 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:11:21 +0100 Subject: [PATCH 376/511] chore: move template groups to react instead Signed-off-by: blam --- .../TemplateGroups}/TemplateGroups.test.tsx | 36 --------------- .../TemplateGroups}/TemplateGroups.tsx | 45 +++++++++---------- .../next/components/TemplateGroups/index.ts | 16 +++++++ 3 files changed, 37 insertions(+), 60 deletions(-) rename plugins/{scaffolder/src/next/TemplateListPage => scaffolder-react/src/next/components/TemplateGroups}/TemplateGroups.test.tsx (90%) rename plugins/{scaffolder/src/next/TemplateListPage => scaffolder-react/src/next/components/TemplateGroups}/TemplateGroups.tsx (72%) create mode 100644 plugins/scaffolder-react/src/next/components/TemplateGroups/index.ts diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx similarity index 90% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx rename to plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx index c0fb503d9b..c03af41f99 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.test.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx @@ -28,7 +28,6 @@ import { TemplateGroups } from './TemplateGroups'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { errorApiRef } from '@backstage/core-plugin-api'; import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; -import { rootRouteRef } from '../../routes'; describe('TemplateGroups', () => { beforeEach(() => jest.clearAllMocks()); @@ -40,11 +39,6 @@ describe('TemplateGroups', () => { , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(await findByTestId('progress')).toBeInTheDocument(); @@ -62,11 +56,6 @@ describe('TemplateGroups', () => { , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(errorApi.post).toHaveBeenCalledWith(mockError); @@ -83,11 +72,6 @@ describe('TemplateGroups', () => { , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(await findByText(/No templates found/)).toBeInTheDocument(); @@ -104,11 +88,6 @@ describe('TemplateGroups', () => { , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(await findByText(/No templates found/)).toBeInTheDocument(); @@ -144,11 +123,6 @@ describe('TemplateGroups', () => { true }]} /> , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(TemplateGroup).toHaveBeenCalledWith( @@ -193,11 +167,6 @@ describe('TemplateGroups', () => { groups={[{ title: 'all', filter: e => e.metadata.name === 't1' }]} /> , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(TemplateGroup).toHaveBeenCalledWith( @@ -241,11 +210,6 @@ describe('TemplateGroups', () => { templateFilter={e => e.metadata.name === 't1'} /> , - { - mountedRoutes: { - '/create': rootRouteRef, - }, - }, ); expect(TemplateGroup).toHaveBeenCalledWith( diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx similarity index 72% rename from plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx rename to plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx index 8d4b3f8470..ccf12b9309 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateGroups.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx @@ -17,19 +17,22 @@ import React, { useCallback } from 'react'; import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { useEntityList } from '@backstage/plugin-catalog-react'; -import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { + isTemplateEntityV1beta3, + TemplateEntityV1beta3, +} from '@backstage/plugin-scaffolder-common'; import { Progress, Link, DocsIcon } from '@backstage/core-components'; import { Typography } from '@material-ui/core'; import { errorApiRef, + IconComponent, useApi, useApp, useRouteRef, } from '@backstage/core-plugin-api'; import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; -import { viewTechDocRouteRef, selectedTemplateRouteRef } from '../../routes'; +import { viewTechDocRouteRef } from '../../routes'; import { useNavigate } from 'react-router-dom'; -import { isTemplateEntity } from '../../lib/isTemplateEntity'; /** * @alpha @@ -48,6 +51,15 @@ export interface TemplateGroupsProps { TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; }>; + onTemplateSelected?: (template: { + namespace: string; + templateName: string; + }) => void; + additionalLinksForEntity?: (template: TemplateEntityV1beta3) => { + icon: IconComponent; + text: string; + url: string; + }[]; } /** @@ -55,18 +67,15 @@ export interface TemplateGroupsProps { */ export const TemplateGroups = (props: TemplateGroupsProps) => { const { loading, error, entities } = useEntityList(); - const { groups, templateFilter, TemplateCardComponent } = props; + const { groups, templateFilter, TemplateCardComponent, onTemplateSelected } = + props; const errorApi = useApi(errorApiRef); - const app = useApp(); - const viewTechDocsLink = useRouteRef(viewTechDocRouteRef); - const templateRoute = useRouteRef(selectedTemplateRouteRef); - const navigate = useNavigate(); const onSelected = useCallback( (template: TemplateEntityV1beta3) => { const { namespace, name } = parseEntityRef(stringifyEntityRef(template)); - navigate(templateRoute({ namespace, templateName: name })); + onTemplateSelected?.({ namespace, templateName: name }); }, - [navigate, templateRoute], + [onTemplateSelected], ); if (loading) { @@ -94,24 +103,12 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { <> {groups.map(({ title, filter }, index) => { const templates = entities - .filter(isTemplateEntity) + .filter(isTemplateEntityV1beta3) .filter(e => (templateFilter ? !templateFilter(e) : true)) .filter(filter) .map(template => { - const { kind, namespace, name } = parseEntityRef( - stringifyEntityRef(template), - ); const additionalLinks = - template.metadata.annotations?.['backstage.io/techdocs-ref'] && - viewTechDocsLink - ? [ - { - icon: app.getSystemIcon('docs') ?? DocsIcon, - text: 'View TechDocs', - url: viewTechDocsLink({ kind, namespace, name }), - }, - ] - : []; + props.additionalLinksForEntity?.(template) ?? []; return { template, diff --git a/plugins/scaffolder-react/src/next/components/TemplateGroups/index.ts b/plugins/scaffolder-react/src/next/components/TemplateGroups/index.ts new file mode 100644 index 0000000000..765883916c --- /dev/null +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export * from './TemplateGroups'; From 5765e4e4df121869dadd5783519c9fd9629cb981 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:26:19 +0100 Subject: [PATCH 377/511] chore: reworking the TemplatePage to use the new one from -react Signed-off-by: blam --- .../components/TemplateCard/TemplateCard.tsx | 24 +++++----- .../TemplateGroups/TemplateGroups.tsx | 20 ++------ .../src/next/components/index.ts | 1 + .../TemplateListPage/TemplateListPage.tsx | 46 +++++++++++++++++-- .../src/next/TemplateListPage/index.ts | 6 --- 5 files changed, 61 insertions(+), 36 deletions(-) diff --git a/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx b/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx index af44085151..2a0a34823d 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx @@ -142,20 +142,22 @@ export const TemplateCard = (props: TemplateCardProps) => { - {props.additionalLinks?.map(({ icon, text, url }) => ( - + {props.additionalLinks?.map(({ icon, text, url }, index) => ( + ))} - {template.metadata.links?.map(({ url, icon, title }) => ( - - - - ))} + {template.metadata.links?.map( + ({ url, icon, title }, index) => ( + + + + ), + )} diff --git a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx index ccf12b9309..58e5e36173 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx @@ -21,18 +21,10 @@ import { isTemplateEntityV1beta3, TemplateEntityV1beta3, } from '@backstage/plugin-scaffolder-common'; -import { Progress, Link, DocsIcon } from '@backstage/core-components'; +import { Progress, Link } from '@backstage/core-components'; import { Typography } from '@material-ui/core'; -import { - errorApiRef, - IconComponent, - useApi, - useApp, - useRouteRef, -} from '@backstage/core-plugin-api'; +import { errorApiRef, IconComponent, useApi } from '@backstage/core-plugin-api'; import { TemplateGroup } from '@backstage/plugin-scaffolder-react/alpha'; -import { viewTechDocRouteRef } from '../../routes'; -import { useNavigate } from 'react-router-dom'; /** * @alpha @@ -51,10 +43,7 @@ export interface TemplateGroupsProps { TemplateCardComponent?: React.ComponentType<{ template: TemplateEntityV1beta3; }>; - onTemplateSelected?: (template: { - namespace: string; - templateName: string; - }) => void; + onTemplateSelected?: (template: TemplateEntityV1beta3) => void; additionalLinksForEntity?: (template: TemplateEntityV1beta3) => { icon: IconComponent; text: string; @@ -72,8 +61,7 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { const errorApi = useApi(errorApiRef); const onSelected = useCallback( (template: TemplateEntityV1beta3) => { - const { namespace, name } = parseEntityRef(stringifyEntityRef(template)); - onTemplateSelected?.({ namespace, templateName: name }); + onTemplateSelected?.(template); }, [onTemplateSelected], ); diff --git a/plugins/scaffolder-react/src/next/components/index.ts b/plugins/scaffolder-react/src/next/components/index.ts index a38b0689d5..5bfa5ccdc8 100644 --- a/plugins/scaffolder-react/src/next/components/index.ts +++ b/plugins/scaffolder-react/src/next/components/index.ts @@ -17,6 +17,7 @@ export * from './Stepper'; export * from './TemplateCard'; export * from './ReviewState'; export * from './TemplateGroup'; +export * from './TemplateGroups'; export * from './Workflow'; export * from './TemplateOutputs'; export * from './Form'; diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 60a932c06d..b1d7a66a94 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -14,14 +14,15 @@ * limitations under the License. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { useRouteRef } from '@backstage/core-plugin-api'; +import { useApp, useRouteRef } from '@backstage/core-plugin-api'; import { Content, ContentHeader, + DocsIcon, Header, Page, SupportButton, @@ -40,13 +41,19 @@ import { } from '@backstage/plugin-scaffolder-react/alpha'; import { RegisterExistingButton } from './RegisterExistingButton'; -import { TemplateGroupFilter, TemplateGroups } from './TemplateGroups'; +import { + TemplateGroupFilter, + TemplateGroups, +} from '@backstage/plugin-scaffolder-react/alpha'; import { actionsRouteRef, editRouteRef, registerComponentRouteRef, scaffolderListTaskRouteRef, + selectedTemplateRouteRef, + viewTechDocRouteRef, } from '../../routes'; +import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; /** * @alpha @@ -93,6 +100,9 @@ export const TemplateListPage = (props: TemplateListPageProps) => { const editorLink = useRouteRef(editRouteRef); const actionsLink = useRouteRef(actionsRouteRef); const tasksLink = useRouteRef(scaffolderListTaskRouteRef); + const viewTechDocsLink = useRouteRef(viewTechDocRouteRef); + const templateRoute = useRouteRef(selectedTemplateRouteRef); + const app = useApp(); const groups = givenGroups.length ? createGroupsWithOther(givenGroups) @@ -113,6 +123,34 @@ export const TemplateListPage = (props: TemplateListPageProps) => { : undefined, }; + const additionalLinksForEntity = useCallback( + (template: TemplateEntityV1beta3) => { + const { kind, namespace, name } = parseEntityRef( + stringifyEntityRef(template), + ); + return template.metadata.annotations?.['backstage.io/techdocs-ref'] && + viewTechDocsLink + ? [ + { + icon: app.getSystemIcon('docs') ?? DocsIcon, + text: 'View TechDocs', + url: viewTechDocsLink({ kind, namespace, name }), + }, + ] + : []; + }, + [app, viewTechDocsLink], + ); + + const onTemplateSelected = useCallback( + (template: TemplateEntityV1beta3) => { + const { namespace, name } = parseEntityRef(stringifyEntityRef(template)); + + navigate(templateRoute({ namespace, templateName: name })); + }, + [navigate, templateRoute], + ); + return ( @@ -152,6 +190,8 @@ export const TemplateListPage = (props: TemplateListPageProps) => { groups={groups} templateFilter={templateFilter} TemplateCardComponent={TemplateCardComponent} + onTemplateSelected={onTemplateSelected} + additionalLinksForEntity={additionalLinksForEntity} /> diff --git a/plugins/scaffolder/src/next/TemplateListPage/index.ts b/plugins/scaffolder/src/next/TemplateListPage/index.ts index e0eb0bb021..c404a9352a 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/index.ts +++ b/plugins/scaffolder/src/next/TemplateListPage/index.ts @@ -15,9 +15,3 @@ */ export { TemplateListPage } from './TemplateListPage'; export type { TemplateListPageProps } from './TemplateListPage'; - -export { TemplateGroups } from './TemplateGroups'; -export type { - TemplateGroupFilter, - TemplateGroupsProps, -} from './TemplateGroups'; From 50c480ae18e4ea74160ce4b93a66dd61ccaae6e8 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:31:16 +0100 Subject: [PATCH 378/511] chore: fix typescript and updating api-reports Signed-off-by: blam --- plugins/scaffolder-common/api-report.md | 5 ++++ plugins/scaffolder-react/alpha-api-report.md | 29 +++++++++++++++++++ .../TemplateGroups/TemplateGroups.tsx | 1 - plugins/scaffolder/alpha-api-report.md | 22 +------------- plugins/scaffolder/api-report.md | 8 ++--- plugins/scaffolder/src/alpha.ts | 3 -- plugins/scaffolder/src/next/Router/Router.tsx | 2 +- 7 files changed, 40 insertions(+), 30 deletions(-) diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index 8864c0d76d..fb21ac450f 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -10,6 +10,11 @@ import type { JsonValue } from '@backstage/types'; import { KindValidator } from '@backstage/catalog-model'; import type { UserEntity } from '@backstage/catalog-model'; +// @public +export const isTemplateEntityV1beta3: ( + entity: Entity, +) => entity is TemplateEntityV1beta3; + // @public export type TaskSpec = TaskSpecV1beta3; diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index c51f7ba518..319e3963f0 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -208,6 +208,12 @@ export const TemplateCategoryPicker: () => JSX.Element | null; // @alpha export const TemplateGroup: (props: TemplateGroupProps) => JSX.Element; +// @alpha (undocumented) +export type TemplateGroupFilter = { + title?: React_2.ReactNode; + filter: (entity: TemplateEntityV1beta3) => boolean; +}; + // @alpha export interface TemplateGroupProps { // (undocumented) @@ -229,6 +235,29 @@ export interface TemplateGroupProps { title: React_2.ReactNode; } +// @alpha (undocumented) +export const TemplateGroups: (props: TemplateGroupsProps) => JSX.Element | null; + +// @alpha (undocumented) +export interface TemplateGroupsProps { + // (undocumented) + additionalLinksForEntity?: (template: TemplateEntityV1beta3) => { + icon: IconComponent; + text: string; + url: string; + }[]; + // (undocumented) + groups: TemplateGroupFilter[]; + // (undocumented) + onTemplateSelected?: (template: TemplateEntityV1beta3) => void; + // (undocumented) + TemplateCardComponent?: React_2.ComponentType<{ + template: TemplateEntityV1beta3; + }>; + // (undocumented) + templateFilter?: (entity: TemplateEntityV1beta3) => boolean; +} + // @alpha export const useFormDataFromQuery: ( initialState?: Record, diff --git a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx index 58e5e36173..50be7a4bdf 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx @@ -15,7 +15,6 @@ */ import React, { useCallback } from 'react'; -import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { useEntityList } from '@backstage/plugin-catalog-react'; import { isTemplateEntityV1beta3, diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index d0bb627d4d..6ceacdc008 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -13,6 +13,7 @@ import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { TemplateGroupFilter } from '@backstage/plugin-scaffolder-react/alpha'; // @alpha @deprecated export type FormProps = Pick< @@ -48,27 +49,6 @@ export const NextScaffolderPage: ( props: PropsWithChildren, ) => JSX.Element; -// @alpha (undocumented) -export type TemplateGroupFilter = { - title?: React_2.ReactNode; - filter: (entity: TemplateEntityV1beta3) => boolean; -}; - -// @alpha (undocumented) -export const TemplateGroups: (props: TemplateGroupsProps) => JSX.Element | null; - -// @alpha (undocumented) -export interface TemplateGroupsProps { - // (undocumented) - groups: TemplateGroupFilter[]; - // (undocumented) - TemplateCardComponent?: React_2.ComponentType<{ - template: TemplateEntityV1beta3; - }>; - // (undocumented) - templateFilter?: (entity: TemplateEntityV1beta3) => boolean; -} - // @alpha (undocumented) export type TemplateListPageProps = { TemplateCardComponent?: React_2.ComponentType<{ diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 5b8ea034cc..8f37f7cf50 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -138,8 +138,8 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { showCounts?: boolean | undefined; - helperText?: string | undefined; kinds?: string[] | undefined; + helperText?: string | undefined; } >; @@ -148,8 +148,8 @@ export const EntityTagsPickerFieldSchema: FieldSchema< string[], { showCounts?: boolean | undefined; - helperText?: string | undefined; kinds?: string[] | undefined; + helperText?: string | undefined; } >; @@ -315,8 +315,8 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< | { azure?: string[] | undefined; github?: string[] | undefined; - bitbucket?: string[] | undefined; gitlab?: string[] | undefined; + bitbucket?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -341,8 +341,8 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { azure?: string[] | undefined; github?: string[] | undefined; - bitbucket?: string[] | undefined; gitlab?: string[] | undefined; + bitbucket?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; diff --git a/plugins/scaffolder/src/alpha.ts b/plugins/scaffolder/src/alpha.ts index 90b0680d27..d2bd762190 100644 --- a/plugins/scaffolder/src/alpha.ts +++ b/plugins/scaffolder/src/alpha.ts @@ -16,9 +16,6 @@ export { NextScaffolderPage } from './plugin'; export { - TemplateGroups, - type TemplateGroupFilter, - type TemplateGroupsProps, type NextRouterProps, type FormProps, type TemplateListPageProps, diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index e36bc7428a..9c50d0d979 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -23,6 +23,7 @@ import { import { NextFieldExtensionOptions, FormProps, + TemplateGroupFilter, } from '@backstage/plugin-scaffolder-react/alpha'; import { ScaffolderTaskOutput, @@ -32,7 +33,6 @@ import { } from '@backstage/plugin-scaffolder-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { TemplateGroupFilter } from '../TemplateListPage'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; import { From 48da4c46e45fd48e2669d9ab23244e7cdcb06366 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:35:11 +0100 Subject: [PATCH 379/511] chore: added changesets for other pages Signed-off-by: blam --- .changeset/heavy-colts-wash.md | 5 +++++ .changeset/weak-turtles-arrive.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/heavy-colts-wash.md create mode 100644 .changeset/weak-turtles-arrive.md diff --git a/.changeset/heavy-colts-wash.md b/.changeset/heavy-colts-wash.md new file mode 100644 index 0000000000..c22cb70dbf --- /dev/null +++ b/.changeset/heavy-colts-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-common': patch +--- + +Export `typeguard` for `isTemplateEntityV1beta3` diff --git a/.changeset/weak-turtles-arrive.md b/.changeset/weak-turtles-arrive.md new file mode 100644 index 0000000000..3bb56909f9 --- /dev/null +++ b/.changeset/weak-turtles-arrive.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': minor +--- + +`scaffolder/next`: Export the `TemplateGroupFilter` and `TemplateGroups` and make an extensible component From 83245c8ce69fa0da0e61dcde9acf7c30f731a0b7 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 09:38:17 +0100 Subject: [PATCH 380/511] chore: delete the old helper Signed-off-by: blam --- .../components/TemplateList/TemplateList.tsx | 8 ++++--- .../scaffolder/src/lib/isTemplateEntity.ts | 23 ------------------- 2 files changed, 5 insertions(+), 26 deletions(-) delete mode 100644 plugins/scaffolder/src/lib/isTemplateEntity.ts diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx index 9aa0ec5eef..9a88050d74 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx @@ -16,7 +16,10 @@ import React, { ComponentType } from 'react'; import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; -import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { + isTemplateEntityV1beta3, + TemplateEntityV1beta3, +} from '@backstage/plugin-scaffolder-common'; import { Content, ContentHeader, @@ -28,7 +31,6 @@ import { import { useEntityList } from '@backstage/plugin-catalog-react'; import { Typography } from '@material-ui/core'; import { TemplateCard } from '../TemplateCard'; -import { isTemplateEntity } from '../../lib/isTemplateEntity'; /** * @internal @@ -54,7 +56,7 @@ export const TemplateList = ({ }: TemplateListProps) => { const { loading, error, entities } = useEntityList(); const Card = TemplateCardComponent || TemplateCard; - const templateEntities = entities.filter(isTemplateEntity); + const templateEntities = entities.filter(isTemplateEntityV1beta3); const maybeFilteredEntities = ( group ? templateEntities.filter(group.filter) : templateEntities ).filter(e => (templateFilter ? !templateFilter(e) : true)); diff --git a/plugins/scaffolder/src/lib/isTemplateEntity.ts b/plugins/scaffolder/src/lib/isTemplateEntity.ts deleted file mode 100644 index 61ceabaa53..0000000000 --- a/plugins/scaffolder/src/lib/isTemplateEntity.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2023 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 { Entity } from '@backstage/catalog-model'; -import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; - -export const isTemplateEntity = ( - entity: Entity, -): entity is TemplateEntityV1beta3 => - entity.apiVersion === 'scaffolder.backstage.io/v1beta3' && - entity.kind === 'Template'; From 3ca3ddb1215add9bd45bdb7ba60557b1a82f4647 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Tue, 21 Mar 2023 06:27:39 -0400 Subject: [PATCH 381/511] Format imports to combine duplicate source Signed-off-by: Min Kim --- .../src/next/TemplateListPage/TemplateListPage.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index b1d7a66a94..863d3009e1 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -38,13 +38,11 @@ import { import { ScaffolderPageContextMenu, TemplateCategoryPicker, -} from '@backstage/plugin-scaffolder-react/alpha'; - -import { RegisterExistingButton } from './RegisterExistingButton'; -import { TemplateGroupFilter, TemplateGroups, } from '@backstage/plugin-scaffolder-react/alpha'; + +import { RegisterExistingButton } from './RegisterExistingButton'; import { actionsRouteRef, editRouteRef, From 6bd02a7fd5793a0e9f4ead117e0aca123c90260a Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 13:37:20 +0100 Subject: [PATCH 382/511] chore: use the FeatureFlagged component to switch Signed-off-by: blam --- packages/app/src/App.tsx | 98 ++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 4dacbbc007..81e8769951 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -27,7 +27,7 @@ import { RELATION_PROVIDES_API, } from '@backstage/catalog-model'; import { createApp } from '@backstage/app-defaults'; -import { AppRouter, FlatRoutes } from '@backstage/core-app-api'; +import { AppRouter, FeatureFlagged, FlatRoutes } from '@backstage/core-app-api'; import { AlertDisplay, OAuthRequestDialog, @@ -208,49 +208,59 @@ const routes = (
- - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - } - > - - - - - - - - - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - } - > - - - - - - - + + + + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> + + } + > + + + + + + + + + + + + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> + + } + > + + + + + + + + + } /> Date: Tue, 21 Mar 2023 13:43:47 +0100 Subject: [PATCH 383/511] repo-tools: Improve error message when API report is missing Signed-off-by: Johan Haals --- .changeset/witty-berries-love.md | 5 +++++ .../repo-tools/src/commands/api-reports/api-extractor.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/witty-berries-love.md diff --git a/.changeset/witty-berries-love.md b/.changeset/witty-berries-love.md new file mode 100644 index 0000000000..00fa230dc8 --- /dev/null +++ b/.changeset/witty-berries-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Log API report instructions when api-report is missing. diff --git a/packages/repo-tools/src/commands/api-reports/api-extractor.ts b/packages/repo-tools/src/commands/api-reports/api-extractor.ts index 1fe7602617..8194ede7a4 100644 --- a/packages/repo-tools/src/commands/api-reports/api-extractor.ts +++ b/packages/repo-tools/src/commands/api-reports/api-extractor.ts @@ -487,6 +487,9 @@ export async function runApiExtraction({ showVerboseMessages: false, showDiagnostics: false, messageCallback(message) { + if (message.text.includes('The API report file is missing')) { + shouldLogInstructions = true; + } if ( message.text.includes( 'You have changed the public API signature for this project.', @@ -506,7 +509,11 @@ export async function runApiExtraction({ // This release tag validation makes sure that the release tag of known entry points match expectations. // The root index entrypoint is only allowed @public exports, while /alpha and /beta only allow @alpha and @beta. - if (validateReleaseTags && !usesExperimentalTypeBuild) { + if ( + validateReleaseTags && + !usesExperimentalTypeBuild && + fs.pathExistsSync(extractorConfig.reportFilePath) + ) { if (['index', 'alpha', 'beta'].includes(name)) { const report = await fs.readFile( extractorConfig.reportFilePath, From 6afdb19016ca9f7589d6c39ed88564772f43744c Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 21 Mar 2023 13:48:55 +0100 Subject: [PATCH 384/511] chore: tidy up and add some docs about this Signed-off-by: blam --- .../testing-scaffolder-alpha.md | 71 ++++++++++++------- packages/app/src/App.tsx | 43 +++++------ 2 files changed, 64 insertions(+), 50 deletions(-) diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md index c0b97e897c..579b3ab873 100644 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ b/docs/features/software-templates/testing-scaffolder-alpha.md @@ -52,33 +52,54 @@ And this API should be the exact same as the previous Router, so you should be a ```tsx - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - } - > - - - {/* ... other extensions */} - - - - {/* ... other layouts */} - - + path="/create" + element={ + {/* highlight-remove-next-line */} + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> + } +> + + + {/* ... other extensions */} + + + + {/* ... other layouts */} + + ``` +Optionally, you can chose to run the two side by side by using `FeatureFlags` in your `App.tsx` if you wish, but, we would also recommend duplicating any `CustomFieldExtensions` too as the new `CustomFieldExtensions` might not be compatible with the old form. + +```tsx + + }> + + + + + + + }> + + + + + +``` + +You should then be able to enable the `scaffolder-next-preview` feature flag under `/settings/feature-flags` in Backstage. + ### Make the required changes to your `CustomFieldExtensions` There's differently named function for creating field extensions part of the `/alpha` exports as these are the ones that can contain breaking changes because of the breaking changes that have been applied in `react-jsonschema-form`. diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 81e8769951..0c7187c93f 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -208,22 +208,19 @@ const routes = ( - - - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> } > @@ -234,22 +231,19 @@ const routes = ( - - - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> } > @@ -260,7 +254,6 @@ const routes = ( - } /> Date: Tue, 21 Mar 2023 13:56:58 +0100 Subject: [PATCH 385/511] chore: tidu up the templat Signed-off-by: blam --- packages/app/src/App.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 0c7187c93f..1ee6978a87 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -117,10 +117,13 @@ const app = createApp({ // Custom icon example alert: AlarmIcon, }, - // Example of application level feature flag - // featureFlags: [ - // { name: 'tech-radar', description: 'Enables the tech radar plugin' }, - // ], + featureFlags: [ + { + name: 'scaffolder-next-preview', + description: 'Preview the new Scaffolder Next', + pluginId: '', + }, + ], components: { SignInPage: props => { return ( @@ -208,7 +211,7 @@ const routes = ( - + - + - + From 8cce2205a39e4c21809201a78baf2e109179f230 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 20 Mar 2023 10:42:28 +0100 Subject: [PATCH 386/511] backend-app-api: register global error handlers Signed-off-by: Patrik Oldsberg --- .changeset/rotten-carrots-cheer.md | 5 +++++ .../src/wiring/BackendInitializer.ts | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 .changeset/rotten-carrots-cheer.md diff --git a/.changeset/rotten-carrots-cheer.md b/.changeset/rotten-carrots-cheer.md new file mode 100644 index 0000000000..58da6d2a21 --- /dev/null +++ b/.changeset/rotten-carrots-cheer.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Register unhandled rejection and uncaught exception handlers to avoid backend crashes. diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index 2a8fa1e720..b2c62c2122 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -165,6 +165,25 @@ export class BackendInitializer { ); await registerInit.init.func(deps); } + + // Once the backend is started, any uncaught errors or unhandled rejections are caught + // and logged, in order to avoid crashing the entire backend on local failures. + if (process.env.NODE_ENV !== 'test') { + const rootLogger = await this.#serviceHolder.get( + coreServices.rootLogger, + 'root', + ); + process.on('unhandledRejection', (reason: Error) => { + rootLogger + ?.child({ type: 'unhandledRejection' }) + ?.error('Unhandled rejection', reason); + }); + process.on('uncaughtException', error => { + rootLogger + ?.child({ type: 'uncaughtException' }) + ?.error('Uncaught exception', error); + }); + } } #resolveInitOrder(registerInits: Array) { From 5af2c4f412f34cb6e28250e81ef710f0748c80a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 21 Mar 2023 13:38:30 +0000 Subject: [PATCH 387/511] Version Packages (next) --- .changeset/create-app-1679405836.md | 5 + .changeset/pre.json | 49 +- docs/releases/v1.13.0-next.0-changelog.md | 2387 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 15 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 69 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 17 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 17 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 12 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 11 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 10 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 12 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 51 + packages/backend/package.json | 2 +- packages/cli/CHANGELOG.md | 15 + packages/cli/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 14 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 14 + packages/core-components/package.json | 2 +- packages/create-app/CHANGELOG.md | 8 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/eslint-plugin/CHANGELOG.md | 6 + packages/eslint-plugin/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 9 + packages/repo-tools/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 12 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 17 + packages/test-utils/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 14 + plugins/adr-backend/package.json | 2 +- plugins/adr/CHANGELOG.md | 16 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 14 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 12 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 11 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 9 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 14 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 15 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 14 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 9 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 13 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 11 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 13 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 11 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 16 + plugins/bazaar/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 12 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 17 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 15 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 29 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 14 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 22 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 13 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-graphql/CHANGELOG.md | 10 + plugins/catalog-graphql/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 17 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 12 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 19 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 24 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 10 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 12 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 12 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 12 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 14 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 13 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 14 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 12 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 13 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback-common/CHANGELOG.md | 6 + plugins/entity-feedback-common/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 18 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 14 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 9 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 10 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 7 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 11 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 10 + plugins/explore-backend/package.json | 2 +- plugins/explore/CHANGELOG.md | 17 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 12 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 13 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 11 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 10 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 11 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 13 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 15 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 13 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 13 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 11 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 13 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 10 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 10 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 10 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 13 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 13 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 14 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 14 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 11 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 13 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 21 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 9 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 14 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse-backend/CHANGELOG.md | 13 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 14 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 15 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 13 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 10 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 12 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 10 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 12 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 12 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 12 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 13 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 13 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 12 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 11 + plugins/permission-node/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 15 + plugins/playlist-backend/package.json | 2 +- plugins/playlist/CHANGELOG.md | 17 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 9 + plugins/proxy-backend/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 8 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 12 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 24 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 9 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 11 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 27 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 44 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 10 + plugins/search-backend-module-pg/package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 12 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 15 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 14 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 18 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 12 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 12 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 13 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 12 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 9 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 13 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 10 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 15 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 16 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 10 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 17 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 17 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 13 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 13 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 20 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 14 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 13 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 12 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 14 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 14 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 11 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 155 +- 359 files changed, 5141 insertions(+), 194 deletions(-) create mode 100644 .changeset/create-app-1679405836.md create mode 100644 docs/releases/v1.13.0-next.0-changelog.md create mode 100644 plugins/scaffolder-backend-module-gitlab/CHANGELOG.md diff --git a/.changeset/create-app-1679405836.md b/.changeset/create-app-1679405836.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1679405836.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/pre.json b/.changeset/pre.json index 8ed335e113..042939035f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -211,7 +211,52 @@ "@backstage/plugin-user-settings-backend": "0.1.7", "@backstage/plugin-vault": "0.1.10", "@backstage/plugin-vault-backend": "0.2.10", - "@backstage/plugin-xcmetrics": "0.2.36" + "@backstage/plugin-xcmetrics": "0.2.36", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.0.0" }, - "changesets": [] + "changesets": [ + "bright-pumpkins-bake", + "create-app-1679405836", + "curly-boats-trade", + "curly-jobs-kneel", + "eleven-bats-tease", + "fair-roses-stare", + "fast-snakes-buy", + "fresh-schools-fly", + "fuzzy-actors-turn", + "heavy-colts-wash", + "hungry-lies-cry", + "hungry-monkeys-reply", + "khaki-cars-drum", + "khaki-doors-compare", + "khaki-guests-turn", + "lazy-apples-destroy", + "lazy-monkeys-worry", + "long-gorillas-remain", + "many-eggs-press", + "mighty-lamps-cross", + "nasty-nails-appear", + "neat-donkeys-work", + "old-cougars-sit", + "orange-rabbits-jam", + "rare-seals-decide", + "renovate-a9116b7", + "renovate-c574b04", + "rotten-carrots-cheer", + "seven-gifts-fetch", + "short-panthers-float", + "soft-roses-cover", + "sour-dragons-cheat", + "strong-crews-repeat", + "swift-meals-live", + "ten-hounds-bathe", + "ten-mayflies-beam", + "thick-forks-prove", + "thin-spoons-prove", + "thirty-crabs-tell", + "twelve-parrots-camp", + "weak-turtles-arrive", + "wise-garlics-camp", + "witty-berries-love" + ] } diff --git a/docs/releases/v1.13.0-next.0-changelog.md b/docs/releases/v1.13.0-next.0-changelog.md new file mode 100644 index 0000000000..3075d80f61 --- /dev/null +++ b/docs/releases/v1.13.0-next.0-changelog.md @@ -0,0 +1,2387 @@ +# Release v1.13.0-next.0 + +## @backstage/app-defaults@1.3.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/theme@0.2.18 + +## @backstage/core-app-api@1.7.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + +## @backstage/test-utils@1.3.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-catalog@1.10.0-next.0 + +### Minor Changes + +- 4dbf3d3e4da: Added a new EntitySwitch isResourceType to allow different views depending on Resource type +- fc6cab4eb48: Added `isEntityWith` condition helper for `EntitySwitch` case statements. + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.0-next.0 + +### Minor Changes + +- f64345108a0: **BREAKING**: The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: + + - The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered. + - The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used + if no default branch is defined on the project itself. + + To migrate to the new configuration value, rename `branch` to `fallbackBranch` + +### Patch Changes + +- 7b1b7bfdb7b: The gitlab org data integration now makes use of the GraphQL API to determine + the relationships between imported User and Group entities, effectively making + this integration usable without an administrator account's Personal Access + Token. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-entity-feedback@0.2.0-next.0 + +### Minor Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-kubernetes-backend@0.10.0-next.0 + +### Minor Changes + +- 804f6d16b0c: **BREAKING**: `KubernetesBuilder.create` now requires a `permissions` field of type `PermissionEvaluator`. The kubernetes `/proxy` endpoint now requires two tokens: the `Backstage-Kubernetes-Authorization` header should contain a bearer token for the target cluster, and the `Authorization` header should contain a backstage identity token. The kubernetes `/proxy` endpoint now requires a `Backstage-Kubernetes-Cluster` header replacing the previously required `X-Kubernetes-Cluster` header. + +### Patch Changes + +- 75d4985f5e8: Fixes bug whereby backstage crashes when bad credentials are provided to the kubernetes plugin. +- 83d250badc6: Fix parsing error when kubernetes api is returning badly structured data. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + +## @backstage/plugin-scaffolder@1.13.0-next.0 + +### Minor Changes + +- cdab34fd9a2: scaffolder/next: removing the `routeRefs` and exporting the originals on `scaffolderPlugin.routes.x` instead +- e5ad1bd61ec: Allow `TemplateListPage` and `TemplateWizardPage` to be passed in as props +- 92cf86a4b5d: Added a `templateFilter` prop to the `` component to allow for filtering of templates through a function. +- 259d3407b9b: Move `CategoryPicker` from `scaffolder` into `scaffolder-react` + Move `ContextMenu` into `scaffolder-react` and rename it to `ScaffolderPageContextMenu` + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) + +- 57c1b4752fa: Allow use of `{ exists: true }` value inside filters to filter entities that has that key. + + this example will filter all entities that has the annotation `someAnnotation` set to any value. + + ```yaml + ui:options: + catalogFilter: + kind: Group + metadata.annotations.someAnnotation: { exists: true } + ``` + +- 7a6b16cc506: `scaffolder/next`: Bump `@rjsf/*` deps to 5.3.1 + +- f84fc7fd040: Updated dependency `@rjsf/validator-ajv8` to `5.3.0`. + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) + +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.3.0-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.1.0-next.0 + +### Minor Changes + +- 1ad400bb2de: Add Gitlab Scaffolder Plugin + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-react@1.3.0-next.0 + +### Minor Changes + +- 259d3407b9b: Move `CategoryPicker` from `scaffolder` into `scaffolder-react` + Move `ContextMenu` into `scaffolder-react` and rename it to `ScaffolderPageContextMenu` +- 2cfd03d7376: To offer better customization options, `ScaffolderPageContextMenu` takes callbacks as props instead of booleans +- 48da4c46e45: `scaffolder/next`: Export the `TemplateGroupFilter` and `TemplateGroups` and make an extensible component + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- 7a6b16cc506: `scaffolder/next`: Bump `@rjsf/*` deps to 5.3.1 +- f84fc7fd040: Updated dependency `@rjsf/validator-ajv8` to `5.3.0`. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + +## @backstage/plugin-vault-backend@0.3.0-next.0 + +### Minor Changes + +- 5e959c9eb62: Allow generic Vault clients to be passed into the builder + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/errors@1.1.5 + +## @backstage/backend-app-api@0.4.2-next.0 + +### Patch Changes + +- 8cce2205a39: Register unhandled rejection and uncaught exception handlers to avoid backend crashes. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-node@0.7.7-next.0 + +## @backstage/backend-common@0.18.4-next.0 + +### Patch Changes + +- 420164593cf: Improve GitlabUrlReader to only load requested sub-path +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + +## @backstage/backend-plugin-api@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/backend-tasks@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-test-utils@0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + +## @backstage/cli@0.22.6-next.0 + +### Patch Changes + +- b9839d7135c: Fixed backend start command on Windows by removing the use of platform dependent path joins. +- c07c3b7364b: Add `onboard` command. While still in development, this command aims to guide users in setting up their Backstage App. +- Updated dependencies + - @backstage/eslint-plugin@0.1.3-next.0 + - @backstage/config@1.0.7 + - @backstage/release-manifests@0.0.9 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/core-components@0.12.6-next.0 + +### Patch Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- 7245e744ab1: Fixed the font color on `BackstageHeaderLabel` to respect the active page theme. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/version-bridge@1.0.3 + +## @backstage/create-app@0.4.39-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/eslint-plugin@0.1.3-next.0 + +### Patch Changes + +- 911c25de59c: Add support for auto-fixing missing imports detected by the `no-undeclared-imports` rule. + +## @backstage/integration-react@1.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/repo-tools@0.1.4-next.0 + +### Patch Changes + +- 9129ca8cabb: Log API report instructions when api-report is missing. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## @techdocs/cli@1.4.1-next.0 + +### Patch Changes + +- b348420a804: Adding global-agent to enable the ability to publish through a proxy +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/plugin-techdocs-node@1.6.1-next.0 + +## @backstage/plugin-adr@0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-adr-backend@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-airbrake@0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/dev-utils@1.0.14-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-airbrake-backend@0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.33-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-analytics-module-ga@0.1.28-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-apache-airflow@0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + +## @backstage/plugin-api-docs@0.9.2-next.0 + +### Patch Changes + +- ca50c3bbea1: Corrected styling of nested objects in AsyncAPI to avoid inappropriate uppercase text transformation of nested objects. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-apollo-explorer@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-app-backend@0.3.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/config-loader@1.1.9 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.2-next.0 + +### Patch Changes + +- d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin. +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + +## @backstage/plugin-auth-node@0.2.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-azure-devops@0.2.8-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.41-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-badges-backend@0.1.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar@0.2.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-bazaar-backend@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + +## @backstage/plugin-bitrise@0.1.44-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-catalog-backend@1.8.1-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- 899ebfd8e02: Add full text search support to the `by-query` endpoint. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-catalog-backend-module-aws@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-github@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.11-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.3-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.10-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-catalog-graph@0.2.29-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-catalog-graphql@0.3.20-next.0 + +### Patch Changes + +- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-import@0.9.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.12 + +## @backstage/plugin-catalog-node@1.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + +## @backstage/plugin-catalog-react@1.4.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-cicd-statistics@0.1.19-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.19-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-circleci@0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-cloudbuild@0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-climate@0.1.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-coverage@0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-code-coverage-backend@0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-codescene@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-config-schema@0.1.40-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-cost-insights@0.12.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@3.0.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-entity-feedback-backend@0.1.2-next.0 + +### Patch Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity +- Updated dependencies + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-auth-node@0.2.13-next.0 + +## @backstage/plugin-entity-feedback-common@0.1.1-next.0 + +### Patch Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity + +## @backstage/plugin-entity-validation@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + +## @backstage/plugin-events-backend@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-azure@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-github@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-module-gitlab@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-backend-test-utils@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.5-next.0 + +## @backstage/plugin-events-node@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + +## @backstage/plugin-explore@0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-explore-react@0.0.27 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-explore-backend@0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-firehydrant@0.2.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-fossa@0.2.49-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gcalendar@0.3.13-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gcp-projects@0.3.36-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-git-release-manager@0.3.30-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-actions@0.5.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-deployments@0.1.48-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-issues@0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-github-pull-requests-board@0.1.11-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gitops-profiles@0.3.35-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + +## @backstage/plugin-gocd@0.1.23-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-graphiql@0.2.49-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-graphql-backend@0.1.34-next.0 + +### Patch Changes + +- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-graphql@0.3.20-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-graphql-voyager@0.1.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-home@0.4.33-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-ilert@0.2.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-jenkins@0.7.16-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-jenkins-common@0.1.14 + +## @backstage/plugin-jenkins-backend@0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-kafka@0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-kafka-backend@0.2.37-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes@0.7.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-kubernetes-common@0.6.2-next.0 + +### Patch Changes + +- 804f6d16b0c: Introduced proxy permission types to be used with the kubernetes proxy endpoint's permission framework integration. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-lighthouse@0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-linguist@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-linguist-backend@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-microsoft-calendar@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-newrelic@0.3.35-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-newrelic-dashboard@0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-octopus-deploy@0.1.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-org@0.6.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-org-react@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-pagerduty@0.5.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-periskop@0.1.15-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-periskop-backend@0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + +## @backstage/plugin-permission-backend@0.5.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + +## @backstage/plugin-permission-node@0.7.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + +## @backstage/plugin-playlist@0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-playlist-common@0.1.5 + +## @backstage/plugin-playlist-backend@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-playlist-common@0.1.5 + +## @backstage/plugin-proxy-backend@0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + +## @backstage/plugin-rollbar@0.4.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-rollbar-backend@0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend@1.12.1-next.0 + +### Patch Changes + +- e23abb37ec1: Rename output parameter `mergeRequestURL` of `publish:gitlab:merge-request` action to `mergeRequestUrl`. +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-common@1.2.7-next.0 + +### Patch Changes + +- 48da4c46e45: Export `typeguard` for `isTemplateEntityV1beta3` +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-node@0.1.2-next.0 + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-search@1.1.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend@1.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-module-elasticsearch@1.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-module-pg@0.5.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-backend-node@1.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-search-react@1.5.2-next.0 + +### Patch Changes + +- b2e182cdfa4: Fixes a UI bug in search result item which rendered the item text with incorrect font size and color +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-sentry@0.5.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-shortcuts@0.3.9-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- 99df676e324: Allow external links to be added as shortcuts +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-sonarqube-react@0.1.4 + +## @backstage/plugin-sonarqube-backend@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-splunk-on-call@0.4.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @backstage/plugin-stack-overflow@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-home@0.4.33-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-stack-overflow-backend@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-stackstorm@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-tech-insights@0.3.9-next.0 + +### Patch Changes + +- f538b9c5b83: The `Check` type now optionally includes the `failureMetadata` and `successMetadata` as returned by the `runChecks` call. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + +## @backstage/plugin-tech-insights-node@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.3-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs@1.6.1-next.0 + +### Patch Changes + +- b2e182cdfa4: Fixes a UI bug in search result item which rendered the item text with incorrect font size and color +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.12-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs-backend@1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-techdocs-node@1.6.1-next.0 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + +## @backstage/plugin-techdocs-node@1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/integration-aws-node@0.1.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.2 + +## @backstage/plugin-techdocs-react@1.1.5-next.0 + +### Patch Changes + +- 7e0c7b09a47: Fix a bug that caused the header to not render when generating a document for the first time +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/version-bridge@1.0.3 + +## @backstage/plugin-todo@0.2.19-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-todo-backend@0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + +## @backstage/plugin-user-settings@0.7.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + +## @backstage/plugin-vault@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## @backstage/plugin-xcmetrics@0.2.37-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + +## example-app@0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.9.2-next.0 + - @backstage/plugin-scaffolder@1.13.0-next.0 + - @backstage/plugin-scaffolder-react@1.3.0-next.0 + - @backstage/plugin-entity-feedback@0.2.0-next.0 + - @backstage/plugin-tech-insights@0.3.9-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.0 + - @backstage/plugin-newrelic-dashboard@0.2.10-next.0 + - @backstage/plugin-apache-airflow@0.2.10-next.0 + - @backstage/plugin-catalog-import@0.9.7-next.0 + - @backstage/plugin-github-actions@0.5.17-next.0 + - @backstage/plugin-catalog-graph@0.2.29-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/plugin-code-coverage@0.2.10-next.0 + - @backstage/plugin-cost-insights@0.12.6-next.0 + - @backstage/plugin-user-settings@0.7.2-next.0 + - @backstage/plugin-azure-devops@0.2.8-next.0 + - @backstage/plugin-gcp-projects@0.3.36-next.0 + - @backstage/plugin-azure-sites@0.1.6-next.0 + - @backstage/plugin-cloudbuild@0.3.17-next.0 + - @backstage/plugin-kubernetes@0.7.10-next.0 + - @backstage/plugin-lighthouse@0.4.2-next.0 + - @backstage/plugin-tech-radar@0.6.3-next.0 + - @backstage/plugin-dynatrace@3.0.1-next.0 + - @backstage/plugin-gcalendar@0.3.13-next.0 + - @backstage/plugin-pagerduty@0.5.10-next.0 + - @backstage/plugin-shortcuts@0.3.9-next.0 + - @backstage/plugin-airbrake@0.3.17-next.0 + - @backstage/plugin-circleci@0.3.17-next.0 + - @backstage/plugin-graphiql@0.2.49-next.0 + - @backstage/plugin-newrelic@0.3.35-next.0 + - @backstage/plugin-explore@0.4.2-next.0 + - @backstage/plugin-jenkins@0.7.16-next.0 + - @backstage/plugin-rollbar@0.4.17-next.0 + - @backstage/plugin-badges@0.2.41-next.0 + - @backstage/plugin-search@1.1.2-next.0 + - @backstage/plugin-sentry@0.5.2-next.0 + - @backstage/plugin-kafka@0.3.17-next.0 + - @backstage/plugin-gocd@0.1.23-next.0 + - @backstage/plugin-home@0.4.33-next.0 + - @backstage/plugin-todo@0.2.19-next.0 + - @backstage/plugin-org@0.6.7-next.0 + - @internal/plugin-catalog-customized@0.0.9-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/plugin-linguist@0.1.2-next.0 + - @backstage/plugin-microsoft-calendar@0.1.2-next.0 + - @backstage/plugin-playlist@0.1.8-next.0 + - @backstage/plugin-stack-overflow@0.1.13-next.0 + - @backstage/plugin-stackstorm@0.1.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-search-common@1.2.2 + +## example-backend@0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-kubernetes-backend@0.10.0-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.2-next.0 + - @backstage/plugin-auth-backend@0.18.2-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/plugin-graphql-backend@0.1.34-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.0 + - example-app@0.2.82-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-adr-backend@0.3.2-next.0 + - @backstage/plugin-app-backend@0.3.44-next.0 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-azure-devops-backend@0.3.23-next.0 + - @backstage/plugin-azure-sites-backend@0.1.6-next.0 + - @backstage/plugin-badges-backend@0.1.38-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-code-coverage-backend@0.2.10-next.0 + - @backstage/plugin-events-backend@0.2.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + - @backstage/plugin-explore-backend@0.0.6-next.0 + - @backstage/plugin-jenkins-backend@0.1.34-next.0 + - @backstage/plugin-kafka-backend@0.2.37-next.0 + - @backstage/plugin-lighthouse-backend@0.1.2-next.0 + - @backstage/plugin-linguist-backend@0.2.1-next.0 + - @backstage/plugin-permission-backend@0.5.19-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-playlist-backend@0.2.7-next.0 + - @backstage/plugin-proxy-backend@0.2.38-next.0 + - @backstage/plugin-rollbar-backend@0.1.41-next.0 + - @backstage/plugin-search-backend@1.2.5-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.5-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.5-next.0 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-tech-insights-backend@0.5.10-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.0 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + - @backstage/plugin-techdocs-backend@1.6.1-next.0 + - @backstage/plugin-todo-backend@0.1.41-next.0 + +## example-backend-next@0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-defaults@0.1.9-next.0 + - @backstage/plugin-app-backend@0.3.44-next.0 + - @backstage/plugin-techdocs-backend@1.6.1-next.0 + - @backstage/plugin-todo-backend@0.1.41-next.0 + +## e2e-test@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.39-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## techdocs-cli-embedded-app@0.2.81-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + +## @internal/plugin-catalog-customized@0.0.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + +## @internal/plugin-todo-list@1.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + +## @internal/plugin-todo-list-backend@1.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 diff --git a/package.json b/package.json index e4cb3ef1d3..8550a72a97 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.12.0", + "version": "1.13.0-next.0", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index e388b3e4ad..b2d85cea1a 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/app-defaults +## 1.3.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/theme@0.2.18 + ## 1.2.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 31fb64a079..d4540bfd1d 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.2.1", + "version": "1.3.0-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 4b24b827b4..7c0a558a86 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,74 @@ # example-app +## 0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.9.2-next.0 + - @backstage/plugin-scaffolder@1.13.0-next.0 + - @backstage/plugin-scaffolder-react@1.3.0-next.0 + - @backstage/plugin-entity-feedback@0.2.0-next.0 + - @backstage/plugin-tech-insights@0.3.9-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.0 + - @backstage/plugin-newrelic-dashboard@0.2.10-next.0 + - @backstage/plugin-apache-airflow@0.2.10-next.0 + - @backstage/plugin-catalog-import@0.9.7-next.0 + - @backstage/plugin-github-actions@0.5.17-next.0 + - @backstage/plugin-catalog-graph@0.2.29-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/plugin-code-coverage@0.2.10-next.0 + - @backstage/plugin-cost-insights@0.12.6-next.0 + - @backstage/plugin-user-settings@0.7.2-next.0 + - @backstage/plugin-azure-devops@0.2.8-next.0 + - @backstage/plugin-gcp-projects@0.3.36-next.0 + - @backstage/plugin-azure-sites@0.1.6-next.0 + - @backstage/plugin-cloudbuild@0.3.17-next.0 + - @backstage/plugin-kubernetes@0.7.10-next.0 + - @backstage/plugin-lighthouse@0.4.2-next.0 + - @backstage/plugin-tech-radar@0.6.3-next.0 + - @backstage/plugin-dynatrace@3.0.1-next.0 + - @backstage/plugin-gcalendar@0.3.13-next.0 + - @backstage/plugin-pagerduty@0.5.10-next.0 + - @backstage/plugin-shortcuts@0.3.9-next.0 + - @backstage/plugin-airbrake@0.3.17-next.0 + - @backstage/plugin-circleci@0.3.17-next.0 + - @backstage/plugin-graphiql@0.2.49-next.0 + - @backstage/plugin-newrelic@0.3.35-next.0 + - @backstage/plugin-explore@0.4.2-next.0 + - @backstage/plugin-jenkins@0.7.16-next.0 + - @backstage/plugin-rollbar@0.4.17-next.0 + - @backstage/plugin-badges@0.2.41-next.0 + - @backstage/plugin-search@1.1.2-next.0 + - @backstage/plugin-sentry@0.5.2-next.0 + - @backstage/plugin-kafka@0.3.17-next.0 + - @backstage/plugin-gocd@0.1.23-next.0 + - @backstage/plugin-home@0.4.33-next.0 + - @backstage/plugin-todo@0.2.19-next.0 + - @backstage/plugin-org@0.6.7-next.0 + - @internal/plugin-catalog-customized@0.0.9-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/plugin-linguist@0.1.2-next.0 + - @backstage/plugin-microsoft-calendar@0.1.2-next.0 + - @backstage/plugin-playlist@0.1.8-next.0 + - @backstage/plugin-stack-overflow@0.1.13-next.0 + - @backstage/plugin-stackstorm@0.1.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-search-common@1.2.2 + ## 0.2.81 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index a5a420c621..b7a7dac851 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.81", + "version": "0.2.82-next.0", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 1e587b94a3..ed9deb5037 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-app-api +## 0.4.2-next.0 + +### Patch Changes + +- 8cce2205a39: Register unhandled rejection and uncaught exception handlers to avoid backend crashes. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-node@0.7.7-next.0 + ## 0.4.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 8ed273b451..dda56af96c 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.1", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 8d73268bc1..3ec4fe5837 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-common +## 0.18.4-next.0 + +### Patch Changes + +- 420164593cf: Improve GitlabUrlReader to only load requested sub-path +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.3 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 5d54e5ae12..3f96d5f4ce 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.18.3", + "version": "0.18.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index edfc39bd91..01afac257b 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + ## 0.1.8 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 2759c3c089..2f9655384e 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.8", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index e51c65963d..39af1fa1c3 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,17 @@ # example-backend-next +## 0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-defaults@0.1.9-next.0 + - @backstage/plugin-app-backend@0.3.44-next.0 + - @backstage/plugin-techdocs-backend@1.6.1-next.0 + - @backstage/plugin-todo-backend@0.1.41-next.0 + ## 0.0.9 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 14ec71f352..8c40565737 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.9", + "version": "0.0.10-next.0", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index dd78ffaca1..f3cb679fce 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-plugin-api +## 0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + ## 0.5.0 ### Minor Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index cc155fe546..6566772f2f 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.5.0", + "version": "0.5.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index dea40d399b..7d2540d83a 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-tasks +## 0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.5.0 ### Minor Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 5042ff735a..43553cd740 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.0", + "version": "0.5.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 529c92d423..a1f4e76ea2 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-test-utils +## 0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 0.1.35 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 80135ad4a9..05195f98aa 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.35", + "version": "0.1.36-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 7ead0abeb6..fd9247bb44 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,56 @@ # example-backend +## 0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-kubernetes-backend@0.10.0-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.2-next.0 + - @backstage/plugin-auth-backend@0.18.2-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/plugin-graphql-backend@0.1.34-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.0 + - example-app@0.2.82-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-adr-backend@0.3.2-next.0 + - @backstage/plugin-app-backend@0.3.44-next.0 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-azure-devops-backend@0.3.23-next.0 + - @backstage/plugin-azure-sites-backend@0.1.6-next.0 + - @backstage/plugin-badges-backend@0.1.38-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-code-coverage-backend@0.2.10-next.0 + - @backstage/plugin-events-backend@0.2.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + - @backstage/plugin-explore-backend@0.0.6-next.0 + - @backstage/plugin-jenkins-backend@0.1.34-next.0 + - @backstage/plugin-kafka-backend@0.2.37-next.0 + - @backstage/plugin-lighthouse-backend@0.1.2-next.0 + - @backstage/plugin-linguist-backend@0.2.1-next.0 + - @backstage/plugin-permission-backend@0.5.19-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-playlist-backend@0.2.7-next.0 + - @backstage/plugin-proxy-backend@0.2.38-next.0 + - @backstage/plugin-rollbar-backend@0.1.41-next.0 + - @backstage/plugin-search-backend@1.2.5-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.1.5-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.5-next.0 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-tech-insights-backend@0.5.10-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.0 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + - @backstage/plugin-techdocs-backend@1.6.1-next.0 + - @backstage/plugin-todo-backend@0.1.41-next.0 + ## 0.2.81 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 54dbe640df..22da65099f 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.81", + "version": "0.2.82-next.0", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 6903e61425..e88e554b70 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/cli +## 0.22.6-next.0 + +### Patch Changes + +- b9839d7135c: Fixed backend start command on Windows by removing the use of platform dependent path joins. +- c07c3b7364b: Add `onboard` command. While still in development, this command aims to guide users in setting up their Backstage App. +- Updated dependencies + - @backstage/eslint-plugin@0.1.3-next.0 + - @backstage/config@1.0.7 + - @backstage/release-manifests@0.0.9 + - @backstage/cli-common@0.1.12 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.22.4 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 140f94b0ca..707a9a1f6e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.22.4", + "version": "0.22.6-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 2f54b5d041..af0ca61ef0 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/core-app-api +## 1.7.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + ## 1.6.0 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index c9ae2abc25..a2239301f2 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.6.0", + "version": "1.7.0-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index a7ca828bb3..b8e29342dc 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/core-components +## 0.12.6-next.0 + +### Patch Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- 7245e744ab1: Fixed the font color on `BackstageHeaderLabel` to respect the active page theme. +- Updated dependencies + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/version-bridge@1.0.3 + ## 0.12.5 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 77e91aa751..67de700af1 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.12.5", + "version": "0.12.6-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 2639ba9a59..3ce499d386 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.4.39-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.4.38 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 9f797f5d8c..264ca6e017 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.38", + "version": "0.4.39-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 3c6fbaefd5..e151728a1b 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 1.0.13 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index d8559535d8..0568a44472 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.13", + "version": "1.0.14-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 2f7c5d0704..a3c5ffa88e 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.39-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.2.1 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index d2c11a7e15..833c5a1eca 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.1", + "version": "0.2.2-next.0", "private": true, "backstage": { "role": "cli" diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 49cf9b5df5..5a3b5dc5c4 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/eslint-plugin +## 0.1.3-next.0 + +### Patch Changes + +- 911c25de59c: Add support for auto-fixing missing imports detected by the `no-undeclared-imports` rule. + ## 0.1.2 ### Patch Changes diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index feb03921fd..5a37dcc871 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/eslint-plugin", "description": "Backstage ESLint plugin", - "version": "0.1.2", + "version": "0.1.3-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 06568497df..02a8c9b7e4 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 1.1.11 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 681542a313..889805cba8 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.11", + "version": "1.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index c7577cb711..5893c3d87c 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/repo-tools +## 0.1.4-next.0 + +### Patch Changes + +- 9129ca8cabb: Log API report instructions when api-report is missing. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.1.3 ### Patch Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 35ea6165d3..fb1d0c4af8 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.1.3", + "version": "0.1.4-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 4b74967ddf..e1c03b9f9c 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.81-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/app-defaults@1.3.0-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.80 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 4400ff082d..eab13938f4 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.80", + "version": "0.2.81-next.0", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 3467fe86a5..9c1aaee26a 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @techdocs/cli +## 1.4.1-next.0 + +### Patch Changes + +- b348420a804: Adding global-agent to enable the ability to publish through a proxy +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/plugin-techdocs-node@1.6.1-next.0 + ## 1.4.0 ### Minor Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 678c73e783..c8929f3d6a 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.0", + "version": "1.4.1-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 2d0f57cf12..382cce8c09 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/test-utils +## 1.3.0-next.0 + +### Minor Changes + +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.4 + ## 1.2.6 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 7bd93443e9..7670d43cbd 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.2.6", + "version": "1.3.0-next.0", "publishConfig": { "access": "public" }, diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index c74dbd116a..53fb3b9f8d 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-adr-backend +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.3.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index e759373e6c..fb0c211284 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.1", + "version": "0.3.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index b5942d88a4..f67ab9bc20 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-adr +## 0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-adr-common@0.2.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.4.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 44ea2dc113..453ff62792 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.4.1", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index df44bfa651..29771be91c 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + ## 0.2.16 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index a292f05a14..fa3c29c022 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.16", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 3efe9aabcd..e0efd2802b 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-airbrake +## 0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/dev-utils@1.0.14-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 3d5c103719..8249410795 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.16", + "version": "0.3.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 2e4346de7d..27a470ce2c 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-allure +## 0.1.33-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.32 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 9763435af6..986fc62f17 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.32", + "version": "0.1.33-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 6a896c5447..b05b09ab78 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-analytics-module-ga +## 0.1.28-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.1.27 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 5ee50f36d7..f77807b138 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.27", + "version": "0.1.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 58348fbc56..6386aee20b 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apache-airflow +## 0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + ## 0.2.9 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index efe41bdce7..ab732c8129 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.9", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 8735ac91f8..2c850a0cb3 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-api-docs +## 0.9.2-next.0 + +### Patch Changes + +- ca50c3bbea1: Corrected styling of nested objects in AsyncAPI to avoid inappropriate uppercase text transformation of nested objects. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.9.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index bfd8a7f648..8e24c3ccea 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.1", + "version": "0.9.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 8771768cc1..6a7ec3d0f2 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.9 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 746f29d393..1c560127d2 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.9", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 6de2196bb6..85873f3ddb 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.3.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/config-loader@1.1.9 + - @backstage/types@1.0.2 + ## 0.3.43 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 2c24657363..79a9c70ca5 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.43", + "version": "0.3.44-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 69fe145e82..3a68d5a495 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-auth-backend +## 0.18.2-next.0 + +### Patch Changes + +- d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin. +- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 0.18.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 3c0fe10a5b..83a9a55906 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.1", + "version": "0.18.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 6c629ad208..210658c09d 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.12 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 690f67b868..6e3a74c66d 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.12", + "version": "0.2.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index a59697c5b0..6aae0be627 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.22 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 8b2e3caf57..dcafd05680 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.22", + "version": "0.3.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 9682fe8de8..de9bb877d4 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-azure-devops +## 0.2.8-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.7 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index f700d54275..40104c5036 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.7", + "version": "0.2.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index d09e308269..5fda3502c5 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-sites-backend +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index 0289ed01bd..77b6b3091c 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 99f3c57cda..9c4b55e67f 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-azure-sites +## 0.1.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 7ae6b08c38..6c8acb0fda 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 4d3242f09d..88fb467687 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-badges-backend +## 0.1.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 0.1.37 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 88dac005e0..15caf0ec10 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.37", + "version": "0.1.38-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 6f3aaa3897..da109890b7 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-badges +## 0.2.41-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.40 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index eba168c087..51ed87a34a 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.40", + "version": "0.2.41-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 29aaf96358..da7151291a 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 0.2.6 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 97c61156d4..78ddc51153 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index ff9fe6e97e..139a8af90c 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bazaar +## 0.2.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/cli@0.22.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.6 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index dad5ad9f9c..ef455587da 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index cd4b948675..4a92237aaa 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-bitrise +## 0.1.44-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.43 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 295826f109..9cdbeda3cd 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.43", + "version": "0.1.44-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 7b556b2d53..1aab4dac82 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.17 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index c0e2463cfd..0380c59585 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.17", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 30ccea2776..3a7d09070f 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.14 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 4015eb07f2..4ed831fcfd 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.14", + "version": "0.1.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 90d939638c..4a289a393f 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.10 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index af3b21d2d0..6e9aed31be 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.10", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 216b7f6a9a..12e3d2e7d8 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.8 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 6cf06b432e..9b680a80ca 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.8", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 936303e285..c10530f41a 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.4 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.2.10 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 48fad40034..92c0adda4a 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.10", + "version": "0.2.11-next.0", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 35913b542f..98f0959dfd 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.11 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 244bcdf1ed..3d66f715cc 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.11", + "version": "0.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 22d4e10583..44760980cb 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-github +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.2.6 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 5c9f7f67e1..ba7233e70f 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 2bde8b2635..02a274469d 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.2.0-next.0 + +### Minor Changes + +- f64345108a0: **BREAKING**: The configuration of the `GitlabDiscoveryEntityProvider` has changed as follows: + + - The configuration key `branch` is now used to define the branch from which the catalog-info should be discovered. + - The old configuration key `branch` is now called `fallbackBranch`. This value specifies which branch should be used + if no default branch is defined on the project itself. + + To migrate to the new configuration value, rename `branch` to `fallbackBranch` + +### Patch Changes + +- 7b1b7bfdb7b: The gitlab org data integration now makes use of the GraphQL API to determine + the relationships between imported User and Group entities, effectively making + this integration usable without an administrator account's Personal Access + Token. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.14 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index b6437cd46b..3bdef6958d 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.14", + "version": "0.2.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index d411c63ed2..5bf522c41b 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + - @backstage/plugin-permission-common@0.7.4 + ## 0.3.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index df86610dce..66e939dbe3 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.0", + "version": "0.3.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 99503f83bf..a89c835ef2 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.11-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.5.10 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 84f5ea88d2..6986f7a84a 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.10", + "version": "0.5.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 37393dfd7b..9eed88aa13 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.3-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.5.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 9df7e8f361..15f272d48f 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.2", + "version": "0.5.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 414f7960cd..680e86263f 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.10-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.9 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 948409a11c..fd4a8fef4d 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.9", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index d3ccdb6782..50c805985e 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 3334e3d204..f3df2dfdc8 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 0a3c5853e0..e450baf77b 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend +## 1.8.1-next.0 + +### Patch Changes + +- c9a0fdcd2c8: Fix deprecated types. +- 899ebfd8e02: Add full text search support to the `by-query` endpoint. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-search-common@1.2.2 + ## 1.8.0 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 1e837fd9ba..b60f03e4cd 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.8.0", + "version": "1.8.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index c155405317..b71628d43c 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + ## 0.0.8 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index 59159bfe84..0cca05de5a 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.8", + "version": "0.0.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 04d714d024..5975f7d319 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-graph +## 0.2.29-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.28 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 689a17c57c..f5cc5f7619 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.28", + "version": "0.2.29-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 740ed8905a..041191fcef 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-graphql +## 0.3.20-next.0 + +### Patch Changes + +- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + ## 0.3.19 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index ba7641febe..11b899f528 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.19", + "version": "0.3.20-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index d29890d836..2298180278 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-import +## 0.9.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.12 + ## 0.9.6 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index d55e2d230c..d27a6118bd 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.6", + "version": "0.9.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 71333f339c..e38a38d596 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-node +## 1.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + ## 1.3.4 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index e95258f59b..31b7032462 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.4", + "version": "1.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 1436ea2b2f..f7a96b5f07 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-react +## 1.4.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + ## 1.4.0 ### Minor Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index a947b84283..166da09118 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.4.0", + "version": "1.4.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 239a7e6057..d7cd7cbe3a 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog +## 1.10.0-next.0 + +### Minor Changes + +- 4dbf3d3e4da: Added a new EntitySwitch isResourceType to allow different views depending on Resource type +- fc6cab4eb48: Added `isEntityWith` condition helper for `EntitySwitch` case statements. + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-search-common@1.2.2 + ## 1.9.0 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 686f5d5ff3..49242b8724 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.9.0", + "version": "1.10.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index a8519377a6..f68f624292 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.19-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + ## 0.1.12 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 8144319eaa..3cef2e0ff7 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.12", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index bc91b2611b..86c2579da9 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cicd-statistics +## 0.1.19-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + ## 0.1.18 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 9355286962..1a531cbf88 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.18", + "version": "0.1.19-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 93dd50f6be..7dc02638c4 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-circleci +## 0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 2e5c264858..5f74d66245 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.16", + "version": "0.3.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 935cb3e7bb..e1131349cf 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-cloudbuild +## 0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 3308812dff..87b76043d2 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.16", + "version": "0.3.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 59599c528e..f84df1f4fd 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-climate +## 0.1.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.16 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 927cb9dcaa..1b75d7c59d 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.16", + "version": "0.1.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 65a9ce5a60..9f498b3687 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 0.2.9 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index affbfb79b9..dd4dac88c8 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.9", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 8782089171..dfa39648c7 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-code-coverage +## 0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.9 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 1a5d8d6158..e09a20355e 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.9", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index b6f69daacb..f854b3f22d 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.11 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index f7d132affa..9cc1b0ac47 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.11", + "version": "0.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index e78a82a633..e4e81e46c0 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-config-schema +## 0.1.40-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.1.39 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index d96568fd01..13222fd55d 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.39", + "version": "0.1.40-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 2cf77c9aa9..8d459fb000 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-cost-insights +## 0.12.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.5 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 7a84c5361c..aef2c7635e 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.5", + "version": "0.12.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 451da29bf0..46fde4973e 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-dynatrace +## 3.0.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 3.0.0 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 3ac17e36f7..d01e7eafad 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "3.0.0", + "version": "3.0.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index 2bf4189393..f076d9e130 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.2-next.0 + +### Patch Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity +- Updated dependencies + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 48ab43af9f..aa88dea67f 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-common/CHANGELOG.md b/plugins/entity-feedback-common/CHANGELOG.md index e646a4322d..ef373767ca 100644 --- a/plugins/entity-feedback-common/CHANGELOG.md +++ b/plugins/entity-feedback-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-entity-feedback-common +## 0.1.1-next.0 + +### Patch Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity + ## 0.1.0 ### Minor Changes diff --git a/plugins/entity-feedback-common/package.json b/plugins/entity-feedback-common/package.json index 45a5a2b131..b1fbb3f686 100644 --- a/plugins/entity-feedback-common/package.json +++ b/plugins/entity-feedback-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-entity-feedback-common", "description": "Common functionalities for the entity-feedback plugin", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index e19b5e17b1..1fa0d920ab 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-entity-feedback +## 0.2.0-next.0 + +### Minor Changes + +- 7eba760e6f6: Added an endpoint to fetch anonymous aggregated results from an entity + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.1 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index 919293f186..bac96f561c 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.1.1", + "version": "0.2.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index a714918b45..dc7db0eaec 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-validation +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + ## 0.1.1 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index c7cd754547..5e450985c3 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index ac076e463b..2dc726e160 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 046d3363d2..a90dafadde 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index cf3de9b750..35560f1156 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 6ac861253a..2b66bd1421 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index be247852e9..8189dc2b99 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 5a908876cb..e575d325ff 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 7388fe6c96..82bf56ef32 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 3666179cd1..95612d2aab 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index f20041f8d8..d281e432df 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index cbe8713836..7ec3660013 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 6d9895360d..9a47340948 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 420bbb782e..3729fa4f24 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index dad7faf979..04e373d809 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.1.5 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 77cecd0219..6f7ec7c54d 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 0b72628ccf..af29213c08 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/plugin-events-node@0.2.5-next.0 + ## 0.2.4 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index d2abad4cb8..7fda105e15 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.4", + "version": "0.2.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 9b1599c25a..955ad8c4e0 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.0 + ## 0.2.4 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 22c64dd012..930cd439e3 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.4", + "version": "0.2.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 65488cd80e..c0fd1fcb21 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 1.0.11 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 8baa490b31..d5a4a116e0 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.11", + "version": "1.0.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 022a8e8fb3..87fc367b86 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 1.0.11 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index aa2ec71583..27e05d7144 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.11", + "version": "1.0.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index be73174a06..950430d91f 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-explore-backend +## 0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + ## 0.0.5 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 00629c8da4..2302b6dd0f 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.5", + "version": "0.0.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 46cf23bc90..f5cbde7200 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-explore +## 0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-explore-react@0.0.27 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.2 + ## 0.4.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 323d6586cf..eb5e1da5b3 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.1", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 2987daa5ff..50440aba5d 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-firehydrant +## 0.2.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.2.0 ### Minor Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index a5ad5fc842..2268ca77a1 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.0", + "version": "0.2.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 7c713d6730..3cb8c21d6c 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-fossa +## 0.2.49-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.48 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 34d3a64b3b..f7d14a79aa 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.48", + "version": "0.2.49-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index d9d1021f02..e13f9f04eb 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-gcalendar +## 0.3.13-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.3.12 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 5337538466..5a0508b41c 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.12", + "version": "0.3.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index b501db40d7..b952be109f 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcp-projects +## 0.3.36-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.35 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 5446a5db7a..516a72cbfa 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.35", + "version": "0.3.36-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index cec4a630bc..34e2e430ae 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-git-release-manager +## 0.3.30-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 0.3.29 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index a8645c09db..b43ee73925 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.29", + "version": "0.3.30-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index a8cf2cd18f..df186ba39d 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-actions +## 0.5.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.5.16 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index d6922ff42e..78c0f5096a 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.16", + "version": "0.5.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index a66a149b8b..47f7e4d86b 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-github-deployments +## 0.1.48-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.47 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 8ede540d19..e60e3da91a 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.47", + "version": "0.1.48-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 46352a55d2..affbf603a6 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-issues +## 0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.5 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 419a5babcb..3d13f7176e 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.5", + "version": "0.2.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 3480ae5f6e..681552a571 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.11-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.10 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index a7bbd729cc..1792a6e98c 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.10", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 5c7f777ddc..6201080830 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-gitops-profiles +## 0.3.35-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + ## 0.3.34 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 4474e05300..2208c6d011 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.34", + "version": "0.3.35-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 544bb848dc..06ca6ecca7 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-gocd +## 0.1.23-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.22 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index da93feb927..a8e2599f3b 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.22", + "version": "0.1.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 35d00a5080..816962b034 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphiql +## 0.2.49-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.2.48 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 6d64b85067..fcdf347ba1 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.48", + "version": "0.2.49-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 87f2fe54e0..1e2f5059eb 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-backend +## 0.1.34-next.0 + +### Patch Changes + +- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-graphql@0.3.20-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + ## 0.1.33 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 2cef4a7298..736c057a5b 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.33", + "version": "0.1.34-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index 43d2b66fd8..480e859caa 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-voyager +## 0.1.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.1.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index ca054814bb..deba02b6a4 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 1deba56290..0c1e662fef 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-home +## 0.4.33-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.4.32 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 859ed5ffcf..767ed33557 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.32", + "version": "0.4.33-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index ff0683d4a8..ae6e292c85 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-ilert +## 0.2.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.5 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index ecc1904c9c..67573d1e3a 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.5", + "version": "0.2.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index a9f6bcaac4..0655d6c189 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-jenkins-backend +## 0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-jenkins-common@0.1.14 + - @backstage/plugin-permission-common@0.7.4 + ## 0.1.33 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 9f85185900..54375b6f30 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.33", + "version": "0.1.34-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 19c41d8931..97bfce2e07 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-jenkins +## 0.7.16-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-jenkins-common@0.1.14 + ## 0.7.15 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 08f9436f54..23bbcfedcd 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.15", + "version": "0.7.16-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index a21c47dd96..d844d8339b 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.2.37-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 0.2.36 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 3f43fac671..d29ce0fb82 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.36", + "version": "0.2.37-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 0ed581fc62..324b9ae111 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kafka +## 0.3.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.3.16 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index afbb84eeff..a39b72c5b9 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.16", + "version": "0.3.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 617a9d16f9..75a4567b98 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-kubernetes-backend +## 0.10.0-next.0 + +### Minor Changes + +- 804f6d16b0c: **BREAKING**: `KubernetesBuilder.create` now requires a `permissions` field of type `PermissionEvaluator`. The kubernetes `/proxy` endpoint now requires two tokens: the `Backstage-Kubernetes-Authorization` header should contain a bearer token for the target cluster, and the `Authorization` header should contain a backstage identity token. The kubernetes `/proxy` endpoint now requires a `Backstage-Kubernetes-Cluster` header replacing the previously required `X-Kubernetes-Cluster` header. + +### Patch Changes + +- 75d4985f5e8: Fixes bug whereby backstage crashes when bad credentials are provided to the kubernetes plugin. +- 83d250badc6: Fix parsing error when kubernetes api is returning badly structured data. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + ## 0.9.4 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index e052fb4f58..8f7b071c9a 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.9.4", + "version": "0.10.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index d12719a9f2..862899600e 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-common +## 0.6.2-next.0 + +### Patch Changes + +- 804f6d16b0c: Introduced proxy permission types to be used with the kubernetes proxy endpoint's permission framework integration. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/plugin-permission-common@0.7.4 + ## 0.6.1 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 50c7571e72..4eb4a02bf9 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.6.1", + "version": "0.6.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 02dbba634d..cc8131b399 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes +## 0.7.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.7.9 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 0ad6e41045..f674402545 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.9", + "version": "0.7.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 860493f57b..7320fc7b77 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse-backend +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.1.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index d13e1487e9..523f3837f5 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index df404fb220..e662f3d81d 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-lighthouse +## 0.4.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 09fc97b6ab..c46fcffe57 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.1", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index e94a176158..5f38af055f 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-linguist-backend +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.0 ### Minor Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 755b1b959a..d9f971d178 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.0", + "version": "0.2.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index d289a06299..1670d80f97 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-linguist +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.1 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index f589b26bd3..963a25160d 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 93d51a338c..1cb17d787b 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-microsoft-calendar +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index dd9329a8c8..8170c7847f 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 44122710e5..81112322fb 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 0.2.9 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 7572ed8392..8718cbfe70 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.9", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index d241da2d28..60ccace53b 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-newrelic +## 0.3.35-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.3.34 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index e8238f151c..89823c559b 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.34", + "version": "0.3.35-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index 8ab8d174db..8b39119ce2 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-octopus-deploy +## 0.1.1-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.0 ### Minor Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index a7899075bd..ce36c80678 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index a8b59a4bc1..cdb4ef0b9e 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org-react +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.1.5 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 027e34c391..efcae096a2 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.5", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 4251195733..d4db2bcc61 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org +## 0.6.7-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.6.6 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 026e808622..43a102e1dd 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.6", + "version": "0.6.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 2e0529fa8b..583e29ebe3 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-pagerduty +## 0.5.10-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.5.9 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index ec861f0e8c..fdb8e566fc 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.9", + "version": "0.5.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index b2690caf40..ef3d7e9d64 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + ## 0.1.14 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 5c101dbf29..fca2c142a3 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.14", + "version": "0.1.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index f5cc2e9b3d..6e3a7a08f3 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-periskop +## 0.1.15-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.14 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 26b979c773..76fe8604ad 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.14", + "version": "0.1.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 8e2f0c2987..46b162f2fd 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-backend +## 0.5.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + ## 0.5.18 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index f7778bf7b2..ab44a3c9bf 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.18", + "version": "0.5.19-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 472fa004a1..3bd2cf06c4 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-permission-node +## 0.7.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + ## 0.7.6 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 1473de80b2..e4b2229bbc 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.6", + "version": "0.7.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 195cdb1f50..51e419f0fb 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-playlist-backend +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-playlist-common@0.1.5 + ## 0.2.6 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 90e5813247..870284f364 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.2.6", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 43a7ff4e4d..6e09f280bd 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-playlist +## 0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-playlist-common@0.1.5 + ## 0.1.7 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 59cde3f246..950eaf4ea4 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.7", + "version": "0.1.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 8c4ef92ea5..58d68eceab 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-plugin-api@0.5.1-next.0 + ## 0.2.37 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 6b9c115dbb..11caccbff3 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.37", + "version": "0.2.38-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index f69c395c83..f7f91fea98 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + ## 0.1.40 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 0bba2d3888..bec3819121 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.40", + "version": "0.1.41-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 2693bf4b5b..24e85c8e77 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-rollbar +## 0.4.17-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.4.16 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 601ec47d16..4abd1b90f2 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.16", + "version": "0.4.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 284e381553..b03b35dc72 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.18 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index da8f92da5c..c78cdae972 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.18", + "version": "0.2.19-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md new file mode 100644 index 0000000000..9bd33f6aae --- /dev/null +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -0,0 +1,15 @@ +# @backstage/plugin-scaffolder-backend-module-gitlab + +## 0.1.0-next.0 + +### Minor Changes + +- 1ad400bb2de: Add Gitlab Scaffolder Plugin + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 5e02ccc89f..e870ba57a0 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.0.0", + "version": "0.1.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 457cef36bb..bd3509dbd0 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.11 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 96da1120e8..aa1a178d9d 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.11", + "version": "0.4.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 5207cdec38..67772961ab 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.3 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index bff7043171..6f04036110 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.3", + "version": "0.1.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 36e965218d..2948bbc79b 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.16 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 9aeee3ec51..50db3c38d0 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.16", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 0cd0e43f9d..89bfc23549 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-scaffolder-backend +## 1.12.1-next.0 + +### Patch Changes + +- e23abb37ec1: Rename output parameter `mergeRequestURL` of `publish:gitlab:merge-request` action to `mergeRequestUrl`. +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- c9a0fdcd2c8: Fix deprecated types. +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 1.12.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 336f5d1286..c061d0258f 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.12.0", + "version": "1.12.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 4f76c33e36..83e32d4d30 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-common +## 1.2.7-next.0 + +### Patch Changes + +- 48da4c46e45: Export `typeguard` for `isTemplateEntityV1beta3` +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + ## 1.2.6 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index c08763d98b..3d71f7b3e1 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.2.6", + "version": "1.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 663d7b1c39..aa73af9a1f 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-node +## 0.1.2-next.0 + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + ## 0.1.1 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index d349e41ec4..624fb4bdd2 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 744d687349..5993000724 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-scaffolder-react +## 1.3.0-next.0 + +### Minor Changes + +- 259d3407b9b: Move `CategoryPicker` from `scaffolder` into `scaffolder-react` + Move `ContextMenu` into `scaffolder-react` and rename it to `ScaffolderPageContextMenu` +- 2cfd03d7376: To offer better customization options, `ScaffolderPageContextMenu` takes callbacks as props instead of booleans +- 48da4c46e45: `scaffolder/next`: Export the `TemplateGroupFilter` and `TemplateGroups` and make an extensible component + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- 7a6b16cc506: `scaffolder/next`: Bump `@rjsf/*` deps to 5.3.1 +- f84fc7fd040: Updated dependency `@rjsf/validator-ajv8` to `5.3.0`. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + ## 1.2.0 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 05b3eb01d0..0cae342b8c 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.2.0", + "version": "1.3.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index f304d7b621..22741c6a14 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/plugin-scaffolder +## 1.13.0-next.0 + +### Minor Changes + +- cdab34fd9a2: scaffolder/next: removing the `routeRefs` and exporting the originals on `scaffolderPlugin.routes.x` instead +- e5ad1bd61ec: Allow `TemplateListPage` and `TemplateWizardPage` to be passed in as props +- 92cf86a4b5d: Added a `templateFilter` prop to the `` component to allow for filtering of templates through a function. +- 259d3407b9b: Move `CategoryPicker` from `scaffolder` into `scaffolder-react` + Move `ContextMenu` into `scaffolder-react` and rename it to `ScaffolderPageContextMenu` + +### Patch Changes + +- e27ddc36dad: Added a possibility to cancel the running task (executing of a scaffolder template) +- 57c1b4752fa: Allow use of `{ exists: true }` value inside filters to filter entities that has that key. + + this example will filter all entities that has the annotation `someAnnotation` set to any value. + + ```yaml + ui:options: + catalogFilter: + kind: Group + metadata.annotations.someAnnotation: { exists: true } + ``` + +- 7a6b16cc506: `scaffolder/next`: Bump `@rjsf/*` deps to 5.3.1 +- f84fc7fd040: Updated dependency `@rjsf/validator-ajv8` to `5.3.0`. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-scaffolder-react@1.3.0-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/plugin-permission-react@0.4.11 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.12 + ## 1.12.0 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index d1d1f945a4..357b727c95 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.12.0", + "version": "1.13.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index b72c36dec2..a7ef318ec1 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.4 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index e854687360..044d52e3fd 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.1.4", + "version": "1.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 50a9fc9d91..8f3f01e83c 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + ## 0.5.4 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index b284557369..7c49e90000 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.4", + "version": "0.5.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 69cc5ac718..ed51a90369 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-node +## 1.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.4 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 2abc0a8ef0..7a95341fb8 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.1.4", + "version": "1.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 72d9e53c08..d6985a70f1 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-search-backend +## 1.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-permission-node@0.7.7-next.0 + - @backstage/plugin-search-backend-node@1.1.5-next.0 + - @backstage/plugin-search-common@1.2.2 + ## 1.2.4 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 02d4d53a92..19543dc7ce 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.2.4", + "version": "1.2.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index cf6138956c..22bf885caf 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-search-react +## 1.5.2-next.0 + +### Patch Changes + +- b2e182cdfa4: Fixes a UI bug in search result item which rendered the item text with incorrect font size and color +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + ## 1.5.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 74e81408ba..0a8864392b 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.5.1", + "version": "1.5.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 3160da8753..d5f44e058c 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-search +## 1.1.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.3 + - @backstage/plugin-search-common@1.2.2 + ## 1.1.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 30f7e6e83b..d4e93d6f45 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.1.1", + "version": "1.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index de40027a7e..ca34f2ea92 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sentry +## 0.5.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.5.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index ab3cf33c3a..6118517558 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.1", + "version": "0.5.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index f75675260e..c6094589d8 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-shortcuts +## 0.3.9-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- 99df676e324: Allow external links to be added as shortcuts +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.3.8 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 12a9066f8c..d84cf27223 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.8", + "version": "0.3.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 0f2ff1d996..1989ad3426 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.8 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index a3f3b42f43..b69b851115 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.8", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 6eeea22725..810d2125c0 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-sonarqube +## 0.6.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + - @backstage/plugin-sonarqube-react@0.1.4 + ## 0.6.5 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 33c831585b..672888057a 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.5", + "version": "0.6.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 011e513852..8295e1c7ce 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-splunk-on-call +## 0.4.6-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.18 + ## 0.4.5 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 0d34bd4f2a..fd7e6b524f 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.5", + "version": "0.4.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index ba743be981..bc76962999 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.2 + ## 0.1.12 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 8d1203577d..a3fba58bbe 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.12", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index c8641592a6..8c8ae16170 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-stack-overflow +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-home@0.4.33-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + ## 0.1.12 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 952471fd50..94cc071af4 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.12", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 3af84cd8a6..9899f2f05f 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stackstorm +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.0 ### Minor Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 2819fc0e33..0904badb4c 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 17334e90b7..cc49a78340 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + ## 0.1.27 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index a6bc32a990..3e6b08c65b 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.27", + "version": "0.1.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 8071740295..95497c3b88 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.0 + ## 0.5.9 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index c1887906e9..f6bae36e6b 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.9", + "version": "0.5.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 71eb372214..45583c194f 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index bfa4d893c0..d662258c3a 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.1", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 056b15cb8b..52d6ce6102 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-tech-insights +## 0.3.9-next.0 + +### Patch Changes + +- f538b9c5b83: The `Check` type now optionally includes the `failureMetadata` and `successMetadata` as returned by the `runChecks` call. +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.8 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 1f68240875..6bff5523dc 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.8", + "version": "0.3.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 694e07eeac..0ce2e73a86 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-radar +## 0.6.3-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 0.6.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 8c46107b6d..d02a4a0695 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.2", + "version": "0.6.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 6aad4ffd2d..cd86a795f3 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.12-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/plugin-catalog@1.10.0-next.0 + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/test-utils@1.3.0-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs@1.6.1-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/theme@0.2.18 + ## 1.0.11 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index defb9028fe..23917a52cb 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.11", + "version": "1.0.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index e39e58589d..80eab46ee0 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-techdocs-backend +## 1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.12 + - @backstage/plugin-permission-common@0.7.4 + - @backstage/plugin-search-common@1.2.2 + - @backstage/plugin-techdocs-node@1.6.1-next.0 + ## 1.6.0 ### Minor Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 1d6ca8931e..0a4183ccb0 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.6.0", + "version": "1.6.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 005c38f64c..7d4e087301 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.12-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/integration@1.4.3 + - @backstage/theme@0.2.18 + ## 1.0.11 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 2d6d07ece2..05989fed44 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.11", + "version": "1.0.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index f4221afc3a..041437bc89 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-node +## 1.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/integration-aws-node@0.1.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.2 + ## 1.6.0 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index fe23c88367..1b0977fbdd 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.6.0", + "version": "1.6.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index b0f163836a..434ab32835 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-react +## 1.1.5-next.0 + +### Patch Changes + +- 7e0c7b09a47: Fix a bug that caused the header to not render when generating a document for the first time +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/catalog-model@1.2.1 + - @backstage/version-bridge@1.0.3 + ## 1.1.4 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index e6a333b86e..e77a153e65 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.4", + "version": "1.1.5-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index f66e0fa3a4..0b44055461 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs +## 1.6.1-next.0 + +### Patch Changes + +- b2e182cdfa4: Fixes a UI bug in search result item which rendered the item text with incorrect font size and color +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/integration-react@1.1.12-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/plugin-search-common@1.2.2 + ## 1.6.0 ### Minor Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 4b9ab6385e..2fd4effcdc 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.0", + "version": "1.6.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 77e3c02668..793b7886c9 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-todo-backend +## 0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.3 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-client@1.4.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.0 + ## 0.1.40 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index ece341b736..6251ba4391 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.40", + "version": "0.1.41-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 1ea1c6ec88..9488bf45cd 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-todo +## 0.2.19-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.18 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 30eb41db67..32e653bb5e 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.18", + "version": "0.2.19-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index baecd1e286..770c0a35fb 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/backend-plugin-api@0.5.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.0 + ## 0.1.7 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index c3757fc9cf..3e8dc0302c 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.7", + "version": "0.1.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 85e175e822..926c4b94d4 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings +## 0.7.2-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-app-api@1.7.0-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + - @backstage/types@1.0.2 + ## 0.7.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 60b2c21799..63d8e18dd0 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.1", + "version": "0.7.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index a5a5e8ddaa..4e4de7bd92 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-vault-backend +## 0.3.0-next.0 + +### Minor Changes + +- 5e959c9eb62: Allow generic Vault clients to be passed into the builder + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.0 + - @backstage/config@1.0.7 + - @backstage/backend-tasks@0.5.1-next.0 + - @backstage/errors@1.1.5 + ## 0.2.10 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 41c9bef499..cf199f5f33 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.10", + "version": "0.3.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 4cb3473c9f..20ba9bf3b5 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/plugin-catalog-react@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.1.10 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index b5835661cd..de22891e69 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.10", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 617cb08281..0cf8ce8d2c 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-xcmetrics +## 0.2.37-next.0 + +### Patch Changes + +- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) +- Updated dependencies + - @backstage/core-components@0.12.6-next.0 + - @backstage/core-plugin-api@1.5.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.18 + ## 0.2.36 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 097f5ca597..b72d7ce72c 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.36", + "version": "0.2.37-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 542918e285..01704b695e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3664,7 +3664,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.4.0, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: @@ -3676,7 +3676,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@^1.2.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3892,7 +3892,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@^1.0.6, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -3938,7 +3938,57 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@^0.12.3, @backstage/core-components@^0.12.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@npm:^0.12.3, @backstage/core-components@npm:^0.12.4, @backstage/core-components@npm:^0.12.5": + version: 0.12.5 + resolution: "@backstage/core-components@npm:0.12.5" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/errors": ^1.1.5 + "@backstage/theme": ^0.2.18 + "@backstage/version-bridge": ^1.0.3 + "@material-table/core": ^3.1.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + "@react-hookz/web": ^20.0.0 + "@types/react-sparklines": ^1.7.0 + "@types/react-text-truncate": ^0.14.0 + ansi-regex: ^6.0.1 + classnames: ^2.2.6 + d3-selection: ^3.0.0 + d3-shape: ^3.0.0 + d3-zoom: ^3.0.0 + dagre: ^0.8.5 + history: ^5.0.0 + immer: ^9.0.1 + lodash: ^4.17.21 + pluralize: ^8.0.0 + prop-types: ^15.7.2 + qs: ^6.9.4 + rc-progress: 3.4.1 + react-helmet: 6.1.0 + react-hook-form: ^7.12.2 + react-markdown: ^8.0.0 + react-sparklines: ^1.7.0 + react-syntax-highlighter: ^15.4.5 + react-text-truncate: ^0.19.0 + react-use: ^17.3.2 + react-virtualized-auto-sizer: ^1.0.6 + react-window: ^1.8.6 + remark-gfm: ^3.0.1 + zen-observable: ^0.10.0 + zod: ~3.18.0 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7 + languageName: node + linkType: hard + +"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -4009,7 +4059,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -4094,7 +4144,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": +"@backstage/errors@^1.1.5, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" dependencies: @@ -4135,7 +4185,26 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@^1.1.10, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@npm:^1.1.10": + version: 1.1.11 + resolution: "@backstage/integration-react@npm:1.1.11" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/integration": ^1.4.3 + "@backstage/theme": ^0.2.18 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + checksum: ea3946236486a4d36c7851cf2f6562eacf10da00923cd7d51bb1f50e60bba766008745fd431ec26de9843cf5acc8fd6b3ba7a654e4e43a815f6d02151eeee235 + languageName: node + linkType: hard + +"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4162,7 +4231,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": +"@backstage/integration@^1.4.3, @backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" dependencies: @@ -5244,7 +5313,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.12, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5373,7 +5442,42 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.3.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.3.0, @backstage/plugin-catalog-react@npm:^1.4.0": + version: 1.4.0 + resolution: "@backstage/plugin-catalog-react@npm:1.4.0" + dependencies: + "@backstage/catalog-client": ^1.4.0 + "@backstage/catalog-model": ^1.2.1 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/errors": ^1.1.5 + "@backstage/integration": ^1.4.3 + "@backstage/plugin-catalog-common": ^1.0.12 + "@backstage/plugin-permission-common": ^0.7.4 + "@backstage/plugin-permission-react": ^0.4.11 + "@backstage/theme": ^0.2.18 + "@backstage/types": ^1.0.2 + "@backstage/version-bridge": ^1.0.3 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + classnames: ^2.2.6 + jwt-decode: ^3.1.0 + lodash: ^4.17.21 + material-ui-popup-state: ^1.9.3 + qs: ^6.9.4 + react-use: ^17.2.4 + yaml: ^2.0.0 + zen-observable: ^0.10.0 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 40af3a97f3f8fd87b8bb8dcde2e54e47937be9e1fc0872df7d767d0e6caf6271293fd8160899c1adb7d19599de204255c1b2652cf04e0126d2db29af22321abc + languageName: node + linkType: hard + +"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -6560,7 +6664,30 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@^0.4.30, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@npm:^0.4.30": + version: 0.4.32 + resolution: "@backstage/plugin-home@npm:0.4.32" + dependencies: + "@backstage/catalog-model": ^1.2.1 + "@backstage/config": ^1.0.7 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/plugin-catalog-react": ^1.4.0 + "@backstage/theme": ^0.2.18 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + lodash: ^4.17.21 + react-use: ^17.2.4 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 24e4b880be179b940098ab636333218200d26dbea249c883dc27b4e209bbec9ae74970d11340833c668dbd05d978a354be771d15dba96a105267365321f1db57 + languageName: node + linkType: hard + +"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -7257,7 +7384,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.7.4, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -7294,7 +7421,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@^0.4.11, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" dependencies: @@ -8834,7 +8961,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.2.16, @backstage/theme@^0.2.17, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.2.16, @backstage/theme@^0.2.17, @backstage/theme@^0.2.18, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: From 79e91d4c30a3253086bf4adf56dc0b792e35c088 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Mon, 13 Mar 2023 15:54:23 -0400 Subject: [PATCH 388/511] feat(cli): support import of .md files Signed-off-by: Phil Kuang --- .changeset/eleven-coats-refuse.md | 5 +++++ docs/local-dev/cli-build-system.md | 1 + packages/cli/asset-types/asset-types.d.ts | 5 +++++ packages/cli/src/lib/builder/config.ts | 1 + 4 files changed, 12 insertions(+) create mode 100644 .changeset/eleven-coats-refuse.md diff --git a/.changeset/eleven-coats-refuse.md b/.changeset/eleven-coats-refuse.md new file mode 100644 index 0000000000..a7589ff733 --- /dev/null +++ b/.changeset/eleven-coats-refuse.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Support importing `.md` files in build loader diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md index a86c0eaa35..a5df84f8dc 100644 --- a/docs/local-dev/cli-build-system.md +++ b/docs/local-dev/cli-build-system.md @@ -505,6 +505,7 @@ of all supported file extensions: | `.jpg` | URL Path | Image | | `.png` | URL Path | Image | | `.svg` | URL Path | Image | +| `.md` | URL Path | Markdown File | | `.icon.svg` | React Component | SVG converted into a [MUI SvgIcon](https://mui.com/components/icons/#svgicon) | ## Jest Configuration diff --git a/packages/cli/asset-types/asset-types.d.ts b/packages/cli/asset-types/asset-types.d.ts index 9bd158bb8e..a1c053dc54 100644 --- a/packages/cli/asset-types/asset-types.d.ts +++ b/packages/cli/asset-types/asset-types.d.ts @@ -40,6 +40,11 @@ declare module '*.jpeg' { export default src; } +declare module '*.md' { + const src: string; + export default src; +} + declare module '*.png' { const src: string; export default src; diff --git a/packages/cli/src/lib/builder/config.ts b/packages/cli/src/lib/builder/config.ts index ecd755d05b..3e61dd113a 100644 --- a/packages/cli/src/lib/builder/config.ts +++ b/packages/cli/src/lib/builder/config.ts @@ -132,6 +132,7 @@ export async function makeRollupConfigs( /\.woff$/, /\.woff2$/, /\.ttf$/, + /\.md$/, ], }), json(), From d2a46ab08a52fd4e7ef2dd30c43185ad7733334f Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Tue, 21 Mar 2023 14:56:40 +0100 Subject: [PATCH 389/511] Update docs/features/software-templates/testing-scaffolder-alpha.md Co-authored-by: Patrik Oldsberg Signed-off-by: Ben Lambert --- docs/features/software-templates/testing-scaffolder-alpha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md index 579b3ab873..138f4621d8 100644 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ b/docs/features/software-templates/testing-scaffolder-alpha.md @@ -79,7 +79,7 @@ And this API should be the exact same as the previous Router, so you should be a ``` -Optionally, you can chose to run the two side by side by using `FeatureFlags` in your `App.tsx` if you wish, but, we would also recommend duplicating any `CustomFieldExtensions` too as the new `CustomFieldExtensions` might not be compatible with the old form. +Optionally, you can choose to run the two side by side by using `FeatureFlags` in your `App.tsx` if you wish, but, we would also recommend duplicating any `CustomFieldExtensions` too as the new `CustomFieldExtensions` might not be compatible with the old form. ```tsx From 99d4fd56896dad572cbb2066044fb5b2df17d558 Mon Sep 17 00:00:00 2001 From: Arthur Gavlyukovskiy Date: Tue, 21 Mar 2023 16:31:04 +0100 Subject: [PATCH 390/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Arthur Gavlyukovskiy --- .changeset/fuzzy-wombats-search.md | 2 +- .../src/scaffolder/actions/builtin/fetch/helpers.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.changeset/fuzzy-wombats-search.md b/.changeset/fuzzy-wombats-search.md index ca1754acc9..693e42399a 100644 --- a/.changeset/fuzzy-wombats-search.md +++ b/.changeset/fuzzy-wombats-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder-backend': minor --- -Added `fetch:plain:file` action to fetch a single file +Added `fetch:plain:file` action to fetch a single file, this action is also added to the list of built-in actions. diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts index ac44f0a8a5..301c9991c4 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts @@ -53,9 +53,7 @@ export async function fetchContents(options: { /** * A helper function that reads the content of a single file from the given URL. - * Can be used in your own actions, and also used behind fetch:plain:file - * - * @public + * Can be used in your own actions, and also used behind `fetch:plain:file` */ export async function fetchFile(options: { reader: UrlReader; From 6f8b6c7069fcbc2154ac725284df73a0c7251fc0 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 11 Jan 2023 11:17:50 +0100 Subject: [PATCH 391/511] scaffolder: add permissions Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-common/package.json | 1 + plugins/scaffolder-common/src/index.ts | 1 + plugins/scaffolder-common/src/permissions.ts | 29 ++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 plugins/scaffolder-common/src/permissions.ts diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index c08763d98b..d315754462 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -39,6 +39,7 @@ }, "dependencies": { "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", "@backstage/types": "workspace:^" }, "devDependencies": { diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 7f9792a1ba..4953a27f9e 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -25,4 +25,5 @@ export { templateEntityV1beta3Validator, isTemplateEntityV1beta3, } from './TemplateEntityV1beta3'; +export * from './permissions'; export type { TemplateEntityV1beta3 } from './TemplateEntityV1beta3'; diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts new file mode 100644 index 0000000000..578ef09311 --- /dev/null +++ b/plugins/scaffolder-common/src/permissions.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. + */ + +import { createPermission } from '@backstage/plugin-permission-common'; + +export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-field'; + +export const templateSchemaExecutePermission = createPermission({ + name: 'scaffolder.template.schema.execute', + attributes: { + action: 'create', + }, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, +}); + +export const scaffolderPermissions = [templateSchemaExecutePermission]; From 2d34af80efd461485dfac362e71aebee6064042e Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 11 Jan 2023 11:18:22 +0100 Subject: [PATCH 392/511] scaffolder: add conditional rules Signed-off-by: Vincenzo Scamporlino --- .../src/service/conditionExports.ts | 47 ++++++++ .../scaffolder-backend/src/service/rules.ts | 113 ++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 plugins/scaffolder-backend/src/service/conditionExports.ts create mode 100644 plugins/scaffolder-backend/src/service/rules.ts diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts new file mode 100644 index 0000000000..d627284e76 --- /dev/null +++ b/plugins/scaffolder-backend/src/service/conditionExports.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 { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; +import { createConditionExports } from '@backstage/plugin-permission-node'; +import { scaffolderRules } from './rules'; +import { + AllOfCriteria, + ConditionalPolicyDecision, + PermissionCondition, + PermissionRuleParams, + ResourcePermission, +} from '@backstage/plugin-permission-common'; + +const { conditions: scaffolderConditions, createConditionalDecision } = + createConditionExports({ + pluginId: 'scaffolder', + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + rules: scaffolderRules, + }); + +export { scaffolderConditions }; + +export function createScaffolderConditionalDecision( + permission: ResourcePermission, + conditions: AllOfCriteria< + PermissionCondition< + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + PermissionRuleParams + > + >['allOf'], +): ConditionalPolicyDecision { + return createConditionalDecision(permission, { allOf: conditions }); +} diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts new file mode 100644 index 0000000000..11c938cab4 --- /dev/null +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -0,0 +1,113 @@ +/* + * 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 { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; +import { + RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + TemplateEntityV1beta3, +} from '@backstage/plugin-scaffolder-common'; +import { z } from 'zod'; + +import get from 'lodash/get'; +import unset from 'lodash/unset'; +import { TemplateTransform } from './helpers'; +import { + SecureTemplater, + SecureTemplateRenderer, +} from '../lib/templating/SecureTemplater'; + +export const createScaffolderPermissionRule = makeCreatePermissionRule< + TemplateEntityV1beta3, + TemplateTransform, + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE +>(); + +let render: SecureTemplateRenderer; + +export const allowCapabilities = createScaffolderPermissionRule({ + name: 'ALLOW_CAPABILITIES', + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + description: 'Allow capabilities based on permissions', + paramsSchema: z.object({ + capabilities: z.array(z.string()), + templateRef: z.string().optional(), + }), + apply: () => true, + toQuery: + ({ capabilities }) => + template => { + const capabilitiesObj = capabilities.reduce((acc, c) => { + acc[c] = true; + return acc; + }, {} as Record); + + const parametersPath = ['spec', 'parameters']; + const capabilitiesKey = 'backstage:capabilities'; + + if (Array.isArray(template.spec.parameters)) { + template.spec.parameters.forEach((parameter, index) => { + const parameterPath = [...parametersPath, index.toString()]; + stripParams(parameterPath); + if (parameter.properties) { + Object.keys(parameter.properties).forEach(p => { + if (stripParams([...parameterPath, 'properties', p])) { + const requiredProperties = get(template, [ + ...parameterPath, + 'required', + ]); + if (Array.isArray(requiredProperties)) { + requiredProperties.splice(requiredProperties.indexOf(p), 1); + } + } + }); + } + }); + } else { + stripParams(parametersPath); + } + + template.spec.steps.forEach((_p, index) => + stripParams(['spec', 'steps', index.toString()]), + ); + + function stripParams(path: string[]) { + const jsonObject = get(template, path); + + if ( + typeof jsonObject[capabilitiesKey] === 'string' && + render(jsonObject[capabilitiesKey], { + capabilities: capabilitiesObj, + }) !== 'true' + ) { + const parent = get(template, [...path].splice(0, path.length - 1)); + if (Array.isArray(parent)) { + parent.splice(parent.indexOf(jsonObject), 1); + } else { + unset(template, path); + } + + return path[path.length - 1]; + } + return undefined; + } + + return template; + }, +}); + +SecureTemplater.loadRenderer().then(r => (render = r)); + +export const scaffolderRules = { allowCapabilities }; From 1424f89d4dc05697dd86c5e4dca0bbca2412878b Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 11 Jan 2023 11:19:28 +0100 Subject: [PATCH 393/511] scaffolder: authorize permissions Signed-off-by: Vincenzo Scamporlino --- packages/backend/src/plugins/scaffolder.ts | 1 + plugins/scaffolder-backend/package.json | 2 + plugins/scaffolder-backend/src/index.ts | 1 + .../scaffolder-backend/src/service/helpers.ts | 4 + .../src/service/router.test.ts | 13 ++ .../scaffolder-backend/src/service/router.ts | 126 ++++++++++++------ 6 files changed, 108 insertions(+), 39 deletions(-) diff --git a/packages/backend/src/plugins/scaffolder.ts b/packages/backend/src/plugins/scaffolder.ts index d079b64c28..813092c9b9 100644 --- a/packages/backend/src/plugins/scaffolder.ts +++ b/packages/backend/src/plugins/scaffolder.ts @@ -34,5 +34,6 @@ export default async function createPlugin( reader: env.reader, identity: env.identity, scheduler: env.scheduler, + permissionApi: env.permissions, }); } diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 336f5d1286..ba72d9e071 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -58,6 +58,8 @@ "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-permission-node": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", diff --git a/plugins/scaffolder-backend/src/index.ts b/plugins/scaffolder-backend/src/index.ts index ba2c25f80a..3dc91f18b9 100644 --- a/plugins/scaffolder-backend/src/index.ts +++ b/plugins/scaffolder-backend/src/index.ts @@ -21,6 +21,7 @@ */ export * from './scaffolder'; +export * from './service/conditionExports'; export * from './service/router'; export * from './lib'; export * from './processor'; diff --git a/plugins/scaffolder-backend/src/service/helpers.ts b/plugins/scaffolder-backend/src/service/helpers.ts index 3412fec2d3..97d4ab93aa 100644 --- a/plugins/scaffolder-backend/src/service/helpers.ts +++ b/plugins/scaffolder-backend/src/service/helpers.ts @@ -107,3 +107,7 @@ export async function findTemplate(options: { return template as TemplateEntityV1beta3; } + +export type TemplateTransform = ( + template: TemplateEntityV1beta3, +) => TemplateEntityV1beta3; diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index 5e3c1c7278..6ebe988e9f 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -44,6 +44,7 @@ import { IdentityApiGetIdentityRequest, BackstageIdentityResponse, } from '@backstage/plugin-auth-node'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; const mockAccess = jest.fn(); @@ -139,6 +140,11 @@ describe('createRouter', () => { }); taskBroker = new StorageTaskBroker(databaseTaskStore, logger); + const permissionApi: PermissionEvaluator = { + authorize: jest.fn(), + authorizeConditional: jest.fn(), + }; + jest.spyOn(taskBroker, 'dispatch'); jest.spyOn(taskBroker, 'get'); jest.spyOn(taskBroker, 'list'); @@ -152,6 +158,7 @@ describe('createRouter', () => { catalogClient, reader: mockUrlReader, taskBroker, + permissionApi, }); app = express().use(router); @@ -744,6 +751,11 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ }, ); + const permissionApi: PermissionEvaluator = { + authorize: jest.fn(), + authorizeConditional: jest.fn(), + }; + const router = await createRouter({ logger: logger, config: new ConfigReader({}), @@ -752,6 +764,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ reader: mockUrlReader, taskBroker, identity: { getIdentity }, + permissionApi, }); app = express().use(router); diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index b2be3e2749..9fe7a98a8a 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -18,19 +18,26 @@ import { PluginDatabaseManager, UrlReader } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { CatalogApi } from '@backstage/catalog-client'; import { + CompoundEntityRef, Entity, parseEntityRef, stringifyEntityRef, UserEntity, } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; -import { InputError, NotFoundError, stringifyError } from '@backstage/errors'; +import { + InputError, + NotAllowedError, + NotFoundError, + stringifyError, +} from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; import { JsonObject, JsonValue } from '@backstage/types'; import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, + templateSchemaExecutePermission, } from '@backstage/plugin-scaffolder-common'; import express from 'express'; import Router from 'express-promise-router'; @@ -47,12 +54,27 @@ import { } from '../scaffolder'; import { createDryRunner } from '../scaffolder/dryrun'; import { StorageTaskBroker } from '../scaffolder/tasks/StorageTaskBroker'; -import { findTemplate, getEntityBaseUrl, getWorkingDirectory } from './helpers'; +import { + findTemplate, + getEntityBaseUrl, + getWorkingDirectory, + TemplateTransform, +} from './helpers'; import { IdentityApi, IdentityApiGetIdentityRequest, } from '@backstage/plugin-auth-node'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + AuthorizeResult, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; +import { + ConditionTransformer, + createConditionTransformer, + isAndCriteria, +} from '@backstage/plugin-permission-node'; +import { scaffolderRules } from './rules'; /** * RouterOptions @@ -80,6 +102,7 @@ export interface RouterOptions { taskBroker?: TaskBroker; additionalTemplateFilters?: Record; additionalTemplateGlobals?: Record; + permissionApi: PermissionEvaluator; identity?: IdentityApi; } @@ -174,6 +197,7 @@ export async function createRouter( scheduler, additionalTemplateFilters, additionalTemplateGlobals, + permissionApi, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -249,41 +273,31 @@ export async function createRouter( additionalTemplateGlobals, }); + const transformConditions: ConditionTransformer = + createConditionTransformer(Object.values(scaffolderRules)); + router .get( '/v2/templates/:namespace/:kind/:name/parameter-schema', async (req, res) => { - const { namespace, kind, name } = req.params; - const userIdentity = await identity.getIdentity({ request: req, }); const token = userIdentity?.token; - const template = await findTemplate({ - catalogApi: catalogClient, - entityRef: { kind, namespace, name }, - token, + const template = await authorizeTemplate(req.params, token); + + const parameters = [template.spec.parameters ?? []].flat(); + res.json({ + title: template.metadata.title ?? template.metadata.name, + description: template.metadata.description, + 'ui:options': template.metadata['ui:options'], + steps: parameters.map(schema => ({ + title: schema.title ?? 'Please enter the following information', + description: schema.description, + schema, + })), }); - if (isSupportedTemplate(template)) { - const parameters = [template.spec.parameters ?? []].flat(); - res.json({ - title: template.metadata.title ?? template.metadata.name, - description: template.metadata.description, - 'ui:options': template.metadata['ui:options'], - steps: parameters.map(schema => ({ - title: schema.title ?? 'Please enter the following information', - description: schema.description, - schema, - })), - }); - } else { - throw new InputError( - `Unsupported apiVersion field in schema entity, ${ - (template as Entity).apiVersion - }`, - ); - } }, ) .get('/v2/actions', async (_req, res) => { @@ -321,19 +335,10 @@ export async function createRouter( const values = req.body.values; - const template = await findTemplate({ - catalogApi: catalogClient, - entityRef: { kind, namespace, name }, + const template = await authorizeTemplate( + { kind, namespace, name }, token, - }); - - if (!isSupportedTemplate(template)) { - throw new InputError( - `Unsupported apiVersion field in schema entity, ${ - (template as Entity).apiVersion - }`, - ); - } + ); for (const parameters of [template.spec.parameters ?? []].flat()) { const result = validate(values, parameters); @@ -567,5 +572,48 @@ export async function createRouter( app.set('logger', logger); app.use('/', router); + async function authorizeTemplate( + entityRef: CompoundEntityRef, + token: string | undefined, + ) { + let template = await findTemplate({ + catalogApi: catalogClient, + entityRef, + token, + }); + if (!isSupportedTemplate(template)) { + throw new InputError( + `Unsupported apiVersion field in schema entity, ${ + (template as Entity).apiVersion + }`, + ); + } + const authorizeDecision = ( + await permissionApi.authorizeConditional( + [{ permission: templateSchemaExecutePermission }], + { + token, + }, + ) + )[0]; + + if (authorizeDecision.result === AuthorizeResult.DENY) { + throw new NotAllowedError( + `Not allowed to execute template ${entityRef.kind}:${entityRef.namespace}/${entityRef.name}`, + ); + } + if (authorizeDecision.result === AuthorizeResult.CONDITIONAL) { + const scaffolderFilter = transformConditions( + authorizeDecision.conditions, + ); + if (isAndCriteria(scaffolderFilter)) { + template = scaffolderFilter.allOf.reduce( + (acc, filter) => (filter as TemplateTransform)(acc), + template, + ); + } + } + return template; + } return app; } From 766298715c70418114c3b1d17ee49237fbde56eb Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 11 Jan 2023 11:21:13 +0100 Subject: [PATCH 394/511] backend: permission policy scaffolder example Signed-off-by: Vincenzo Scamporlino --- packages/backend/package.json | 1 + packages/backend/src/plugins/permission.ts | 21 +++++++++++++-------- yarn.lock | 4 ++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 54dbe640df..aa4e660fdd 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -60,6 +60,7 @@ "@backstage/plugin-rollbar-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^", + "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-search-backend": "workspace:^", "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^", "@backstage/plugin-search-backend-module-pg": "workspace:^", diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index 7192a1ddec..708f342265 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -18,28 +18,33 @@ import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; import { createRouter } from '@backstage/plugin-permission-backend'; import { AuthorizeResult, + isPermission, PolicyDecision, } from '@backstage/plugin-permission-common'; import { PermissionPolicy, PolicyQuery, } from '@backstage/plugin-permission-node'; + import { - DefaultPlaylistPermissionPolicy, - isPlaylistPermission, -} from '@backstage/plugin-playlist-backend'; + createScaffolderConditionalDecision, + scaffolderConditions, +} from '@backstage/plugin-scaffolder-backend'; +import { templateSchemaExecutePermission } from '@backstage/plugin-scaffolder-common'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; class ExamplePermissionPolicy implements PermissionPolicy { - private playlistPermissionPolicy = new DefaultPlaylistPermissionPolicy(); - async handle( request: PolicyQuery, - user?: BackstageIdentityResponse, + _user?: BackstageIdentityResponse, ): Promise { - if (isPlaylistPermission(request.permission)) { - return this.playlistPermissionPolicy.handle(request, user); + if (isPermission(request.permission, templateSchemaExecutePermission)) { + return createScaffolderConditionalDecision(request.permission, [ + scaffolderConditions.allowCapabilities({ + capabilities: ['example'], + }), + ]); } return { diff --git a/yarn.lock b/yarn.lock index 542918e285..0d63604827 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7585,6 +7585,8 @@ __metadata: "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/types": "workspace:^" @@ -7644,6 +7646,7 @@ __metadata: dependencies: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" "@backstage/types": "workspace:^" languageName: unknown linkType: soft @@ -22940,6 +22943,7 @@ __metadata: "@backstage/plugin-rollbar-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^" + "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/plugin-search-backend": "workspace:^" "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^" "@backstage/plugin-search-backend-module-pg": "workspace:^" From f8540c1049b6dc333565364adeddc6f126048b1d Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 11 Jan 2023 11:22:46 +0100 Subject: [PATCH 395/511] backend: add example of template with capabilities Signed-off-by: Vincenzo Scamporlino --- template.yaml | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 template.yaml diff --git a/template.yaml b/template.yaml new file mode 100644 index 0000000000..0bb67735a9 --- /dev/null +++ b/template.yaml @@ -0,0 +1,56 @@ +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: my_custom_template + title: My custom template + description: Just testing +spec: + owner: web@example.com + type: website + parameters: + - title: Provide some simple information + required: + - component_id + - owner + properties: + component_id: + backstage:capabilities: ${{ capabilities.cap1 }} + title: Name + type: string + description: Unique name of the component + ui:field: EntityNamePicker + description: + title: Description + type: string + description: Help others understand what this website is for. + owner: + title: Owner + type: string + description: Owner of the component + ui:field: OwnerPicker + ui:options: + allowedKinds: + - Group + - title: Choose a location + required: + - repoUrl + properties: + repoUrl: + title: Repository Location + type: string + ui:field: RepoUrlPicker + ui:options: + allowedHosts: + - github.com + steps: + - id: one + backstage:capabilities: ${{ capabilities.cap1 }} + name: First log + action: debug:log + input: + message: hello + - id: two + name: Second log + action: debug:log + input: + message: world From 277847e064b2911902f64e586bebf11b0644929c Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 12 Jan 2023 12:11:18 +0000 Subject: [PATCH 396/511] Reworked permission rules and filtering to follow similar pattern to catalog Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- app-config.yaml | 3 + packages/backend/src/plugins/permission.ts | 24 ++-- .../createPermissionIntegrationRouter.ts | 2 +- .../permission-node/src/integration/index.ts | 7 +- .../src/service/conditionExports.ts | 62 +++++----- .../scaffolder-backend/src/service/router.ts | 55 +++------ .../scaffolder-backend/src/service/rules.ts | 106 ++++-------------- .../src/TemplateEntityV1beta3.ts | 22 ++-- plugins/scaffolder-common/src/index.ts | 5 +- plugins/scaffolder-common/src/permissions.ts | 40 ++++++- template.yaml | 5 +- 11 files changed, 153 insertions(+), 178 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index 385c9c2e0e..d886d86896 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -223,6 +223,7 @@ catalog: - System - Domain - Location + - Template processors: ldapOrg: @@ -279,6 +280,8 @@ catalog: # Backstage end-to-end tests of TechDocs - type: file target: ../../cypress/e2e-fixture.catalog.info.yaml + - type: file + target: ../../template.yaml scaffolder: # Use to customize default commit author info used when new components are created # defaultAuthor: diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index 708f342265..84a102d6be 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -18,7 +18,7 @@ import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; import { createRouter } from '@backstage/plugin-permission-backend'; import { AuthorizeResult, - isPermission, + isResourcePermission, PolicyDecision, } from '@backstage/plugin-permission-common'; import { @@ -27,10 +27,10 @@ import { } from '@backstage/plugin-permission-node'; import { - createScaffolderConditionalDecision, - scaffolderConditions, + createScaffolderStepConditionalDecision, + scaffolderStepConditions, } from '@backstage/plugin-scaffolder-backend'; -import { templateSchemaExecutePermission } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_STEP } from '@backstage/plugin-scaffolder-common'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; @@ -39,12 +39,16 @@ class ExamplePermissionPolicy implements PermissionPolicy { request: PolicyQuery, _user?: BackstageIdentityResponse, ): Promise { - if (isPermission(request.permission, templateSchemaExecutePermission)) { - return createScaffolderConditionalDecision(request.permission, [ - scaffolderConditions.allowCapabilities({ - capabilities: ['example'], - }), - ]); + /** + * This is an example of how to use the scaffolder step conditions. + */ + if ( + isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_STEP) + ) { + return createScaffolderStepConditionalDecision( + request.permission, + scaffolderStepConditions.hasTag({ tag: 'example' }), + ); } return { diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 087de23198..e3f4b33707 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -126,7 +126,7 @@ export type MetadataResponse = { rules: MetadataResponseSerializedRule[]; }; -const applyConditions = ( +export const applyConditions = ( criteria: PermissionCriteria>, resource: TResource | undefined, getRule: (name: string) => PermissionRule, diff --git a/plugins/permission-node/src/integration/index.ts b/plugins/permission-node/src/integration/index.ts index 7702fea95b..f3b0edad9b 100644 --- a/plugins/permission-node/src/integration/index.ts +++ b/plugins/permission-node/src/integration/index.ts @@ -19,4 +19,9 @@ export * from './createConditionExports'; export * from './createConditionTransformer'; export * from './createPermissionIntegrationRouter'; export * from './createPermissionRule'; -export { isAndCriteria, isOrCriteria, isNotCriteria } from './util'; +export { + createGetRule, + isAndCriteria, + isOrCriteria, + isNotCriteria, +} from './util'; diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index d627284e76..2a7c0d382f 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -14,34 +14,42 @@ * limitations under the License. */ -import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_STEP } from '@backstage/plugin-scaffolder-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; -import { scaffolderRules } from './rules'; -import { - AllOfCriteria, - ConditionalPolicyDecision, - PermissionCondition, - PermissionRuleParams, - ResourcePermission, -} from '@backstage/plugin-permission-common'; +import { scaffolderStepRules } from './rules'; -const { conditions: scaffolderConditions, createConditionalDecision } = - createConditionExports({ - pluginId: 'scaffolder', - resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - rules: scaffolderRules, - }); +// const { +// conditions: scaffolderTemplateConditions, +// createConditionalDecision: createScaffolderTemplateConditionalDecision, +// } = createConditionExports({ +// pluginId: 'scaffolder', +// resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, +// rules: scaffolderRules, +// }); -export { scaffolderConditions }; +// const { +// conditions: scaffolderPropertyConditions, +// createConditionalDecision: createScaffolderPropertyConditionalDecision, +// } = createConditionExports({ +// pluginId: 'scaffolder', +// resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, +// rules: scaffolderRules, +// }); -export function createScaffolderConditionalDecision( - permission: ResourcePermission, - conditions: AllOfCriteria< - PermissionCondition< - typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - PermissionRuleParams - > - >['allOf'], -): ConditionalPolicyDecision { - return createConditionalDecision(permission, { allOf: conditions }); -} +const { + conditions: scaffolderStepConditions, + createConditionalDecision: createScaffolderStepConditionalDecision, +} = createConditionExports({ + pluginId: 'scaffolder', + resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, + rules: scaffolderStepRules, +}); + +export { + // scaffolderTemplateConditions, + // createScaffolderTemplateConditionalDecision, + // scaffolderPropertyConditions, + // createScaffolderPropertyConditionalDecision, + scaffolderStepConditions, + createScaffolderStepConditionalDecision, +}; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 9fe7a98a8a..d5a9e17601 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -25,19 +25,14 @@ import { UserEntity, } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; -import { - InputError, - NotAllowedError, - NotFoundError, - stringifyError, -} from '@backstage/errors'; +import { InputError, NotFoundError, stringifyError } from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; import { JsonObject, JsonValue } from '@backstage/types'; import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, - templateSchemaExecutePermission, + templateStepReadPermission, } from '@backstage/plugin-scaffolder-common'; import express from 'express'; import Router from 'express-promise-router'; @@ -54,12 +49,7 @@ import { } from '../scaffolder'; import { createDryRunner } from '../scaffolder/dryrun'; import { StorageTaskBroker } from '../scaffolder/tasks/StorageTaskBroker'; -import { - findTemplate, - getEntityBaseUrl, - getWorkingDirectory, - TemplateTransform, -} from './helpers'; +import { findTemplate, getEntityBaseUrl, getWorkingDirectory } from './helpers'; import { IdentityApi, IdentityApiGetIdentityRequest, @@ -70,11 +60,10 @@ import { PermissionEvaluator, } from '@backstage/plugin-permission-common'; import { - ConditionTransformer, - createConditionTransformer, - isAndCriteria, + applyConditions, + createGetRule, } from '@backstage/plugin-permission-node'; -import { scaffolderRules } from './rules'; +import { scaffolderStepRules } from './rules'; /** * RouterOptions @@ -273,8 +262,7 @@ export async function createRouter( additionalTemplateGlobals, }); - const transformConditions: ConditionTransformer = - createConditionTransformer(Object.values(scaffolderRules)); + const getRule = createGetRule(Object.values(scaffolderStepRules)); router .get( @@ -576,11 +564,12 @@ export async function createRouter( entityRef: CompoundEntityRef, token: string | undefined, ) { - let template = await findTemplate({ + const template = await findTemplate({ catalogApi: catalogClient, entityRef, token, }); + if (!isSupportedTemplate(template)) { throw new InputError( `Unsupported apiVersion field in schema entity, ${ @@ -588,32 +577,24 @@ export async function createRouter( }`, ); } + const authorizeDecision = ( await permissionApi.authorizeConditional( - [{ permission: templateSchemaExecutePermission }], - { - token, - }, + [{ permission: templateStepReadPermission }], + { token }, ) )[0]; if (authorizeDecision.result === AuthorizeResult.DENY) { - throw new NotAllowedError( - `Not allowed to execute template ${entityRef.kind}:${entityRef.namespace}/${entityRef.name}`, + template.spec.steps = []; + } else if (authorizeDecision.result === AuthorizeResult.CONDITIONAL) { + template.spec.steps = template.spec.steps.filter(step => + applyConditions(authorizeDecision.conditions, step, getRule), ); } - if (authorizeDecision.result === AuthorizeResult.CONDITIONAL) { - const scaffolderFilter = transformConditions( - authorizeDecision.conditions, - ); - if (isAndCriteria(scaffolderFilter)) { - template = scaffolderFilter.allOf.reduce( - (acc, filter) => (filter as TemplateTransform)(acc), - template, - ); - } - } + return template; } + return app; } diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 11c938cab4..5166c86723 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -14,100 +14,34 @@ * limitations under the License. */ +import { EntitiesSearchFilter } from '@backstage/plugin-catalog-backend'; import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { - RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - TemplateEntityV1beta3, + RESOURCE_TYPE_SCAFFOLDER_STEP, + TemplateEntityStepV1beta3, } from '@backstage/plugin-scaffolder-common'; import { z } from 'zod'; -import get from 'lodash/get'; -import unset from 'lodash/unset'; -import { TemplateTransform } from './helpers'; -import { - SecureTemplater, - SecureTemplateRenderer, -} from '../lib/templating/SecureTemplater'; - -export const createScaffolderPermissionRule = makeCreatePermissionRule< - TemplateEntityV1beta3, - TemplateTransform, - typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE +export const createScaffolderStepPermissionRule = makeCreatePermissionRule< + TemplateEntityStepV1beta3, + EntitiesSearchFilter, + typeof RESOURCE_TYPE_SCAFFOLDER_STEP >(); -let render: SecureTemplateRenderer; - -export const allowCapabilities = createScaffolderPermissionRule({ - name: 'ALLOW_CAPABILITIES', - resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - description: 'Allow capabilities based on permissions', +const hasTag = createScaffolderStepPermissionRule({ + name: 'HAS_TAG', + resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, + description: 'Match a scaffolder step with the given tag', paramsSchema: z.object({ - capabilities: z.array(z.string()), - templateRef: z.string().optional(), + tag: z.string(), + }), + apply: (resource, { tag }) => { + return resource.metadata?.tags?.includes(tag) ?? false; + }, + toQuery: ({ tag }) => ({ + key: 'metadata.tags', + values: [tag], }), - apply: () => true, - toQuery: - ({ capabilities }) => - template => { - const capabilitiesObj = capabilities.reduce((acc, c) => { - acc[c] = true; - return acc; - }, {} as Record); - - const parametersPath = ['spec', 'parameters']; - const capabilitiesKey = 'backstage:capabilities'; - - if (Array.isArray(template.spec.parameters)) { - template.spec.parameters.forEach((parameter, index) => { - const parameterPath = [...parametersPath, index.toString()]; - stripParams(parameterPath); - if (parameter.properties) { - Object.keys(parameter.properties).forEach(p => { - if (stripParams([...parameterPath, 'properties', p])) { - const requiredProperties = get(template, [ - ...parameterPath, - 'required', - ]); - if (Array.isArray(requiredProperties)) { - requiredProperties.splice(requiredProperties.indexOf(p), 1); - } - } - }); - } - }); - } else { - stripParams(parametersPath); - } - - template.spec.steps.forEach((_p, index) => - stripParams(['spec', 'steps', index.toString()]), - ); - - function stripParams(path: string[]) { - const jsonObject = get(template, path); - - if ( - typeof jsonObject[capabilitiesKey] === 'string' && - render(jsonObject[capabilitiesKey], { - capabilities: capabilitiesObj, - }) !== 'true' - ) { - const parent = get(template, [...path].splice(0, path.length - 1)); - if (Array.isArray(parent)) { - parent.splice(parent.indexOf(jsonObject), 1); - } else { - unset(template, path); - } - - return path[path.length - 1]; - } - return undefined; - } - - return template; - }, }); -SecureTemplater.loadRenderer().then(r => (render = r)); - -export const scaffolderRules = { allowCapabilities }; +export const scaffolderStepRules = { hasTag }; diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index aaba35911e..d83a1e3be5 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -55,13 +55,7 @@ export interface TemplateEntityV1beta3 extends Entity { * A list of steps to be executed in sequence which are defined by the template. These steps are a list of the underlying * javascript action and some optional input parameters that may or may not have been collected from the end user. */ - steps: Array<{ - id?: string; - name?: string; - action: string; - input?: JsonObject; - if?: string | boolean; - }>; + steps: Array; /** * The output is an object where template authors can pull out information from template actions and return them in a known standard way. */ @@ -73,6 +67,20 @@ export interface TemplateEntityV1beta3 extends Entity { }; } +/** + * TODO + */ +export interface TemplateEntityStepV1beta3 extends JsonObject { + id?: string; + name?: string; + action: string; + input?: JsonObject; + if?: string | boolean; + metadata: { + tags?: string[]; + }; +} + const validator = entityKindSchemaValidator(schema); /** diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 4953a27f9e..e4207c96fd 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -26,4 +26,7 @@ export { isTemplateEntityV1beta3, } from './TemplateEntityV1beta3'; export * from './permissions'; -export type { TemplateEntityV1beta3 } from './TemplateEntityV1beta3'; +export type { + TemplateEntityV1beta3, + TemplateEntityStepV1beta3, +} from './TemplateEntityV1beta3'; diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index 578ef09311..bbf465c525 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -16,14 +16,42 @@ import { createPermission } from '@backstage/plugin-permission-common'; -export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-field'; +export const RESOURCE_TYPE_SCAFFOLDER_PARAMETER = 'scaffolder-parameter'; +export const RESOURCE_TYPE_SCAFFOLDER_PROPERTY = 'scaffolder-property'; +export const RESOURCE_TYPE_SCAFFOLDER_STEP = 'scaffolder-step'; -export const templateSchemaExecutePermission = createPermission({ - name: 'scaffolder.template.schema.execute', +export const templateParameterReadPermission = createPermission({ + name: 'scaffolder.template.parameter.read', attributes: { - action: 'create', + action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PARAMETER, }); -export const scaffolderPermissions = [templateSchemaExecutePermission]; +export const templatePropertyReadPermission = createPermission({ + name: 'scaffolder.template.property.read', + attributes: { + action: 'read', + }, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, +}); + +export const templateStepReadPermission = createPermission({ + name: 'scaffolder.template.step.read', + attributes: { + action: 'read', + }, + resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, +}); + +export const scaffolderParameterPermissions = [templateParameterReadPermission]; +export const scaffolderPropertyPermissions = [templatePropertyReadPermission]; +export const scaffolderStepPermissions = [templateStepReadPermission]; + +/** + * TODOs: + * 1. Implement for Parameters & Properties + * 2. What metadata should be included in the template? + * 3. Write tests + * 4. Write documentation + */ diff --git a/template.yaml b/template.yaml index 0bb67735a9..36932eb4a6 100644 --- a/template.yaml +++ b/template.yaml @@ -14,7 +14,6 @@ spec: - owner properties: component_id: - backstage:capabilities: ${{ capabilities.cap1 }} title: Name type: string description: Unique name of the component @@ -44,11 +43,13 @@ spec: - github.com steps: - id: one - backstage:capabilities: ${{ capabilities.cap1 }} name: First log action: debug:log input: message: hello + metadata: + tags: + - example - id: two name: Second log action: debug:log From 133915942a1f99d00a9bc3b49a94b8242af1945c Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 16 Jan 2023 11:35:17 +0100 Subject: [PATCH 397/511] scaffolder: single resource type Signed-off-by: Vincenzo Scamporlino --- packages/backend/src/plugins/permission.ts | 7 +++++-- plugins/scaffolder-common/src/permissions.ts | 16 ++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index 84a102d6be..fdff4018d2 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -30,7 +30,7 @@ import { createScaffolderStepConditionalDecision, scaffolderStepConditions, } from '@backstage/plugin-scaffolder-backend'; -import { RESOURCE_TYPE_SCAFFOLDER_STEP } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_PROPERTY } from '@backstage/plugin-scaffolder-common'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; @@ -43,7 +43,10 @@ class ExamplePermissionPolicy implements PermissionPolicy { * This is an example of how to use the scaffolder step conditions. */ if ( - isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_STEP) + isResourcePermission( + request.permission, + RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + ) ) { return createScaffolderStepConditionalDecision( request.permission, diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index bbf465c525..334eb084b1 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -16,16 +16,14 @@ import { createPermission } from '@backstage/plugin-permission-common'; -export const RESOURCE_TYPE_SCAFFOLDER_PARAMETER = 'scaffolder-parameter'; export const RESOURCE_TYPE_SCAFFOLDER_PROPERTY = 'scaffolder-property'; -export const RESOURCE_TYPE_SCAFFOLDER_STEP = 'scaffolder-step'; export const templateParameterReadPermission = createPermission({ name: 'scaffolder.template.parameter.read', attributes: { action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_PARAMETER, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, }); export const templatePropertyReadPermission = createPermission({ @@ -41,16 +39,18 @@ export const templateStepReadPermission = createPermission({ attributes: { action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, }); -export const scaffolderParameterPermissions = [templateParameterReadPermission]; -export const scaffolderPropertyPermissions = [templatePropertyReadPermission]; -export const scaffolderStepPermissions = [templateStepReadPermission]; +export const scaffolderPermissions = [ + templatePropertyReadPermission, + templateParameterReadPermission, + templateStepReadPermission, +]; /** * TODOs: - * 1. Implement for Parameters & Properties + * 1. ~Implement for Parameters & Properties~ * 2. What metadata should be included in the template? * 3. Write tests * 4. Write documentation From 562611ef56f61c55fbedbb780a84e2e4669d22bc Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 16 Jan 2023 11:36:03 +0100 Subject: [PATCH 398/511] scaffolder: make rule generic Signed-off-by: Vincenzo Scamporlino --- .../scaffolder-backend/src/service/rules.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 5166c86723..0ca83fd5fc 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -14,23 +14,24 @@ * limitations under the License. */ -import { EntitiesSearchFilter } from '@backstage/plugin-catalog-backend'; import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { - RESOURCE_TYPE_SCAFFOLDER_STEP, + RESOURCE_TYPE_SCAFFOLDER_PROPERTY, TemplateEntityStepV1beta3, + TemplateParameter, } from '@backstage/plugin-scaffolder-common'; +import { TemplateProperty } from '@backstage/plugin-scaffolder-common'; import { z } from 'zod'; export const createScaffolderStepPermissionRule = makeCreatePermissionRule< - TemplateEntityStepV1beta3, - EntitiesSearchFilter, - typeof RESOURCE_TYPE_SCAFFOLDER_STEP + TemplateEntityStepV1beta3 | TemplateProperty | TemplateParameter, + {}, + typeof RESOURCE_TYPE_SCAFFOLDER_PROPERTY >(); const hasTag = createScaffolderStepPermissionRule({ name: 'HAS_TAG', - resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, description: 'Match a scaffolder step with the given tag', paramsSchema: z.object({ tag: z.string(), @@ -38,10 +39,7 @@ const hasTag = createScaffolderStepPermissionRule({ apply: (resource, { tag }) => { return resource.metadata?.tags?.includes(tag) ?? false; }, - toQuery: ({ tag }) => ({ - key: 'metadata.tags', - values: [tag], - }), + toQuery: () => ({}), }); export const scaffolderStepRules = { hasTag }; From 031781fb20cc9f962956c3cec3528cc03cd17d4b Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 16 Jan 2023 11:36:53 +0100 Subject: [PATCH 399/511] scaffolder: expose template subtypes Signed-off-by: Vincenzo Scamporlino --- .../src/TemplateEntityV1beta3.ts | 28 ++++++++++++++++--- plugins/scaffolder-common/src/index.ts | 3 ++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index d83a1e3be5..63dae930c2 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -50,7 +50,7 @@ export interface TemplateEntityV1beta3 extends Entity { * to collect user input and validate it against that schema. This can then be used in the `steps` part below to template * variables passed from the user into each action in the template. */ - parameters?: JsonObject | JsonObject[]; + parameters?: TemplateParameter | TemplateParameter[]; /** * A list of steps to be executed in sequence which are defined by the template. These steps are a list of the underlying * javascript action and some optional input parameters that may or may not have been collected from the end user. @@ -76,9 +76,29 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { action: string; input?: JsonObject; if?: string | boolean; - metadata: { - tags?: string[]; - }; + metadata?: TemplateSpecValuesMetadata; +} + +/** + * TODO + */ +export interface TemplateSpecValuesMetadata extends JsonObject { + tags?: string[]; +} + +/** + * TODO + */ +export interface TemplateParameter extends JsonObject { + metadata?: TemplateSpecValuesMetadata; + properties?: { [name: string]: TemplateProperty }; +} + +/** + * TODO + */ +export interface TemplateProperty extends JsonObject { + metadata?: TemplateSpecValuesMetadata; } const validator = entityKindSchemaValidator(schema); diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index e4207c96fd..c418823e12 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -29,4 +29,7 @@ export * from './permissions'; export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, + TemplateParameter, + TemplateProperty, + TemplateSpecValuesMetadata, } from './TemplateEntityV1beta3'; From 2e7d060ef96dc1dfdbd65154be3d6066f23796fb Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 16 Jan 2023 11:37:53 +0100 Subject: [PATCH 400/511] scaffolder: remove conditions wrapper Signed-off-by: Vincenzo Scamporlino --- .../src/service/conditionExports.ts | 31 ++----------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index 2a7c0d382f..2fb0d5d554 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -14,42 +14,17 @@ * limitations under the License. */ -import { RESOURCE_TYPE_SCAFFOLDER_STEP } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_PROPERTY } from '@backstage/plugin-scaffolder-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; import { scaffolderStepRules } from './rules'; -// const { -// conditions: scaffolderTemplateConditions, -// createConditionalDecision: createScaffolderTemplateConditionalDecision, -// } = createConditionExports({ -// pluginId: 'scaffolder', -// resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, -// rules: scaffolderRules, -// }); - -// const { -// conditions: scaffolderPropertyConditions, -// createConditionalDecision: createScaffolderPropertyConditionalDecision, -// } = createConditionExports({ -// pluginId: 'scaffolder', -// resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, -// rules: scaffolderRules, -// }); - const { conditions: scaffolderStepConditions, createConditionalDecision: createScaffolderStepConditionalDecision, } = createConditionExports({ pluginId: 'scaffolder', - resourceType: RESOURCE_TYPE_SCAFFOLDER_STEP, + resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, rules: scaffolderStepRules, }); -export { - // scaffolderTemplateConditions, - // createScaffolderTemplateConditionalDecision, - // scaffolderPropertyConditions, - // createScaffolderPropertyConditionalDecision, - scaffolderStepConditions, - createScaffolderStepConditionalDecision, -}; +export { scaffolderStepConditions, createScaffolderStepConditionalDecision }; From 55c49d2b6c587e9cbfabbbd2ab6618f569033e37 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 16 Jan 2023 11:38:31 +0100 Subject: [PATCH 401/511] scaffolder: authorize parameters and properties Signed-off-by: Vincenzo Scamporlino --- .../scaffolder-backend/src/service/router.ts | 82 +++++++++++++++++-- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index d5a9e17601..660398fbd0 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -32,6 +32,10 @@ import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, + TemplateParameter, + templateParameterReadPermission, + TemplateProperty, + templatePropertyReadPermission, templateStepReadPermission, } from '@backstage/plugin-scaffolder-common'; import express from 'express'; @@ -578,18 +582,82 @@ export async function createRouter( ); } - const authorizeDecision = ( + const [parameterDecision, propertyDecision, stepDecision] = await permissionApi.authorizeConditional( - [{ permission: templateStepReadPermission }], + [ + { permission: templateParameterReadPermission }, + { permission: templatePropertyReadPermission }, + { permission: templateStepReadPermission }, + ], { token }, - ) - )[0]; + ); - if (authorizeDecision.result === AuthorizeResult.DENY) { + // authorize parameters + if (parameterDecision.result === AuthorizeResult.DENY) { + template.spec.parameters = []; + } else if (parameterDecision.result === AuthorizeResult.CONDITIONAL) { + if (Array.isArray(template.spec.parameters)) { + template.spec.parameters = template.spec.parameters.filter(step => + applyConditions(parameterDecision.conditions, step, getRule), + ); + } else { + if ( + template.spec.parameters && + !applyConditions( + parameterDecision.conditions, + template.spec.parameters, + getRule, + ) + ) { + template.spec.parameters = undefined; + } + } + } + + // authorize properties + if (propertyDecision.result === AuthorizeResult.DENY) { + if (Array.isArray(template.spec.parameters)) { + template.spec.parameters.forEach(parameter => { + parameter.properties = {}; + }); + } else { + if (template.spec.parameters) { + template.spec.parameters.properties = {}; + } + } + } else if (propertyDecision.result === AuthorizeResult.CONDITIONAL) { + if (Array.isArray(template.spec.parameters)) { + template.spec.parameters.forEach(parameter => { + parameter.properties = Object.entries( + parameter.properties || {}, + ).reduce>((acc, [key, value]) => { + if (applyConditions(propertyDecision.conditions, value, getRule)) { + acc[key] = value; + } + return acc; + }, {}); + }); + } else { + // TODO extract this to a generic method and use it in the above if block + if (template.spec.parameters) { + template.spec.parameters.properties = Object.entries( + template.spec.parameters.properties || {}, + ).reduce>((acc, [key, value]) => { + if (applyConditions(propertyDecision.conditions, value, getRule)) { + acc[key] = value; + } + return acc; + }, {}); + } + } + } + + // authorize steps + if (stepDecision.result === AuthorizeResult.DENY) { template.spec.steps = []; - } else if (authorizeDecision.result === AuthorizeResult.CONDITIONAL) { + } else if (stepDecision.result === AuthorizeResult.CONDITIONAL) { template.spec.steps = template.spec.steps.filter(step => - applyConditions(authorizeDecision.conditions, step, getRule), + applyConditions(stepDecision.conditions, step, getRule), ); } From 53c0aa00292f491b9c822bf8e83eedf4d3a2bd5b Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 16 Jan 2023 12:52:30 +0000 Subject: [PATCH 402/511] scaffolder: added back in playlist permission handling Signed-off-by: Harry Hogg --- packages/backend/src/plugins/permission.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index fdff4018d2..c3d81a52cf 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -25,6 +25,10 @@ import { PermissionPolicy, PolicyQuery, } from '@backstage/plugin-permission-node'; +import { + DefaultPlaylistPermissionPolicy, + isPlaylistPermission, +} from '@backstage/plugin-playlist-backend'; import { createScaffolderStepConditionalDecision, @@ -35,13 +39,16 @@ import { Router } from 'express'; import { PluginEnvironment } from '../types'; class ExamplePermissionPolicy implements PermissionPolicy { + private playlistPermissionPolicy = new DefaultPlaylistPermissionPolicy(); + async handle( request: PolicyQuery, - _user?: BackstageIdentityResponse, + user?: BackstageIdentityResponse, ): Promise { - /** - * This is an example of how to use the scaffolder step conditions. - */ + if (isPlaylistPermission(request.permission)) { + return this.playlistPermissionPolicy.handle(request, user); + } + if ( isResourcePermission( request.permission, From 2b8ad06250fe2054d910b5fad4ebde999ddb1eac Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 16 Jan 2023 12:56:10 +0000 Subject: [PATCH 403/511] scaffolder: added description to hasTag rule Signed-off-by: Harry Hogg --- plugins/scaffolder-backend/src/service/rules.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 0ca83fd5fc..b9d9e62c1b 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -34,7 +34,7 @@ const hasTag = createScaffolderStepPermissionRule({ resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, description: 'Match a scaffolder step with the given tag', paramsSchema: z.object({ - tag: z.string(), + tag: z.string().describe('Name of the tag to match on'), }), apply: (resource, { tag }) => { return resource.metadata?.tags?.includes(tag) ?? false; From 2b124bc24ad62a8782a9f7321847ea4882640ef5 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 16 Jan 2023 15:05:49 +0000 Subject: [PATCH 404/511] Reworked authorization of conditions to use a single export by combing getRule and applyConditions into createIsAuthorized Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- .../createPermissionIntegrationRouter.ts | 23 +++++++++++++++++- .../permission-node/src/integration/index.ts | 7 +----- .../scaffolder-backend/src/service/router.ts | 24 +++++++------------ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index e3f4b33707..a4f14e6cbc 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -126,7 +126,7 @@ export type MetadataResponse = { rules: MetadataResponseSerializedRule[]; }; -export const applyConditions = ( +const applyConditions = ( criteria: PermissionCriteria>, resource: TResource | undefined, getRule: (name: string) => PermissionRule, @@ -160,6 +160,27 @@ export const applyConditions = ( return rule.apply(resource, criteria.params ?? {}); }; +/** + + * Takes some permission conditions and returns a definitive authorization result + * on the resource to which they apply. + * + * @public + */ +export const createIsAuthorized = < + TResourceType extends string, + TResource, + TQuery, +>( + rules: PermissionRule[], +) => { + const getRule = createGetRule(rules); + return ( + criteria: PermissionCriteria>, + resource: TResource | undefined, + ) => applyConditions(criteria, resource, getRule); +}; + /** * Options for creating a permission integration router specific * for a particular resource type. diff --git a/plugins/permission-node/src/integration/index.ts b/plugins/permission-node/src/integration/index.ts index f3b0edad9b..7702fea95b 100644 --- a/plugins/permission-node/src/integration/index.ts +++ b/plugins/permission-node/src/integration/index.ts @@ -19,9 +19,4 @@ export * from './createConditionExports'; export * from './createConditionTransformer'; export * from './createPermissionIntegrationRouter'; export * from './createPermissionRule'; -export { - createGetRule, - isAndCriteria, - isOrCriteria, - isNotCriteria, -} from './util'; +export { isAndCriteria, isOrCriteria, isNotCriteria } from './util'; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 660398fbd0..6442adbc4b 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -32,7 +32,6 @@ import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, - TemplateParameter, templateParameterReadPermission, TemplateProperty, templatePropertyReadPermission, @@ -63,12 +62,11 @@ import { AuthorizeResult, PermissionEvaluator, } from '@backstage/plugin-permission-common'; -import { - applyConditions, - createGetRule, -} from '@backstage/plugin-permission-node'; +import { createIsAuthorized } from '@backstage/plugin-permission-node'; import { scaffolderStepRules } from './rules'; +const isAuthorized = createIsAuthorized(Object.values(scaffolderStepRules)); + /** * RouterOptions * @@ -266,8 +264,6 @@ export async function createRouter( additionalTemplateGlobals, }); - const getRule = createGetRule(Object.values(scaffolderStepRules)); - router .get( '/v2/templates/:namespace/:kind/:name/parameter-schema', @@ -598,16 +594,12 @@ export async function createRouter( } else if (parameterDecision.result === AuthorizeResult.CONDITIONAL) { if (Array.isArray(template.spec.parameters)) { template.spec.parameters = template.spec.parameters.filter(step => - applyConditions(parameterDecision.conditions, step, getRule), + isAuthorized(parameterDecision.conditions, step), ); } else { if ( template.spec.parameters && - !applyConditions( - parameterDecision.conditions, - template.spec.parameters, - getRule, - ) + !isAuthorized(parameterDecision.conditions, template.spec.parameters) ) { template.spec.parameters = undefined; } @@ -631,7 +623,7 @@ export async function createRouter( parameter.properties = Object.entries( parameter.properties || {}, ).reduce>((acc, [key, value]) => { - if (applyConditions(propertyDecision.conditions, value, getRule)) { + if (isAuthorized(propertyDecision.conditions, value)) { acc[key] = value; } return acc; @@ -643,7 +635,7 @@ export async function createRouter( template.spec.parameters.properties = Object.entries( template.spec.parameters.properties || {}, ).reduce>((acc, [key, value]) => { - if (applyConditions(propertyDecision.conditions, value, getRule)) { + if (isAuthorized(propertyDecision.conditions, value)) { acc[key] = value; } return acc; @@ -657,7 +649,7 @@ export async function createRouter( template.spec.steps = []; } else if (stepDecision.result === AuthorizeResult.CONDITIONAL) { template.spec.steps = template.spec.steps.filter(step => - applyConditions(stepDecision.conditions, step, getRule), + isAuthorized(stepDecision.conditions, step), ); } From 906be330351ffa7b1d1827b4b28659b84efcdd4f Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 16 Jan 2023 15:15:59 +0000 Subject: [PATCH 405/511] Added some todos for cleanup Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- app-config.yaml | 2 ++ template.yaml | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/app-config.yaml b/app-config.yaml index d886d86896..38364d73dc 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -280,6 +280,8 @@ catalog: # Backstage end-to-end tests of TechDocs - type: file target: ../../cypress/e2e-fixture.catalog.info.yaml + + # TODO: Remove once approach is validated on RFC. - type: file target: ../../template.yaml scaffolder: diff --git a/template.yaml b/template.yaml index 36932eb4a6..83273faea6 100644 --- a/template.yaml +++ b/template.yaml @@ -1,3 +1,4 @@ +# TODO: Remove once approach is validated on RFC. apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: @@ -12,12 +13,20 @@ spec: required: - component_id - owner + # Example of annotating a parameter + metadata: + tags: + - example properties: component_id: title: Name type: string description: Unique name of the component ui:field: EntityNamePicker + # Example of annotating a property + metadata: + tags: + - example description: title: Description type: string @@ -47,6 +56,7 @@ spec: action: debug:log input: message: hello + # Example of annotating a step metadata: tags: - example From 2624c1afff8ac2f56ec18e10ecc33f7afaf220d0 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 17 Jan 2023 12:47:27 +0100 Subject: [PATCH 406/511] permissions: rollback default policy Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- packages/backend/src/plugins/permission.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index c3d81a52cf..45368bf2f0 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -18,7 +18,6 @@ import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; import { createRouter } from '@backstage/plugin-permission-backend'; import { AuthorizeResult, - isResourcePermission, PolicyDecision, } from '@backstage/plugin-permission-common'; import { @@ -30,11 +29,6 @@ import { isPlaylistPermission, } from '@backstage/plugin-playlist-backend'; -import { - createScaffolderStepConditionalDecision, - scaffolderStepConditions, -} from '@backstage/plugin-scaffolder-backend'; -import { RESOURCE_TYPE_SCAFFOLDER_PROPERTY } from '@backstage/plugin-scaffolder-common'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; @@ -49,18 +43,6 @@ class ExamplePermissionPolicy implements PermissionPolicy { return this.playlistPermissionPolicy.handle(request, user); } - if ( - isResourcePermission( - request.permission, - RESOURCE_TYPE_SCAFFOLDER_PROPERTY, - ) - ) { - return createScaffolderStepConditionalDecision( - request.permission, - scaffolderStepConditions.hasTag({ tag: 'example' }), - ); - } - return { result: AuthorizeResult.ALLOW, }; From 3e109f452e414a8b4a95e9ddab99dfd4ea0dd8ff Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 17 Jan 2023 12:50:38 +0100 Subject: [PATCH 407/511] scaffolder: rollback template and config Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- app-config.yaml | 5 ---- template.yaml | 67 ------------------------------------------------- 2 files changed, 72 deletions(-) delete mode 100644 template.yaml diff --git a/app-config.yaml b/app-config.yaml index 38364d73dc..385c9c2e0e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -223,7 +223,6 @@ catalog: - System - Domain - Location - - Template processors: ldapOrg: @@ -280,10 +279,6 @@ catalog: # Backstage end-to-end tests of TechDocs - type: file target: ../../cypress/e2e-fixture.catalog.info.yaml - - # TODO: Remove once approach is validated on RFC. - - type: file - target: ../../template.yaml scaffolder: # Use to customize default commit author info used when new components are created # defaultAuthor: diff --git a/template.yaml b/template.yaml deleted file mode 100644 index 83273faea6..0000000000 --- a/template.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# TODO: Remove once approach is validated on RFC. -apiVersion: scaffolder.backstage.io/v1beta3 -kind: Template -metadata: - name: my_custom_template - title: My custom template - description: Just testing -spec: - owner: web@example.com - type: website - parameters: - - title: Provide some simple information - required: - - component_id - - owner - # Example of annotating a parameter - metadata: - tags: - - example - properties: - component_id: - title: Name - type: string - description: Unique name of the component - ui:field: EntityNamePicker - # Example of annotating a property - metadata: - tags: - - example - description: - title: Description - type: string - description: Help others understand what this website is for. - owner: - title: Owner - type: string - description: Owner of the component - ui:field: OwnerPicker - ui:options: - allowedKinds: - - Group - - title: Choose a location - required: - - repoUrl - properties: - repoUrl: - title: Repository Location - type: string - ui:field: RepoUrlPicker - ui:options: - allowedHosts: - - github.com - steps: - - id: one - name: First log - action: debug:log - input: - message: hello - # Example of annotating a step - metadata: - tags: - - example - - id: two - name: Second log - action: debug:log - input: - message: world From faba894d8b4af730f0931858abcfff9e64b6287e Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 17 Jan 2023 12:52:00 +0100 Subject: [PATCH 408/511] scaffolder: rename resource type Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- .../scaffolder-backend/src/service/conditionExports.ts | 10 +++++----- plugins/scaffolder-backend/src/service/rules.ts | 6 +++--- plugins/scaffolder-common/src/permissions.ts | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index 2fb0d5d554..70285c8f5f 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -14,17 +14,17 @@ * limitations under the License. */ -import { RESOURCE_TYPE_SCAFFOLDER_PROPERTY } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; import { scaffolderStepRules } from './rules'; const { - conditions: scaffolderStepConditions, - createConditionalDecision: createScaffolderStepConditionalDecision, + conditions: scaffolderConditions, + createConditionalDecision: createScaffolderConditionalDecision, } = createConditionExports({ pluginId: 'scaffolder', - resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, rules: scaffolderStepRules, }); -export { scaffolderStepConditions, createScaffolderStepConditionalDecision }; +export { scaffolderConditions, createScaffolderConditionalDecision }; diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index b9d9e62c1b..dad0b84097 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -16,7 +16,7 @@ import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { - RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TemplateEntityStepV1beta3, TemplateParameter, } from '@backstage/plugin-scaffolder-common'; @@ -26,12 +26,12 @@ import { z } from 'zod'; export const createScaffolderStepPermissionRule = makeCreatePermissionRule< TemplateEntityStepV1beta3 | TemplateProperty | TemplateParameter, {}, - typeof RESOURCE_TYPE_SCAFFOLDER_PROPERTY + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE >(); const hasTag = createScaffolderStepPermissionRule({ name: 'HAS_TAG', - resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, description: 'Match a scaffolder step with the given tag', paramsSchema: z.object({ tag: z.string().describe('Name of the tag to match on'), diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index 334eb084b1..1117fb268b 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -16,14 +16,14 @@ import { createPermission } from '@backstage/plugin-permission-common'; -export const RESOURCE_TYPE_SCAFFOLDER_PROPERTY = 'scaffolder-property'; +export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-template'; export const templateParameterReadPermission = createPermission({ name: 'scaffolder.template.parameter.read', attributes: { action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); export const templatePropertyReadPermission = createPermission({ @@ -31,7 +31,7 @@ export const templatePropertyReadPermission = createPermission({ attributes: { action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); export const templateStepReadPermission = createPermission({ @@ -39,7 +39,7 @@ export const templateStepReadPermission = createPermission({ attributes: { action: 'read', }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_PROPERTY, + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); export const scaffolderPermissions = [ From a91abdf0618471a090ad26947e2d54ee771cb284 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 17 Jan 2023 15:13:32 +0100 Subject: [PATCH 409/511] chore: cleanup Signed-off-by: Vincenzo Scamporlino --- packages/backend/src/plugins/permission.ts | 1 - plugins/scaffolder-common/src/permissions.ts | 8 -------- 2 files changed, 9 deletions(-) diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index 45368bf2f0..7192a1ddec 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -28,7 +28,6 @@ import { DefaultPlaylistPermissionPolicy, isPlaylistPermission, } from '@backstage/plugin-playlist-backend'; - import { Router } from 'express'; import { PluginEnvironment } from '../types'; diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index 1117fb268b..5b0d7ff00c 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -47,11 +47,3 @@ export const scaffolderPermissions = [ templateParameterReadPermission, templateStepReadPermission, ]; - -/** - * TODOs: - * 1. ~Implement for Parameters & Properties~ - * 2. What metadata should be included in the template? - * 3. Write tests - * 4. Write documentation - */ From 97be4a96ed7707d84f53ededd0a3af2044e1607f Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 30 Jan 2023 14:27:21 +0000 Subject: [PATCH 410/511] Refactored createIsAuthorized to take a decision Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- .../createPermissionIntegrationRouter.ts | 18 +++-- .../scaffolder-backend/src/service/router.ts | 79 ++++--------------- 2 files changed, 26 insertions(+), 71 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index a4f14e6cbc..5b0c2c25f1 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -27,6 +27,7 @@ import { Permission, PermissionCondition, PermissionCriteria, + PolicyDecision, } from '@backstage/plugin-permission-common'; import { PermissionRule } from '../types'; import { @@ -167,18 +168,21 @@ const applyConditions = ( * * @public */ -export const createIsAuthorized = < - TResourceType extends string, - TResource, - TQuery, ->( +export const createIsAuthorized = ( rules: PermissionRule[], ) => { const getRule = createGetRule(rules); + return ( - criteria: PermissionCriteria>, + decision: PolicyDecision, resource: TResource | undefined, - ) => applyConditions(criteria, resource, getRule); + ): boolean => { + if (decision.result === AuthorizeResult.CONDITIONAL) { + return applyConditions(decision.conditions, resource, getRule); + } + + return decision.result === AuthorizeResult.ALLOW; + }; }; /** diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 6442adbc4b..74b3d7a095 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -578,81 +578,32 @@ export async function createRouter( ); } - const [parameterDecision, propertyDecision, stepDecision] = + const [parameterDecision, stepDecision] = await permissionApi.authorizeConditional( [ { permission: templateParameterReadPermission }, - { permission: templatePropertyReadPermission }, { permission: templateStepReadPermission }, ], { token }, ); - // authorize parameters - if (parameterDecision.result === AuthorizeResult.DENY) { - template.spec.parameters = []; - } else if (parameterDecision.result === AuthorizeResult.CONDITIONAL) { - if (Array.isArray(template.spec.parameters)) { - template.spec.parameters = template.spec.parameters.filter(step => - isAuthorized(parameterDecision.conditions, step), - ); - } else { - if ( - template.spec.parameters && - !isAuthorized(parameterDecision.conditions, template.spec.parameters) - ) { - template.spec.parameters = undefined; - } - } - } - - // authorize properties - if (propertyDecision.result === AuthorizeResult.DENY) { - if (Array.isArray(template.spec.parameters)) { - template.spec.parameters.forEach(parameter => { - parameter.properties = {}; - }); - } else { - if (template.spec.parameters) { - template.spec.parameters.properties = {}; - } - } - } else if (propertyDecision.result === AuthorizeResult.CONDITIONAL) { - if (Array.isArray(template.spec.parameters)) { - template.spec.parameters.forEach(parameter => { - parameter.properties = Object.entries( - parameter.properties || {}, - ).reduce>((acc, [key, value]) => { - if (isAuthorized(propertyDecision.conditions, value)) { - acc[key] = value; - } - return acc; - }, {}); - }); - } else { - // TODO extract this to a generic method and use it in the above if block - if (template.spec.parameters) { - template.spec.parameters.properties = Object.entries( - template.spec.parameters.properties || {}, - ).reduce>((acc, [key, value]) => { - if (isAuthorized(propertyDecision.conditions, value)) { - acc[key] = value; - } - return acc; - }, {}); - } - } - } - - // authorize steps - if (stepDecision.result === AuthorizeResult.DENY) { - template.spec.steps = []; - } else if (stepDecision.result === AuthorizeResult.CONDITIONAL) { - template.spec.steps = template.spec.steps.filter(step => - isAuthorized(stepDecision.conditions, step), + // Authorize parameters + if (Array.isArray(template.spec.parameters)) { + template.spec.parameters = template.spec.parameters.filter(step => + isAuthorized(parameterDecision, step), ); + } else if ( + template.spec.parameters && + !isAuthorized(parameterDecision, template.spec.parameters) + ) { + template.spec.parameters = undefined; } + // Authorize steps + template.spec.steps = template.spec.steps.filter(step => + isAuthorized(stepDecision, step), + ); + return template; } From 09e28e2c719c8264d1ccef0ae43d6841792040b1 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 30 Jan 2023 14:28:08 +0000 Subject: [PATCH 411/511] Removed the property scaffolder rule Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/router.ts | 2 -- plugins/scaffolder-common/src/permissions.ts | 9 --------- 2 files changed, 11 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 74b3d7a095..3386bb51b4 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -33,8 +33,6 @@ import { TemplateEntityV1beta3, templateEntityV1beta3Validator, templateParameterReadPermission, - TemplateProperty, - templatePropertyReadPermission, templateStepReadPermission, } from '@backstage/plugin-scaffolder-common'; import express from 'express'; diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index 5b0d7ff00c..b6f2e1ebf6 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -26,14 +26,6 @@ export const templateParameterReadPermission = createPermission({ resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); -export const templatePropertyReadPermission = createPermission({ - name: 'scaffolder.template.property.read', - attributes: { - action: 'read', - }, - resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, -}); - export const templateStepReadPermission = createPermission({ name: 'scaffolder.template.step.read', attributes: { @@ -43,7 +35,6 @@ export const templateStepReadPermission = createPermission({ }); export const scaffolderPermissions = [ - templatePropertyReadPermission, templateParameterReadPermission, templateStepReadPermission, ]; From e2559f8b1ecd0567df29f3e8791005521209ccf8 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Feb 2023 11:08:45 +0100 Subject: [PATCH 412/511] scaffolder: rename metadata to accessControl Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/rules.ts | 5 ++--- .../src/TemplateEntityV1beta3.ts | 15 ++++----------- plugins/scaffolder-common/src/index.ts | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index dad0b84097..85bcca3e05 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -20,11 +20,10 @@ import { TemplateEntityStepV1beta3, TemplateParameter, } from '@backstage/plugin-scaffolder-common'; -import { TemplateProperty } from '@backstage/plugin-scaffolder-common'; import { z } from 'zod'; export const createScaffolderStepPermissionRule = makeCreatePermissionRule< - TemplateEntityStepV1beta3 | TemplateProperty | TemplateParameter, + TemplateEntityStepV1beta3 | TemplateParameter, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE >(); @@ -37,7 +36,7 @@ const hasTag = createScaffolderStepPermissionRule({ tag: z.string().describe('Name of the tag to match on'), }), apply: (resource, { tag }) => { - return resource.metadata?.tags?.includes(tag) ?? false; + return resource['backstage:accessControl']?.tags?.includes(tag) ?? false; }, toQuery: () => ({}), }); diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 63dae930c2..f8c47c7881 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -76,13 +76,13 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { action: string; input?: JsonObject; if?: string | boolean; - metadata?: TemplateSpecValuesMetadata; + 'backstage:accessControl'?: TemplateAccessControl; } /** * TODO */ -export interface TemplateSpecValuesMetadata extends JsonObject { +export interface TemplateAccessControl extends JsonObject { tags?: string[]; } @@ -90,15 +90,8 @@ export interface TemplateSpecValuesMetadata extends JsonObject { * TODO */ export interface TemplateParameter extends JsonObject { - metadata?: TemplateSpecValuesMetadata; - properties?: { [name: string]: TemplateProperty }; -} - -/** - * TODO - */ -export interface TemplateProperty extends JsonObject { - metadata?: TemplateSpecValuesMetadata; + 'backstage:accessControl'?: TemplateAccessControl; + properties?: { [name: string]: JsonObject }; } const validator = entityKindSchemaValidator(schema); diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index c418823e12..ec84b0e022 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -31,5 +31,5 @@ export type { TemplateEntityStepV1beta3, TemplateParameter, TemplateProperty, - TemplateSpecValuesMetadata, + TemplateAccessControl as TemplateSpecValuesMetadata, } from './TemplateEntityV1beta3'; From a16166c24f477082555233466f8a8858d422256d Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Feb 2023 11:20:38 +0100 Subject: [PATCH 413/511] scaffolder: cleanup types Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/router.ts | 5 +---- plugins/scaffolder-common/src/index.ts | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 3386bb51b4..fc410ed634 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -56,10 +56,7 @@ import { IdentityApiGetIdentityRequest, } from '@backstage/plugin-auth-node'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; -import { - AuthorizeResult, - PermissionEvaluator, -} from '@backstage/plugin-permission-common'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { createIsAuthorized } from '@backstage/plugin-permission-node'; import { scaffolderStepRules } from './rules'; diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index ec84b0e022..14f89c2bc9 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -30,6 +30,5 @@ export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, TemplateParameter, - TemplateProperty, TemplateAccessControl as TemplateSpecValuesMetadata, } from './TemplateEntityV1beta3'; From 66935d8c315f2b28f80d7724c4b4e012dc574b2a Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Feb 2023 11:21:51 +0100 Subject: [PATCH 414/511] scaffolder: pass permissions dependency Co-authored-by: Harry Hogg Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/ScaffolderPlugin.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts index 182bb60223..97abf41828 100644 --- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts +++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts @@ -94,6 +94,7 @@ export const scaffolderPlugin = createBackendPlugin( database, httpRouter, catalogClient, + permissions, }) { const { additionalTemplateFilters, @@ -131,6 +132,7 @@ export const scaffolderPlugin = createBackendPlugin( taskWorkers, additionalTemplateFilters, additionalTemplateGlobals, + permissionApi: permissions, }); httpRouter.use(router); }, From b79dee1cf8240f8ad0cbebfef9f0410440a27771 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Feb 2023 14:55:45 +0100 Subject: [PATCH 415/511] permission-node: test createIsAuthorized Signed-off-by: Vincenzo Scamporlino --- .../createPermissionIntegrationRouter.test.ts | 80 ++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 1a7462665e..e7091e7936 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -25,6 +25,7 @@ import { z } from 'zod'; import { createPermissionIntegrationRouter, CreatePermissionIntegrationRouterResourceOptions, + createIsAuthorized, } from './createPermissionIntegrationRouter'; import { createPermissionRule } from './createPermissionRule'; @@ -33,6 +34,9 @@ const testPermission: Permission = createPermission({ attributes: {}, }); +const mockTestRule1Apply = jest + .fn() + .mockImplementation((_resource: any, _params) => true); const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', @@ -41,15 +45,18 @@ const testRule1 = createPermissionRule({ foo: z.string(), bar: z.number().describe('bar'), }), - apply: (_resource: any, _params) => true, + apply: mockTestRule1Apply, toQuery: _params => ({}), }); +const mockTestRule2Apply = jest + .fn() + .mockImplementation((_resource: any) => false); const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - apply: (_resource: any) => false, + apply: mockTestRule2Apply, toQuery: () => ({}), }); @@ -625,3 +632,72 @@ describe('createPermissionIntegrationRouter', () => { }); }); }); + +describe('createIsAuthorized', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should return true in case of allowed decision', () => { + const isAuthorized = createIsAuthorized([testRule1, testRule2]); + expect( + isAuthorized( + { + result: AuthorizeResult.ALLOW, + }, + {}, + ), + ).toBe(true); + + expect(mockTestRule1Apply).not.toHaveBeenCalled(); + expect(mockTestRule2Apply).not.toHaveBeenCalled(); + }); + it('should return false in case of denied decision', () => { + const isAuthorized = createIsAuthorized([testRule1, testRule2]); + expect( + isAuthorized( + { + result: AuthorizeResult.DENY, + }, + {}, + ), + ).toBe(false); + + expect(mockTestRule1Apply).not.toHaveBeenCalled(); + expect(mockTestRule2Apply).not.toHaveBeenCalled(); + }); + + it('should apply conditions to a resource in case of conditional decision', () => { + const isAuthorized = createIsAuthorized([testRule1, testRule2]); + expect( + isAuthorized( + { + pluginId: 'plugin', + resourceType: 'test-resource', + result: AuthorizeResult.CONDITIONAL, + conditions: { + allOf: [ + { + rule: 'test-rule-1', + resourceType: 'test-resource', + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-2', + resourceType: 'test-resource', + params: {}, + }, + ], + }, + }, + {}, + ), + ).toBe(false); + + expect(mockTestRule1Apply).toHaveBeenCalledTimes(1); + expect(mockTestRule2Apply).toHaveBeenCalledTimes(1); + }); +}); From 8dbacc222833e8c3abe08a0babde9e430b21c8fd Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Feb 2023 14:56:05 +0100 Subject: [PATCH 416/511] scaffolder-backend: test hasTag rule Signed-off-by: Vincenzo Scamporlino --- .../src/service/rules.test.ts | 81 +++++++++++++++++++ .../scaffolder-backend/src/service/rules.ts | 6 +- 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 plugins/scaffolder-backend/src/service/rules.test.ts diff --git a/plugins/scaffolder-backend/src/service/rules.test.ts b/plugins/scaffolder-backend/src/service/rules.test.ts new file mode 100644 index 0000000000..0f6f4851b4 --- /dev/null +++ b/plugins/scaffolder-backend/src/service/rules.test.ts @@ -0,0 +1,81 @@ +/* + * Copyright 2023 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 { hasTag } from './rules'; + +describe('hasTag', () => { + describe('apply', () => { + it('returns false when the tag is not present', () => { + expect( + hasTag.apply( + { + 'backstage:accessControl': { + tags: ['foo', 'bar'], + }, + }, + { + tag: 'baz', + }, + ), + ).toEqual(false); + }); + + it('returns false when accessControl is missing', () => { + expect( + hasTag.apply( + {}, + { + tag: 'baz', + }, + ), + ).toEqual(false); + }); + + it('returns false when tags is an empty array', () => { + expect( + hasTag.apply( + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + 'backstage:accessControl': { + tags: [], + }, + }, + }, + { + tag: 'baz', + }, + ), + ).toEqual(false); + }); + + it('returns true when the tag is present', () => { + expect( + hasTag.apply( + { + 'backstage:accessControl': { + tags: ['foo', 'bar'], + }, + }, + { + tag: 'bar', + }, + ), + ).toEqual(true); + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 85bcca3e05..2dcf82dc09 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -22,16 +22,16 @@ import { } from '@backstage/plugin-scaffolder-common'; import { z } from 'zod'; -export const createScaffolderStepPermissionRule = makeCreatePermissionRule< +export const createScaffolderPermissionRule = makeCreatePermissionRule< TemplateEntityStepV1beta3 | TemplateParameter, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE >(); -const hasTag = createScaffolderStepPermissionRule({ +export const hasTag = createScaffolderPermissionRule({ name: 'HAS_TAG', resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - description: 'Match a scaffolder step with the given tag', + description: `Match parameters or steps with the given tag`, paramsSchema: z.object({ tag: z.string().describe('Name of the tag to match on'), }), From 47e5d7712ab301c9359b57406a5aa05e05fde7f9 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 2 Feb 2023 14:58:03 +0000 Subject: [PATCH 417/511] Fixed older router tests Signed-off-by: Harry Hogg --- .../src/service/router.test.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index 6ebe988e9f..a7d1862f7a 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -44,7 +44,10 @@ import { IdentityApiGetIdentityRequest, BackstageIdentityResponse, } from '@backstage/plugin-auth-node'; -import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { + AuthorizeResult, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; const mockAccess = jest.fn(); @@ -142,7 +145,14 @@ describe('createRouter', () => { const permissionApi: PermissionEvaluator = { authorize: jest.fn(), - authorizeConditional: jest.fn(), + authorizeConditional: jest.fn().mockResolvedValue([ + { + result: AuthorizeResult.ALLOW, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]), }; jest.spyOn(taskBroker, 'dispatch'); @@ -753,7 +763,14 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ const permissionApi: PermissionEvaluator = { authorize: jest.fn(), - authorizeConditional: jest.fn(), + authorizeConditional: jest.fn().mockResolvedValue([ + { + result: AuthorizeResult.ALLOW, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]), }; const router = await createRouter({ From 6663e57fa7116ff0803fa5f524017facc3af52c3 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 3 Feb 2023 10:44:10 +0000 Subject: [PATCH 418/511] Added tests to check authorized template on get and put endpoint Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- .../src/service/router.test.ts | 188 +++++++++++++++--- .../scaffolder-backend/src/service/router.ts | 1 + 2 files changed, 157 insertions(+), 32 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index a7d1862f7a..2bf9203056 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -89,8 +89,12 @@ describe('createRouter', () => { let loggerSpy: jest.SpyInstance; let taskBroker: TaskBroker; const catalogClient = { getEntityByRef: jest.fn() } as unknown as CatalogApi; + const permissionApi = { + authorize: jest.fn(), + authorizeConditional: jest.fn(), + } as unknown as PermissionEvaluator; - const mockTemplate: TemplateEntityV1beta3 = { + const getMockTemplate = (): TemplateEntityV1beta3 => ({ apiVersion: 'scaffolder.backstage.io/v1beta3', kind: 'Template', metadata: { @@ -117,7 +121,7 @@ describe('createRouter', () => { }, }, }, - }; + }); const mockUser: UserEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -143,18 +147,6 @@ describe('createRouter', () => { }); taskBroker = new StorageTaskBroker(databaseTaskStore, logger); - const permissionApi: PermissionEvaluator = { - authorize: jest.fn(), - authorizeConditional: jest.fn().mockResolvedValue([ - { - result: AuthorizeResult.ALLOW, - }, - { - result: AuthorizeResult.ALLOW, - }, - ]), - }; - jest.spyOn(taskBroker, 'dispatch'); jest.spyOn(taskBroker, 'get'); jest.spyOn(taskBroker, 'list'); @@ -177,15 +169,27 @@ describe('createRouter', () => { .mockImplementation(async ref => { const { kind } = parseEntityRef(ref); - if (kind === 'template') { - return mockTemplate; + if (kind.toLocaleLowerCase() === 'template') { + return getMockTemplate(); } - if (kind === 'user') { + if (kind.toLocaleLowerCase() === 'user') { return mockUser; } + throw new Error(`no mock found for kind: ${kind}`); }); + + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementation(async () => [ + { + result: AuthorizeResult.ALLOW, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]); }); afterEach(() => { @@ -246,6 +250,7 @@ describe('createRouter', () => { taskBroker.dispatch as jest.Mocked['dispatch']; const mockToken = 'blob.eyJzdWIiOiJ1c2VyOmRlZmF1bHQvZ3Vlc3QiLCJuYW1lIjoiSm9obiBEb2UifQ.blob'; + const mockTemplate = getMockTemplate(); await request(app) .post('/v2/tasks') @@ -301,6 +306,7 @@ describe('createRouter', () => { const broker = taskBroker.dispatch as jest.Mocked['dispatch']; const mockToken = 'blob.eyJzdWIiOiIiLCJuYW1lIjoiSm9obiBEb2UifQ.blob'; + const mockTemplate = getMockTemplate(); await request(app) .post('/v2/tasks') @@ -730,6 +736,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ }); }); }); + describe('providing an identity api', () => { beforeEach(async () => { const logger = getVoidLogger(); @@ -761,18 +768,6 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ }, ); - const permissionApi: PermissionEvaluator = { - authorize: jest.fn(), - authorizeConditional: jest.fn().mockResolvedValue([ - { - result: AuthorizeResult.ALLOW, - }, - { - result: AuthorizeResult.ALLOW, - }, - ]), - }; - const router = await createRouter({ logger: logger, config: new ConfigReader({}), @@ -790,15 +785,26 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ .mockImplementation(async ref => { const { kind } = parseEntityRef(ref); - if (kind === 'template') { - return mockTemplate; + if (kind.toLocaleLowerCase() === 'template') { + return getMockTemplate(); } - if (kind === 'user') { + if (kind.toLocaleLowerCase() === 'user') { return mockUser; } throw new Error(`no mock found for kind: ${kind}`); }); + + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementation(async () => [ + { + result: AuthorizeResult.ALLOW, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]); }); afterEach(() => { @@ -814,6 +820,62 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ }); }); + describe('GET /v2/templates/:namespace/:kind/:name/parameter-schema', () => { + it('returns the parameter schema', async () => { + const response = await request(app) + .get( + '/v2/templates/default/Template/create-react-app-template/parameter-schema', + ) + .send(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + title: 'Create React App Template', + description: 'Create a new CRA website project', + steps: [ + { + title: 'Please enter the following information', + schema: { + required: ['required'], + type: 'object', + properties: { + required: { + description: 'Required parameter', + type: 'string', + }, + }, + }, + }, + ], + }); + }); + + it('filters parameters that the user is not authorized to see', async () => { + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementationOnce(async () => [ + { + result: AuthorizeResult.DENY, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]); + const response = await request(app) + .get( + '/v2/templates/default/Template/create-react-app-template/parameter-schema', + ) + .send(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + title: 'Create React App Template', + description: 'Create a new CRA website project', + steps: [], + }); + }); + }); + describe('POST /v2/tasks', () => { it('rejects template values which do not match the template schema definition', async () => { const response = await request(app) @@ -831,6 +893,67 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ expect(response.status).toEqual(400); }); + it('filters steps that the user is not authorized to see', async () => { + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementation(async () => [ + { + result: AuthorizeResult.ALLOW, + }, + { + result: AuthorizeResult.DENY, + }, + ]); + + const broker = + taskBroker.dispatch as jest.Mocked['dispatch']; + const mockTemplate = getMockTemplate(); + + await request(app) + .post('/v2/tasks') + .send({ + templateRef: stringifyEntityRef({ + kind: 'template', + name: 'create-react-app-template', + }), + values: { + required: 'required-value', + }, + }); + expect(broker).toHaveBeenCalledWith( + expect.objectContaining({ + createdBy: 'user:default/guest', + secrets: { + backstageToken: 'token', + }, + + spec: { + apiVersion: mockTemplate.apiVersion, + steps: [], + output: mockTemplate.spec.output ?? {}, + parameters: { + required: 'required-value', + }, + user: { + entity: mockUser, + ref: 'user:default/guest', + }, + templateInfo: { + entityRef: stringifyEntityRef({ + kind: 'Template', + namespace: 'Default', + name: mockTemplate.metadata?.name, + }), + baseUrl: 'https://dev.azure.com', + entity: { + metadata: mockTemplate.metadata, + }, + }, + }, + }), + ); + }); + it('return the template id', async () => { const broker = taskBroker.dispatch as jest.Mocked['dispatch']; @@ -857,6 +980,7 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ it('should call the broker with a correct spec', async () => { const broker = taskBroker.dispatch as jest.Mocked['dispatch']; + const mockTemplate = getMockTemplate(); await request(app) .post('/v2/tasks') diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index fc410ed634..6bd0b93cc9 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -325,6 +325,7 @@ export async function createRouter( for (const parameters of [template.spec.parameters ?? []].flat()) { const result = validate(values, parameters); + if (!result.valid) { res.status(400).json({ errors: result.errors }); return; From 7fc6227c14255470965920cd017be807c0278664 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 3 Feb 2023 10:47:48 +0000 Subject: [PATCH 419/511] Updated the backend template to pass permissionApi into scaffolder Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- .../default-app/packages/backend/src/plugins/scaffolder.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts index ef46f07870..fd424a3257 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts @@ -17,5 +17,6 @@ export default async function createPlugin( reader: env.reader, catalogClient, identity: env.identity, + permissionApi: env.permissions, }); } From 691ef9a4dad31791bbd877e503685ca89ff3566f Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 3 Feb 2023 12:58:08 +0000 Subject: [PATCH 420/511] Updated scaffolder-common api-reports Signed-off-by: Harry Hogg --- plugins/scaffolder-common/api-report.md | 55 ++++++++++++++++--- .../src/TemplateEntityV1beta3.ts | 24 +++++--- plugins/scaffolder-common/src/permissions.ts | 29 ++++++++++ 3 files changed, 91 insertions(+), 17 deletions(-) diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index fb21ac450f..10e1b09ce6 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -8,8 +8,15 @@ import type { EntityMeta } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; import type { JsonValue } from '@backstage/types'; import { KindValidator } from '@backstage/catalog-model'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; import type { UserEntity } from '@backstage/catalog-model'; +// @alpha +export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-template'; + +// @alpha +export const scaffolderPermissions: ResourcePermission<'scaffolder-template'>[]; + // @public export const isTemplateEntityV1beta3: ( entity: Entity, @@ -42,20 +49,30 @@ export interface TaskStep { name: string; } +// @public +export interface TemplateEntityStepV1beta3 extends JsonObject { + // (undocumented) + 'backstage:accessControl'?: TemplateSpecValuesMetadata; + // (undocumented) + action: string; + // (undocumented) + id?: string; + // (undocumented) + if?: string | boolean; + // (undocumented) + input?: JsonObject; + // (undocumented) + name?: string; +} + // @public export interface TemplateEntityV1beta3 extends Entity { apiVersion: 'scaffolder.backstage.io/v1beta3'; kind: 'Template'; spec: { type: string; - parameters?: JsonObject | JsonObject[]; - steps: Array<{ - id?: string; - name?: string; - action: string; - input?: JsonObject; - if?: string | boolean; - }>; + parameters?: TemplateParameter | TemplateParameter[]; + steps: Array; output?: { [name: string]: string; }; @@ -74,4 +91,26 @@ export type TemplateInfo = { metadata: EntityMeta; }; }; + +// @public +export interface TemplateParameter extends JsonObject { + // (undocumented) + 'backstage:accessControl'?: TemplateSpecValuesMetadata; + // (undocumented) + properties?: { + [name: string]: JsonObject; + }; +} + +// @alpha +export const templateParameterReadPermission: ResourcePermission<'scaffolder-template'>; + +// @public +export interface TemplateSpecValuesMetadata extends JsonObject { + // (undocumented) + tags?: string[]; +} + +// @alpha +export const templateStepReadPermission: ResourcePermission<'scaffolder-template'>; ``` diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index f8c47c7881..99ffdcb7c2 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -68,7 +68,9 @@ export interface TemplateEntityV1beta3 extends Entity { } /** - * TODO + * Step that is part of a Template Entity. + * + * @public */ export interface TemplateEntityStepV1beta3 extends JsonObject { id?: string; @@ -80,20 +82,24 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { } /** - * TODO - */ -export interface TemplateAccessControl extends JsonObject { - tags?: string[]; -} - -/** - * TODO + * Parameter that is part of a Template Entity. + * + * @public */ export interface TemplateParameter extends JsonObject { 'backstage:accessControl'?: TemplateAccessControl; properties?: { [name: string]: JsonObject }; } +/** + * Access control properties for parts of a template. + * + * @public + */ +export interface TemplateAccessControl extends JsonObject { + tags?: string[]; +} + const validator = entityKindSchemaValidator(schema); /** diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index b6f2e1ebf6..858430eaf3 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -16,8 +16,23 @@ import { createPermission } from '@backstage/plugin-permission-common'; +/** + * Permission resource type which corresponds to a scaffolder templates. + * + * @alpha + */ export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-template'; +/** + * This permission is used to authorize actions that involve reading + * one or more parameters from a template. + * + * If this permission is not authorized, it will appear that the + * parameter does not exist in the template — both in the frontend + * and in API responses. + * + * @alpha + */ export const templateParameterReadPermission = createPermission({ name: 'scaffolder.template.parameter.read', attributes: { @@ -26,6 +41,16 @@ export const templateParameterReadPermission = createPermission({ resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); +/** + * This permission is used to authorize actions that involve reading + * one or more steps from a template. + * + * If this permission is not authorized, it will appear that the + * step does not exist in the template — both in the frontend + * and in API responses. Steps will also not be executed. + * + * @alpha + */ export const templateStepReadPermission = createPermission({ name: 'scaffolder.template.step.read', attributes: { @@ -34,6 +59,10 @@ export const templateStepReadPermission = createPermission({ resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, }); +/** + * List of all the scaffolder permissions + * @alpha + */ export const scaffolderPermissions = [ templateParameterReadPermission, templateStepReadPermission, From aac120c30d7053fce2bc34dda637964bdbb5c1c7 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 3 Feb 2023 13:01:32 +0000 Subject: [PATCH 421/511] Updated permission-node api-reports Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index f89ff0a8d5..6af78fcebe 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -111,6 +111,11 @@ export const createConditionTransformer: < permissionRules: [...TRules], ) => ConditionTransformer; +// @public +export const createIsAuthorized: ( + rules: PermissionRule[], +) => (decision: PolicyDecision, resource: TResource | undefined) => boolean; + // @public export function createPermissionIntegrationRouter< TResourceType extends string, From 3c2d54e9fb0514bb9d944b674be690a6ecdaabf6 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 3 Feb 2023 13:10:50 +0000 Subject: [PATCH 422/511] Updated scaffolder-backend api-reports Signed-off-by: Harry Hogg --- plugins/scaffolder-backend/api-report.md | 32 +++++++++++++ .../src/service/conditionExports.ts | 47 +++++++++++++++++-- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index f0eb714ab3..b4f7a6ee73 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -9,6 +9,8 @@ import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-n import { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; +import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; import { Duration } from 'luxon'; @@ -24,8 +26,14 @@ import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { Observable } from '@backstage/types'; import { Octokit } from 'octokit'; +import { PermissionCondition } from '@backstage/plugin-permission-common'; +import { PermissionCriteria } from '@backstage/plugin-permission-common'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; @@ -35,6 +43,8 @@ import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateAction as TemplateAction_2 } from '@backstage/plugin-scaffolder-node'; import { TemplateActionOptions } from '@backstage/plugin-scaffolder-node'; +import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { TemplateParameter } from '@backstage/plugin-scaffolder-common'; import { UrlReader } from '@backstage/backend-common'; import { Writable } from 'stream'; import { ZodType } from 'zod'; @@ -518,6 +528,14 @@ export const createPublishGitlabMergeRequestAction: (options: { // @public export function createRouter(options: RouterOptions): Promise; +// @alpha +export const createScaffolderConditionalDecision: ( + permission: ResourcePermission<'scaffolder-template'>, + conditions: PermissionCriteria< + PermissionCondition<'scaffolder-template', PermissionRuleParams> + >, +) => ConditionalPolicyDecision; + // @public @deprecated (undocumented) export const createTemplateAction: < TParams, @@ -656,6 +674,8 @@ export interface RouterOptions { // (undocumented) logger: Logger; // (undocumented) + permissionApi: PermissionEvaluator; + // (undocumented) reader: UrlReader; // (undocumented) scheduler?: PluginTaskScheduler; @@ -673,6 +693,18 @@ export type RunCommandOptions = { logStream?: Writable; }; +// @alpha +export const scaffolderConditions: Conditions<{ + hasTag: PermissionRule< + TemplateParameter | TemplateEntityStepV1beta3, + {}, + 'scaffolder-template', + { + tag: string; + } + >; +}>; + // @public (undocumented) export class ScaffolderEntitiesProcessor implements CatalogProcessor { // (undocumented) diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index 70285c8f5f..240cbaf858 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -18,13 +18,50 @@ import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder- import { createConditionExports } from '@backstage/plugin-permission-node'; import { scaffolderStepRules } from './rules'; -const { - conditions: scaffolderConditions, - createConditionalDecision: createScaffolderConditionalDecision, -} = createConditionExports({ +const { conditions, createConditionalDecision } = createConditionExports({ pluginId: 'scaffolder', resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, rules: scaffolderStepRules, }); -export { scaffolderConditions, createScaffolderConditionalDecision }; +/** + * These conditions are used when creating conditional decisions for scaffolder + * templates that are returned by authorization policies. + * + * @alpha + */ +export const scaffolderConditions = conditions; + +/** + * `createScaffolderConditionalDecision` can be used when authoring policies to + * create conditional decisions. It requires a permission of type + * `ResourcePermission<'scaffolder-template'>` to be passed as the first parameter. + * It's recommended that you use the provided `isResourcePermission` and + * `isPermission` helper methods to narrow the type of the permission passed to + * the handle method as shown below. + * + * ``` + * // MyAuthorizationPolicy.ts + * ... + * import { createScaffolderPolicyDecision } from '@backstage/plugin-scaffolder-backend'; + * import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; + * + * class MyAuthorizationPolicy implements PermissionPolicy { + * async handle(request, user) { + * ... + * + * if (isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE)) { + * return createScaffolderConditionalDecision( + * request.permission, + * { anyOf: [...insert conditions here...] } + * ); + * } + * + * ... + * } + * + * ``` + * + * @alpha + */ +export const createScaffolderConditionalDecision = createConditionalDecision; From 1f03603d8d2e74fe245ceeb7c3131b53dc4bc5b2 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 13 Feb 2023 15:17:52 +0000 Subject: [PATCH 423/511] Renamed 'scaffolderStepRules' to 'scaffolderTemplateRules' Signed-off-by: Harry Hogg Co-authored-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/conditionExports.ts | 4 ++-- plugins/scaffolder-backend/src/service/router.ts | 4 ++-- plugins/scaffolder-backend/src/service/rules.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index 240cbaf858..1a36b4d7f3 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -16,12 +16,12 @@ import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; -import { scaffolderStepRules } from './rules'; +import { scaffolderTemplateRules } from './rules'; const { conditions, createConditionalDecision } = createConditionExports({ pluginId: 'scaffolder', resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - rules: scaffolderStepRules, + rules: scaffolderTemplateRules, }); /** diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 6bd0b93cc9..0a0c45653d 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -58,9 +58,9 @@ import { import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { createIsAuthorized } from '@backstage/plugin-permission-node'; -import { scaffolderStepRules } from './rules'; +import { scaffolderTemplateRules } from './rules'; -const isAuthorized = createIsAuthorized(Object.values(scaffolderStepRules)); +const isAuthorized = createIsAuthorized(Object.values(scaffolderTemplateRules)); /** * RouterOptions diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 2dcf82dc09..0eb012acf3 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -41,4 +41,4 @@ export const hasTag = createScaffolderPermissionRule({ toQuery: () => ({}), }); -export const scaffolderStepRules = { hasTag }; +export const scaffolderTemplateRules = { hasTag }; From 06f58a20f97fe1d960b1c7168e5e3033cb664400 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 27 Feb 2023 16:41:55 +0100 Subject: [PATCH 424/511] scaffolder: accessControl to permissions Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/rules.test.ts | 8 ++++---- plugins/scaffolder-backend/src/service/rules.ts | 2 +- plugins/scaffolder-common/api-report.md | 4 ++-- plugins/scaffolder-common/src/TemplateEntityV1beta3.ts | 6 +++--- plugins/scaffolder-common/src/index.ts | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/rules.test.ts b/plugins/scaffolder-backend/src/service/rules.test.ts index 0f6f4851b4..7d8e0eb445 100644 --- a/plugins/scaffolder-backend/src/service/rules.test.ts +++ b/plugins/scaffolder-backend/src/service/rules.test.ts @@ -22,7 +22,7 @@ describe('hasTag', () => { expect( hasTag.apply( { - 'backstage:accessControl': { + 'backstage:permissions': { tags: ['foo', 'bar'], }, }, @@ -33,7 +33,7 @@ describe('hasTag', () => { ).toEqual(false); }); - it('returns false when accessControl is missing', () => { + it('returns false when backstage:permissions is missing', () => { expect( hasTag.apply( {}, @@ -51,7 +51,7 @@ describe('hasTag', () => { apiVersion: 'backstage.io/v1alpha1', kind: 'Component', metadata: { - 'backstage:accessControl': { + 'backstage:permissions': { tags: [], }, }, @@ -67,7 +67,7 @@ describe('hasTag', () => { expect( hasTag.apply( { - 'backstage:accessControl': { + 'backstage:permissions': { tags: ['foo', 'bar'], }, }, diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 0eb012acf3..ba91b18bf5 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -36,7 +36,7 @@ export const hasTag = createScaffolderPermissionRule({ tag: z.string().describe('Name of the tag to match on'), }), apply: (resource, { tag }) => { - return resource['backstage:accessControl']?.tags?.includes(tag) ?? false; + return resource['backstage:permissions']?.tags?.includes(tag) ?? false; }, toQuery: () => ({}), }); diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index 10e1b09ce6..aba929228f 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -52,7 +52,7 @@ export interface TaskStep { // @public export interface TemplateEntityStepV1beta3 extends JsonObject { // (undocumented) - 'backstage:accessControl'?: TemplateSpecValuesMetadata; + 'backstage:permissions'?: TemplateSpecValuesMetadata; // (undocumented) action: string; // (undocumented) @@ -95,7 +95,7 @@ export type TemplateInfo = { // @public export interface TemplateParameter extends JsonObject { // (undocumented) - 'backstage:accessControl'?: TemplateSpecValuesMetadata; + 'backstage:permissions'?: TemplateSpecValuesMetadata; // (undocumented) properties?: { [name: string]: JsonObject; diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 99ffdcb7c2..790a0e4409 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -78,7 +78,7 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { action: string; input?: JsonObject; if?: string | boolean; - 'backstage:accessControl'?: TemplateAccessControl; + 'backstage:permissions'?: TemplatePermissions; } /** @@ -87,7 +87,7 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { * @public */ export interface TemplateParameter extends JsonObject { - 'backstage:accessControl'?: TemplateAccessControl; + 'backstage:permissions'?: TemplatePermissions; properties?: { [name: string]: JsonObject }; } @@ -96,7 +96,7 @@ export interface TemplateParameter extends JsonObject { * * @public */ -export interface TemplateAccessControl extends JsonObject { +export interface TemplatePermissions extends JsonObject { tags?: string[]; } diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 14f89c2bc9..1b154f9ba7 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -30,5 +30,5 @@ export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, TemplateParameter, - TemplateAccessControl as TemplateSpecValuesMetadata, + TemplatePermissions as TemplateSpecValuesMetadata, } from './TemplateEntityV1beta3'; From dcbd264860256e475a5be19cbc338ad64d47b4ba Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Mar 2023 13:55:21 +0100 Subject: [PATCH 425/511] scaffolder-backend: mark rules utilities as alpha Signed-off-by: Vincenzo Scamporlino --- .../scaffolder-backend/alpha-api-report.md | 29 +++++++++++++++++++ plugins/scaffolder-backend/api-report.md | 29 ------------------- plugins/scaffolder-backend/src/alpha.ts | 1 + plugins/scaffolder-backend/src/index.ts | 1 - 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 3199444c6b..208714a266 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -4,14 +4,43 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; +import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; +import { Conditions } from '@backstage/plugin-permission-node'; +import { PermissionCondition } from '@backstage/plugin-permission-common'; +import { PermissionCriteria } from '@backstage/plugin-permission-common'; +import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; +import { ResourcePermission } from '@backstage/plugin-permission-common'; import { TaskBroker } from '@backstage/plugin-scaffolder-backend'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateFilter } from '@backstage/plugin-scaffolder-backend'; import { TemplateGlobal } from '@backstage/plugin-scaffolder-backend'; +import { TemplateParameter } from '@backstage/plugin-scaffolder-common'; // @alpha export const catalogModuleTemplateKind: () => BackendFeature; +// @alpha +export const createScaffolderConditionalDecision: ( + permission: ResourcePermission<'scaffolder-template'>, + conditions: PermissionCriteria< + PermissionCondition<'scaffolder-template', PermissionRuleParams> + >, +) => ConditionalPolicyDecision; + +// @alpha +export const scaffolderConditions: Conditions<{ + hasTag: PermissionRule< + TemplateParameter | TemplateEntityStepV1beta3, + {}, + 'scaffolder-template', + { + tag: string; + } + >; +}>; + // @alpha export const scaffolderPlugin: ( options: ScaffolderPluginOptions, diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index b4f7a6ee73..7c5de39d90 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -9,8 +9,6 @@ import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-n import { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; -import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; -import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; import { Duration } from 'luxon'; @@ -26,14 +24,9 @@ import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { Observable } from '@backstage/types'; import { Octokit } from 'octokit'; -import { PermissionCondition } from '@backstage/plugin-permission-common'; -import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; -import { PermissionRule } from '@backstage/plugin-permission-node'; -import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { ResourcePermission } from '@backstage/plugin-permission-common'; import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; @@ -43,8 +36,6 @@ import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateAction as TemplateAction_2 } from '@backstage/plugin-scaffolder-node'; import { TemplateActionOptions } from '@backstage/plugin-scaffolder-node'; -import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { TemplateParameter } from '@backstage/plugin-scaffolder-common'; import { UrlReader } from '@backstage/backend-common'; import { Writable } from 'stream'; import { ZodType } from 'zod'; @@ -528,14 +519,6 @@ export const createPublishGitlabMergeRequestAction: (options: { // @public export function createRouter(options: RouterOptions): Promise; -// @alpha -export const createScaffolderConditionalDecision: ( - permission: ResourcePermission<'scaffolder-template'>, - conditions: PermissionCriteria< - PermissionCondition<'scaffolder-template', PermissionRuleParams> - >, -) => ConditionalPolicyDecision; - // @public @deprecated (undocumented) export const createTemplateAction: < TParams, @@ -693,18 +676,6 @@ export type RunCommandOptions = { logStream?: Writable; }; -// @alpha -export const scaffolderConditions: Conditions<{ - hasTag: PermissionRule< - TemplateParameter | TemplateEntityStepV1beta3, - {}, - 'scaffolder-template', - { - tag: string; - } - >; -}>; - // @public (undocumented) export class ScaffolderEntitiesProcessor implements CatalogProcessor { // (undocumented) diff --git a/plugins/scaffolder-backend/src/alpha.ts b/plugins/scaffolder-backend/src/alpha.ts index ac96f081ad..6d6be0c156 100644 --- a/plugins/scaffolder-backend/src/alpha.ts +++ b/plugins/scaffolder-backend/src/alpha.ts @@ -15,5 +15,6 @@ */ export * from './modules'; +export * from './service/conditionExports'; export { scaffolderPlugin } from './ScaffolderPlugin'; export type { ScaffolderPluginOptions } from './ScaffolderPlugin'; diff --git a/plugins/scaffolder-backend/src/index.ts b/plugins/scaffolder-backend/src/index.ts index 3dc91f18b9..ba2c25f80a 100644 --- a/plugins/scaffolder-backend/src/index.ts +++ b/plugins/scaffolder-backend/src/index.ts @@ -21,7 +21,6 @@ */ export * from './scaffolder'; -export * from './service/conditionExports'; export * from './service/router'; export * from './lib'; export * from './processor'; From 35c564396bce6d776080db95b9d2bf5fe260e6ea Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 1 Mar 2023 14:17:57 +0100 Subject: [PATCH 426/511] scaffolder: export common permissions utilities as alpha Signed-off-by: Vincenzo Scamporlino --- .../src/service/conditionExports.ts | 2 +- .../scaffolder-backend/src/service/router.ts | 4 +++- .../scaffolder-backend/src/service/rules.ts | 3 ++- plugins/scaffolder-common/alpha-api-report.md | 21 +++++++++++++++++++ plugins/scaffolder-common/api-report.md | 13 ------------ plugins/scaffolder-common/package.json | 15 +++++++++++++ plugins/scaffolder-common/src/alpha.ts | 16 ++++++++++++++ plugins/scaffolder-common/src/index.ts | 2 +- 8 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 plugins/scaffolder-common/alpha-api-report.md create mode 100644 plugins/scaffolder-common/src/alpha.ts diff --git a/plugins/scaffolder-backend/src/service/conditionExports.ts b/plugins/scaffolder-backend/src/service/conditionExports.ts index 1a36b4d7f3..0c502c6075 100644 --- a/plugins/scaffolder-backend/src/service/conditionExports.ts +++ b/plugins/scaffolder-backend/src/service/conditionExports.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; import { createConditionExports } from '@backstage/plugin-permission-node'; import { scaffolderTemplateRules } from './rules'; diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 0a0c45653d..6a22547b12 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -32,9 +32,11 @@ import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, +} from '@backstage/plugin-scaffolder-common'; +import { templateParameterReadPermission, templateStepReadPermission, -} from '@backstage/plugin-scaffolder-common'; +} from '@backstage/plugin-scaffolder-common/alpha'; import express from 'express'; import Router from 'express-promise-router'; import { validate } from 'jsonschema'; diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index ba91b18bf5..8c9dde50e5 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -16,10 +16,11 @@ import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { - RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TemplateEntityStepV1beta3, TemplateParameter, } from '@backstage/plugin-scaffolder-common'; +import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; + import { z } from 'zod'; export const createScaffolderPermissionRule = makeCreatePermissionRule< diff --git a/plugins/scaffolder-common/alpha-api-report.md b/plugins/scaffolder-common/alpha-api-report.md new file mode 100644 index 0000000000..e89999ad85 --- /dev/null +++ b/plugins/scaffolder-common/alpha-api-report.md @@ -0,0 +1,21 @@ +## API Report File for "@backstage/plugin-scaffolder-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ResourcePermission } from '@backstage/plugin-permission-common'; + +// @alpha +export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-template'; + +// @alpha +export const scaffolderPermissions: ResourcePermission<'scaffolder-template'>[]; + +// @alpha +export const templateParameterReadPermission: ResourcePermission<'scaffolder-template'>; + +// @alpha +export const templateStepReadPermission: ResourcePermission<'scaffolder-template'>; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index aba929228f..5417504eb8 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -8,15 +8,8 @@ import type { EntityMeta } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; import type { JsonValue } from '@backstage/types'; import { KindValidator } from '@backstage/catalog-model'; -import { ResourcePermission } from '@backstage/plugin-permission-common'; import type { UserEntity } from '@backstage/catalog-model'; -// @alpha -export const RESOURCE_TYPE_SCAFFOLDER_TEMPLATE = 'scaffolder-template'; - -// @alpha -export const scaffolderPermissions: ResourcePermission<'scaffolder-template'>[]; - // @public export const isTemplateEntityV1beta3: ( entity: Entity, @@ -102,15 +95,9 @@ export interface TemplateParameter extends JsonObject { }; } -// @alpha -export const templateParameterReadPermission: ResourcePermission<'scaffolder-template'>; - // @public export interface TemplateSpecValuesMetadata extends JsonObject { // (undocumented) tags?: string[]; } - -// @alpha -export const templateStepReadPermission: ResourcePermission<'scaffolder-template'>; ``` diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index d315754462..cc79e676fd 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -11,6 +11,21 @@ "module": "dist/index.esm.js", "types": "dist/index.d.ts" }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, "backstage": { "role": "common-library" }, diff --git a/plugins/scaffolder-common/src/alpha.ts b/plugins/scaffolder-common/src/alpha.ts new file mode 100644 index 0000000000..9a8c021d15 --- /dev/null +++ b/plugins/scaffolder-common/src/alpha.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 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. + */ +export * from './permissions'; diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 1b154f9ba7..a0133632db 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -21,11 +21,11 @@ */ export * from './TaskSpec'; + export { templateEntityV1beta3Validator, isTemplateEntityV1beta3, } from './TemplateEntityV1beta3'; -export * from './permissions'; export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, From bc82c96a1827901bd1315056beb680af4c00196f Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 22:39:10 +0100 Subject: [PATCH 427/511] scaffolder-backend: make permissionApi optional Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/router.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 6a22547b12..d74bfca5b1 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -90,7 +90,7 @@ export interface RouterOptions { taskBroker?: TaskBroker; additionalTemplateFilters?: Record; additionalTemplateGlobals?: Record; - permissionApi: PermissionEvaluator; + permissionApi?: PermissionEvaluator; identity?: IdentityApi; } @@ -576,6 +576,10 @@ export async function createRouter( ); } + if (!permissionApi) { + return template; + } + const [parameterDecision, stepDecision] = await permissionApi.authorizeConditional( [ From 49d886a151a80a960eaf83db0ef37b630c628e5e Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 22:39:53 +0100 Subject: [PATCH 428/511] backend: remove scaffolder-common as dependency Signed-off-by: Vincenzo Scamporlino --- packages/backend/package.json | 1 - yarn.lock | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index aa4e660fdd..54dbe640df 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -60,7 +60,6 @@ "@backstage/plugin-rollbar-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^", - "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-search-backend": "workspace:^", "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^", "@backstage/plugin-search-backend-module-pg": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 0d63604827..33a2cfbda5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22943,7 +22943,6 @@ __metadata: "@backstage/plugin-rollbar-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^" - "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/plugin-search-backend": "workspace:^" "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^" "@backstage/plugin-search-backend-module-pg": "workspace:^" From 7ebb4f4349990cda9b757d06070151589065bf81 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 22:42:54 +0100 Subject: [PATCH 429/511] scaffolder-common: rollback properties Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-common/src/TemplateEntityV1beta3.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 790a0e4409..03563dc3b5 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -88,7 +88,6 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { */ export interface TemplateParameter extends JsonObject { 'backstage:permissions'?: TemplatePermissions; - properties?: { [name: string]: JsonObject }; } /** From e676507491026b223f66541c064147f51d2a1e5f Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 22:43:47 +0100 Subject: [PATCH 430/511] scaffolder: api report Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/api-report.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 7c5de39d90..0f22365c27 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -224,7 +224,7 @@ export function createGithubRepoCreateAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; collaborators?: | ( | { @@ -327,7 +327,7 @@ export function createPublishBitbucketAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -344,7 +344,7 @@ export function createPublishBitbucketCloudAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; token?: string | undefined; }>; @@ -357,7 +357,7 @@ export function createPublishBitbucketServerAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -441,7 +441,7 @@ export function createPublishGithubAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; collaborators?: | ( | { @@ -489,7 +489,7 @@ export function createPublishGitlabAction(options: { }): TemplateAction_2<{ repoUrl: string; defaultBranch?: string | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; sourcePath?: string | undefined; token?: string | undefined; gitCommitMessage?: string | undefined; @@ -510,7 +510,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'update' | 'delete' | 'create' | undefined; + commitAction?: 'create' | 'update' | 'delete' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; @@ -657,7 +657,7 @@ export interface RouterOptions { // (undocumented) logger: Logger; // (undocumented) - permissionApi: PermissionEvaluator; + permissionApi?: PermissionEvaluator; // (undocumented) reader: UrlReader; // (undocumented) From 65e989f4018c29d46097af1166b9c558fc6dce26 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 22:44:22 +0100 Subject: [PATCH 431/511] add changesets Signed-off-by: Vincenzo Scamporlino --- .changeset/clean-dolls-search.md | 5 +++++ .changeset/olive-months-talk.md | 7 +++++++ .changeset/tiny-apes-scream.md | 5 +++++ plugins/scaffolder-common/src/Template.v1beta3.schema.json | 6 ++++++ 4 files changed, 23 insertions(+) create mode 100644 .changeset/clean-dolls-search.md create mode 100644 .changeset/olive-months-talk.md create mode 100644 .changeset/tiny-apes-scream.md diff --git a/.changeset/clean-dolls-search.md b/.changeset/clean-dolls-search.md new file mode 100644 index 0000000000..a8f0da3c4d --- /dev/null +++ b/.changeset/clean-dolls-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-common': patch +--- + +Added permissions for authorizing parameters and steps diff --git a/.changeset/olive-months-talk.md b/.changeset/olive-months-talk.md new file mode 100644 index 0000000000..e37832736e --- /dev/null +++ b/.changeset/olive-months-talk.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Added the possibility to authorize parameters and steps of a template + +The scaffolder plugin is now integrated with the permission framework. diff --git a/.changeset/tiny-apes-scream.md b/.changeset/tiny-apes-scream.md new file mode 100644 index 0000000000..b4a28e0745 --- /dev/null +++ b/.changeset/tiny-apes-scream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-common': patch +--- + +Define optional `backstage:permissions` property to parameters and steps used to authorize part of the template using the permission framework diff --git a/plugins/scaffolder-common/src/Template.v1beta3.schema.json b/plugins/scaffolder-common/src/Template.v1beta3.schema.json index e45bfb788d..3dc1990401 100644 --- a/plugins/scaffolder-common/src/Template.v1beta3.schema.json +++ b/plugins/scaffolder-common/src/Template.v1beta3.schema.json @@ -16,6 +16,9 @@ "owner": "artist-relations-team", "parameters": { "required": ["name", "description", "repoUrl"], + "backstage:permissions": { + "tags": ["one", "two"] + }, "properties": { "name": { "title": "Name", @@ -41,6 +44,9 @@ "action": "fetch:plain", "parameters": { "url": "./template" + }, + "backstage:permissions": { + "tags": ["one", "two"] } }, { From c42a1159ad0099096d5e498b7e30161a989da610 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 7 Mar 2023 23:06:59 +0100 Subject: [PATCH 432/511] scaffolder: api report Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/api-report.md | 14 +++++++------- plugins/scaffolder-common/api-report.md | 4 ---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 0f22365c27..2cb969fa41 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -224,7 +224,7 @@ export function createGithubRepoCreateAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( | { @@ -327,7 +327,7 @@ export function createPublishBitbucketAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -344,7 +344,7 @@ export function createPublishBitbucketCloudAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; token?: string | undefined; }>; @@ -357,7 +357,7 @@ export function createPublishBitbucketServerAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -441,7 +441,7 @@ export function createPublishGithubAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( | { @@ -489,7 +489,7 @@ export function createPublishGitlabAction(options: { }): TemplateAction_2<{ repoUrl: string; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; sourcePath?: string | undefined; token?: string | undefined; gitCommitMessage?: string | undefined; @@ -510,7 +510,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'create' | 'update' | 'delete' | undefined; + commitAction?: 'update' | 'delete' | 'create' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index 5417504eb8..02e52cc01d 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -89,10 +89,6 @@ export type TemplateInfo = { export interface TemplateParameter extends JsonObject { // (undocumented) 'backstage:permissions'?: TemplateSpecValuesMetadata; - // (undocumented) - properties?: { - [name: string]: JsonObject; - }; } // @public From 67edf386c69debadb716a43c95687e4a2530cfc8 Mon Sep 17 00:00:00 2001 From: Ainhoa Larumbe Date: Wed, 8 Mar 2023 17:16:34 +0000 Subject: [PATCH 433/511] scaffolder-backend: add metadata endpoint to expose template permissions Signed-off-by: Ainhoa Larumbe --- plugins/scaffolder-backend/src/service/router.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index d74bfca5b1..f6415fae24 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -34,6 +34,8 @@ import { templateEntityV1beta3Validator, } from '@backstage/plugin-scaffolder-common'; import { + RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + scaffolderPermissions, templateParameterReadPermission, templateStepReadPermission, } from '@backstage/plugin-scaffolder-common/alpha'; @@ -59,7 +61,10 @@ import { } from '@backstage/plugin-auth-node'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; -import { createIsAuthorized } from '@backstage/plugin-permission-node'; +import { + createIsAuthorized, + createPermissionIntegrationRouter, +} from '@backstage/plugin-permission-node'; import { scaffolderTemplateRules } from './rules'; const isAuthorized = createIsAuthorized(Object.values(scaffolderTemplateRules)); @@ -261,6 +266,14 @@ export async function createRouter( additionalTemplateGlobals, }); + const permissionIntegrationRouter = createPermissionIntegrationRouter({ + resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + permissions: scaffolderPermissions, + rules: Object.values(scaffolderTemplateRules), + }); + + router.use(permissionIntegrationRouter); + router .get( '/v2/templates/:namespace/:kind/:name/parameter-schema', From 51182944212adf817cb79fb5374e7d7338bff92c Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 9 Mar 2023 12:27:58 +0100 Subject: [PATCH 434/511] scaffolder: validate backstage:permissions in templates Signed-off-by: Vincenzo Scamporlino --- .../src/Template.v1beta3.schema.json | 44 ++++++++++++++++++- .../src/TemplateEntityV1beta3.test.ts | 20 ++++++++- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder-common/src/Template.v1beta3.schema.json b/plugins/scaffolder-common/src/Template.v1beta3.schema.json index 3dc1990401..beb0ca5e31 100644 --- a/plugins/scaffolder-common/src/Template.v1beta3.schema.json +++ b/plugins/scaffolder-common/src/Template.v1beta3.schema.json @@ -98,14 +98,42 @@ "oneOf": [ { "type": "object", - "description": "The JSONSchema describing the inputs for the template." + "description": "The JSONSchema describing the inputs for the template.", + "properties": { + "backstage:permissions": { + "type": "object", + "description": "Object used for authorizing the parameter", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } }, { "type": "array", "description": "A list of separate forms to collect parameters.", "items": { "type": "object", - "description": "The JSONSchema describing the inputs for the template." + "description": "The JSONSchema describing the inputs for the template.", + "properties": { + "backstage:permissions": { + "type": "object", + "description": "Object used for authorizing the parameter", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } } } ] @@ -137,6 +165,18 @@ "if": { "type": ["string", "boolean"], "description": "A templated condition that skips the step when evaluated to false. If the condition is true or not defined, the step is executed. The condition is true, if the input is not `false`, `undefined`, `null`, `\"\"`, `0`, or `[]`." + }, + "backstage:permissions": { + "type": "object", + "description": "Object used for authorizing the step", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } } } } diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts index ab5900ab32..a23d72f290 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts @@ -15,7 +15,10 @@ */ import { entityKindSchemaValidator } from '@backstage/catalog-model'; -import type { TemplateEntityV1beta3 } from './TemplateEntityV1beta3'; +import type { + TemplateEntityV1beta3, + TemplateParameter, +} from './TemplateEntityV1beta3'; import schema from './Template.v1beta3.schema.json'; const validator = entityKindSchemaValidator(schema); @@ -35,6 +38,7 @@ describe('templateEntityV1beta3Validator', () => { owner: 'team-b', parameters: { required: ['owner'], + 'backstage:permissions': { tags: ['one', 'two'] }, properties: { owner: { type: 'string', @@ -52,6 +56,9 @@ describe('templateEntityV1beta3Validator', () => { url: './template', }, if: '${{ parameters.owner }}', + 'backstage:permissions': { + tags: ['one', 'two'], + }, }, ], output: { @@ -154,4 +161,15 @@ describe('templateEntityV1beta3Validator', () => { (entity as any).spec.steps[0].if = 5; expect(() => validator(entity)).toThrow(/if/); }); + + it('rejects parameters with wrong backstage:permissions', async () => { + (entity.spec.parameters as TemplateParameter)['backstage:permissions'] = + true as {}; + expect(() => validator(entity)).toThrow(/must be object/); + }); + + it('rejects steps with wrong backstage:permissions', async () => { + entity.spec.steps[0]['backstage:permissions'] = true as {}; + expect(() => validator(entity)).toThrow(/must be object/); + }); }); From 6e5e1b49c04b97ca8d7ac181cbefce1cc63d92ce Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 9 Mar 2023 12:32:19 +0100 Subject: [PATCH 435/511] permission-node rename createIsAuthorized to createConditionAuthorizer Signed-off-by: Vincenzo Scamporlino --- .../createPermissionIntegrationRouter.test.ts | 10 +++++----- .../integration/createPermissionIntegrationRouter.ts | 2 +- plugins/scaffolder-backend/src/service/router.ts | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index e7091e7936..6e28c5ddc4 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -25,7 +25,7 @@ import { z } from 'zod'; import { createPermissionIntegrationRouter, CreatePermissionIntegrationRouterResourceOptions, - createIsAuthorized, + createConditionAuthorizer, } from './createPermissionIntegrationRouter'; import { createPermissionRule } from './createPermissionRule'; @@ -633,13 +633,13 @@ describe('createPermissionIntegrationRouter', () => { }); }); -describe('createIsAuthorized', () => { +describe('createConditionAuthorizer', () => { afterEach(() => { jest.clearAllMocks(); }); it('should return true in case of allowed decision', () => { - const isAuthorized = createIsAuthorized([testRule1, testRule2]); + const isAuthorized = createConditionAuthorizer([testRule1, testRule2]); expect( isAuthorized( { @@ -653,7 +653,7 @@ describe('createIsAuthorized', () => { expect(mockTestRule2Apply).not.toHaveBeenCalled(); }); it('should return false in case of denied decision', () => { - const isAuthorized = createIsAuthorized([testRule1, testRule2]); + const isAuthorized = createConditionAuthorizer([testRule1, testRule2]); expect( isAuthorized( { @@ -668,7 +668,7 @@ describe('createIsAuthorized', () => { }); it('should apply conditions to a resource in case of conditional decision', () => { - const isAuthorized = createIsAuthorized([testRule1, testRule2]); + const isAuthorized = createConditionAuthorizer([testRule1, testRule2]); expect( isAuthorized( { diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 5b0c2c25f1..850123d55e 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -168,7 +168,7 @@ const applyConditions = ( * * @public */ -export const createIsAuthorized = ( +export const createConditionAuthorizer = ( rules: PermissionRule[], ) => { const getRule = createGetRule(rules); diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index f6415fae24..c1f9a15831 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -62,12 +62,14 @@ import { import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { - createIsAuthorized, + createConditionAuthorizer, createPermissionIntegrationRouter, } from '@backstage/plugin-permission-node'; import { scaffolderTemplateRules } from './rules'; -const isAuthorized = createIsAuthorized(Object.values(scaffolderTemplateRules)); +const isAuthorized = createConditionAuthorizer( + Object.values(scaffolderTemplateRules), +); /** * RouterOptions From bb0addebd5c4960e4b8a1db85a2358db39b581d4 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 9 Mar 2023 12:37:29 +0100 Subject: [PATCH 436/511] scaffolder: tests for validating tags Signed-off-by: Vincenzo Scamporlino --- .../scaffolder-common/src/TemplateEntityV1beta3.test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts index a23d72f290..9358e08df5 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts @@ -163,12 +163,20 @@ describe('templateEntityV1beta3Validator', () => { }); it('rejects parameters with wrong backstage:permissions', async () => { + (entity.spec.parameters as TemplateParameter)[ + 'backstage:permissions' + ]!.tags = true as unknown as []; + expect(() => validator(entity)).toThrow(/must be array/); + (entity.spec.parameters as TemplateParameter)['backstage:permissions'] = true as {}; expect(() => validator(entity)).toThrow(/must be object/); }); it('rejects steps with wrong backstage:permissions', async () => { + entity.spec.steps[0]['backstage:permissions']!.tags = true as unknown as []; + expect(() => validator(entity)).toThrow(/must be array/); + entity.spec.steps[0]['backstage:permissions'] = true as {}; expect(() => validator(entity)).toThrow(/must be object/); }); From a89a930e8a1137a21572b36fc8cf72108e26ebb1 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 13 Mar 2023 15:03:57 +0100 Subject: [PATCH 437/511] scaffolder: mark new models as v1beta3 Signed-off-by: Vincenzo Scamporlino --- plugins/permission-node/api-report.md | 10 +++++----- plugins/scaffolder-backend/alpha-api-report.md | 4 ++-- plugins/scaffolder-backend/src/service/rules.ts | 4 ++-- plugins/scaffolder-common/api-report.md | 10 +++++----- .../src/TemplateEntityV1beta3.test.ts | 9 +++++---- plugins/scaffolder-common/src/TemplateEntityV1beta3.ts | 10 +++++----- plugins/scaffolder-common/src/index.ts | 4 ++-- 7 files changed, 26 insertions(+), 25 deletions(-) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 6af78fcebe..b3d06efdc7 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -73,6 +73,11 @@ export type ConditionTransformer = ( conditions: PermissionCriteria, ) => PermissionCriteria; +// @public +export const createConditionAuthorizer: ( + rules: PermissionRule[], +) => (decision: PolicyDecision, resource: TResource | undefined) => boolean; + // @public export const createConditionExports: < TResourceType extends string, @@ -111,11 +116,6 @@ export const createConditionTransformer: < permissionRules: [...TRules], ) => ConditionTransformer; -// @public -export const createIsAuthorized: ( - rules: PermissionRule[], -) => (decision: PolicyDecision, resource: TResource | undefined) => boolean; - // @public export function createPermissionIntegrationRouter< TResourceType extends string, diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 208714a266..7246d768e3 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -16,7 +16,7 @@ import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateFilter } from '@backstage/plugin-scaffolder-backend'; import { TemplateGlobal } from '@backstage/plugin-scaffolder-backend'; -import { TemplateParameter } from '@backstage/plugin-scaffolder-common'; +import { TemplateParameterV1beta3 } from '@backstage/plugin-scaffolder-common'; // @alpha export const catalogModuleTemplateKind: () => BackendFeature; @@ -32,7 +32,7 @@ export const createScaffolderConditionalDecision: ( // @alpha export const scaffolderConditions: Conditions<{ hasTag: PermissionRule< - TemplateParameter | TemplateEntityStepV1beta3, + TemplateParameterV1beta3 | TemplateEntityStepV1beta3, {}, 'scaffolder-template', { diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index 8c9dde50e5..db7ad993e9 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -17,14 +17,14 @@ import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { TemplateEntityStepV1beta3, - TemplateParameter, + TemplateParameterV1beta3, } from '@backstage/plugin-scaffolder-common'; import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; import { z } from 'zod'; export const createScaffolderPermissionRule = makeCreatePermissionRule< - TemplateEntityStepV1beta3 | TemplateParameter, + TemplateEntityStepV1beta3 | TemplateParameterV1beta3, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE >(); diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index 02e52cc01d..61d6d51a78 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -45,7 +45,7 @@ export interface TaskStep { // @public export interface TemplateEntityStepV1beta3 extends JsonObject { // (undocumented) - 'backstage:permissions'?: TemplateSpecValuesMetadata; + 'backstage:permissions'?: TemplatePermissionsV1beta3; // (undocumented) action: string; // (undocumented) @@ -64,7 +64,7 @@ export interface TemplateEntityV1beta3 extends Entity { kind: 'Template'; spec: { type: string; - parameters?: TemplateParameter | TemplateParameter[]; + parameters?: TemplateParameterV1beta3 | TemplateParameterV1beta3[]; steps: Array; output?: { [name: string]: string; @@ -86,13 +86,13 @@ export type TemplateInfo = { }; // @public -export interface TemplateParameter extends JsonObject { +export interface TemplateParameterV1beta3 extends JsonObject { // (undocumented) - 'backstage:permissions'?: TemplateSpecValuesMetadata; + 'backstage:permissions'?: TemplatePermissionsV1beta3; } // @public -export interface TemplateSpecValuesMetadata extends JsonObject { +export interface TemplatePermissionsV1beta3 extends JsonObject { // (undocumented) tags?: string[]; } diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts index 9358e08df5..4609a7802a 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts @@ -17,7 +17,7 @@ import { entityKindSchemaValidator } from '@backstage/catalog-model'; import type { TemplateEntityV1beta3, - TemplateParameter, + TemplateParameterV1beta3, } from './TemplateEntityV1beta3'; import schema from './Template.v1beta3.schema.json'; @@ -163,13 +163,14 @@ describe('templateEntityV1beta3Validator', () => { }); it('rejects parameters with wrong backstage:permissions', async () => { - (entity.spec.parameters as TemplateParameter)[ + (entity.spec.parameters as TemplateParameterV1beta3)[ 'backstage:permissions' ]!.tags = true as unknown as []; expect(() => validator(entity)).toThrow(/must be array/); - (entity.spec.parameters as TemplateParameter)['backstage:permissions'] = - true as {}; + (entity.spec.parameters as TemplateParameterV1beta3)[ + 'backstage:permissions' + ] = true as {}; expect(() => validator(entity)).toThrow(/must be object/); }); diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 03563dc3b5..5d002ddfe4 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -50,7 +50,7 @@ export interface TemplateEntityV1beta3 extends Entity { * to collect user input and validate it against that schema. This can then be used in the `steps` part below to template * variables passed from the user into each action in the template. */ - parameters?: TemplateParameter | TemplateParameter[]; + parameters?: TemplateParameterV1beta3 | TemplateParameterV1beta3[]; /** * A list of steps to be executed in sequence which are defined by the template. These steps are a list of the underlying * javascript action and some optional input parameters that may or may not have been collected from the end user. @@ -78,7 +78,7 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { action: string; input?: JsonObject; if?: string | boolean; - 'backstage:permissions'?: TemplatePermissions; + 'backstage:permissions'?: TemplatePermissionsV1beta3; } /** @@ -86,8 +86,8 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { * * @public */ -export interface TemplateParameter extends JsonObject { - 'backstage:permissions'?: TemplatePermissions; +export interface TemplateParameterV1beta3 extends JsonObject { + 'backstage:permissions'?: TemplatePermissionsV1beta3; } /** @@ -95,7 +95,7 @@ export interface TemplateParameter extends JsonObject { * * @public */ -export interface TemplatePermissions extends JsonObject { +export interface TemplatePermissionsV1beta3 extends JsonObject { tags?: string[]; } diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index a0133632db..701cad1f71 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -29,6 +29,6 @@ export { export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, - TemplateParameter, - TemplatePermissions as TemplateSpecValuesMetadata, + TemplateParameterV1beta3, + TemplatePermissionsV1beta3, } from './TemplateEntityV1beta3'; From b3ae19452648a214e6283f172b0e8726057f19d5 Mon Sep 17 00:00:00 2001 From: Claire Casey Date: Tue, 14 Mar 2023 13:51:11 -0400 Subject: [PATCH 438/511] add optional custom rules to scaffolder router Signed-off-by: Claire Casey --- .../scaffolder-backend/src/service/router.ts | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index c1f9a15831..acfec5dc90 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -32,6 +32,8 @@ import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, + TemplateParameterV1beta3, + TemplateEntityStepV1beta3, } from '@backstage/plugin-scaffolder-common'; import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, @@ -60,16 +62,30 @@ import { IdentityApiGetIdentityRequest, } from '@backstage/plugin-auth-node'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; -import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { + PermissionEvaluator, + PermissionRuleParams, +} from '@backstage/plugin-permission-common'; import { createConditionAuthorizer, createPermissionIntegrationRouter, + PermissionRule, } from '@backstage/plugin-permission-node'; import { scaffolderTemplateRules } from './rules'; -const isAuthorized = createConditionAuthorizer( - Object.values(scaffolderTemplateRules), -); +/** + * ScaffolderPermissionRuleInput + * + * @public + */ +export type ScaffolderPermissionRuleInput< + TParams extends PermissionRuleParams = PermissionRuleParams, +> = PermissionRule< + TemplateEntityStepV1beta3 | TemplateParameterV1beta3, + {}, + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + TParams +>; /** * RouterOptions @@ -98,6 +114,7 @@ export interface RouterOptions { additionalTemplateFilters?: Record; additionalTemplateGlobals?: Record; permissionApi?: PermissionEvaluator; + customPermissionRules?: ScaffolderPermissionRuleInput[]; identity?: IdentityApi; } @@ -193,6 +210,7 @@ export async function createRouter( additionalTemplateFilters, additionalTemplateGlobals, permissionApi, + customPermissionRules, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -268,10 +286,21 @@ export async function createRouter( additionalTemplateGlobals, }); + const permissionRules: ScaffolderPermissionRuleInput[] = Object.values( + scaffolderTemplateRules, + ); + if (customPermissionRules) { + permissionRules.push(...customPermissionRules); + } + + const isAuthorized = createConditionAuthorizer( + Object.values(permissionRules), + ); + const permissionIntegrationRouter = createPermissionIntegrationRouter({ resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, permissions: scaffolderPermissions, - rules: Object.values(scaffolderTemplateRules), + rules: permissionRules, }); router.use(permissionIntegrationRouter); From 4722fd4c207fb4d4d2b0a8239bfa0e6fafe28c04 Mon Sep 17 00:00:00 2001 From: Claire Casey Date: Wed, 15 Mar 2023 11:48:25 -0400 Subject: [PATCH 439/511] add tests for checking conditional permissions and update api-reports Signed-off-by: Claire Casey --- plugins/scaffolder-backend/api-report.md | 17 ++ .../src/service/router.test.ts | 258 +++++++++++++++--- 2 files changed, 244 insertions(+), 31 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 2cb969fa41..c9f92d6172 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -25,8 +25,11 @@ import { Logger } from 'winston'; import { Observable } from '@backstage/types'; import { Octokit } from 'octokit'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; @@ -36,6 +39,8 @@ import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateAction as TemplateAction_2 } from '@backstage/plugin-scaffolder-node'; import { TemplateActionOptions } from '@backstage/plugin-scaffolder-node'; +import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { TemplateParameterV1beta3 } from '@backstage/plugin-scaffolder-common'; import { UrlReader } from '@backstage/backend-common'; import { Writable } from 'stream'; import { ZodType } from 'zod'; @@ -651,6 +656,8 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) + customPermissionRules?: ScaffolderPermissionRuleInput[]; + // (undocumented) database: PluginDatabaseManager; // (undocumented) identity?: IdentityApi; @@ -690,6 +697,16 @@ export class ScaffolderEntitiesProcessor implements CatalogProcessor { validateEntityKind(entity: Entity): Promise; } +// @public +export type ScaffolderPermissionRuleInput< + TParams extends PermissionRuleParams = PermissionRuleParams, +> = PermissionRule< + TemplateEntityStepV1beta3 | TemplateParameterV1beta3, + {}, + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + TParams +>; + // @public export type SerializedTask = { id: string; diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index 2bf9203056..4f5ed0fe22 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -109,17 +109,52 @@ describe('createRouter', () => { spec: { owner: 'web@example.com', type: 'website', - steps: [], - parameters: { - type: 'object', - required: ['required'], - properties: { - required: { - type: 'string', - description: 'Required parameter', + steps: [ + { + id: 'step-one', + name: 'First log', + action: 'debug:log', + input: { + message: 'hello', }, }, - }, + { + id: 'step-two', + name: 'Second log', + action: 'debug:log', + input: { + message: 'world', + }, + 'backstage:permissions': { + tags: ['steps-tag'], + }, + }, + ], + parameters: [ + { + type: 'object', + required: ['requiredParameter1'], + properties: { + requiredParameter1: { + type: 'string', + description: 'Required parameter 1', + }, + }, + }, + { + type: 'object', + required: ['requiredParameter2'], + 'backstage:permissions': { + tags: ['parameters-tag'], + }, + properties: { + requiredParameter2: { + type: 'string', + description: 'Required parameter 2', + }, + }, + }, + ], }, }); @@ -237,12 +272,13 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); - expect(response.body.id).toBe('a-random-id'); expect(response.status).toEqual(201); + expect(response.body.id).toBe('a-random-id'); }); it('should call the broker with a correct spec', async () => { @@ -261,7 +297,8 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); expect(broker).toHaveBeenCalledWith( @@ -280,7 +317,8 @@ describe('createRouter', () => { })), output: mockTemplate.spec.output ?? {}, parameters: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, user: { entity: mockUser, @@ -317,7 +355,8 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); expect(broker).toHaveBeenCalledWith( @@ -336,7 +375,8 @@ describe('createRouter', () => { })), output: mockTemplate.spec.output ?? {}, parameters: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, user: { entity: undefined, @@ -370,7 +410,8 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -393,7 +434,8 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -416,7 +458,8 @@ describe('createRouter', () => { name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -836,16 +879,32 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ { title: 'Please enter the following information', schema: { - required: ['required'], + required: ['requiredParameter1'], type: 'object', properties: { - required: { - description: 'Required parameter', + requiredParameter1: { + description: 'Required parameter 1', type: 'string', }, }, }, }, + { + title: 'Please enter the following information', + schema: { + type: 'object', + required: ['requiredParameter2'], + 'backstage:permissions': { + tags: ['parameters-tag'], + }, + properties: { + requiredParameter2: { + type: 'string', + description: 'Required parameter 2', + }, + }, + }, + }, ], }); }); @@ -866,7 +925,6 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ '/v2/templates/default/Template/create-react-app-template/parameter-schema', ) .send(); - expect(response.status).toEqual(200); expect(response.body).toEqual({ title: 'Create React App Template', @@ -874,6 +932,54 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ steps: [], }); }); + + it('filters parameters that the user is not authorized to see in case of conditional decision', async () => { + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementationOnce(async () => [ + { + conditions: { + resourceType: 'scaffolder-template', + rule: 'HAS_TAG', + params: { tag: 'parameters-tag' }, + }, + pluginId: 'scaffolder', + resourceType: 'scaffolder-template', + result: AuthorizeResult.CONDITIONAL, + }, + { + result: AuthorizeResult.ALLOW, + }, + ]); + const response = await request(app) + .get( + '/v2/templates/default/Template/create-react-app-template/parameter-schema', + ) + .send(); + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + title: 'Create React App Template', + description: 'Create a new CRA website project', + steps: [ + { + title: 'Please enter the following information', + schema: { + type: 'object', + required: ['requiredParameter2'], + 'backstage:permissions': { + tags: ['parameters-tag'], + }, + properties: { + requiredParameter2: { + type: 'string', + description: 'Required parameter 2', + }, + }, + }, + }, + ], + }); + }); }); describe('POST /v2/tasks', () => { @@ -917,7 +1023,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); expect(broker).toHaveBeenCalledWith( @@ -932,7 +1039,89 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ steps: [], output: mockTemplate.spec.output ?? {}, parameters: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', + }, + user: { + entity: mockUser, + ref: 'user:default/guest', + }, + templateInfo: { + entityRef: stringifyEntityRef({ + kind: 'Template', + namespace: 'Default', + name: mockTemplate.metadata?.name, + }), + baseUrl: 'https://dev.azure.com', + entity: { + metadata: mockTemplate.metadata, + }, + }, + }, + }), + ); + }); + + it('filters steps that the user is not authorized to see in case of conditional decision', async () => { + jest + .spyOn(permissionApi, 'authorizeConditional') + .mockImplementation(async () => [ + { + result: AuthorizeResult.ALLOW, + }, + { + conditions: { + resourceType: 'scaffolder-template', + rule: 'HAS_TAG', + params: { tag: 'steps-tag' }, + }, + pluginId: 'scaffolder', + resourceType: 'scaffolder-template', + result: AuthorizeResult.CONDITIONAL, + }, + ]); + + const broker = + taskBroker.dispatch as jest.Mocked['dispatch']; + const mockTemplate = getMockTemplate(); + await request(app) + .post('/v2/tasks') + .send({ + templateRef: stringifyEntityRef({ + kind: 'template', + name: 'create-react-app-template', + }), + values: { + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', + }, + }); + expect(broker).toHaveBeenCalledWith( + expect.objectContaining({ + createdBy: 'user:default/guest', + secrets: { + backstageToken: 'token', + }, + + spec: { + apiVersion: mockTemplate.apiVersion, + steps: [ + { + id: 'step-two', + name: 'Second log', + action: 'debug:log', + input: { + message: 'world', + }, + 'backstage:permissions': { + tags: ['steps-tag'], + }, + }, + ], + output: mockTemplate.spec.output ?? {}, + parameters: { + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, user: { entity: mockUser, @@ -969,7 +1158,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -990,7 +1180,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); expect(broker).toHaveBeenCalledWith( @@ -1009,7 +1200,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ })), output: mockTemplate.spec.output ?? {}, parameters: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, user: { entity: mockUser, @@ -1052,7 +1244,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); expect(response.status).not.toEqual(201); @@ -1084,7 +1277,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -1107,7 +1301,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); @@ -1127,7 +1322,8 @@ data: {"id":1,"taskId":"a-random-id","type":"completion","createdAt":"","body":{ name: 'create-react-app-template', }), values: { - required: 'required-value', + requiredParameter1: 'required-value-1', + requiredParameter2: 'required-value-2', }, }); From 9deb0f66eccf0baf19d32fb891e20e47d55b6465 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 16 Mar 2023 23:57:11 +0100 Subject: [PATCH 440/511] scaffolder: TemplateParameterV1beta3 to TemplateParametersV1beta3 Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/alpha-api-report.md | 4 ++-- plugins/scaffolder-backend/api-report.md | 4 ++-- plugins/scaffolder-backend/src/service/router.ts | 4 ++-- plugins/scaffolder-backend/src/service/rules.ts | 4 ++-- plugins/scaffolder-common/api-report.md | 4 ++-- plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts | 6 +++--- plugins/scaffolder-common/src/TemplateEntityV1beta3.ts | 4 ++-- plugins/scaffolder-common/src/index.ts | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 7246d768e3..2ecd2cc800 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -16,7 +16,7 @@ import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateFilter } from '@backstage/plugin-scaffolder-backend'; import { TemplateGlobal } from '@backstage/plugin-scaffolder-backend'; -import { TemplateParameterV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { TemplateParametersV1beta3 } from '@backstage/plugin-scaffolder-common'; // @alpha export const catalogModuleTemplateKind: () => BackendFeature; @@ -32,7 +32,7 @@ export const createScaffolderConditionalDecision: ( // @alpha export const scaffolderConditions: Conditions<{ hasTag: PermissionRule< - TemplateParameterV1beta3 | TemplateEntityStepV1beta3, + TemplateParametersV1beta3 | TemplateEntityStepV1beta3, {}, 'scaffolder-template', { diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index c9f92d6172..087b795c62 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -40,7 +40,7 @@ import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateAction as TemplateAction_2 } from '@backstage/plugin-scaffolder-node'; import { TemplateActionOptions } from '@backstage/plugin-scaffolder-node'; import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { TemplateParameterV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { TemplateParametersV1beta3 } from '@backstage/plugin-scaffolder-common'; import { UrlReader } from '@backstage/backend-common'; import { Writable } from 'stream'; import { ZodType } from 'zod'; @@ -701,7 +701,7 @@ export class ScaffolderEntitiesProcessor implements CatalogProcessor { export type ScaffolderPermissionRuleInput< TParams extends PermissionRuleParams = PermissionRuleParams, > = PermissionRule< - TemplateEntityStepV1beta3 | TemplateParameterV1beta3, + TemplateEntityStepV1beta3 | TemplateParametersV1beta3, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TParams diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index acfec5dc90..f50c83ed3f 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -32,7 +32,7 @@ import { TaskSpec, TemplateEntityV1beta3, templateEntityV1beta3Validator, - TemplateParameterV1beta3, + TemplateParametersV1beta3, TemplateEntityStepV1beta3, } from '@backstage/plugin-scaffolder-common'; import { @@ -81,7 +81,7 @@ import { scaffolderTemplateRules } from './rules'; export type ScaffolderPermissionRuleInput< TParams extends PermissionRuleParams = PermissionRuleParams, > = PermissionRule< - TemplateEntityStepV1beta3 | TemplateParameterV1beta3, + TemplateEntityStepV1beta3 | TemplateParametersV1beta3, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, TParams diff --git a/plugins/scaffolder-backend/src/service/rules.ts b/plugins/scaffolder-backend/src/service/rules.ts index db7ad993e9..d94f7dd4f4 100644 --- a/plugins/scaffolder-backend/src/service/rules.ts +++ b/plugins/scaffolder-backend/src/service/rules.ts @@ -17,14 +17,14 @@ import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { TemplateEntityStepV1beta3, - TemplateParameterV1beta3, + TemplateParametersV1beta3, } from '@backstage/plugin-scaffolder-common'; import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; import { z } from 'zod'; export const createScaffolderPermissionRule = makeCreatePermissionRule< - TemplateEntityStepV1beta3 | TemplateParameterV1beta3, + TemplateEntityStepV1beta3 | TemplateParametersV1beta3, {}, typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE >(); diff --git a/plugins/scaffolder-common/api-report.md b/plugins/scaffolder-common/api-report.md index 61d6d51a78..7c40780b57 100644 --- a/plugins/scaffolder-common/api-report.md +++ b/plugins/scaffolder-common/api-report.md @@ -64,7 +64,7 @@ export interface TemplateEntityV1beta3 extends Entity { kind: 'Template'; spec: { type: string; - parameters?: TemplateParameterV1beta3 | TemplateParameterV1beta3[]; + parameters?: TemplateParametersV1beta3 | TemplateParametersV1beta3[]; steps: Array; output?: { [name: string]: string; @@ -86,7 +86,7 @@ export type TemplateInfo = { }; // @public -export interface TemplateParameterV1beta3 extends JsonObject { +export interface TemplateParametersV1beta3 extends JsonObject { // (undocumented) 'backstage:permissions'?: TemplatePermissionsV1beta3; } diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts index 4609a7802a..432292548e 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.test.ts @@ -17,7 +17,7 @@ import { entityKindSchemaValidator } from '@backstage/catalog-model'; import type { TemplateEntityV1beta3, - TemplateParameterV1beta3, + TemplateParametersV1beta3, } from './TemplateEntityV1beta3'; import schema from './Template.v1beta3.schema.json'; @@ -163,12 +163,12 @@ describe('templateEntityV1beta3Validator', () => { }); it('rejects parameters with wrong backstage:permissions', async () => { - (entity.spec.parameters as TemplateParameterV1beta3)[ + (entity.spec.parameters as TemplateParametersV1beta3)[ 'backstage:permissions' ]!.tags = true as unknown as []; expect(() => validator(entity)).toThrow(/must be array/); - (entity.spec.parameters as TemplateParameterV1beta3)[ + (entity.spec.parameters as TemplateParametersV1beta3)[ 'backstage:permissions' ] = true as {}; expect(() => validator(entity)).toThrow(/must be object/); diff --git a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts index 5d002ddfe4..ebabb5cad4 100644 --- a/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts +++ b/plugins/scaffolder-common/src/TemplateEntityV1beta3.ts @@ -50,7 +50,7 @@ export interface TemplateEntityV1beta3 extends Entity { * to collect user input and validate it against that schema. This can then be used in the `steps` part below to template * variables passed from the user into each action in the template. */ - parameters?: TemplateParameterV1beta3 | TemplateParameterV1beta3[]; + parameters?: TemplateParametersV1beta3 | TemplateParametersV1beta3[]; /** * A list of steps to be executed in sequence which are defined by the template. These steps are a list of the underlying * javascript action and some optional input parameters that may or may not have been collected from the end user. @@ -86,7 +86,7 @@ export interface TemplateEntityStepV1beta3 extends JsonObject { * * @public */ -export interface TemplateParameterV1beta3 extends JsonObject { +export interface TemplateParametersV1beta3 extends JsonObject { 'backstage:permissions'?: TemplatePermissionsV1beta3; } diff --git a/plugins/scaffolder-common/src/index.ts b/plugins/scaffolder-common/src/index.ts index 701cad1f71..fd34fe6f41 100644 --- a/plugins/scaffolder-common/src/index.ts +++ b/plugins/scaffolder-common/src/index.ts @@ -29,6 +29,6 @@ export { export type { TemplateEntityV1beta3, TemplateEntityStepV1beta3, - TemplateParameterV1beta3, + TemplateParametersV1beta3, TemplatePermissionsV1beta3, } from './TemplateEntityV1beta3'; From 75e111f87918eba056cac7fbb8ae1033b1bd4496 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 17 Mar 2023 00:04:45 +0100 Subject: [PATCH 441/511] scaffolder: rename customPermissionRules to rules Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/api-report.md | 24 +++++++++---------- .../scaffolder-backend/src/service/router.ts | 20 +++++++--------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 087b795c62..d116fe60ff 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -656,8 +656,6 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - customPermissionRules?: ScaffolderPermissionRuleInput[]; - // (undocumented) database: PluginDatabaseManager; // (undocumented) identity?: IdentityApi; @@ -668,6 +666,8 @@ export interface RouterOptions { // (undocumented) reader: UrlReader; // (undocumented) + rules?: TemplatePermissionRuleInput[]; + // (undocumented) scheduler?: PluginTaskScheduler; // (undocumented) taskBroker?: TaskBroker; @@ -697,16 +697,6 @@ export class ScaffolderEntitiesProcessor implements CatalogProcessor { validateEntityKind(entity: Entity): Promise; } -// @public -export type ScaffolderPermissionRuleInput< - TParams extends PermissionRuleParams = PermissionRuleParams, -> = PermissionRule< - TemplateEntityStepV1beta3 | TemplateParametersV1beta3, - {}, - typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, - TParams ->; - // @public export type SerializedTask = { id: string; @@ -931,4 +921,14 @@ export type TemplateFilter = (...args: JsonValue[]) => JsonValue | undefined; export type TemplateGlobal = | ((...args: JsonValue[]) => JsonValue | undefined) | JsonValue; + +// @public (undocumented) +export type TemplatePermissionRuleInput< + TParams extends PermissionRuleParams = PermissionRuleParams, +> = PermissionRule< + TemplateEntityStepV1beta3 | TemplateParametersV1beta3, + {}, + typeof RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, + TParams +>; ``` diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index f50c83ed3f..e8a39444a7 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -74,11 +74,10 @@ import { import { scaffolderTemplateRules } from './rules'; /** - * ScaffolderPermissionRuleInput * * @public */ -export type ScaffolderPermissionRuleInput< +export type TemplatePermissionRuleInput< TParams extends PermissionRuleParams = PermissionRuleParams, > = PermissionRule< TemplateEntityStepV1beta3 | TemplateParametersV1beta3, @@ -114,7 +113,7 @@ export interface RouterOptions { additionalTemplateFilters?: Record; additionalTemplateGlobals?: Record; permissionApi?: PermissionEvaluator; - customPermissionRules?: ScaffolderPermissionRuleInput[]; + rules?: TemplatePermissionRuleInput[]; identity?: IdentityApi; } @@ -210,7 +209,7 @@ export async function createRouter( additionalTemplateFilters, additionalTemplateGlobals, permissionApi, - customPermissionRules, + rules, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -286,21 +285,20 @@ export async function createRouter( additionalTemplateGlobals, }); - const permissionRules: ScaffolderPermissionRuleInput[] = Object.values( + const templateRules: TemplatePermissionRuleInput[] = Object.values( scaffolderTemplateRules, ); - if (customPermissionRules) { - permissionRules.push(...customPermissionRules); + + if (rules) { + templateRules.push(...rules); } - const isAuthorized = createConditionAuthorizer( - Object.values(permissionRules), - ); + const isAuthorized = createConditionAuthorizer(Object.values(templateRules)); const permissionIntegrationRouter = createPermissionIntegrationRouter({ resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, permissions: scaffolderPermissions, - rules: permissionRules, + rules: templateRules, }); router.use(permissionIntegrationRouter); From acc6672cf699510c8a332d30c9b0d8c50d203719 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 20 Mar 2023 11:41:03 +0100 Subject: [PATCH 442/511] scaffolder: add docs on the changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/olive-months-talk.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/olive-months-talk.md b/.changeset/olive-months-talk.md index e37832736e..b3a89d1f9e 100644 --- a/.changeset/olive-months-talk.md +++ b/.changeset/olive-months-talk.md @@ -5,3 +5,4 @@ Added the possibility to authorize parameters and steps of a template The scaffolder plugin is now integrated with the permission framework. +It is possible to toggle parameters or actions within templates by marking each section with specific `tags`, inside a `backstage:permissions` property under each parameter or action. Each parameter or action can then be permissioned by using a conditional decision containing the `scaffolderTemplateRules.hasTag` rule. From a4f3c20430bb0e8f57724c51ae05fb39b004a535 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 20 Mar 2023 14:02:20 +0100 Subject: [PATCH 443/511] scaffolder: rename rules to permissionRules Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/api-report.md | 4 ++-- plugins/scaffolder-backend/src/service/router.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index d116fe60ff..41207f05be 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -664,9 +664,9 @@ export interface RouterOptions { // (undocumented) permissionApi?: PermissionEvaluator; // (undocumented) - reader: UrlReader; + permissionRules?: TemplatePermissionRuleInput[]; // (undocumented) - rules?: TemplatePermissionRuleInput[]; + reader: UrlReader; // (undocumented) scheduler?: PluginTaskScheduler; // (undocumented) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index e8a39444a7..1f2d390f9f 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -113,7 +113,7 @@ export interface RouterOptions { additionalTemplateFilters?: Record; additionalTemplateGlobals?: Record; permissionApi?: PermissionEvaluator; - rules?: TemplatePermissionRuleInput[]; + permissionRules?: TemplatePermissionRuleInput[]; identity?: IdentityApi; } @@ -209,7 +209,7 @@ export async function createRouter( additionalTemplateFilters, additionalTemplateGlobals, permissionApi, - rules, + permissionRules, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -289,8 +289,8 @@ export async function createRouter( scaffolderTemplateRules, ); - if (rules) { - templateRules.push(...rules); + if (permissionRules) { + templateRules.push(...permissionRules); } const isAuthorized = createConditionAuthorizer(Object.values(templateRules)); From 71fd0966d1094553e288524b3ab2d506ecad927f Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 21 Mar 2023 11:03:58 +0100 Subject: [PATCH 444/511] missing changesets Signed-off-by: Vincenzo Scamporlino --- .changeset/funny-rivers-grin.md | 5 +++++ .changeset/odd-grapes-double.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/funny-rivers-grin.md create mode 100644 .changeset/odd-grapes-double.md diff --git a/.changeset/funny-rivers-grin.md b/.changeset/funny-rivers-grin.md new file mode 100644 index 0000000000..55463e40a7 --- /dev/null +++ b/.changeset/funny-rivers-grin.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Add `permissionApi` as dependency of the scaffolder-backend plugin diff --git a/.changeset/odd-grapes-double.md b/.changeset/odd-grapes-double.md new file mode 100644 index 0000000000..7ef7486b60 --- /dev/null +++ b/.changeset/odd-grapes-double.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +Added createConditionAuthorizer utility function, which takes some permission conditions and returns a function that returns a definitive authorization result given a decision and a resource. From e66093a14d63e141d6edee55e64b566f47997b99 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 21 Mar 2023 14:36:21 +0100 Subject: [PATCH 445/511] scaffolder-backend: refactor alpha exports Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/alpha.ts | 2 +- plugins/scaffolder-backend/src/service/index.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plugins/scaffolder-backend/src/service/index.ts diff --git a/plugins/scaffolder-backend/src/alpha.ts b/plugins/scaffolder-backend/src/alpha.ts index 6d6be0c156..713f2569aa 100644 --- a/plugins/scaffolder-backend/src/alpha.ts +++ b/plugins/scaffolder-backend/src/alpha.ts @@ -15,6 +15,6 @@ */ export * from './modules'; -export * from './service/conditionExports'; +export * from './service'; export { scaffolderPlugin } from './ScaffolderPlugin'; export type { ScaffolderPluginOptions } from './ScaffolderPlugin'; diff --git a/plugins/scaffolder-backend/src/service/index.ts b/plugins/scaffolder-backend/src/service/index.ts new file mode 100644 index 0000000000..dc5508d47f --- /dev/null +++ b/plugins/scaffolder-backend/src/service/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 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. + */ + +export * from './conditionExports'; From 6f8cd8815f22fcb20ff92db2d810100a25557ac8 Mon Sep 17 00:00:00 2001 From: Arthur Gavlyukovskiy Date: Tue, 21 Mar 2023 16:48:25 +0100 Subject: [PATCH 446/511] Divide tests into two groups Signed-off-by: Arthur Gavlyukovskiy --- .../actions/builtin/fetch/helpers.test.ts | 279 +++++++++--------- 1 file changed, 143 insertions(+), 136 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts index 2740d16efb..3c4a677d4d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts @@ -51,158 +51,165 @@ describe('fetchContent helper', () => { outputPath: os.tmpdir(), }; - it('fetch contents should reject absolute file locations', async () => { - await expect( - fetchContents({ - ...options, - baseUrl: 'file:///some/path', - fetchUrl: '/etc/passwd', - }), - ).rejects.toThrow( - 'Relative path is not allowed to refer to a directory outside its parent', - ); - }); - - it('fetch contents should reject relative file locations that exit the baseUrl', async () => { - await expect( - fetchContents({ - ...options, - baseUrl: 'file:///some/path', - fetchUrl: '../test', - }), - ).rejects.toThrow( - 'Relative path is not allowed to refer to a directory outside its parent', - ); - }); - - it('fetch contents should copy file to outputpath', async () => { - await fetchContents({ - ...options, - baseUrl: 'file:///some/path', - fetchUrl: 'foo', - outputPath: 'somepath', + describe('fetch contents', () => { + it('should reject absolute file locations', async () => { + await expect( + fetchContents({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '/etc/passwd', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); }); - expect(fs.copy).toHaveBeenCalledWith(resolvePath('/some/foo'), 'somepath'); - }); - it('fetch contents should reject if no integration matches location', async () => { - await expect( - fetchContents({ - ...options, - baseUrl: 'http://example.com/some/folder', - }), - ).rejects.toThrow( - 'No integration found for location http://example.com/some/folder', - ); - }); + it('should reject relative file locations that exit the baseUrl', async () => { + await expect( + fetchContents({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '../test', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); - it('fetch contents should reject if fetch url is relative and no base url is specified', async () => { - await expect( - fetchContents({ + it('should copy file to outputpath', async () => { + await fetchContents({ ...options, + baseUrl: 'file:///some/path', fetchUrl: 'foo', - }), - ).rejects.toThrow( - 'Failed to fetch, template location could not be determined and the fetch URL is relative, foo', - ); + outputPath: 'somepath', + }); + expect(fs.copy).toHaveBeenCalledWith( + resolvePath('/some/foo'), + 'somepath', + ); + }); + + it('should reject if no integration matches location', async () => { + await expect( + fetchContents({ + ...options, + baseUrl: 'http://example.com/some/folder', + }), + ).rejects.toThrow( + 'No integration found for location http://example.com/some/folder', + ); + }); + + it('should reject if fetch url is relative and no base url is specified', async () => { + await expect( + fetchContents({ + ...options, + fetchUrl: 'foo', + }), + ).rejects.toThrow( + 'Failed to fetch, template location could not be determined and the fetch URL is relative, foo', + ); + }); + + it('should fetch url contents', async () => { + const dirFunction = jest.fn(); + readTree.mockResolvedValue({ + dir: dirFunction, + }); + await fetchContents({ + ...options, + outputPath: 'foo', + fetchUrl: 'https://github.com/backstage/foo', + }); + expect(fs.ensureDir).toHaveBeenCalledWith('foo'); + expect(dirFunction).toHaveBeenCalledWith({ targetDir: 'foo' }); + }); }); - it('fetch contents should fetch url contents', async () => { - const dirFunction = jest.fn(); - readTree.mockResolvedValue({ - dir: dirFunction, + describe('fetch file', () => { + it('should reject absolute file locations', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '/etc/passwd', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); }); - await fetchContents({ - ...options, - outputPath: 'foo', - fetchUrl: 'https://github.com/backstage/foo', - }); - expect(fs.ensureDir).toHaveBeenCalledWith('foo'); - expect(dirFunction).toHaveBeenCalledWith({ targetDir: 'foo' }); - }); - it('fetch file should reject absolute file locations', async () => { - await expect( - fetchFile({ + it('should reject relative file locations that exit the baseUrl', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'file:///some/path', + fetchUrl: '../test', + }), + ).rejects.toThrow( + 'Relative path is not allowed to refer to a directory outside its parent', + ); + }); + + it('should copy file to outputpath', async () => { + await fetchFile({ ...options, baseUrl: 'file:///some/path', - fetchUrl: '/etc/passwd', - }), - ).rejects.toThrow( - 'Relative path is not allowed to refer to a directory outside its parent', - ); - }); - - it('fetch file should reject relative file locations that exit the baseUrl', async () => { - await expect( - fetchFile({ - ...options, - baseUrl: 'file:///some/path', - fetchUrl: '../test', - }), - ).rejects.toThrow( - 'Relative path is not allowed to refer to a directory outside its parent', - ); - }); - - it('fetch file should copy file to outputpath', async () => { - await fetchFile({ - ...options, - baseUrl: 'file:///some/path', - fetchUrl: 'foo', - outputPath: 'somepath', - }); - expect(fs.copyFile).toHaveBeenCalledWith( - resolvePath('/some/foo'), - 'somepath', - ); - }); - - it('fetch file should reject if no integration matches location', async () => { - await expect( - fetchFile({ - ...options, - baseUrl: 'http://example.com/some/folder', - }), - ).rejects.toThrow( - 'No integration found for location http://example.com/some/folder', - ); - }); - - it('fetch file should reject if fetch url is relative and no base url is specified', async () => { - await expect( - fetchFile({ - ...options, fetchUrl: 'foo', - }), - ).rejects.toThrow( - 'Failed to fetch, template location could not be determined and the fetch URL is relative, foo', - ); - }); + outputPath: 'somepath', + }); + expect(fs.copyFile).toHaveBeenCalledWith( + resolvePath('/some/foo'), + 'somepath', + ); + }); - it('fetch file should fetch content from url', async () => { - readUrl.mockResolvedValue({ - buffer: () => Buffer.from('test', 'utf8'), + it('should reject if no integration matches location', async () => { + await expect( + fetchFile({ + ...options, + baseUrl: 'http://example.com/some/folder', + }), + ).rejects.toThrow( + 'No integration found for location http://example.com/some/folder', + ); }); - await fetchFile({ - ...options, - outputPath: 'foo', - fetchUrl: 'https://github.com/backstage/foo', - }); - expect(fs.ensureDir).toHaveBeenCalledWith('.'); - expect(fs.outputFile).toHaveBeenCalledWith('foo', 'test'); - }); - it('fetch file should fetch content from url into directory', async () => { - readUrl.mockResolvedValue({ - buffer: () => Buffer.from('test', 'utf8'), + it('should reject if fetch url is relative and no base url is specified', async () => { + await expect( + fetchFile({ + ...options, + fetchUrl: 'foo', + }), + ).rejects.toThrow( + 'Failed to fetch, template location could not be determined and the fetch URL is relative, foo', + ); }); - await fetchFile({ - ...options, - outputPath: 'mydir/foo', - fetchUrl: 'https://github.com/backstage/foo', + + it('should fetch content from url', async () => { + readUrl.mockResolvedValue({ + buffer: () => Buffer.from('test', 'utf8'), + }); + await fetchFile({ + ...options, + outputPath: 'foo', + fetchUrl: 'https://github.com/backstage/foo', + }); + expect(fs.ensureDir).toHaveBeenCalledWith('.'); + expect(fs.outputFile).toHaveBeenCalledWith('foo', 'test'); + }); + + it('should fetch content from url into directory', async () => { + readUrl.mockResolvedValue({ + buffer: () => Buffer.from('test', 'utf8'), + }); + await fetchFile({ + ...options, + outputPath: 'mydir/foo', + fetchUrl: 'https://github.com/backstage/foo', + }); + expect(fs.ensureDir).toHaveBeenCalledWith('mydir'); + expect(fs.outputFile).toHaveBeenCalledWith('mydir/foo', 'test'); }); - expect(fs.ensureDir).toHaveBeenCalledWith('mydir'); - expect(fs.outputFile).toHaveBeenCalledWith('mydir/foo', 'test'); }); }); From 3678e665c2fac6110f02a817a5f4f771bd21a654 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 21 Mar 2023 17:40:15 +0100 Subject: [PATCH 447/511] GOVERNANCE: clarify that voting is done by core maintainers Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 1e713144ed..a3ebb1cef1 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -203,7 +203,7 @@ Candidates for membership will be nominated by current Sponsor members or by Bac In general, we prefer that technical issues and membership are amicably worked out between the persons involved. If a dispute cannot be decided independently, the sponsors and core maintainers can be called in to decide an issue. If the sponsors and maintainers themselves cannot decide an issue, the issue will be resolved by voting. -In all cases in this document where voting is mentioned, the voting process is a simple majority in which each sponsor receives two votes and each maintainer receives one vote. If such a majority is reached, the vote is said to have _passed_. +In all cases in this document where voting is mentioned, the voting process is a simple majority in which each sponsor receives two votes and each core maintainer receives one vote. If such a majority is reached, the vote is said to have _passed_. ## Inactivity From 9dd9cf7769a1ebd5acc185169c08fa172f651061 Mon Sep 17 00:00:00 2001 From: Tracey Date: Tue, 21 Mar 2023 10:38:30 -0700 Subject: [PATCH 448/511] adding api reporrt Signed-off-by: Tracey --- .../api-report.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md new file mode 100644 index 0000000000..30235c2112 --- /dev/null +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md @@ -0,0 +1,26 @@ +## API Report File for "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Config } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { UrlReader } from '@backstage/backend-common'; + +// Warning: (ae-missing-release-tag) "createConfluenceToMarkdownAction" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const createConfluenceToMarkdownAction: (options: { + reader: UrlReader; + integrations: ScmIntegrations; + config: Config; +}) => TemplateAction<{ + confluenceUrls: string[]; + repoUrl: string; +}>; + +// Warnings were encountered during analysis: +// +// src/index.d.ts:2:42 - (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +``` From 005d2b3c60ad77a8546e42d0b5ead2155a1aee8e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:15:10 +0000 Subject: [PATCH 449/511] chore(deps): update dependency prettier to v2.8.6 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index a0467071b9..b087600e48 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8558,11 +8558,11 @@ __metadata: linkType: hard "prettier@npm:^2.6.2": - version: 2.8.5 - resolution: "prettier@npm:2.8.5" + version: 2.8.6 + resolution: "prettier@npm:2.8.6" bin: prettier: bin-prettier.js - checksum: b7f8d30e14061e0478bc5a59d4d889688d804c173a0daa91b1b85dc08eef5eb6956d1b59f4037770776fda5b967f6c9ca3b7a8a43c50bedb4c7b182029f865aa + checksum: 8ac94fa67aec0e65743ea15ebf954ef2f1e52638abd129dc04e8b49e8bb3224c0233c98df6b5c98efd31bd2a43866590486559438ee4ead09dc81be389068572 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 9fc1b16148..e7d787a125 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33090,11 +33090,11 @@ __metadata: linkType: hard "prettier@npm:^2.2.1, prettier@npm:^2.7.1": - version: 2.8.5 - resolution: "prettier@npm:2.8.5" + version: 2.8.6 + resolution: "prettier@npm:2.8.6" bin: prettier: bin-prettier.js - checksum: b7f8d30e14061e0478bc5a59d4d889688d804c173a0daa91b1b85dc08eef5eb6956d1b59f4037770776fda5b967f6c9ca3b7a8a43c50bedb4c7b182029f865aa + checksum: 8ac94fa67aec0e65743ea15ebf954ef2f1e52638abd129dc04e8b49e8bb3224c0233c98df6b5c98efd31bd2a43866590486559438ee4ead09dc81be389068572 languageName: node linkType: hard From 05bd502658b1733c31d7f63ae9f7739160364393 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 18:22:08 +0000 Subject: [PATCH 450/511] fix(deps): update dependency @codemirror/view to v6.9.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9fc1b16148..ba59244d58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9346,13 +9346,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.9.2 - resolution: "@codemirror/view@npm:6.9.2" + version: 6.9.3 + resolution: "@codemirror/view@npm:6.9.3" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: e6faaf1b2daf9e4605eafd1782a0a6363cf0ee8a6c4e1aa57ebea2b2cc2b402914f07448f12210da0144126860adab052442c51831911a326867a53c745a60cf + checksum: 718ecbb021ca75eb89003f73c846a07d36a708dcfec8345f0f0dbcfc0d0df5ea6f114918694b2730a6d49e5e50502bcce79ce7ff94ce55748e068e5a35073755 languageName: node linkType: hard From c4b846359c09a6515e67ec8c766e1e559443043a Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 21 Mar 2023 16:32:35 -0500 Subject: [PATCH 451/511] Allow Replacement Of BuiltinKindsEntityProcessor Signed-off-by: Jacob Bolda --- .changeset/silly-adults-accept.md | 5 +++++ .../software-catalog/extending-the-model.md | 1 + .../catalog-backend/src/service/CatalogBuilder.ts | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/silly-adults-accept.md diff --git a/.changeset/silly-adults-accept.md b/.changeset/silly-adults-accept.md new file mode 100644 index 0000000000..9db04d2490 --- /dev/null +++ b/.changeset/silly-adults-accept.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Allow replacement of the BuiltinKindsEntityProcessor which enables customization of schema validation and connections emitted. diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md index bdd043b8a8..c254d7d0b6 100644 --- a/docs/features/software-catalog/extending-the-model.md +++ b/docs/features/software-catalog/extending-the-model.md @@ -170,6 +170,7 @@ its schema. There is a builtin processor that implements this for all known core kinds and matches the data against their fixed validation schema. This processor can be replaced when building the backend catalog using the `CatalogBuilder`, with a processor of your own that validates the data differently. +This replacement processor must have a name that matches the builtin processor, `BuiltinKindsEntityProcessor`. This type of extension is high risk, and may have high impact across the ecosystem depending on the type of change that is made. It is therefore not diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 7da5d69767..8d40745e9d 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -599,16 +599,26 @@ export class CatalogBuilder { ...this.placeholderResolvers, }; - // These are always there no matter what + // The placeholder is always there no matter what const processors: CatalogProcessor[] = [ new PlaceholderProcessor({ resolvers: placeholderResolvers, reader, integrations, }), - new BuiltinKindsEntityProcessor(), ]; + // If the user adds a processor named 'BuiltinKindsEntityProcessor', + // skip inclusion of the catalog-backend version. + if ( + !this.processors.find( + processor => + processor.getProcessorName() === 'BuiltinKindsEntityProcessor', + ) + ) { + processors.push(new BuiltinKindsEntityProcessor()); + } + // These are only added unless the user replaced them all if (!this.processorsReplace) { processors.push(...this.getDefaultProcessors()); From f4cebf2afe74b6cc61e0a705cd547ff4ea3576f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 00:09:18 +0000 Subject: [PATCH 452/511] fix(deps): update dependency @roadiehq/backstage-plugin-buildkite to v2.1.7 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8b61d0ab04..4daa3b9a69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13155,14 +13155,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": - version: 2.1.6 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.6" + version: 2.1.7 + resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.7" dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/plugin-catalog-react": ^1.3.0 - "@backstage/theme": ^0.2.17 + "@backstage/catalog-model": ^1.2.1 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/plugin-catalog-react": ^1.4.0 + "@backstage/theme": ^0.2.18 "@material-ui/core": ^4.12.1 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -13174,7 +13174,7 @@ __metadata: react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 90d8ea1c3379f04e98a992e4192aeb46ea394a8970e50c9ffdf24171e731f4108b0117596b877ec0ff8d12434ca513ba566d957a71d9584cc12b2e097abb0b3f + checksum: 1b84acf97e22f3b481d4b4fbc1ccb1d184f811ec00998b92cc8ee6f4be95af2acebd9932ad4337c611d17ca15f8c34cd44310a44d775008a1d845fe1a197ae37 languageName: node linkType: hard From ff390c3c7c7dd80ab5d8017b98ada7ccf6cfa56b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 00:09:46 +0000 Subject: [PATCH 453/511] fix(deps): update dependency @roadiehq/backstage-plugin-github-insights to v2.3.8 Signed-off-by: Renovate Bot --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8b61d0ab04..4f58c7ab33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4185,7 +4185,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.10": +"@backstage/integration-react@npm:^1.1.11": version: 1.1.11 resolution: "@backstage/integration-react@npm:1.1.11" dependencies: @@ -13179,15 +13179,15 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": - version: 2.3.7 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.7" + version: 2.3.8 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.8" dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/integration-react": ^1.1.10 - "@backstage/plugin-catalog-react": ^1.3.0 - "@backstage/theme": ^0.2.17 + "@backstage/catalog-model": ^1.2.1 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/integration-react": ^1.1.11 + "@backstage/plugin-catalog-react": ^1.4.0 + "@backstage/theme": ^0.2.18 "@date-io/core": 2.10.7 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 @@ -13202,7 +13202,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 0818a109c6ebbcc312f1a9f6575cd8d47f7adec6201d3555cfc1ad2d25c5f80ff08ad26eee692a40d059283c7b3dadbb5a6533802318a8ae5c781c1fcaaf077d + checksum: 0a9027a035d41e46344d88da361ec91fbf43adb018bb9e383e5659d4478b67951ef9e32381b020a2104bf16be5009ae7e97c07182dcbe04721d6385e93ec8ce2 languageName: node linkType: hard From b3ee273b618bbb27e8163ab6eb868effa3820f4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 01:19:02 +0000 Subject: [PATCH 454/511] fix(deps): update dependency @roadiehq/backstage-plugin-github-pull-requests to v2.5.5 Signed-off-by: Renovate Bot --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index dd166e1d76..460433e94a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6664,7 +6664,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.4.30": +"@backstage/plugin-home@npm:^0.4.32": version: 0.4.32 resolution: "@backstage/plugin-home@npm:0.4.32" dependencies: @@ -13207,14 +13207,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.2 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.2" + version: 2.5.5 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.5" dependencies: - "@backstage/catalog-model": ^1.1.5 - "@backstage/core-components": ^0.12.3 - "@backstage/core-plugin-api": ^1.3.0 - "@backstage/plugin-catalog-react": ^1.2.4 - "@backstage/plugin-home": ^0.4.30 + "@backstage/catalog-model": ^1.2.1 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/plugin-catalog-react": ^1.4.0 + "@backstage/plugin-home": ^0.4.32 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 @@ -13231,7 +13231,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: dd8c3301867cd8ccaf094eb62c64b2923c4614e9ba384249c5ddb80b6375bc7f5e8828a7fc12f9e7785ca230948895e03a9c1521be45f69797f663b28cecc3c7 + checksum: 3a17a21665c397b3bd94c277e31b9f1005387b458a14b1c4c3bd28f6ef1400289fcf24e44bb8c54e07b99b59af49fe608c587f49e27d15cf01ef4d539cc25354 languageName: node linkType: hard From ec2e64f0cd4dd2c1b47bba4928c77928a3931bbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 01:19:30 +0000 Subject: [PATCH 455/511] fix(deps): update dependency @roadiehq/backstage-plugin-travis-ci to v2.1.7 Signed-off-by: Renovate Bot --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index dd166e1d76..230a592e05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3676,7 +3676,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.0, @backstage/catalog-model@^1.2.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3938,7 +3938,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.12.3, @backstage/core-components@npm:^0.12.4, @backstage/core-components@npm:^0.12.5": +"@backstage/core-components@npm:^0.12.3, @backstage/core-components@npm:^0.12.5": version: 0.12.5 resolution: "@backstage/core-components@npm:0.12.5" dependencies: @@ -4059,7 +4059,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.4.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -5442,7 +5442,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.3.0, @backstage/plugin-catalog-react@npm:^1.4.0": +"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.4.0": version: 1.4.0 resolution: "@backstage/plugin-catalog-react@npm:1.4.0" dependencies: @@ -8961,7 +8961,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.2.16, @backstage/theme@^0.2.17, @backstage/theme@^0.2.18, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.2.16, @backstage/theme@^0.2.18, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -13236,14 +13236,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": - version: 2.1.6 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.6" + version: 2.1.7 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.7" dependencies: - "@backstage/catalog-model": ^1.2.0 - "@backstage/core-components": ^0.12.4 - "@backstage/core-plugin-api": ^1.4.0 - "@backstage/plugin-catalog-react": ^1.3.0 - "@backstage/theme": ^0.2.17 + "@backstage/catalog-model": ^1.2.1 + "@backstage/core-components": ^0.12.5 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/plugin-catalog-react": ^1.4.0 + "@backstage/theme": ^0.2.18 "@material-ui/core": ^4.11.3 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -13257,7 +13257,7 @@ __metadata: react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 657e58579bdc9387edb61538f4541be4ba2b33f33fcac9129f533b35dc6d207d9930e0eae0937435def7ebf5e791118727417d818dd96de05126bda1041f15d1 + checksum: 1a00d0128e1bdacac93ffa7b1aa1534ec91b603899d40967ed387e3fd91f35bbc5f9babfc7b811279775d60e28db7747211fd5c0d368db23b5a184b054e918c1 languageName: node linkType: hard From 51bf92cb5fe93cdd64eb94d7719f5331bfb741ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 02:19:00 +0000 Subject: [PATCH 456/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.296.0 Signed-off-by: Renovate Bot --- yarn.lock | 1236 ++++++++++++++++++++++++++--------------------------- 1 file changed, 618 insertions(+), 618 deletions(-) diff --git a/yarn.lock b/yarn.lock index f39a519e90..6efefe1810 100644 --- a/yarn.lock +++ b/yarn.lock @@ -489,13 +489,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.295.0, @aws-sdk/abort-controller@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/abort-controller@npm:3.295.0" +"@aws-sdk/abort-controller@npm:3.296.0, @aws-sdk/abort-controller@npm:^3.208.0": + version: 3.296.0 + resolution: "@aws-sdk/abort-controller@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 73067abed748eacfa5298d84f4c4a67fa764cc41af8a1d80fb61fedf5a50ffe88ed06e51f70ce8dedb6e1ff53cdddabb7b909898e6c666d6abcf8c7584cd5511 + checksum: bfaf89f703f3be0b2c79574e3bd67f7f8272c88e1f99edaba51fa592a70d82f391380fdec703d8b31eea5488b285797848f7c6d187e87872ec0faf2df8284d47 languageName: node linkType: hard @@ -518,535 +518,535 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.295.0" +"@aws-sdk/client-cognito-identity@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.296.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.295.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/credential-provider-node": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-signing": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: a8a3b8b0a3b40b5719ed7867359f1e8f0cc5fb26ea789781a73ebec4235e7cd38cee4320bdf1b49db7c726fe8174dc7a742b5df5bae7df0e911745df63ba7500 + checksum: 72c8aac879cc31f156178ecef5895b1c5c802fe1433a3ba0c0010364259815b7e96f7ca7872781e0a512f15ecacb82f62d67902d15f3960a4c0ebf20a1dfd3bd languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/client-s3@npm:3.295.0" + version: 3.296.0 + resolution: "@aws-sdk/client-s3@npm:3.296.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.295.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/credential-provider-node": 3.295.0 - "@aws-sdk/eventstream-serde-browser": 3.295.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.295.0 - "@aws-sdk/eventstream-serde-node": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-blob-browser": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/hash-stream-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/md5-js": 3.295.0 - "@aws-sdk/middleware-bucket-endpoint": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-expect-continue": 3.295.0 - "@aws-sdk/middleware-flexible-checksums": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-location-constraint": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-sdk-s3": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-signing": 3.295.0 - "@aws-sdk/middleware-ssec": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/signature-v4-multi-region": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/eventstream-serde-browser": 3.296.0 + "@aws-sdk/eventstream-serde-config-resolver": 3.296.0 + "@aws-sdk/eventstream-serde-node": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-blob-browser": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/hash-stream-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/md5-js": 3.296.0 + "@aws-sdk/middleware-bucket-endpoint": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-expect-continue": 3.296.0 + "@aws-sdk/middleware-flexible-checksums": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-location-constraint": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-sdk-s3": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-ssec": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/signature-v4-multi-region": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-stream-browser": 3.295.0 - "@aws-sdk/util-stream-node": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-stream-browser": 3.296.0 + "@aws-sdk/util-stream-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 - "@aws-sdk/util-waiter": 3.295.0 + "@aws-sdk/util-waiter": 3.296.0 "@aws-sdk/xml-builder": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: 84c6163b64e6e0c4408ed203dc3fb05b995a223a8875f6f75b58d8f976f9e5788549e7a28a9c09418c6ed471a85456f3d4e6d2e856b389f0b7c9e61603a1f1b7 + checksum: e7c73260ec654780be882eddad68f39873010a436477c1536ae04abc249ba08280f240a8dea51db0e222fd623db12a5e555514b2dde9f042299643c483b446cd languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/client-sqs@npm:3.295.0" + version: 3.296.0 + resolution: "@aws-sdk/client-sqs@npm:3.296.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.295.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/credential-provider-node": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/md5-js": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-sdk-sqs": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-signing": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/md5-js": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-sdk-sqs": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: 21e0ea18a53b7135ae3786e23cc31421654d615ed42637686c458fd5fe0c67ce97d643604379e6e70c8e6883e331caf0ee4deb67d4762da419af9ef8401553e9 + checksum: ec3c7844ef114e8784efad036f0442bbc1a17bec5878fc22a4641bde3847a57c16e8d5ec92917df9f8a3601b63277852788b16727e9039d389cb8fcf06131e25 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.295.0" +"@aws-sdk/client-sso-oidc@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.296.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 705c36f039ccab9cb8b0aab22c907c8023cb2254a252728d81c18debc6414ea8ad2174c7f7296c0e4c571c8e23fd52c600ab330b258d9c94fb57cb349af5ba40 + checksum: e2cae6747b8300a143e67354913964e2aa7d96fcb7d68e1020cbb40e2e9079a3aea10f427a3cddd98cf8e8463b189d1a15639d713e92d3dff2f8aada7527db9d languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/client-sso@npm:3.295.0" +"@aws-sdk/client-sso@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/client-sso@npm:3.296.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 060c66d6c16910b488826d967d9dbc7b13901ccf95c7d56e0ed7a74128ae50881b7af565683cd53fcee81b69ba0dc6d45ddbda8ed448adf2a7fdc871174386f9 + checksum: def371cedc2add3127d648c24ea1356517cba510f06679134add036f22c9d139205071fc30e0c753081507881068987efcef2a3a61ca283c4696614236febc08 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.295.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/client-sts@npm:3.295.0" +"@aws-sdk/client-sts@npm:3.296.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.296.0 + resolution: "@aws-sdk/client-sts@npm:3.296.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/credential-provider-node": 3.295.0 - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/hash-node": 3.295.0 - "@aws-sdk/invalid-dependency": 3.295.0 - "@aws-sdk/middleware-content-length": 3.295.0 - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/middleware-host-header": 3.295.0 - "@aws-sdk/middleware-logger": 3.295.0 - "@aws-sdk/middleware-recursion-detection": 3.295.0 - "@aws-sdk/middleware-retry": 3.295.0 - "@aws-sdk/middleware-sdk-sts": 3.295.0 - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/middleware-signing": 3.295.0 - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/middleware-user-agent": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/hash-node": 3.296.0 + "@aws-sdk/invalid-dependency": 3.296.0 + "@aws-sdk/middleware-content-length": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-host-header": 3.296.0 + "@aws-sdk/middleware-logger": 3.296.0 + "@aws-sdk/middleware-recursion-detection": 3.296.0 + "@aws-sdk/middleware-retry": 3.296.0 + "@aws-sdk/middleware-sdk-sts": 3.296.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 - "@aws-sdk/util-defaults-mode-browser": 3.295.0 - "@aws-sdk/util-defaults-mode-node": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 - "@aws-sdk/util-user-agent-browser": 3.295.0 - "@aws-sdk/util-user-agent-node": 3.295.0 + "@aws-sdk/util-defaults-mode-browser": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.296.0 + "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: 62af2df1f538123c38199c78ac04a42c54a20f8ff22f9d7d6f170a21ce681a32256600416176b1fc63d0536f880d1f70805d6e0604bc72c32efab4608f7cda79 + checksum: c7a7837601d3bf2cf80e00a498e4f3412d88cccb605a251e65b949e8495874cb7738f0979dc51857f7606e76a568c9c15ecc77800191f54fef181c5cb2bca97b languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/config-resolver@npm:3.295.0" +"@aws-sdk/config-resolver@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/config-resolver@npm:3.296.0" dependencies: - "@aws-sdk/signature-v4": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-config-provider": 3.295.0 - "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: e2e8e05fab234565891a7dbb32887a5b247d90da1386279978d733d7c96d489c4259aeef0aa6ea45427d7b9785e62a9339bfb85f576c4a0321f9af76838ac2e2 + checksum: 0c9c58940434317108410f4d532b170f651d47e952dcdab16e711cbb3d29dec08b2f17c50f66064a32889ea5fb4c27283f364d9db7990720d513d8f8aa5953cd languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.295.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.296.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/client-cognito-identity": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 16586c78863575f49bdebcce2dc4be6a41a85918da324baaae1bf7b1ee2e70561cc6215146b97c7a7080b9d0430d71e7d83d629eda95296ea23315545c613c69 + checksum: ef2046e91aa3235e894ac762da7a4d6146fb383f094e504e6a0c6a6950f827c3c81e6826dd622483db5b13df234aa8e73cc4bad089753ef9ac3a1ffb390f75fa languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.295.0" +"@aws-sdk/credential-provider-env@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 436ebafb9f2a3bf3af53c6133494a07fff7452b9ff6a72ebacc09b25ac65695b0b5ac00d619214ddc6e9b1cba4652ad1729c56d55dffa7e2b9769359e934045d + checksum: 2695b2431f68a0faea47e41bef6ad38a5ccaa48a85729b7b533af63daa30e0645e9aee6d138abfbb2175c361b2afdf6a8acb6bd19a6cc7c2648d7c6a1ca84917 languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.295.0" +"@aws-sdk/credential-provider-imds@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.296.0" dependencies: - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 tslib: ^2.5.0 - checksum: 07cceb7bf4238efc7401a042b2c964f5c049edadebbdda1d4b82fa69f5536c9c2e22d3d74a11fc13185a59e794ee5757acd0e7c1528883ecd75c8dbf4bb6f887 + checksum: 02e3e5b45816a7907c48a79db209c7c3a3158908dd8beac2bf20c097d6d246d3cc89d3058c11ba2d774afc37b3cf1f83d93936644179e75f5bbc9484e853c747 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.295.0" +"@aws-sdk/credential-provider-ini@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.296.0" dependencies: - "@aws-sdk/credential-provider-env": 3.295.0 - "@aws-sdk/credential-provider-imds": 3.295.0 - "@aws-sdk/credential-provider-process": 3.295.0 - "@aws-sdk/credential-provider-sso": 3.295.0 - "@aws-sdk/credential-provider-web-identity": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/credential-provider-env": 3.296.0 + "@aws-sdk/credential-provider-imds": 3.296.0 + "@aws-sdk/credential-provider-process": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-web-identity": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: eaea51cbcc32addd80a1462ab291c8fa9170760ac53ba9ab3626723086b6b329e60b6e8d5bb4ad2ec497c6100611d45f5d64e686fe09f19a83a7d13d95a7599d + checksum: 8c3a518ab5eb1b2153f722548e50c11af1cc2d8d2b3eafe5ddb1022bb677eb6fb6cc41bd60a508d45c322c6a653511d9445ca335ea103890f7b534ed0fdfab78 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.295.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.295.0" +"@aws-sdk/credential-provider-node@npm:3.296.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.296.0" dependencies: - "@aws-sdk/credential-provider-env": 3.295.0 - "@aws-sdk/credential-provider-imds": 3.295.0 - "@aws-sdk/credential-provider-ini": 3.295.0 - "@aws-sdk/credential-provider-process": 3.295.0 - "@aws-sdk/credential-provider-sso": 3.295.0 - "@aws-sdk/credential-provider-web-identity": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/credential-provider-env": 3.296.0 + "@aws-sdk/credential-provider-imds": 3.296.0 + "@aws-sdk/credential-provider-ini": 3.296.0 + "@aws-sdk/credential-provider-process": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-web-identity": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: df670420d5ceb22d754f37caac590ebc30ffa979a33e76fb37a8f8d80f02354a8339f4630df9d7fc5a71b19686474b2e8b08f40bfdc0bfe8cbd3c19407bc3008 + checksum: ccc0616dc331764a7378bad898982c2dfb56c8c2d52d4eed003a5265105dfab2598bf40761ef231df28bf9bce17671e86af88415784ae779979ab9c55d75aeb8 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.295.0" +"@aws-sdk/credential-provider-process@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 0b5dc603d2437b91f3933c78c150c98592bc6e5ef09b7d838d9b8b6c343f13dead545d809c035c3dad250e3023d44418aafb4fc0f0e25df941abd1e54d3456c8 + checksum: 5b29c587806b8a611d3843bd3236061c9a4fd6ce2d4a461c94ff14bd6d4b3193323398d2a0380036be96f4e589d2e46f92f5af7c40da7bdd935444d7ebe009d3 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.295.0" +"@aws-sdk/credential-provider-sso@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.296.0" dependencies: - "@aws-sdk/client-sso": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/token-providers": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/client-sso": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/token-providers": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: e3764111f8bbef747397ddecc83d7b32d5316b08673d810d7c98c67ddfc2b0450e504254ee50494ab0fa03ac04ea1b12ebd5a3e54cc754025b670a1fa0e55cea + checksum: c4916c1d923831240b65bd51c1db3e0f80ce65f2caedf5e45c4799cf0db71ef79b27cd0394a1bd2c94a90bd65ae08b6cbc36416f3c91f7e6c41339c5ef00f919 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.295.0" +"@aws-sdk/credential-provider-web-identity@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 40fa0d1e47be13505973bc48bebee15360e322402c68f02fac03b777f971abfed3d51704d18f38c130c8149a69d2f45f38ccb8945f5edd2634683cad13b07980 + checksum: 35fadfbc623cb47eae1b189a6384ae545d4a5d203c70a12e57bb236c645d61d31dd3ffaafc323d878cde6061ec5be5c285c34b3296e7c4a8992c479b4485518a languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/credential-providers@npm:3.295.0" + version: 3.296.0 + resolution: "@aws-sdk/credential-providers@npm:3.296.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.295.0 - "@aws-sdk/client-sso": 3.295.0 - "@aws-sdk/client-sts": 3.295.0 - "@aws-sdk/credential-provider-cognito-identity": 3.295.0 - "@aws-sdk/credential-provider-env": 3.295.0 - "@aws-sdk/credential-provider-imds": 3.295.0 - "@aws-sdk/credential-provider-ini": 3.295.0 - "@aws-sdk/credential-provider-node": 3.295.0 - "@aws-sdk/credential-provider-process": 3.295.0 - "@aws-sdk/credential-provider-sso": 3.295.0 - "@aws-sdk/credential-provider-web-identity": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/client-cognito-identity": 3.296.0 + "@aws-sdk/client-sso": 3.296.0 + "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/credential-provider-cognito-identity": 3.296.0 + "@aws-sdk/credential-provider-env": 3.296.0 + "@aws-sdk/credential-provider-imds": 3.296.0 + "@aws-sdk/credential-provider-ini": 3.296.0 + "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-process": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-web-identity": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 7a6f811392a7bb56eef4da0091b55ef67303c3dc667bda853c117b4f4b5ff82016242788fa82f3a5189cc2e1245fc1fbf0f64e4d7c83dc3885b9be4dac3c0741 + checksum: 5daa3d2e69c346f37f9c752c8e25953678d2571c911bb3da4d6b71b7f2ab5af3066890b3116b176a5d1aa9d7163e80c32db70d61bcd901dc0091711fa313a763 languageName: node linkType: hard -"@aws-sdk/eventstream-codec@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/eventstream-codec@npm:3.295.0" +"@aws-sdk/eventstream-codec@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/eventstream-codec@npm:3.296.0" dependencies: "@aws-crypto/crc32": 3.0.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-hex-encoding": 3.295.0 tslib: ^2.5.0 - checksum: a09054c3bd25f3502e089511682dcb4b2db4849e2a7e21df8ae79a9950fe39339774565d790086bb921a4fa2a50519c3f6d8d2a709ace632b927a2361b897325 + checksum: 474fa95fa6cc2e6730d0931337d288e469de270ca53887a5acf4b18c9a11c4149fee491847dd4904757597c1446d0f52b38a61a3c2afd66970dc89acb182d278 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-browser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/eventstream-serde-browser@npm:3.295.0" +"@aws-sdk/eventstream-serde-browser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/eventstream-serde-browser@npm:3.296.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/eventstream-serde-universal": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: da2545cd9fd1eeef261ab1a2a57b6fb0cfc1bb1c68e10fcb41e6c6f5579526d9ea828be3232ae115215838d4b450e7d4cdcfbed318b6f030fc402347700aad9e + checksum: 2c6e203c35d8725809a827830bdc66699f7b78915aa39dbc9df6895edba63715f6039dbd4b72fe2f39e3c60eca48aeeccb193c0fbcdc9c5b09890adb7e6b7c8b languageName: node linkType: hard -"@aws-sdk/eventstream-serde-config-resolver@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.295.0" +"@aws-sdk/eventstream-serde-config-resolver@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: d5fbecb368e9a7adb5c3a6bafe2b1bbbe72dd9323d27b61cb24756045f9aa4f9e9ed88ba147dcd24416d9c5f248872402ba2287ac7d4cf67a7b41ec95cbe69f3 + checksum: f0297397078e4d7e9f116e070c62c90ad2650f26c47cb75beaff045cffef9a51a5005c94292b7ffdf62ff867b57ee11253d8da6ab1fbe3ace26193d9c85bcb5a languageName: node linkType: hard -"@aws-sdk/eventstream-serde-node@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/eventstream-serde-node@npm:3.295.0" +"@aws-sdk/eventstream-serde-node@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/eventstream-serde-node@npm:3.296.0" dependencies: - "@aws-sdk/eventstream-serde-universal": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/eventstream-serde-universal": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: ccd10a1f42478dc7056a65159ef0302347ab76f202656063b93003ed80e5fc8140238ed70853ff28bd57343dd24ab0a55dfeb09a22a81b545d05cb62cbd70316 + checksum: a24aa86efc88c0646fe50381f943cb724e746108a60d4cbf4d241884ab5962f40fb207f2db5a9f4fc7acc985c86b960e0cab8f9853e1153772f48727493f354c languageName: node linkType: hard -"@aws-sdk/eventstream-serde-universal@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/eventstream-serde-universal@npm:3.295.0" +"@aws-sdk/eventstream-serde-universal@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/eventstream-serde-universal@npm:3.296.0" dependencies: - "@aws-sdk/eventstream-codec": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/eventstream-codec": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 3ded9ff551a24b5fd44bace0a3f3c220cc667ce0284a3a64e85cc53e17ac0ac0e1de45a392249a8246c3156dbaf013db28510966aa87dfa3a02188c8a5e17163 + checksum: 9e9068bd9dae4fda72fc073f36960b9e892d2abc5459e853c643a8b69e813f75443a8350834fd38e9c368106f58f09beb105c0d8c3e401eb90c2ea40b3557e4f languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.295.0" +"@aws-sdk/fetch-http-handler@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/querystring-builder": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/querystring-builder": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-base64": 3.295.0 tslib: ^2.5.0 - checksum: 45e23da49cd8df791308c01e68da21359304d07bc349424e85187bbf0c6357534f5cd4c42d3d2cbc094207315ee62231c0699e0d407c926637d849086cd59713 + checksum: cc57acffff2a1dd96ed752a21f76d35f6c597a09ad2a7d5be5b03dba93386a1c3cfaf6c3c5f41b33e9734005424444892f4a173e58ce06dcf6e78421fb7b511b languageName: node linkType: hard -"@aws-sdk/hash-blob-browser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/hash-blob-browser@npm:3.295.0" +"@aws-sdk/hash-blob-browser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/hash-blob-browser@npm:3.296.0" dependencies: "@aws-sdk/chunked-blob-reader": 3.295.0 "@aws-sdk/chunked-blob-reader-native": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: d9ca71a121be656a64e5443bdf92efcf9d7c3bc0e30accf34051021ca987dcc60b33d8a04bd88fd040883c4620322839e7dff2fcf6304432021bc74e158d9163 + checksum: 1dbee7df76b65711c37e009e58bc714e1fe6a2fe5c11294b2d3641ae8776405813b110f5aa5251c512cf824a1e011c5c7b5c25971787b84fcb9fe61a94dca855 languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/hash-node@npm:3.295.0" +"@aws-sdk/hash-node@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/hash-node@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-buffer-from": 3.295.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 3f82dc9904648c0a5984850f0d079dace990c109241d4f55be6560687a710ace41859ceda3528c20ed18d314215b6b650ef7b61c0771232d033bcee0ac71f68e + checksum: 728680b1bc04764dc710003e6b967e176d65ba46c03e53ffebf25f7d87bad2354203e1c1e754ef6b6bcebbc3bde725aac6a1e00cb47118f78419cefed13b5724 languageName: node linkType: hard -"@aws-sdk/hash-stream-node@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/hash-stream-node@npm:3.295.0" +"@aws-sdk/hash-stream-node@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/hash-stream-node@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 8fd3871db335022bfdb4602578d05cb27dc35d4fcde86fb31533eeb72676e05a2d361bc131d2c9acc0e2c32d1bbbc55466b25fad1347eb3be5b8ce86b16fa2a7 + checksum: 3dec341abc783f333e2536dea9191b9e732ad40eecd76cc863eaa455a91e8d184466732fb8fd9652afe83630a9da2cb5073b76360d8f45ecc4a8244ed38c9ef3 languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.295.0" +"@aws-sdk/invalid-dependency@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 706451bbe6cf819b4438d06330211890cd8a173c0242c5b0e367c1ab4cd70ffe1ec4f585e0eb66bfd1054a51e4dd0057c24cc529e78ef8dd3dec52c4ee2c675b + checksum: 5dc57b4396cbde9f594f14dc2a38e0c12e8cca4557b8e78fb5d23e1429e6dfef0b5ed1382da84862bb19abeaf39b92bc4dc7cba7c7a04dbc212cb6971f0553b0 languageName: node linkType: hard @@ -1060,11 +1060,11 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/lib-storage@npm:3.295.0" + version: 3.296.0 + resolution: "@aws-sdk/lib-storage@npm:3.296.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.295.0 - "@aws-sdk/smithy-client": 3.295.0 + "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/smithy-client": 3.296.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -1072,327 +1072,327 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 4d8c75e886774f7bd6ef49348ad0d65e3bf333d0f9f8029fa5e2b64234d2b8334cd8164c41e66f5799c39559e49425e1dbf1c6f1346bb8e792085c1d153ba654 + checksum: 2d609ea842dbef07ed6b4ed5d5593d562332dd81141398e9e41e2f8282e37e8293021fa416c28d3c2430b5ffc16e301d09073fd2d20e85983f2ec2352b19eba2 languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/md5-js@npm:3.295.0" +"@aws-sdk/md5-js@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/md5-js@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 0dddb57a0c460ea2ccf95c5e7268a54f7f40e1dadb33b248baa65cb08bbd2d39cd94a9186bdf0d74a1af84d0af38288f2026447fae414b608de4f312dd3e0c3b + checksum: 88d08cbf13af32c1c95c99727e8024c691c3fc2ff940394513a93524701a091385778bd5829a561991a7e145bf509c3e5e750803f352281df34d7a46d0147c51 languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.295.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-arn-parser": 3.295.0 "@aws-sdk/util-config-provider": 3.295.0 tslib: ^2.5.0 - checksum: a4ebceee6d843df3042310c076df511a0121c8cb0928b34729dad19a21cb3e36f26f7521855142b2f39f06fbaf8d4e8c290a217f742346aa6c261e61bee32b55 + checksum: 9286868fe07706d69a474f097825230e5c1c487ad62514778155acc29ac27ad67a2502c29a2d6c16833f72557fbfb228de8eb38d85678b68bec8da30f0c2466e languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.295.0" +"@aws-sdk/middleware-content-length@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 1dfc9892390198e18b069c5e6a8f3bda37eefb397aa84935110c161620324b58856c3a75dc08c0b11671f080e68f60d6fd1f5e6ab025bc84fd028f7d91ca638e + checksum: 649c0d3f0c1ec607ea9558df09f318bffc763f66501263136791571206c148ca7ca691cb3211fe18bd09aacdc69545fdc5ffff4daeac73323864b5cb76b5c072 languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.295.0" +"@aws-sdk/middleware-endpoint@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.296.0" dependencies: - "@aws-sdk/middleware-serde": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/signature-v4": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/url-parser": 3.295.0 + "@aws-sdk/middleware-serde": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/url-parser": 3.296.0 "@aws-sdk/util-config-provider": 3.295.0 - "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: b7c69dbf44f3dd8cd22e4bb818352e74ef2460fc682e29c9394e93a2c49466aed5ee25996b0338bc2548d01748cfeca1c5547bef6c2741f54cc8528771d69cd6 + checksum: 1fa4c3f91618e255853ef1e155fa6591ee1daf88daa78ec6c2512f9bbf64f509a439402fdc22a6c8aa1b828c5ecb4b86b70e2f593ea89dabbb63a1736c490472 languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.295.0" +"@aws-sdk/middleware-expect-continue@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: f070c75c1b91ee2a171c8973aa6421c0efdbe9a6e3825649ddf1cabfc4341100c46945408c26520a682d54c808082f2c2844d3b8d96e012388d0d56f92f9422e + checksum: 8ccebf2f5d351c6495e5699016e7c132c8c9f19fa272910d443e63df5fbd7ba84da1b31cd56cf6a0e1756f89970e90b199e45ef52f551e11e4b2593983889708 languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.295.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.296.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 "@aws-sdk/is-array-buffer": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 5b070132211ccb24e6bcd4d4ef0cd89339e72e5abb9cd9e05bcdda270f55b8594e6b37a18ecdd03ca9e7f72ea955bc1446896ac69ca830fe4b8d39c14aa6b520 + checksum: 9191bf0b950699dd4eef575cdda598d54bdf90633bd683f0103aa9b9c44090190c7316b59619748803e0ec926444cf376ce89dc055d1675e3671bf108865c3a5 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.295.0" +"@aws-sdk/middleware-host-header@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: c335cf962da30451b57980d677a154759805c695f44e0c9bd678ece156d017cfd578db20a8b862bde90fd7a0b07952809dc2b84f354c6ac6c0c3bb10e08dbede + checksum: 8b5b2b26b204bcc8587cbd659a052b896c4d76dd1633e99d7c035b7b779d2b90beff4878481b8b5b28deeb363bf276584f371a5f7c88cecda43a18c5ae1ab7aa languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.295.0" +"@aws-sdk/middleware-location-constraint@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: cc526f8d4094c4d62b0493324b5706b860cda274aecc72559474cd11818d58a8050e821d3f7115db1bc456495b73041946f6fbd69cb385db51dfd1bd812d8bec + checksum: 00378f43d08abe45d85c386c2c4acd5b80c16158d94f61341da85ba979731b5ce4c6ecaf706d3356b680a459fa8c26119845997a1e3d5bd24adb3ae98e945d3e languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-logger@npm:3.295.0" +"@aws-sdk/middleware-logger@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-logger@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 205cb8355500d3a7c0284801b593ad3d201838f9fcd15f646b3e4d2d538bb5db3277e4cf89df5e10fc372f1ed36286c1a275f37f64e311421cfb0566d9ae74fd + checksum: c006c03d24e26bbc1f9089987a0987b7627e1f7e1a5215d75e7132d2905f77f867d78806b968bee6e6830ddb94ddae8c1cead785b3fe4762e66da10584218ca9 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.295.0" +"@aws-sdk/middleware-recursion-detection@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 08697fab478216a879c478e34818e414388221101daa4495c080ec963493a236bb357133acb5eb4a6919626593dcf6b5df8efca0cd743681c065ad67de1f824f + checksum: 2d8b8e130b6410e95340bca961e966c36f54154041aba3b0a308b0b6786cea36e026f28b910ac13411f333e445dbcc122801366bb55f64fab5cd76e05bb70257 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-retry@npm:3.295.0" +"@aws-sdk/middleware-retry@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-retry@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/service-error-classification": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/util-middleware": 3.295.0 - "@aws-sdk/util-retry": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/service-error-classification": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/util-middleware": 3.296.0 + "@aws-sdk/util-retry": 3.296.0 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: 0766abb3a7d97620d1a6201e716f19ba123ee45a3179d261e38f2ce73e163cc3b8d42d76acd08c7bfc96190b9a65fd2e39a38cf59aeceea8d59dbd3eb2e618d4 + checksum: 9672f0654606581e27a2f79b4ff2436539f115700319cd1b1e8373a3eb54f1f95820a38fe2ed4da04c7a8d09e8962e3e7412d2fc9835f4d165c02b2ac2d3138d languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.295.0" +"@aws-sdk/middleware-sdk-s3@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-arn-parser": 3.295.0 tslib: ^2.5.0 - checksum: b0883f962228188bfc9835901b78fcb2ea43aac0e8c51e996baed0a4fc161c04cb383863bd0b42183ccae787cca59e126eb005e588c90b579a984f329be94708 + checksum: f8be243d930d887c1f4dd3d850a382bcf0e90a5fec645fa357ebfd38bebba33428997927b2411a07c097cba50347b989b366b43d372553cf7b20a64740427ddc languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.295.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-hex-encoding": 3.295.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 24858600b1d3a79385a2b6da6dcd1fc161cc53390550bcb3553a2c4f25e5c781ffcde2c827013f6530141f478bbaacf33b847f745d968ec36e42a2a29d1c1032 + checksum: 5a62ebf80bee110bde2b0c5da271c24db5af484bf50ade8cac2211e2acb3bc0566fdda1bd885110fe463cfa18c53b464af12f0d3c297201e1ba7f2275f0fd10a languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.295.0" +"@aws-sdk/middleware-sdk-sts@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.296.0" dependencies: - "@aws-sdk/middleware-signing": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/signature-v4": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 758f0194f82d67571b0d093a006df121c9efeac5950b818c85a18ece255854c81492c007e24862c1d2bdb0e5fbd054e4a879fbb277bcd036a4b286093ccf606e + checksum: 5caff7928034f48041a353c439c647aa05c8ea6e7793568a5a2a01ff0dd71e2ecdb3aa6be70209bbd076e4c14a8764aca48de59e8889d0b7ac701ee806e71882 languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-serde@npm:3.295.0" +"@aws-sdk/middleware-serde@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-serde@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: ab5db265dc21a431cd8d617e3d87f815eeebdd145459892e0ae57eeed40f73af1f26d4eb2bd592e2132523ea944000ff6c5e748db04982f686e8f1c8b46643c1 + checksum: 337bf9c4a621d6ef3a5c5d16273633f098e12e3581e08a9543d48e3a63ba6b70472f26f4e4e46040ed43fc1a498f8f046b66c28fc629f4a3a74b6a331609fd52 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-signing@npm:3.295.0" +"@aws-sdk/middleware-signing@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-signing@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/signature-v4": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: a7fd077475576874666f9baca92fe768403472f36113fa0ada7bcafb943765f025a2fe2ff32cee58bf1d9454f769ea2e2b1b1ca872cbf27f072dd899f4136552 + checksum: 91b53744c1ddda26041f957762e80a5d8714724df70e5d20985898b10659d4520bd2eb9929622564f36b5e8c872d69d99f2f964a5741b1be4d675ff4bc465358 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.295.0" +"@aws-sdk/middleware-ssec@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: bbdfc6304961c6a47be55aa13691afaec5cb9741637ac224caee1ac760e2e1dd047258b614242147400a3ff23040bf637e7b8bc19b5b1109cf357913e4619217 + checksum: 37795d8094ee6209d76ef7423eb967c1ab1330ca5242c176230972004b36cdeda1328e9ed8626c33f16d1eff7df7a9d0d90df9ad298fad4d22a1ba81bde4d91e languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-stack@npm:3.295.0" +"@aws-sdk/middleware-stack@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-stack@npm:3.296.0" dependencies: tslib: ^2.5.0 - checksum: 53f524b29829019e51654d93caa0836b23956fb97827fc6c9fc3359ed4a1440d7e5ad9f3141fd854481de3724bba19eedd736bf67e91fca95175606990058b49 + checksum: 1fb787c066aa48612e0f7ddd4932c3a9fbfd37eef5838bd83c06bd113d11af76f098e2b09a431ab039fb3f3628b1b80bdaca1200a10d9ec9cde56134e40b6995 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.295.0" +"@aws-sdk/middleware-user-agent@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/types": 3.295.0 - "@aws-sdk/util-endpoints": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/types": 3.296.0 + "@aws-sdk/util-endpoints": 3.296.0 tslib: ^2.5.0 - checksum: bdd62ea49f85b2a85791c5851e407da78065e0b9805bb8f9a614435b5ed75788b59e4efa8286b38afb5adc0902919e4d3060bc47500c8ead364119b72dce4558 + checksum: ac72cace0df77edaeba789f15e9f6b9bc28ac8f60cf3af5f4a5b45415346f9eb8c32a76294150ed73bdb9b1a777bf1e21d649e11d1e0c9c316b18068e2176719 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/node-config-provider@npm:3.295.0" +"@aws-sdk/node-config-provider@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/node-config-provider@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: daa6a26dd1c244e2d14bd35fa0258997cb9991cd47fa4d1fb1aa366a9bf7f8566a5997afadf34068acea4926daefcea589f09912585ca170ce2e57ba2f6bd5de + checksum: 367dc07dffc8673d4c197773a023b79cbfb5dbd36ed02aeaa63ccd1a801e88164c2a042aadc51344198af3a6919db1d56302ce5e14ff8eaa7b9cf708bbbac2d9 languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.295.0, @aws-sdk/node-http-handler@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/node-http-handler@npm:3.295.0" +"@aws-sdk/node-http-handler@npm:3.296.0, @aws-sdk/node-http-handler@npm:^3.208.0": + version: 3.296.0 + resolution: "@aws-sdk/node-http-handler@npm:3.296.0" dependencies: - "@aws-sdk/abort-controller": 3.295.0 - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/querystring-builder": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/abort-controller": 3.296.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/querystring-builder": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: b8cef019fe989bce4d4f0cb1c70355519e8d05f084ab0c9799b959dbaa5ac88c6efd00d72e76636f999afac896787dfdde69b06695efcbf77e7b868bc618bae4 + checksum: 8766f46047f1667363a34433c9a867b4e5b27b400252418df2d5b110b6f85ff46a8aeff8b96132f7b39fc2bafa54fb1ae0e0fe44da84c8222349cea05cc7cc38 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/property-provider@npm:3.295.0" +"@aws-sdk/property-provider@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/property-provider@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 1678c7a1bf3957659923ef9566293027c0c1b08df6fd01f189d4c2ba8f46591a6424371d0958786bf15c277e2f72daf54d98f8eeb8ae91117b839cc7cafa8d23 + checksum: b456e82002c8302b2ebe328446346381c6d34b63d64f797ffd5b24d9f5cb0d739127d21657587c76a351fa6f56f43585d66020df370ae64f7cd9718c26175fff languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/protocol-http@npm:3.295.0" +"@aws-sdk/protocol-http@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/protocol-http@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 88b4cb31027b372d1b00e136db49e6170dc24782c31f064ce45971dc7b0324a6af491cab061e56b7cd5abfdc0af887899f8d4f9eba967c808c46cf1f99ba9b5e + checksum: b283a1e6b6a6ba544bf833929d19f988747a451a1e1232f440b9412918932d099f29c0459dd398163b7f7bbae4c372166cc36a5e5afc1343d3085884e36879bc languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/querystring-builder@npm:3.295.0" +"@aws-sdk/querystring-builder@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/querystring-builder@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-uri-escape": 3.295.0 tslib: ^2.5.0 - checksum: 328c9ab43cc8216298d8ca35b398eaf94f87d7819f38d62763eecfbaeeb9abe5919de24b861d6e5d4b1537477c150cc313dd6f24ad03d1f94f96c31c858fa815 + checksum: 54028a5087126cdf48cf7abf4cc12c5d761c30aa97b23bab001ae387179cd95974a9332aacc6a74936f3ce818067ded67383231d5839b0456c5ed326bcaeeac5 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/querystring-parser@npm:3.295.0" +"@aws-sdk/querystring-parser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/querystring-parser@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 378cbd5520abeca2d521a9b6e94721572b95c4c09e4930df07e2692ab1a89bcfe922da2e8ef6c193bb5814aebff898c799815a1470b24119e71069a05d66e66c + checksum: b60b003302b4823609f9f585acdc3b7e48444aeaaf941549626066a6a74579201b473cdaa0ab1d59e63c4c8eec5bc9380464ccfeca47077ec4b5bc20fea4b190 languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/service-error-classification@npm:3.295.0" - checksum: 1d062e3d836b579a468c082ad159a58636aa85b3c8c60b68e3be97eb27dd45bb62844278a9a2da8093524721e3e27e343d8229ae48dc9f64f6139cbc34eaf9be +"@aws-sdk/service-error-classification@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/service-error-classification@npm:3.296.0" + checksum: f4f53591c636971bb2766340137a4816619c8ede0955dff37f795f03a0ed18534042f3ab9ec898d9f3fba98309322854b7442caeb919590f241ac21b3b18de74 languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.295.0" +"@aws-sdk/shared-ini-file-loader@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: c09e552bdd2a4e21a8316aaf2625d09923de007b72b9edbed797701886c8ccc5a6e06fc183f5b1cfcc7c4eae76511934c1c37f2458074cfae34abe78cf496a7c + checksum: a9e505957eefaedfa1c4ad09eea3d7bc5e4fab65ea40df4e46a1a2db6e461a63d4fc53c801be5d5bb189c634b157262154bf8840bacc02ecf0ffeaa10fb8b2b3 languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.295.0" +"@aws-sdk/signature-v4-multi-region@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.296.0" dependencies: - "@aws-sdk/protocol-http": 3.295.0 - "@aws-sdk/signature-v4": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/protocol-http": 3.296.0 + "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-arn-parser": 3.295.0 tslib: ^2.5.0 peerDependencies: @@ -1400,66 +1400,66 @@ __metadata: peerDependenciesMeta: "@aws-sdk/signature-v4-crt": optional: true - checksum: 6917d64472a36223bec6a7d1020a244db6f9f0e3374d1309a323b0d86c32d83af4a0d1727d9b907a8c6108a01b55878fd95dd47342d2b41de2df9f82a9dd8afe + checksum: 48bd01847c8ccb346bbf2ddf341da5076e43a54a980eff7102a5aa0801ca6408789218602c89b55fc377cde29e6b8767a4157aaa585ce088c7540663469bbdba languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/signature-v4@npm:3.295.0" +"@aws-sdk/signature-v4@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/signature-v4@npm:3.296.0" dependencies: "@aws-sdk/is-array-buffer": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-hex-encoding": 3.295.0 - "@aws-sdk/util-middleware": 3.295.0 + "@aws-sdk/util-middleware": 3.296.0 "@aws-sdk/util-uri-escape": 3.295.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 431b0c528a710cdbc49c73887acc9d5eb296bd88cbcceba04eeb6be5cfb33a2ffd7e4c4bccba124263c249198924d58a7391e2d4b19b98df43e03f74faeb96af + checksum: fc208a696d38aeae1908dba7e2c9ebf5c84d5585f3620387fe0297d283562d8e9c6125ab8973a0f4740f25472dda0ac3280c5411b3d8090fea67a0e8bd5d7689 languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/smithy-client@npm:3.295.0" +"@aws-sdk/smithy-client@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/smithy-client@npm:3.296.0" dependencies: - "@aws-sdk/middleware-stack": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/middleware-stack": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 82c485644b617bdf4659b48d5f4c9b34e27adafe01b9f59b3ed6970cf541fe326e22ecc206df4021ec357cf4e98c3dc64e0877fb2afd79c68302b7770c4a5d7d + checksum: 8b7a626c1fd8b253f1f5b365c340626a9495aa6ba83d246be50f559d8274259daa6386f6931c9db41d3250ee3fd9d2d63646f4f0d7c2f793fed5aa7c87593676 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/token-providers@npm:3.295.0" +"@aws-sdk/token-providers@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/token-providers@npm:3.296.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/shared-ini-file-loader": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/client-sso-oidc": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/shared-ini-file-loader": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 6c35af6049c2a4c4abba16d332a3f1724de9c28b4e7c81b2f73e0a11c53726fe8ab00116c9340193fb32711fedbcea3e661a1aa833139962dce31d2dc6813fc1 + checksum: 02d5294fcec153977a7edff3b1843a9c935b11b59adbde26dc84cc5e793d2850b9d4736b29425f384a5c01ca0d747f5b3686d42e1370dae8ed9bc298eda1d888 languageName: node linkType: hard -"@aws-sdk/types@npm:3.295.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": - version: 3.295.0 - resolution: "@aws-sdk/types@npm:3.295.0" +"@aws-sdk/types@npm:3.296.0, @aws-sdk/types@npm:^3.208.0, @aws-sdk/types@npm:^3.222.0": + version: 3.296.0 + resolution: "@aws-sdk/types@npm:3.296.0" dependencies: tslib: ^2.5.0 - checksum: 4f2661b9f7ac7e441bf07f720c1cdecfa9d24089bc262693aebc9e747fc72e8dbd11dc69415a4abea4c8065564a8f135eac6705302b9fece0687b427028bf66e + checksum: 3cff062f8cb08cd5473c40076ca06f8d93c80fa11e64a7c2d8273fcc0107e709e08a669779f9e3e70d35b3ae7fc3abafd2885f74fa9f8ba57042e5167f72bd2a languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/url-parser@npm:3.295.0" +"@aws-sdk/url-parser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/url-parser@npm:3.296.0" dependencies: - "@aws-sdk/querystring-parser": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/querystring-parser": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 3ceab4ed2e7faf0952934a6cd58f7fc76e0785aacfd163caa95360bb0669c0ffd2d9556f3a98add31d0ee2746757664a3a98f5868e8549f8eac1bddd043d2a32 + checksum: eb76e25571d9d13f7a335f36dc5f7466a7d7e8a6e26a5a0ea2529cda36d0ad29d0d6c5d418ac8a81a53a480a57a1b8aced93a43a08060eb0fb8e4259ab2e5048 languageName: node linkType: hard @@ -1519,39 +1519,39 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.295.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.296.0" dependencies: - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 7b0bbad70d23cab20b6e8c47b5b1625e45f5f51d982b95890a75d2d8b9ede9635f20fc3ed5cc0cd9d7d7df08754a4ba94d1ea219d860c0514467cfe628fbb084 + checksum: ae8c6b03d9de2fc9c320ae4aa65027604658aff95483d3eccdc87307e683da2c6943f863a98f74af7c7f9cae74d0b1df7e6f83592cd0b5eff0ff8eba48fca127 languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.295.0" +"@aws-sdk/util-defaults-mode-node@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.296.0" dependencies: - "@aws-sdk/config-resolver": 3.295.0 - "@aws-sdk/credential-provider-imds": 3.295.0 - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/property-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/credential-provider-imds": 3.296.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/property-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 43b9e277bd2ef485b5c0a1c86ffbbfd314b2ae6718d2802de45a53ab5c532dd5c5d6cd177ed8849c6c2bf42919382057ff157cf06722229a3f8b0e9eceaf7275 + checksum: 0cba68364659c3e28a351a42b9e5c80441388a1963187c4c349b63d4ebefed6bbffb8dfe4cb372f7ec29dd005f6d9f2a05a46b4bfc4e465c26cd0926b06134d2 languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-endpoints@npm:3.295.0" +"@aws-sdk/util-endpoints@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-endpoints@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 3574f29269dbb42ade8c4b8e95adf98e89d6cc9653b186a2e0e32f3a65c9a30c8d3f45e86c76ec17503c24638beac84e31120d71d7db59cf773c62bcb32e69b0 + checksum: 9ff3b1c39123e8a88c2dcc1e81757f99cfd787be2039b9172e6a1a8b48b04d78712c2082dd1762e41b8b0a6c2f8d79aa06c571ea7ee622351634e5c40a069643 languageName: node linkType: hard @@ -1573,48 +1573,48 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-middleware@npm:3.295.0" +"@aws-sdk/util-middleware@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-middleware@npm:3.296.0" dependencies: tslib: ^2.5.0 - checksum: 7b59b64d3d7ea09b899ddd1cffdae710be7a6f21b1431c27184529bf6db804ca859ee738e7425f5557e6810ed0f5f800a8ecd866170a63d1fe3721938aa038bc + checksum: 9743a6279208cdb25fc6a5d5800477dfa7f10c25e65cfcb7e0721613c0640df21bef7fe6cb18f27ee3ff470c0be2ff06cb6afdefe234d418c7ac17d9a3563301 languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-retry@npm:3.295.0" +"@aws-sdk/util-retry@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-retry@npm:3.296.0" dependencies: - "@aws-sdk/service-error-classification": 3.295.0 + "@aws-sdk/service-error-classification": 3.296.0 tslib: ^2.5.0 - checksum: a1825de57584d0670b90f2d234430c46960e2076b6d05241cf754c0366ba9daeb700fa866d0084ce66a6b13d4a9305e22a6eeadd16b90516eb9b3b92b63c9934 + checksum: f225fc4eb0933eda3df069d2b0028d8eed76be9b7b871b7bf601c4f5f17012ebb6ebb194df26fc141c9e77bad86d5cbdb79113fe5624d3c2c9d3441f96f580b3 languageName: node linkType: hard -"@aws-sdk/util-stream-browser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-stream-browser@npm:3.295.0" +"@aws-sdk/util-stream-browser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-stream-browser@npm:3.296.0" dependencies: - "@aws-sdk/fetch-http-handler": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/fetch-http-handler": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-base64": 3.295.0 "@aws-sdk/util-hex-encoding": 3.295.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: c343e2c7185ebd4a2dc289f6ed9ee882a9024fd772f9ff40be5692bec20bc281e19248b94c7b6a59957363990b64a3b488ee50ef450c552e268170334ffb0fe8 + checksum: 52d0fd8919a9990eeaa0207d1c91396414ee5015684b0d6279f0ec250c6a32e5daf3fec6bb1bb0830901d873997c0c5a66f8c7721cec7bdc0dc828df56f41262 languageName: node linkType: hard -"@aws-sdk/util-stream-node@npm:3.295.0, @aws-sdk/util-stream-node@npm:^3.208.0": - version: 3.295.0 - resolution: "@aws-sdk/util-stream-node@npm:3.295.0" +"@aws-sdk/util-stream-node@npm:3.296.0, @aws-sdk/util-stream-node@npm:^3.208.0": + version: 3.296.0 + resolution: "@aws-sdk/util-stream-node@npm:3.296.0" dependencies: - "@aws-sdk/node-http-handler": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/node-http-handler": 3.296.0 + "@aws-sdk/types": 3.296.0 "@aws-sdk/util-buffer-from": 3.295.0 tslib: ^2.5.0 - checksum: c3adcbfe13416e604284fccb4cafbedf7fdfdaf1905cfcab9e8d35db57ffcbac68631085139803a30e56b96c59ec93c47573aabe5106fe05a855b41ccc4bd4b3 + checksum: b1e4a196be6f24c2c652d22d405ce3238769fd64267c157e480309b18531d693cae0c49ade10869b1f0f0fc4b7d5c2835fdd51562c434a09774d4606ee652606 languageName: node linkType: hard @@ -1627,30 +1627,30 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.295.0" +"@aws-sdk/util-user-agent-browser@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.296.0" dependencies: - "@aws-sdk/types": 3.295.0 + "@aws-sdk/types": 3.296.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 7048f1f4f0d9308586dc2ed9c7ddf49fb5bd095a98a65ff7425430e584292e88402573ddf0366581deb77ebf30b788190c3b59bb3fd8845c1ef8316b1c47c754 + checksum: 377146a591ee2ddced39cb4b624678ef7e38e7a0bc105da4459f939ad716ef2b3c28fa0800ea01d17f1f610b8cb103a8adfd9ebe696427ccf69e1721fcb986c9 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.295.0" +"@aws-sdk/util-user-agent-node@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.296.0" dependencies: - "@aws-sdk/node-config-provider": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/node-config-provider": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: a1dc47812eec1483d8d407e47ab6a23d4dce558a7696079704f05b1d0ee5c2384ce9ceea5cb3315236fec91dccf78bd80500558f301d9b303ca85e7707376cba + checksum: 20b370e1ebee13f70d7f2ee804c6069e5bcaa676591ba2aed09ef28fbd05ac8e201b0473dd0572e9e47c98bbc27f5b55d61ad469f330833576a7972c5c387be9 languageName: node linkType: hard @@ -1673,14 +1673,14 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-waiter@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/util-waiter@npm:3.295.0" +"@aws-sdk/util-waiter@npm:3.296.0": + version: 3.296.0 + resolution: "@aws-sdk/util-waiter@npm:3.296.0" dependencies: - "@aws-sdk/abort-controller": 3.295.0 - "@aws-sdk/types": 3.295.0 + "@aws-sdk/abort-controller": 3.296.0 + "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 41b38c064849b47d0ebffd599917ef5fee3e23fb0f13aff57f8699ad0289591e8d9c363084133de662043dfbf7b5e9e3580a19745b28c09e7eb3078470b02578 + checksum: 9984297149735df1791791c2f02077bab47501113393efbef619f6af9d19fb1c44a6ac79be73dbc6725a9eb3343b77c04068dcdc0797ddc7da7b9f93df810d7c languageName: node linkType: hard From a00b77a3f124f656073a994324b4147949490dac Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 10:36:03 +0100 Subject: [PATCH 457/511] GOVERNANCE: bullet list style consistency Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index a3ebb1cef1..c217d73f42 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -65,9 +65,9 @@ An Organization Member must meet the responsibilities and has the requirements o - Accepted PRs - Helpful PR reviews - Resolving GitHub issues - - Or some equivalent contributions to the project. + - Or some equivalent contributions to the project - Must have been contributing for at least 3 months -- Or is the member of a team that owns a project area, in which case the above requirements do not apply and the member is instead vetted by the project area maintainers. +- Or is the member of a team that owns a project area, in which case the above requirements do not apply and the member is instead vetted by the project area maintainers ### Becoming an Organization Member From eeb646e8935113bfd9d9039ac23b34b3a6401e68 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 11:25:14 +0100 Subject: [PATCH 458/511] GOVERNANCE: remove a bonus bullet Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 1 - 1 file changed, 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index c217d73f42..7f36acc778 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -60,7 +60,6 @@ An Organization Member must meet the responsibilities and has the requirements o ### Requirements -- Must have successful contributions to the project, including at least one of the following: - Must have at least 10 contributions to the projects in the form of: - Accepted PRs - Helpful PR reviews From d7c8d8c52dd74885360ee81e6baadd928c930ad6 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 22 Mar 2023 11:25:17 +0000 Subject: [PATCH 459/511] if the title is set use it in the group profile Signed-off-by: Brian Fletcher --- .changeset/curvy-rocks-guess.md | 5 ++++ .../GroupProfile/GroupProfileCard.stories.tsx | 30 +++++++++++++++++++ .../Group/GroupProfile/GroupProfileCard.tsx | 4 +-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 .changeset/curvy-rocks-guess.md diff --git a/.changeset/curvy-rocks-guess.md b/.changeset/curvy-rocks-guess.md new file mode 100644 index 0000000000..db55ef422e --- /dev/null +++ b/.changeset/curvy-rocks-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +allow the title of the card to use the title of the entity, if it is set. diff --git a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.stories.tsx b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.stories.tsx index f183ab4d8e..526d7c9c4c 100644 --- a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.stories.tsx +++ b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.stories.tsx @@ -128,3 +128,33 @@ export const ExtraDetails = () => ( ); + +const groupWithTitle: GroupEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { + name: 'team-a', + description: 'Team A description', + title: 'Team A title', + }, + spec: { + profile: { + email: 'team-a@example.com', + picture: + 'https://avatars.dicebear.com/api/identicon/team-a@example.com.svg?background=%23fff&margin=25', + }, + type: 'group', + children: [], + }, + relations: [dummyDepartment], +}; + +export const UseGroupTitle = () => ( + + + + + + + +); diff --git a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx index 5e795b2710..e8f06e49b3 100644 --- a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx +++ b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx @@ -81,7 +81,7 @@ export const GroupProfileCard = (props: { } const { - metadata: { name, description, annotations, links }, + metadata: { name, description, title, annotations, links }, spec: { profile }, } = group; @@ -99,7 +99,7 @@ export const GroupProfileCard = (props: { const entityMetadataEditUrl = group.metadata.annotations?.[ANNOTATION_EDIT_URL]; - const displayName = profile?.displayName ?? name; + const displayName = profile?.displayName ?? title ?? name; const emailHref = profile?.email ? `mailto:${profile.email}` : '#'; const infoCardAction = entityMetadataEditUrl ? ( Date: Wed, 22 Mar 2023 11:27:47 +0000 Subject: [PATCH 460/511] make changeset less sloppy Signed-off-by: Brian Fletcher --- .changeset/curvy-rocks-guess.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/curvy-rocks-guess.md b/.changeset/curvy-rocks-guess.md index db55ef422e..0ce46f787d 100644 --- a/.changeset/curvy-rocks-guess.md +++ b/.changeset/curvy-rocks-guess.md @@ -2,4 +2,4 @@ '@backstage/plugin-org': patch --- -allow the title of the card to use the title of the entity, if it is set. +Allow the title of the group profile card to use the title of the entity, if it is set. From 9142df8151a6e6ef02a260c6806a6d61154ead3e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 13:16:17 +0100 Subject: [PATCH 461/511] GOVERNANCE: update link to org membership template Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 7f36acc778..3314e40993 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -70,7 +70,7 @@ An Organization Member must meet the responsibilities and has the requirements o ### Becoming an Organization Member -Open an issue towards [the community repository](https://github.com/backstage/community) using the [org membership request template](#TODO). +Open an issue towards [the community repository](https://github.com/backstage/community) using the [org membership request template](https://github.com/backstage/community/issues/new?template=org_member.yaml&title=Org+Member%3A+%3Cyour-github-login%3E). ### Privileges From d0befd3fb23979f270ba91fc0ce9e4297deb9cd4 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 22 Mar 2023 14:20:14 +0100 Subject: [PATCH 462/511] Fix guest/custom auth Signed-off-by: Eric Peterson --- .changeset/all-my-auth-wanna-ride-today.md | 5 +++++ packages/core-components/src/layout/SignInPage/providers.tsx | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changeset/all-my-auth-wanna-ride-today.md diff --git a/.changeset/all-my-auth-wanna-ride-today.md b/.changeset/all-my-auth-wanna-ride-today.md new file mode 100644 index 0000000000..40537c30f4 --- /dev/null +++ b/.changeset/all-my-auth-wanna-ride-today.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed a bug that could prevent auth from working when using the `guest` or `custom` auth providers. diff --git a/packages/core-components/src/layout/SignInPage/providers.tsx b/packages/core-components/src/layout/SignInPage/providers.tsx index 5e7ab7b7be..e456a6948b 100644 --- a/packages/core-components/src/layout/SignInPage/providers.tsx +++ b/packages/core-components/src/layout/SignInPage/providers.tsx @@ -177,7 +177,10 @@ export const useSignInProviders = ( }; const handleSignInStarted = () => { - localStorage.setItem(PROVIDER_STORAGE_KEY, provider.config!.id); + localStorage.setItem( + PROVIDER_STORAGE_KEY, + provider?.config?.id || provider.id, + ); }; const handleSignInFailure = () => { From 8b9e8ece40308187c1edcc0ec40787570606e930 Mon Sep 17 00:00:00 2001 From: Dmitriy Lazarev Date: Wed, 22 Mar 2023 16:23:36 +0400 Subject: [PATCH 463/511] Allow to pass lazy GraphQL endpoint url to graphiql plugin Signed-off-by: Dmitriy Lazarev --- .changeset/twelve-vans-sell.md | 5 +++++ plugins/graphiql/api-report.md | 2 +- plugins/graphiql/src/lib/api/GraphQLEndpoints.ts | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/twelve-vans-sell.md diff --git a/.changeset/twelve-vans-sell.md b/.changeset/twelve-vans-sell.md new file mode 100644 index 0000000000..25c4a077fd --- /dev/null +++ b/.changeset/twelve-vans-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-graphiql': patch +--- + +Allow to pass lazy GraphQL endpoint URL diff --git a/plugins/graphiql/api-report.md b/plugins/graphiql/api-report.md index c96966c585..ea765d4d2b 100644 --- a/plugins/graphiql/api-report.md +++ b/plugins/graphiql/api-report.md @@ -16,7 +16,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; export type EndpointConfig = { id: string; title: string; - url: string; + url: string | Promise; method?: 'POST'; headers?: { [name in string]: string; diff --git a/plugins/graphiql/src/lib/api/GraphQLEndpoints.ts b/plugins/graphiql/src/lib/api/GraphQLEndpoints.ts index 7f9c0ca4ee..52dc40fd81 100644 --- a/plugins/graphiql/src/lib/api/GraphQLEndpoints.ts +++ b/plugins/graphiql/src/lib/api/GraphQLEndpoints.ts @@ -26,7 +26,7 @@ export type EndpointConfig = { id: string; title: string; // Endpoint URL - url: string; + url: string | Promise; // only supports POST right now method?: 'POST'; // Defaults to setting Content-Type to application/json @@ -66,7 +66,7 @@ export class GraphQLEndpoints implements GraphQLBrowseApi { ...config.headers, ...options.headers, }; - const res = await fetch(url, { + const res = await fetch(await url, { method, headers, body, From 23576b9c23544de6a3a74976335b0a06b26b4aeb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 15:15:37 +0100 Subject: [PATCH 464/511] OWNERS: formatting and update team names Signed-off-by: Patrik Oldsberg --- OWNERS.md | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/OWNERS.md b/OWNERS.md index e41d8c6b62..f7af243b69 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -3,6 +3,8 @@ ## Core Maintainers +Team: @backstage/maintainers + | Maintainer | Organization | GitHub | Discord | | --------------- | ------------ | ----------------------------------------------- | ------------- | | Patrik Oldsberg | Spotify | [Rugvip](https://github.com/Rugvip) | `Rugvip#0019` | @@ -10,33 +12,35 @@ | Ben Lambert | Spotify | [benjdlambert](https://github.com/benjdlambert) | `blam#2159` | | Johan Haals | Spotify | [jhaals](https://github.com/jhaals) | `Johan#0679` | -# Project Areas +## Project Areas -## Catalog +These are the separate project areas of Backstage, each with their own project area maintainers -Team: @backstage/catalog +### Catalog -| Name | Organization | GitHub | Discord | -| ---- | ------------ | ---------------------------- | ------- | -| TBD | TBD | [TBD](http://github.com/TBD) | TBD | +Team: @backstage/catalog-maintainers -## TechDocs +| Name | Organization | Team | GitHub | Discord | +| ---- | ------------ | --------- | ---------------------------- | ------- | +| TBD | Spotify | Chipmunks | [TBD](http://github.com/TBD) | - | -Team: @backstage/techdocs +### TechDocs -| Name | Organization | GitHub | Discord | -| ---- | ------------ | ---------------------------- | ------- | -| TBD | TBD | [TBD](http://github.com/TBD) | TBD | +Team: @backstage/techdocs-maintainers -## Search +| Name | Organization | Team | GitHub | Discord | +| ---- | ------------ | ------------ | ---------------------------- | ------- | +| TBD | Spotify | Pulp Fiction | [TBD](http://github.com/TBD) | - | -Team: @backstage/search +### Search -| Name | Organization | GitHub | Discord | -| ---- | ------------ | ---------------------------- | ------- | -| TBD | TBD | [TBD](http://github.com/TBD) | TBD | +Team: @backstage/search-maintainers -# Sponsors +| Name | Organization | Team | GitHub | Discord | +| ---- | ------------ | ---- | ---------------------------- | ------- | +| TBD | Spotify | BUX | [TBD](http://github.com/TBD) | - | + +## Sponsors | Name | Organization | GitHub | Email | | ----------------- | ------------ | ------------------------------------------- | ----------------- | @@ -44,18 +48,16 @@ Team: @backstage/search | Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | dzolo@spotify.com | | Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | leem@spotify.com | -# Organization Members - -People that have made significant contributions to the project +## Organization Members | Name | Organization | GitHub | Discord | | ------------- | ------------ | ----------------------------------------------- | ------------------------------ | +| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | | Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | | David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | | Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | -| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | -# Emeritus Core Maintainers +## Emeritus Core Maintainers | Maintainer | Organization | GitHub | Discord | | ------------ | ------------ | --------------------------------------------- | -------------- | From a4e9f1e250d42a28fa016a3f45897f23bc8aec4f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 16:38:14 +0100 Subject: [PATCH 465/511] microsite: uppercase TL;DR in blog post Signed-off-by: Patrik Oldsberg --- microsite/blog/2023-03-15-backstage-turns-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.md index fffd4a70b0..317cdc0c4d 100644 --- a/microsite/blog/2023-03-15-backstage-turns-3.md +++ b/microsite/blog/2023-03-15-backstage-turns-3.md @@ -7,7 +7,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4 ![backstage turns 3 header image](assets/2023-03-15/birthday.gif) -**tl;dr** Spotify released Backstage into open source three years ago today. Since then, the community has grown by leaps and bounds to stretch across the globe (and the Discord server!). Now that Backstage is a threenager, the growing pains are real. So, on this birthday, we want to cover our collective efforts to make it easier to adopt and contribute to Backstage. +**TL;DR** Spotify released Backstage into open source three years ago today. Since then, the community has grown by leaps and bounds to stretch across the globe (and the Discord server!). Now that Backstage is a threenager, the growing pains are real. So, on this birthday, we want to cover our collective efforts to make it easier to adopt and contribute to Backstage. From 7cd6211f89f69f04ffb3499735b5f564f818bf33 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 17:27:52 +0100 Subject: [PATCH 466/511] OWNERS: add pkuang as org member Signed-off-by: Patrik Oldsberg --- OWNERS.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/OWNERS.md b/OWNERS.md index f7af243b69..d3adcfc4ab 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -50,12 +50,13 @@ Team: @backstage/search-maintainers ## Organization Members -| Name | Organization | GitHub | Discord | -| ------------- | ------------ | ----------------------------------------------- | ------------------------------ | -| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | -| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | -| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | -| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Name | Organization | GitHub | Discord | +| ------------- | ------------------------ | ----------------------------------------------- | ------------------------------ | +| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | +| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | +| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | +| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | ## Emeritus Core Maintainers From 4bec2c59b4e3bc78a1f6398e1f7d635afae3d638 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 18:02:24 +0100 Subject: [PATCH 467/511] OWNERS: add webark as org member Signed-off-by: Patrik Oldsberg --- OWNERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS.md b/OWNERS.md index d3adcfc4ab..afa888ee2f 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -57,6 +57,7 @@ Team: @backstage/search-maintainers | David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | | Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | | Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | +| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | ## Emeritus Core Maintainers From 0f4e3e53beaa16c71efa01cebceeecd42dbfb435 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 22 Mar 2023 12:03:21 -0500 Subject: [PATCH 468/511] compare BuiltinKindsEntityProcessor name directly after init Signed-off-by: Jacob Bolda --- plugins/catalog-backend/src/service/CatalogBuilder.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 8d40745e9d..782ad1bf3c 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -608,15 +608,17 @@ export class CatalogBuilder { }), ]; + const builtinKindsEntityProcessor = new BuiltinKindsEntityProcessor(); // If the user adds a processor named 'BuiltinKindsEntityProcessor', // skip inclusion of the catalog-backend version. if ( - !this.processors.find( + !this.processors.some( processor => - processor.getProcessorName() === 'BuiltinKindsEntityProcessor', + processor.getProcessorName() === + builtinKindsEntityProcessor.getProcessorName(), ) ) { - processors.push(new BuiltinKindsEntityProcessor()); + processors.push(builtinKindsEntityProcessor); } // These are only added unless the user replaced them all From 2553fb726f18350c26598675ca91735b45557325 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 17:05:59 +0000 Subject: [PATCH 469/511] Update dependency @changesets/cli to v2.26.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4c3c2f654f..878b7125a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9135,8 +9135,8 @@ __metadata: linkType: hard "@changesets/cli@npm:^2.14.0": - version: 2.26.0 - resolution: "@changesets/cli@npm:2.26.0" + version: 2.26.1 + resolution: "@changesets/cli@npm:2.26.1" dependencies: "@babel/runtime": ^7.20.1 "@changesets/apply-release-plan": ^6.1.3 @@ -9173,7 +9173,7 @@ __metadata: tty-table: ^4.1.5 bin: changeset: bin.js - checksum: 12a911b4196ff390ce114e27b475e59f5f5e1fdc7049d1ab04effe73d4811d99db47a030de6abe332300b4b2c43cffc537cec4883476b59b69bc23aee07cd5c5 + checksum: d7d6445ebbc1b2718d97852a2275f59af32020e8a1e1efe666767819dd862c7794ce50627ad52f1f97ba4bc57c81bfc4750e92265757cc94ab2d44198d2afb10 languageName: node linkType: hard From 29ba8267d69088efd316791fd2793f40004d0ed5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 17:06:21 +0000 Subject: [PATCH 470/511] Update dependency @material-ui/lab to v4.0.0-alpha.61 Signed-off-by: Renovate Bot --- .changeset/renovate-179fa0e.md | 6 ++++++ packages/app/package.json | 2 +- packages/core-components/package.json | 2 +- packages/integration-react/package.json | 2 +- yarn.lock | 6 +++--- 5 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 .changeset/renovate-179fa0e.md diff --git a/.changeset/renovate-179fa0e.md b/.changeset/renovate-179fa0e.md new file mode 100644 index 0000000000..e8215cf1f5 --- /dev/null +++ b/.changeset/renovate-179fa0e.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/integration-react': patch +--- + +Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`. diff --git a/packages/app/package.json b/packages/app/package.json index b7a7dac851..5902184f89 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -72,7 +72,7 @@ "@internal/plugin-catalog-customized": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", "@oriflame/backstage-plugin-score-card": "^0.6.0", "@roadiehq/backstage-plugin-buildkite": "^2.0.8", diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 67de700af1..e210219ef3 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -40,7 +40,7 @@ "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "@types/react-sparklines": "^1.7.0", "@types/react-text-truncate": "^0.14.0", diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 889805cba8..39a8a9908a 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -30,7 +30,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 4c3c2f654f..5629748a83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4003,7 +4003,7 @@ __metadata: "@material-table/core": ^3.1.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -4218,7 +4218,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -23058,7 +23058,7 @@ __metadata: "@internal/plugin-catalog-customized": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 "@oriflame/backstage-plugin-score-card": ^0.6.0 "@roadiehq/backstage-plugin-buildkite": ^2.0.8 From 38e0eeb41a335709d3d998493b12972406d5c50c Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 22 Mar 2023 18:34:20 +0100 Subject: [PATCH 471/511] color tweaks to handle changes in mkdocs-material v9 Signed-off-by: Morgan Bentell --- .changeset/hungry-pianos-unite.md | 5 +++++ plugins/techdocs-node/src/stages/generate/techdocs.ts | 2 +- .../src/reader/transformers/copyToClipboard.tsx | 10 +++++++--- .../src/reader/transformers/styles/rules/layout.ts | 5 +++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 .changeset/hungry-pianos-unite.md diff --git a/.changeset/hungry-pianos-unite.md b/.changeset/hungry-pianos-unite.md new file mode 100644 index 0000000000..c762b9c2a3 --- /dev/null +++ b/.changeset/hungry-pianos-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Minor visual tweaks in response to changes in mkdocs-material v9 diff --git a/plugins/techdocs-node/src/stages/generate/techdocs.ts b/plugins/techdocs-node/src/stages/generate/techdocs.ts index 2f88e1a8ad..d2ad0021be 100644 --- a/plugins/techdocs-node/src/stages/generate/techdocs.ts +++ b/plugins/techdocs-node/src/stages/generate/techdocs.ts @@ -53,7 +53,7 @@ export class TechdocsGenerator implements GeneratorBase { * The default docker image (and version) used to generate content. Public * and static so that techdocs-node consumers can use the same version. */ - public static readonly defaultDockerImage = 'spotify/techdocs:v1.1.0'; + public static readonly defaultDockerImage = 'spotify/techdocs:v1.2.0'; private readonly logger: Logger; private readonly containerRunner?: ContainerRunner; private readonly options: GeneratorConfig; diff --git a/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx b/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx index 422bbb10ce..28a6c789b6 100644 --- a/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx +++ b/plugins/techdocs/src/reader/transformers/copyToClipboard.tsx @@ -23,7 +23,7 @@ import { SvgIcon, Tooltip, } from '@material-ui/core'; -import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; import type { Transformer } from './transformer'; import useCopyToClipboard from 'react-use/lib/useCopyToClipboard'; @@ -69,9 +69,13 @@ const CopyToClipboardButton = ({ text }: CopyToClipboardButtonProps) => { onClose={handleClose} leaveDelay={1000} > - + ); }; diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts b/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts index 979a616f01..c5e69e6084 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts @@ -21,6 +21,11 @@ const SIDEBAR_WIDTH = '224px'; export default ({ theme, sidebar }: RuleOptions) => ` /*================== Layout ==================*/ +/* mkdocs material v9 compat */ +.md-nav__title { + color: var(--md-default-fg-color); +} + .md-grid { max-width: 100%; margin: 0; From 6c809d1a41c63632258132ac8ad9d1bb5d44d897 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Wed, 22 Mar 2023 18:43:12 +0100 Subject: [PATCH 472/511] update changeset Signed-off-by: Morgan Bentell --- .changeset/forty-gorillas-help.md | 6 ++++++ .changeset/hungry-pianos-unite.md | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 .changeset/forty-gorillas-help.md delete mode 100644 .changeset/hungry-pianos-unite.md diff --git a/.changeset/forty-gorillas-help.md b/.changeset/forty-gorillas-help.md new file mode 100644 index 0000000000..ecad212aee --- /dev/null +++ b/.changeset/forty-gorillas-help.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-techdocs-node': patch +'@backstage/plugin-techdocs': patch +--- + +Minor visual tweaks to adapt to changes in mkdocs-material v9 diff --git a/.changeset/hungry-pianos-unite.md b/.changeset/hungry-pianos-unite.md deleted file mode 100644 index c762b9c2a3..0000000000 --- a/.changeset/hungry-pianos-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Minor visual tweaks in response to changes in mkdocs-material v9 From b17bfb9bcad8123eb3709f1aa912629cf5eed767 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 18:06:54 +0000 Subject: [PATCH 473/511] Update dependency @swc/core to v1.3.42 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 86 ++++++++++++++++++++++----------------------- storybook/yarn.lock | 86 ++++++++++++++++++++++----------------------- yarn.lock | 86 ++++++++++++++++++++++----------------------- 3 files changed, 129 insertions(+), 129 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 27050eff88..38067f5214 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2623,90 +2623,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-darwin-arm64@npm:1.3.41" +"@swc/core-darwin-arm64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-arm64@npm:1.3.42" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-darwin-x64@npm:1.3.41" +"@swc/core-darwin-x64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-x64@npm:1.3.42" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" +"@swc/core-linux-arm-gnueabihf@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.42" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" +"@swc/core-linux-arm64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" +"@swc/core-linux-arm64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" +"@swc/core-linux-x64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-musl@npm:1.3.41" +"@swc/core-linux-x64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-musl@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" +"@swc/core-win32-arm64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.42" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" +"@swc/core-win32-ia32-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.42" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" +"@swc/core-win32-x64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.42" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.36": - version: 1.3.41 - resolution: "@swc/core@npm:1.3.41" + version: 1.3.42 + resolution: "@swc/core@npm:1.3.42" dependencies: - "@swc/core-darwin-arm64": 1.3.41 - "@swc/core-darwin-x64": 1.3.41 - "@swc/core-linux-arm-gnueabihf": 1.3.41 - "@swc/core-linux-arm64-gnu": 1.3.41 - "@swc/core-linux-arm64-musl": 1.3.41 - "@swc/core-linux-x64-gnu": 1.3.41 - "@swc/core-linux-x64-musl": 1.3.41 - "@swc/core-win32-arm64-msvc": 1.3.41 - "@swc/core-win32-ia32-msvc": 1.3.41 - "@swc/core-win32-x64-msvc": 1.3.41 + "@swc/core-darwin-arm64": 1.3.42 + "@swc/core-darwin-x64": 1.3.42 + "@swc/core-linux-arm-gnueabihf": 1.3.42 + "@swc/core-linux-arm64-gnu": 1.3.42 + "@swc/core-linux-arm64-musl": 1.3.42 + "@swc/core-linux-x64-gnu": 1.3.42 + "@swc/core-linux-x64-musl": 1.3.42 + "@swc/core-win32-arm64-msvc": 1.3.42 + "@swc/core-win32-ia32-msvc": 1.3.42 + "@swc/core-win32-x64-msvc": 1.3.42 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -2728,7 +2728,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 + checksum: 5c28c03ee6a4e1f630c4a519b56d7e23a0102f70fad977a3ab144a3da96231cf4849e473cdc9ee7be6b9266ba0838d0bc0b6b3575a75540f302befe96cc9606e languageName: node linkType: hard diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 359707312e..d1b064f48c 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.41": - version: 1.3.41 - resolution: "@swc/core-darwin-arm64@npm:1.3.41" +"@swc/core-darwin-arm64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-arm64@npm:1.3.42" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-darwin-x64@npm:1.3.41" +"@swc/core-darwin-x64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-x64@npm:1.3.42" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" +"@swc/core-linux-arm-gnueabihf@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.42" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" +"@swc/core-linux-arm64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" +"@swc/core-linux-arm64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" +"@swc/core-linux-x64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-musl@npm:1.3.41" +"@swc/core-linux-x64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-musl@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" +"@swc/core-win32-arm64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.42" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" +"@swc/core-win32-ia32-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.42" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" +"@swc/core-win32-x64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.42" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.41 - resolution: "@swc/core@npm:1.3.41" + version: 1.3.42 + resolution: "@swc/core@npm:1.3.42" dependencies: - "@swc/core-darwin-arm64": 1.3.41 - "@swc/core-darwin-x64": 1.3.41 - "@swc/core-linux-arm-gnueabihf": 1.3.41 - "@swc/core-linux-arm64-gnu": 1.3.41 - "@swc/core-linux-arm64-musl": 1.3.41 - "@swc/core-linux-x64-gnu": 1.3.41 - "@swc/core-linux-x64-musl": 1.3.41 - "@swc/core-win32-arm64-msvc": 1.3.41 - "@swc/core-win32-ia32-msvc": 1.3.41 - "@swc/core-win32-x64-msvc": 1.3.41 + "@swc/core-darwin-arm64": 1.3.42 + "@swc/core-darwin-x64": 1.3.42 + "@swc/core-linux-arm-gnueabihf": 1.3.42 + "@swc/core-linux-arm64-gnu": 1.3.42 + "@swc/core-linux-arm64-musl": 1.3.42 + "@swc/core-linux-x64-gnu": 1.3.42 + "@swc/core-linux-x64-musl": 1.3.42 + "@swc/core-win32-arm64-msvc": 1.3.42 + "@swc/core-win32-ia32-msvc": 1.3.42 + "@swc/core-win32-x64-msvc": 1.3.42 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -3071,7 +3071,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 + checksum: 5c28c03ee6a4e1f630c4a519b56d7e23a0102f70fad977a3ab144a3da96231cf4849e473cdc9ee7be6b9266ba0838d0bc0b6b3575a75540f302befe96cc9606e languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 878b7125a1..5170f9fdc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14212,90 +14212,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-darwin-arm64@npm:1.3.41" +"@swc/core-darwin-arm64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-arm64@npm:1.3.42" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-darwin-x64@npm:1.3.41" +"@swc/core-darwin-x64@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-darwin-x64@npm:1.3.42" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.41" +"@swc/core-linux-arm-gnueabihf@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.42" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.41" +"@swc/core-linux-arm64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.41" +"@swc/core-linux-arm64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.42" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.41" +"@swc/core-linux-x64-gnu@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-linux-x64-musl@npm:1.3.41" +"@swc/core-linux-x64-musl@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-linux-x64-musl@npm:1.3.42" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.41" +"@swc/core-win32-arm64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.42" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.41" +"@swc/core-win32-ia32-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.42" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.41": - version: 1.3.41 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.41" +"@swc/core-win32-x64-msvc@npm:1.3.42": + version: 1.3.42 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.42" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.41 - resolution: "@swc/core@npm:1.3.41" + version: 1.3.42 + resolution: "@swc/core@npm:1.3.42" dependencies: - "@swc/core-darwin-arm64": 1.3.41 - "@swc/core-darwin-x64": 1.3.41 - "@swc/core-linux-arm-gnueabihf": 1.3.41 - "@swc/core-linux-arm64-gnu": 1.3.41 - "@swc/core-linux-arm64-musl": 1.3.41 - "@swc/core-linux-x64-gnu": 1.3.41 - "@swc/core-linux-x64-musl": 1.3.41 - "@swc/core-win32-arm64-msvc": 1.3.41 - "@swc/core-win32-ia32-msvc": 1.3.41 - "@swc/core-win32-x64-msvc": 1.3.41 + "@swc/core-darwin-arm64": 1.3.42 + "@swc/core-darwin-x64": 1.3.42 + "@swc/core-linux-arm-gnueabihf": 1.3.42 + "@swc/core-linux-arm64-gnu": 1.3.42 + "@swc/core-linux-arm64-musl": 1.3.42 + "@swc/core-linux-x64-gnu": 1.3.42 + "@swc/core-linux-x64-musl": 1.3.42 + "@swc/core-win32-arm64-msvc": 1.3.42 + "@swc/core-win32-ia32-msvc": 1.3.42 + "@swc/core-win32-x64-msvc": 1.3.42 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -14317,7 +14317,7 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - checksum: e2d2bd2d1821608bfafab66f7b94d31b4ae3f486ad6d18aa30abca961299431a26ab2dfc04a7e614f8b8f6680d9790f0596f43e18d0b794e2802136c1d5e3376 + checksum: 5c28c03ee6a4e1f630c4a519b56d7e23a0102f70fad977a3ab144a3da96231cf4849e473cdc9ee7be6b9266ba0838d0bc0b6b3575a75540f302befe96cc9606e languageName: node linkType: hard From dff4bbd00e96dfdd556d295a1d983e61bf3053cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 18:07:34 +0000 Subject: [PATCH 474/511] Update dependency @types/express to v4.17.17 Signed-off-by: Renovate Bot --- yarn.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 878b7125a1..0522f96ae5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4334,7 +4334,7 @@ __metadata: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/http-proxy-middleware": ^0.19.3 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4643,7 +4643,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 express: ^4.17.1 jose: ^4.6.0 lodash: ^4.17.21 @@ -5922,7 +5922,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-entity-feedback-common": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.12 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -6155,7 +6155,7 @@ __metadata: "@backstage/plugin-explore-common": "workspace:^" "@backstage/plugin-search-backend-module-explore": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -7045,7 +7045,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-linguist-common": "workspace:^" "@backstage/types": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -7315,7 +7315,7 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -7370,7 +7370,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/lodash": ^4.14.151 "@types/supertest": ^2.0.8 dataloader: ^2.0.0 @@ -7459,7 +7459,7 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-playlist-common": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -8228,7 +8228,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/test-utils": "workspace:^" - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.12 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -8883,7 +8883,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@types/compression": ^1.7.2 - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 compression: ^1.7.4 cors: ^2.8.5 @@ -15107,7 +15107,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.31, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": version: 4.17.33 resolution: "@types/express-serve-static-core@npm:4.17.33" dependencies: @@ -15138,14 +15138,14 @@ __metadata: linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": - version: 4.17.16 - resolution: "@types/express@npm:4.17.16" + version: 4.17.17 + resolution: "@types/express@npm:4.17.17" dependencies: "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.31 + "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 43f3ed2cea6e5e83c7c1098c5152f644e975fd764443717ff9c812a1518416a9e7e9f824ffe852c118888cbfb994ed023cad08331f49b19ced469bb185cdd5cd + checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da languageName: node linkType: hard From 3aa9a20c5fc5ed8450ab94f81f90249cda72b8e6 Mon Sep 17 00:00:00 2001 From: Ryan Emerle Date: Wed, 22 Mar 2023 14:13:12 -0400 Subject: [PATCH 475/511] Add Comcast to `ADOPTERS.md` Signed-off-by: Ryan Emerle --- ADOPTERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 26f4331b70..61e149e498 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -234,4 +234,5 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [N26](https://n26.com) | [Alexei Timofti](https://www.linkedin.com/in/alexeitimofti) | We use Backstage for our service catalog and are actively looking into adopting other plugins like TechDocs, TechInsights and Software Templates. | | [The LEGO Group](https://www.lego.com) | [Waqas Ali](https://www.linkedin.com/in/waqasali47) | We are building our internal develper portal on top of Backstage. | | [CORS.gmbh](https://www.cors.gmbh) | [@dpfaffenbauer](https://github.com/dpfaffenbauer) | Developer Portal for our Projects we develop for our Customers and Hosting them On Kubernetes. | +| [Comcast](https://comcast.github.io/) | [Ryan Emerle](https://github.com/remerle) | Developer portal enabling discovery of products, services, and documentation throughout the enterprise to ultimately reduce friction and improve time-to-market. | From 7ebbf7378546d7044759092490104c993fe5397e Mon Sep 17 00:00:00 2001 From: Tracey Date: Wed, 22 Mar 2023 11:24:11 -0700 Subject: [PATCH 476/511] fixed errors from api-report file Signed-off-by: Tracey --- .../api-report.md | 6 ------ .../src/actions/confluence/confluenceToMarkdown.ts | 4 ++++ .../src/index.ts | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md index 30235c2112..398beb5059 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/api-report.md @@ -8,8 +8,6 @@ import { ScmIntegrations } from '@backstage/integration'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; import { UrlReader } from '@backstage/backend-common'; -// Warning: (ae-missing-release-tag) "createConfluenceToMarkdownAction" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const createConfluenceToMarkdownAction: (options: { reader: UrlReader; @@ -19,8 +17,4 @@ export const createConfluenceToMarkdownAction: (options: { confluenceUrls: string[]; repoUrl: string; }>; - -// Warnings were encountered during analysis: -// -// src/index.d.ts:2:42 - (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" ``` diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts index ad58ed11c5..655b1bbdb7 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts @@ -30,6 +30,10 @@ import { createConfluenceVariables, } from './helpers'; +/** + * @public + */ + export const createConfluenceToMarkdownAction = (options: { reader: UrlReader; integrations: ScmIntegrations; diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts index bda2c7f9a1..80d2e35cb3 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/index.ts @@ -15,7 +15,7 @@ */ /** - * The confluence-to-markdown module for @backstage/plugin-scaffolder-backend. + * The confluence-to-markdown module for \@backstage/plugin-scaffolder-backend. * * @packageDocumentation */ From baeedf472d1171532fc30743aa7d8d419466cdb7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 19:07:45 +0000 Subject: [PATCH 477/511] Update dependency dompurify to v2.4.5 Signed-off-by: Renovate Bot --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 878b7125a1..97789cd013 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8746,7 +8746,7 @@ __metadata: "@types/node": ^16.11.26 canvas: ^2.10.2 cross-fetch: ^3.1.5 - dompurify: ^2.2.9 + dompurify: ^2.3.6 event-source-polyfill: 1.0.25 git-url-parse: ^13.0.0 jss: ~10.10.0 @@ -21580,7 +21580,7 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": +"dompurify@npm:^2.2.7, dompurify@npm:^2.3.6": version: 2.4.3 resolution: "dompurify@npm:2.4.3" checksum: b440981f2a38cada2085759cc3d1e2f94571afc34343d011a8a6aa1ad91ae6abf651adbfa4994b0e2283f0ce81f7891cdb04b67d0b234c8d190cb70e9691f026 From 0ecde4b246de305723f8c7493d8952548435da41 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 20:04:46 +0000 Subject: [PATCH 478/511] Update dependency graphql-modules to v2.1.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 878b7125a1..96b2dc1402 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24829,8 +24829,8 @@ __metadata: linkType: hard "graphql-modules@npm:^2.0.0": - version: 2.1.1 - resolution: "graphql-modules@npm:2.1.1" + version: 2.1.2 + resolution: "graphql-modules@npm:2.1.2" dependencies: "@graphql-tools/schema": ^9.0.0 "@graphql-tools/wrap": ^9.0.0 @@ -24838,7 +24838,7 @@ __metadata: ramda: ^0.28.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 1e916eb85a4bc0ff25040adf35a95caa25001b23e43d5608eb304186041e145893e995f82815e9b4e71322a60bd7f7968583ceb22a5e566ed15b3876c6224448 + checksum: 3a4732c54acb707350b7249d96952b5bb1e5a2c054090181d4e4f8adcd66d4d0675208d06f873bca75b924833df9a2c5bc7ce90aeb04b2d9e256605313a6080a languageName: node linkType: hard From 3dac94b8f25c85ff61f1118eec87ef376c12a87d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 20 Mar 2023 16:14:04 +0100 Subject: [PATCH 479/511] bump msw to v1.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../src/lib/github.test.ts | 9 +++------ .../src/lib/client.test.ts | 10 +++++----- .../src/service/PermissionIntegrationClient.test.ts | 4 ++-- yarn.lock | 8 ++++---- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/lib/github.test.ts b/plugins/catalog-backend-module-github/src/lib/github.test.ts index 624ea5c3c9..0345d4ba3e 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.test.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.test.ts @@ -16,11 +16,10 @@ import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { GroupEntity, UserEntity } from '@backstage/catalog-model'; -import { graphql } from '@octokit/graphql'; +import { graphql as graphqlOctokit } from '@octokit/graphql'; import { graphql as graphqlMsw } from 'msw'; import { setupServer } from 'msw/node'; import { TeamTransformer, UserTransformer } from './defaultTransformers'; - import { getOrganizationTeams, getOrganizationUsers, @@ -35,11 +34,9 @@ import { } from './github'; import fetch from 'node-fetch'; -// Workaround for Node.js 18, where native fetch is available, but not yet picked up by msw -// TODO(Rugvip): remove once https://github.com/mswjs/msw/issues/1388 is resolved -(global as any).fetch = fetch; - describe('github', () => { + const graphql = graphqlOctokit.defaults({ request: { fetch } }); + const server = setupServer(); setupRequestMockHandlers(server); diff --git a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts index a3bcd140ee..122aae7f54 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/client.test.ts @@ -19,7 +19,7 @@ import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { readGitLabIntegrationConfig } from '@backstage/integration'; import { getVoidLogger } from '@backstage/backend-common'; import { graphql, rest } from 'msw'; -import { setupServer, SetupServerApi } from 'msw/node'; +import { setupServer, SetupServer } from 'msw/node'; import { GitLabClient, paginated } from './client'; import { GitLabGroup, GitLabUser } from './types'; @@ -37,7 +37,7 @@ const MOCK_CONFIG = readGitLabIntegrationConfig( const FAKE_PAGED_ENDPOINT = `/some-endpoint`; const FAKE_PAGED_URL = `${MOCK_CONFIG.apiBaseUrl}${FAKE_PAGED_ENDPOINT}`; -function setupFakeFourPageURL(srv: SetupServerApi, url: string) { +function setupFakeFourPageURL(srv: SetupServer, url: string) { srv.use( rest.get(url, (req, res, ctx) => { const page = req.url.searchParams.get('page'); @@ -57,7 +57,7 @@ function setupFakeFourPageURL(srv: SetupServerApi, url: string) { } function setupFakeGroupProjectsEndpoint( - srv: SetupServerApi, + srv: SetupServer, apiBaseUrl: string, groupID: string, ) { @@ -79,7 +79,7 @@ function setupFakeGroupProjectsEndpoint( } function setupFakeInstanceProjectsEndpoint( - srv: SetupServerApi, + srv: SetupServer, apiBaseUrl: string, ) { srv.use( @@ -105,7 +105,7 @@ function setupFakeInstanceProjectsEndpoint( ); } -function setupFakeHasFileEndpoint(srv: SetupServerApi, apiBaseUrl: string) { +function setupFakeHasFileEndpoint(srv: SetupServer, apiBaseUrl: string) { srv.use( rest.head( `${apiBaseUrl}/projects/group%2Frepo/repository/files/catalog-info.yaml`, diff --git a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts index 80782848e7..c7a412547d 100644 --- a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts +++ b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts @@ -18,7 +18,7 @@ import { AddressInfo } from 'net'; import { Server } from 'http'; import express, { Router, RequestHandler } from 'express'; import { RestContext, rest } from 'msw'; -import { setupServer, SetupServerApi } from 'msw/node'; +import { setupServer, SetupServer } from 'msw/node'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { AuthorizeResult, @@ -34,7 +34,7 @@ import { z } from 'zod'; describe('PermissionIntegrationClient', () => { describe('applyConditions', () => { - let server: SetupServerApi; + let server: SetupServer; const mockConditions: PermissionCriteria = { not: { diff --git a/yarn.lock b/yarn.lock index 4a95062753..af0393cbf0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30488,8 +30488,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1": - version: 1.0.1 - resolution: "msw@npm:1.0.1" + version: 1.2.0 + resolution: "msw@npm:1.2.0" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -30511,13 +30511,13 @@ __metadata: type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: - typescript: ">= 4.4.x <= 4.9.x" + typescript: ">= 4.4.x <= 5.0.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: e5d6cbe67067ca46f42aaa33011f53a4e5a873abcf81c52a6996536b3c41a88f522821d3a4cf589658252581506afddb58fd8c3dfd79a5cbf06e26e14f9570b6 + checksum: 2cea7fe0f2ebb59b11534896cbaa91dca65f4fb2272402549079cc4190847fc42f5367f331c552d576d59a3521f498da0384d53cf4960beaebd6165bbc44593b languageName: node linkType: hard From 3d6a253de5ce6d052e17b7ea300cb14d14c93bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 23 Mar 2023 08:57:48 +0100 Subject: [PATCH 480/511] do the rest too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/renovate-179fa0e.md | 10 ++++++++++ .../templates/default-plugin/package.json.hbs | 2 +- plugins/apollo-explorer/package.json | 1 - plugins/codescene/package.json | 2 +- plugins/entity-validation/package.json | 2 +- plugins/github-issues/package.json | 2 +- plugins/linguist/package.json | 2 +- plugins/org-react/package.json | 2 +- plugins/playlist/package.json | 2 +- plugins/stackstorm/package.json | 1 - plugins/vault/package.json | 2 +- yarn.lock | 18 ++++++++---------- 12 files changed, 26 insertions(+), 20 deletions(-) diff --git a/.changeset/renovate-179fa0e.md b/.changeset/renovate-179fa0e.md index e8215cf1f5..57efcc4d83 100644 --- a/.changeset/renovate-179fa0e.md +++ b/.changeset/renovate-179fa0e.md @@ -1,6 +1,16 @@ --- '@backstage/core-components': patch +'@backstage/plugin-entity-validation': patch '@backstage/integration-react': patch +'@backstage/plugin-apollo-explorer': patch +'@backstage/plugin-github-issues': patch +'@backstage/plugin-stackstorm': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-org-react': patch +'@backstage/plugin-linguist': patch +'@backstage/plugin-playlist': patch +'@backstage/plugin-vault': patch +'@backstage/cli': patch --- Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`. diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index de42f3cdef..10f893d7dc 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -33,7 +33,7 @@ "@backstage/theme": "{{versionQuery '@backstage/theme'}}", "@material-ui/core": "{{versionQuery '@material-ui/core' '4.12.2'}}", "@material-ui/icons": "{{versionQuery '@material-ui/icons' '4.9.1'}}", - "@material-ui/lab": "{{versionQuery '@material-ui/lab' '4.0.0-alpha.57'}}", + "@material-ui/lab": "{{versionQuery '@material-ui/lab' '4.0.0-alpha.61'}}", "react-use": "{{versionQuery 'react-use' '17.2.4'}}" }, "peerDependencies": { diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 1c560127d2..81ac0f02b9 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -28,7 +28,6 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", "react-use": "^17.2.4", "use-deep-compare-effect": "^1.8.1" }, diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 9cc1b0ac47..3e688063fc 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -29,7 +29,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "rc-progress": "3.4.1", "react-use": "^17.2.4" }, diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 5e450985c3..811f9ab3c8 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -40,7 +40,7 @@ "@codemirror/view": "^6.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "@uiw/react-codemirror": "^4.9.3", "lodash": "^4.17.21", diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 3d13f7176e..cac335d9e3 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -31,7 +31,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.61", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^3.0.0", "octokit": "^2.0.4", "react-use": "^17.4.0" diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 963a25160d..0a36244b81 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "luxon": "^2.0.2", "react-use": "^17.2.4", "slugify": "^1.6.4" diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index efcae096a2..6b48a9c381 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -38,7 +38,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 950eaf4ea4..4bf202bdba 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -40,7 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "lodash": "^4.17.21", "qs": "^6.9.4", "react-hook-form": "^7.13.0", diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 0904badb4c..ff432f9199 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -40,7 +40,6 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/vault/package.json b/plugins/vault/package.json index de22891e69..2195a378af 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -41,7 +41,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.57", + "@material-ui/lab": "4.0.0-alpha.61", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 5629748a83..08feb36a52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4524,7 +4524,6 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5782,7 +5781,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5997,7 +5996,7 @@ __metadata: "@codemirror/view": ^6.0.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -6471,7 +6470,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.4 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.61 + "@material-ui/lab": 4.0.0-alpha.61 "@spotify/prettier-config": ^14.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -7087,7 +7086,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7228,7 +7227,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7504,7 +7503,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8378,7 +8377,6 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8915,7 +8913,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.57 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -11775,7 +11773,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61": +"@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60": version: 4.0.0-alpha.61 resolution: "@material-ui/lab@npm:4.0.0-alpha.61" dependencies: From cac94d0d266398b6a26b5c7b1b3b3ee3d04f4a8f Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 23 Mar 2023 09:22:30 +0100 Subject: [PATCH 481/511] chore: fix yarn install Signed-off-by: blam --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0522f96ae5..3dd5de8dad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4334,7 +4334,7 @@ __metadata: "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/http-proxy-middleware": ^0.19.3 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4643,7 +4643,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" express: ^4.17.1 jose: ^4.6.0 lodash: ^4.17.21 @@ -5922,7 +5922,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-entity-feedback-common": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.12 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -6155,7 +6155,7 @@ __metadata: "@backstage/plugin-explore-common": "workspace:^" "@backstage/plugin-search-backend-module-explore": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -7045,7 +7045,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-linguist-common": "workspace:^" "@backstage/types": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -7315,7 +7315,7 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -7370,7 +7370,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/lodash": ^4.14.151 "@types/supertest": ^2.0.8 dataloader: ^2.0.0 @@ -7459,7 +7459,7 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-playlist-common": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -8228,7 +8228,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/test-utils": "workspace:^" - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.12 express: ^4.18.1 express-promise-router: ^4.1.0 @@ -8883,7 +8883,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@types/compression": ^1.7.2 - "@types/express": ^4.17.6 + "@types/express": "*" "@types/supertest": ^2.0.8 compression: ^1.7.4 cors: ^2.8.5 From 618df372efe7ef8d8e21daecb67ff46151cc3ce9 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 23 Mar 2023 09:22:56 +0100 Subject: [PATCH 482/511] chore: fix yarn install Signed-off-by: blam --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 97789cd013..bde212ed2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8746,7 +8746,7 @@ __metadata: "@types/node": ^16.11.26 canvas: ^2.10.2 cross-fetch: ^3.1.5 - dompurify: ^2.3.6 + dompurify: ^2.2.9 event-source-polyfill: 1.0.25 git-url-parse: ^13.0.0 jss: ~10.10.0 @@ -21580,10 +21580,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.2.7, dompurify@npm:^2.3.6": - version: 2.4.3 - resolution: "dompurify@npm:2.4.3" - checksum: b440981f2a38cada2085759cc3d1e2f94571afc34343d011a8a6aa1ad91ae6abf651adbfa4994b0e2283f0ce81f7891cdb04b67d0b234c8d190cb70e9691f026 +"dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": + version: 2.4.5 + resolution: "dompurify@npm:2.4.5" + checksum: d6d3c3b320f15cdb5b26aa1902c3275a3ab2c3705a9df4420bb94691d7c4df67959ec7b91e486c308320791b0ee000456f042734c45d76721e61c2768eac706e languageName: node linkType: hard From 5b8930dfc5abe895b174a37322125601e8758571 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Mar 2023 09:45:19 +0100 Subject: [PATCH 483/511] OWNERS: add org members: taras, awanlin, punkle Signed-off-by: Patrik Oldsberg --- OWNERS.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/OWNERS.md b/OWNERS.md index afa888ee2f..25cc1a82f8 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -50,14 +50,17 @@ Team: @backstage/search-maintainers ## Organization Members -| Name | Organization | GitHub | Discord | -| ------------- | ------------------------ | ----------------------------------------------- | ------------------------------ | -| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | -| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | -| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | -| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | -| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | -| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | +| Name | Organization | GitHub | Discord | +| --------------- | ------------------------ | ----------------------------------------------- | ------------------------------ | +| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | +| Andre Wanlin | Keyloop | [awanlin](https://github.com/awanlin) | `Ahhhndre#3095` | +| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | +| Brian Fletcher | RoadieHQ | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` | +| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | +| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | +| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | +| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` | ## Emeritus Core Maintainers From 5e08d75876f62bef75a45d5e38bb2d9b09c62506 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 09:06:57 +0000 Subject: [PATCH 484/511] chore(deps): update dependency nodemon to v2.0.22 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f0d0a25c2a..ab5ff457ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30953,8 +30953,8 @@ __metadata: linkType: hard "nodemon@npm:^2.0.2": - version: 2.0.21 - resolution: "nodemon@npm:2.0.21" + version: 2.0.22 + resolution: "nodemon@npm:2.0.22" dependencies: chokidar: ^3.5.2 debug: ^3.2.7 @@ -30968,7 +30968,7 @@ __metadata: undefsafe: ^2.0.5 bin: nodemon: bin/nodemon.js - checksum: 0b9fe2d11fd95c51b66d61bd1ee85cddf579c9e674c9429752a74f445f1b98576235ae860858783728baa3666c87e4ef938ab67167cc34fe4bb8fcec74d6885b + checksum: 9c987e139748f5b5c480c6c9080bdc97304ee7d29172b7b3da1a7db590b1323ad57b96346304e9b522b0e445c336dc393ccd3f9f45c73b20d476d2347890dcd0 languageName: node linkType: hard From 47717bc66869af5be7e08f8f4ef120a2ef8a475d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 23 Mar 2023 10:25:14 +0100 Subject: [PATCH 485/511] add a test for cascading deletes in the catalog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../catalog-backend/src/migrations.test.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/plugins/catalog-backend/src/migrations.test.ts b/plugins/catalog-backend/src/migrations.test.ts index f1ed40dbbe..33f88e9aa7 100644 --- a/plugins/catalog-backend/src/migrations.test.ts +++ b/plugins/catalog-backend/src/migrations.test.ts @@ -44,6 +44,67 @@ describe('migrations', () => { ids: ['MYSQL_8', 'POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'], }); + it.each(databases.eachSupportedId())( + 'latest version correctly cascades deletions, %p', + async databaseId => { + const knex = await databases.init(databaseId); + await knex.migrate.latest({ directory: migrationsDir }); + + await knex + .insert({ + entity_id: 'i1', + entity_ref: 'k:ns/n1', + unprocessed_entity: '{}', + errors: '[]', + next_update_at: new Date(), + last_discovery_at: new Date(), + }) + .into('refresh_state'); + await knex + .insert({ + entity_id: 'i2', + entity_ref: 'k:ns/n2', + unprocessed_entity: '{}', + errors: '[]', + next_update_at: new Date(), + last_discovery_at: new Date(), + }) + .into('refresh_state'); + await knex + .insert({ entity_id: 'i1', key: 'k1', value: 'v1' }) + .into('search'); + await knex + .insert({ + source_entity_ref: 'k:ns/n1', + target_entity_ref: 'k:ns/n2', + }) + .into('refresh_state_references'); + await knex + .insert({ + originating_entity_id: 'i1', + source_entity_ref: 'k:ns/n1', + target_entity_ref: 'k:ns/n2', + type: 't', + }) + .into('relations'); + await knex + .insert({ + entity_id: 'i1', + hash: 'h', + stitch_ticket: '', + final_entity: '{}', + }) + .into('final_entities'); + + await knex.delete().from('refresh_state').where({ entity_id: 'i1' }); + + await expect(knex('search')).resolves.toEqual([]); + await expect(knex('refresh_state_references')).resolves.toEqual([]); + await expect(knex('relations')).resolves.toEqual([]); + await expect(knex('final_entities')).resolves.toEqual([]); + }, + ); + it.each(databases.eachSupportedId())( '20221109192547_search_add_original_value_column.js, %p', async databaseId => { From eef59fe416b5c0aaa3d73fc9b5d3bfe14299de54 Mon Sep 17 00:00:00 2001 From: Morgan Bentell Date: Thu, 23 Mar 2023 10:49:45 +0100 Subject: [PATCH 486/511] do default techdocs docker image version in a separate PR Signed-off-by: Morgan Bentell --- .changeset/forty-gorillas-help.md | 1 - plugins/techdocs-node/src/stages/generate/techdocs.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/forty-gorillas-help.md b/.changeset/forty-gorillas-help.md index ecad212aee..3f185525a2 100644 --- a/.changeset/forty-gorillas-help.md +++ b/.changeset/forty-gorillas-help.md @@ -1,5 +1,4 @@ --- -'@backstage/plugin-techdocs-node': patch '@backstage/plugin-techdocs': patch --- diff --git a/plugins/techdocs-node/src/stages/generate/techdocs.ts b/plugins/techdocs-node/src/stages/generate/techdocs.ts index d2ad0021be..2f88e1a8ad 100644 --- a/plugins/techdocs-node/src/stages/generate/techdocs.ts +++ b/plugins/techdocs-node/src/stages/generate/techdocs.ts @@ -53,7 +53,7 @@ export class TechdocsGenerator implements GeneratorBase { * The default docker image (and version) used to generate content. Public * and static so that techdocs-node consumers can use the same version. */ - public static readonly defaultDockerImage = 'spotify/techdocs:v1.2.0'; + public static readonly defaultDockerImage = 'spotify/techdocs:v1.1.0'; private readonly logger: Logger; private readonly containerRunner?: ContainerRunner; private readonly options: GeneratorConfig; From 214ae4ac42670cf6987e2d4cf6dcf3f330285a62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 13:15:34 +0000 Subject: [PATCH 487/511] chore(deps): update dependency swr to v2.1.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c72adeca9a..60b92c48c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37364,13 +37364,13 @@ __metadata: linkType: hard "swr@npm:^2.0.0": - version: 2.1.0 - resolution: "swr@npm:2.1.0" + version: 2.1.1 + resolution: "swr@npm:2.1.1" dependencies: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: 7de1799f319c7ebfb996cb843279169144b7087215ce7318dd6011590908341ac7d5bca93a197666557c2450b0297d9efbc610fd069b82dc3387130c619965fc + checksum: 77a7854f87c2a3244b4047eca5d88a0f5db6cb47f783fd13b8a38f5a611940142645c943e105fbfa64aac51e642361180366107ade0454744a80d6dedbe350db languageName: node linkType: hard From 9c21eb3f48fcb94904f3fa038bc408d991fb86e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 13:16:03 +0000 Subject: [PATCH 488/511] fix(deps): update dependency webpack to v5.76.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c72adeca9a..58bb98acde 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39391,8 +39391,8 @@ __metadata: linkType: hard "webpack@npm:^5, webpack@npm:^5.70.0": - version: 5.76.2 - resolution: "webpack@npm:5.76.2" + version: 5.76.3 + resolution: "webpack@npm:5.76.3" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -39423,7 +39423,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 86db98299a175c371031449c26077e87b33acd8f45de7f7945ed4b9b37c8ca11bc5169af9c44743efccd4d55e08042a3aa3a3bc42aff831309a0821ffbcd395e + checksum: 363f536b56971d056e34ab4cffa4cbc630b220e51be1a8c3adea87d9f0b51c49cfc7c3720d6614a1fd2c8c63f1ab3100db916fe8367c8bb9299327ff8c3f856d languageName: node linkType: hard From 7cb396ca1d44a8564ead2ffefc4ebabcfc579d9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 14:03:27 +0000 Subject: [PATCH 489/511] chore(deps): update dependency @types/diff to v5.0.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 927e32f5c1..88026d2897 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15015,9 +15015,9 @@ __metadata: linkType: hard "@types/diff@npm:^5.0.0": - version: 5.0.2 - resolution: "@types/diff@npm:5.0.2" - checksum: 8fbc419b5aca33f494026bf5f70e026f76367689677ef114f9c078ac738d7dbe96e6dda3fd8290e4a7c35281e2b60b034e3d7e3c968b850cf06a21279e7ddcbe + version: 5.0.3 + resolution: "@types/diff@npm:5.0.3" + checksum: d8a7d4de12f1aba0bd0c17b0b0d1e45c83824d3d6cc65763fbad371cd8315361a7e16fbae3f260a83bfdf30cebe1c876b42cec4518698055bc430fb09db1cbc8 languageName: node linkType: hard From b268dab386518a2bb59c5020fa1a228939e20a57 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Mar 2023 16:22:19 +0100 Subject: [PATCH 490/511] OWNERS: add Kubernetes project area (#17052) Signed-off-by: Patrik Oldsberg --- .github/CODEOWNERS | 4 ++-- OWNERS.md | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5929aa8ffb..a38d085dc9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -61,8 +61,8 @@ yarn.lock @backstage/maintainers @back /plugins/jenkins-backend @backstage/maintainers @timja /plugins/kafka @backstage/maintainers @nirga @andrewthauer /plugins/kafka-backend @backstage/maintainers @nirga @andrewthauer -/plugins/kubernetes @backstage/maintainers @backstage/warpspeed -/plugins/kubernetes-* @backstage/maintainers @backstage/warpspeed +/plugins/kubernetes @backstage/maintainers @backstage/kubernetes-maintainers +/plugins/kubernetes-* @backstage/maintainers @backstage/kubernetes-maintainers /plugins/microsoft-calendar @backstage/maintainers @abhay-soni-developer @NishkarshRaj /plugins/newrelic-dashboard @backstage/maintainers @mufaddal7 /plugins/playlist @backstage/maintainers @kuangp diff --git a/OWNERS.md b/OWNERS.md index 25cc1a82f8..1834abe227 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -24,6 +24,16 @@ Team: @backstage/catalog-maintainers | ---- | ------------ | --------- | ---------------------------- | ------- | | TBD | Spotify | Chipmunks | [TBD](http://github.com/TBD) | - | +### Kubernetes + +Team: @backstage/kubernetes-maintainers + +Scope: The Kubernetes plugin and the base it provides for other plugins to build upon. + +| Name | Organization | Team | GitHub | Discord | +| -------------- | ------------ | ---- | ---------------------------------------- | ------------ | +| Matthew Clarke | Spotify | | [mclarke47](http://github.com/mclarke47) | mclarke#0725 | + ### TechDocs Team: @backstage/techdocs-maintainers From 9c00d8b963411a761b76cbea6388afe4d50ac375 Mon Sep 17 00:00:00 2001 From: Tracey Radcliffe Date: Thu, 23 Mar 2023 12:47:37 -0700 Subject: [PATCH 491/511] Apply suggestions from code review Co-authored-by: Johan Haals Signed-off-by: Tracey Radcliffe --- .changeset/new-pigs-jam.md | 2 +- .../README.md | 6 ------ .../src/actions/confluence/helpers.ts | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.changeset/new-pigs-jam.md b/.changeset/new-pigs-jam.md index c56880e891..efea0076d2 100644 --- a/.changeset/new-pigs-jam.md +++ b/.changeset/new-pigs-jam.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': minor --- -Created new action for converting confluence docs to Markdown, to be pushed to GitHub repos configured for Techdocs +Created `confluence:transform:markdown` action for converting confluence docs to Markdown. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md index 740706b556..d9b235d6c1 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md @@ -111,12 +111,6 @@ spec: branchName: confluence-to-markdown title: Confluence to Markdown description: PR for converting confluence page to mkdocs - - id: merge - name: Merge PR - action: publish:github:merge-pull-request - input: - prUrl: ${{ steps['publish'].output.remoteUrl }} - forceAdmin: true ``` Replace `` with your GitHub URL without `https://`. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts index d59a4cc3f5..58f84a8747 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts @@ -61,7 +61,7 @@ export const fetchConfluence = async (relativeUrl: string, config: Config) => { throw await ResponseError.fromResponse(response); } - return response.json() as Promise; + return response.json(); }; export const getAndWriteAttachments = async ( From 82edae411f751e7cd6822923c4d1befe1bfc75fe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 23:39:53 +0000 Subject: [PATCH 492/511] fix(deps): update dependency immer to v9.0.21 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 88026d2897..001c850bf8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25666,9 +25666,9 @@ __metadata: linkType: hard "immer@npm:^9.0.1, immer@npm:^9.0.7": - version: 9.0.19 - resolution: "immer@npm:9.0.19" - checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010 + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 languageName: node linkType: hard From e2a152af87ea54d4680e0047b266f6d68886270b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 23:40:38 +0000 Subject: [PATCH 493/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.298.0 Signed-off-by: Renovate Bot --- yarn.lock | 138 +++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/yarn.lock b/yarn.lock index 88026d2897..28f21a1cfd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -518,15 +518,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.296.0" +"@aws-sdk/client-cognito-identity@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.298.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/client-sts": 3.298.0 "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-node": 3.298.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 @@ -557,20 +557,20 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 72c8aac879cc31f156178ecef5895b1c5c802fe1433a3ba0c0010364259815b7e96f7ca7872781e0a512f15ecacb82f62d67902d15f3960a4c0ebf20a1dfd3bd + checksum: 92ec17e7bfa2f71e06a916311ae624e3973b67d0ab1bd0ba7f27481df5cf34f0ee48d26b34bb0c328c7cc0adfd75e4822da0d186fd95cc99a7ac50b165751721 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/client-s3@npm:3.296.0" + version: 3.298.0 + resolution: "@aws-sdk/client-s3@npm:3.298.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/client-sts": 3.298.0 "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-node": 3.298.0 "@aws-sdk/eventstream-serde-browser": 3.296.0 "@aws-sdk/eventstream-serde-config-resolver": 3.296.0 "@aws-sdk/eventstream-serde-node": 3.296.0 @@ -619,19 +619,19 @@ __metadata: "@aws-sdk/xml-builder": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: e7c73260ec654780be882eddad68f39873010a436477c1536ae04abc249ba08280f240a8dea51db0e222fd623db12a5e555514b2dde9f042299643c483b446cd + checksum: 83d5876eb92493f64fc64dc49229b33f44f7f8def6fa9b32f42e341d0cbe50a340daaa9cbf4e7132e8271fd2f0c07a0a9a790249da3b34e54856d5003d3134bb languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/client-sqs@npm:3.296.0" + version: 3.298.0 + resolution: "@aws-sdk/client-sqs@npm:3.298.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.296.0 + "@aws-sdk/client-sts": 3.298.0 "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-node": 3.298.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 @@ -665,13 +665,13 @@ __metadata: "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: ec3c7844ef114e8784efad036f0442bbc1a17bec5878fc22a4641bde3847a57c16e8d5ec92917df9f8a3601b63277852788b16727e9039d389cb8fcf06131e25 + checksum: 262b174e0c7df07dcc3eaf2741596caa7b2f9e964421e6e16102b55d11292c8c626061bf6e39175b80b19083f0e593302e7bb5328dbff80ea92b3aa50cb619c8 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.296.0" +"@aws-sdk/client-sso-oidc@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.298.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -705,13 +705,13 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: e2cae6747b8300a143e67354913964e2aa7d96fcb7d68e1020cbb40e2e9079a3aea10f427a3cddd98cf8e8463b189d1a15639d713e92d3dff2f8aada7527db9d + checksum: 48786eb7287a7430bd0460d6faf76903aa8979248d626da53727a20b2e4499d5b01e9ebc0206a7f4061673796c07d597d3fc52bd157d765483a59a5e7a484292 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/client-sso@npm:3.296.0" +"@aws-sdk/client-sso@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/client-sso@npm:3.298.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 @@ -745,18 +745,18 @@ __metadata: "@aws-sdk/util-user-agent-node": 3.296.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: def371cedc2add3127d648c24ea1356517cba510f06679134add036f22c9d139205071fc30e0c753081507881068987efcef2a3a61ca283c4696614236febc08 + checksum: 226b8c211e78a384db7106c6c5ed4d8ae7cfb672ed31c595c6f8531d17b5704315b06cba07aabbc35d8dbccc3fe0ed4f1c290e33d9e599e2f75af9d51afdb1fe languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.296.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/client-sts@npm:3.296.0" +"@aws-sdk/client-sts@npm:3.298.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.298.0 + resolution: "@aws-sdk/client-sts@npm:3.298.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-node": 3.298.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 @@ -789,7 +789,7 @@ __metadata: "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: c7a7837601d3bf2cf80e00a498e4f3412d88cccb605a251e65b949e8495874cb7738f0979dc51857f7606e76a568c9c15ecc77800191f54fef181c5cb2bca97b + checksum: a46024185263e548101746cc6c1841d904b02a5bc44e580384bd616ab5325ecb2d27bd0231bce7fab9796e10ce60387c98853e5915b4718f9b2715482c5eca46 languageName: node linkType: hard @@ -806,15 +806,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.296.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.298.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.296.0 + "@aws-sdk/client-cognito-identity": 3.298.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: ef2046e91aa3235e894ac762da7a4d6146fb383f094e504e6a0c6a6950f827c3c81e6826dd622483db5b13df234aa8e73cc4bad089753ef9ac3a1ffb390f75fa + checksum: d6bf9bf5c3d5ef916b931a4a69ae3e54cd90ff86da508a22e24b1b401f771461be73ccacf3aaed844b27019355f3c0c2a64af5815140fdcd7438c7190dc7a207 languageName: node linkType: hard @@ -842,38 +842,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.296.0" +"@aws-sdk/credential-provider-ini@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.298.0" dependencies: "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.298.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 8c3a518ab5eb1b2153f722548e50c11af1cc2d8d2b3eafe5ddb1022bb677eb6fb6cc41bd60a508d45c322c6a653511d9445ca335ea103890f7b534ed0fdfab78 + checksum: b729aa62ea23377185c031d5738f4d97e263b2e24eae8643a12ce493ba63729a19c4590f861ead268c6264f5b1bb06dd4cff8e52b4cc0b906c3dae254ab1d11c languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.296.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.296.0" +"@aws-sdk/credential-provider-node@npm:3.298.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.298.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.298.0" dependencies: "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 - "@aws-sdk/credential-provider-ini": 3.296.0 + "@aws-sdk/credential-provider-ini": 3.298.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.298.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: ccc0616dc331764a7378bad898982c2dfb56c8c2d52d4eed003a5265105dfab2598bf40761ef231df28bf9bce17671e86af88415784ae779979ab9c55d75aeb8 + checksum: 7ac85fff40f4c266f5890ae02998f166c10cda43c6ce50b59c475e776be3356cadca8bf00f0f687c62a38ce6030597e850f98068c862a1103fee62198c206f3a languageName: node linkType: hard @@ -889,17 +889,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.296.0" +"@aws-sdk/credential-provider-sso@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.298.0" dependencies: - "@aws-sdk/client-sso": 3.296.0 + "@aws-sdk/client-sso": 3.298.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 - "@aws-sdk/token-providers": 3.296.0 + "@aws-sdk/token-providers": 3.298.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: c4916c1d923831240b65bd51c1db3e0f80ce65f2caedf5e45c4799cf0db71ef79b27cd0394a1bd2c94a90bd65ae08b6cbc36416f3c91f7e6c41339c5ef00f919 + checksum: cabb308ec19016f7ab416e2f77b9ec4293c1b8a7e129c60133f19532cd9fedb2dbef6471e48119b8e084539cd095b08ad810680d82d2059288ac43d69cea2163 languageName: node linkType: hard @@ -915,25 +915,25 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/credential-providers@npm:3.296.0" + version: 3.298.0 + resolution: "@aws-sdk/credential-providers@npm:3.298.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.296.0 - "@aws-sdk/client-sso": 3.296.0 - "@aws-sdk/client-sts": 3.296.0 - "@aws-sdk/credential-provider-cognito-identity": 3.296.0 + "@aws-sdk/client-cognito-identity": 3.298.0 + "@aws-sdk/client-sso": 3.298.0 + "@aws-sdk/client-sts": 3.298.0 + "@aws-sdk/credential-provider-cognito-identity": 3.298.0 "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 - "@aws-sdk/credential-provider-ini": 3.296.0 - "@aws-sdk/credential-provider-node": 3.296.0 + "@aws-sdk/credential-provider-ini": 3.298.0 + "@aws-sdk/credential-provider-node": 3.298.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.296.0 + "@aws-sdk/credential-provider-sso": 3.298.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 5daa3d2e69c346f37f9c752c8e25953678d2571c911bb3da4d6b71b7f2ab5af3066890b3116b176a5d1aa9d7163e80c32db70d61bcd901dc0091711fa313a763 + checksum: 133c41843a4d5913ab7ec8a833a7868cb243ed56a574e3ab8f557bcc0366933ce09f06d48e17e461eeaf0eb7f86991e527f76b9b22fbb082d5c9af804fe4fc5d languageName: node linkType: hard @@ -1060,8 +1060,8 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.296.0 - resolution: "@aws-sdk/lib-storage@npm:3.296.0" + version: 3.298.0 + resolution: "@aws-sdk/lib-storage@npm:3.298.0" dependencies: "@aws-sdk/middleware-endpoint": 3.296.0 "@aws-sdk/smithy-client": 3.296.0 @@ -1072,7 +1072,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 2d609ea842dbef07ed6b4ed5d5593d562332dd81141398e9e41e2f8282e37e8293021fa416c28d3c2430b5ffc16e301d09073fd2d20e85983f2ec2352b19eba2 + checksum: 5148a92123a4bbf596ead6901cdbfb4985cc59a50437593dfc483ddf29c66a9d9fbf3040b4b6675a2b92517a01bb9fbf0cffc31c3391ad212787cc77d5867d51 languageName: node linkType: hard @@ -1430,16 +1430,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/token-providers@npm:3.296.0" +"@aws-sdk/token-providers@npm:3.298.0": + version: 3.298.0 + resolution: "@aws-sdk/token-providers@npm:3.298.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.296.0 + "@aws-sdk/client-sso-oidc": 3.298.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 02d5294fcec153977a7edff3b1843a9c935b11b59adbde26dc84cc5e793d2850b9d4736b29425f384a5c01ca0d747f5b3686d42e1370dae8ed9bc298eda1d888 + checksum: aed172e630a4d5de12f77564782486989cf12fe90b837bf0b82347cf1ed6c73c086aacad284d753a9e47676d4bdf251232b845d57f2f9943e5c815bb9321b465 languageName: node linkType: hard From 99ba4319cbf937449e5a78f13b5f5d7a10f5cc45 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 00:31:46 +0000 Subject: [PATCH 494/511] fix(deps): update dependency cronstrue to v2.24.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 001c850bf8..9f0ae85278 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20245,11 +20245,11 @@ __metadata: linkType: hard "cronstrue@npm:^2.2.0": - version: 2.23.0 - resolution: "cronstrue@npm:2.23.0" + version: 2.24.0 + resolution: "cronstrue@npm:2.24.0" bin: cronstrue: bin/cli.js - checksum: 050140ac6452468d6f9032f18038f41b16968502d411a996efd5d42243cfd882271ff20ed4a3cdb25c45bf8f88beeb0579e45e974a11987401e9d383af2641a8 + checksum: 2c7d4cfe43bec7b57b1824772641271bb5f5ed0209336ea53796f97b17966dd95cf15ae890f7c2494f639ba489d225bfb882950cda0ec7e5453fa7bf236842dd languageName: node linkType: hard From b794ee577d4b5ef6f2ff3515a4cbbf8da6860686 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 01:23:36 +0000 Subject: [PATCH 495/511] fix(deps): update dependency marked to v4.3.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4d2b33b122..93a6661725 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29354,11 +29354,11 @@ __metadata: linkType: hard "marked@npm:^4.0.10, marked@npm:^4.0.14": - version: 4.2.12 - resolution: "marked@npm:4.2.12" + version: 4.3.0 + resolution: "marked@npm:4.3.0" bin: marked: bin/marked.js - checksum: bd551cd61028ee639d4ca2ccdfcc5a6ba4227c1b143c4538f3cde27f569dcb57df8e6313560394645b418b84a7336c07ab1e438b89b6324c29d7d8cdd3102d63 + checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 languageName: node linkType: hard From a6ac09eb32de6098d93601bed1b4ba9bb1edd8ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 02:20:35 +0000 Subject: [PATCH 496/511] fix(deps): update dependency sass to v1.60.0 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 38067f5214..689171ffa9 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -9438,15 +9438,15 @@ __metadata: linkType: hard "sass@npm:^1.57.1": - version: 1.59.3 - resolution: "sass@npm:1.59.3" + version: 1.60.0 + resolution: "sass@npm:1.60.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 839b5282cdf7d0ba3fdbfb605277dd584a8c40fa3e3e58ad905d64cd812acfb82ff0a4072d4981673db884ee61505472ff07c5c5a8a497f16ba013b183ba6473 + checksum: 06e163c37af466ec194cf2ed8dab616372afeb19322d356947d48ea664fc38398ae77c4d91bea9cb0ace954ce289d5518d0f8555ecc49f6bf2539a8ef52fc580 languageName: node linkType: hard From 72eaaa8088460d9aa454bdcbd4cf205ba3c435ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 03:22:20 +0000 Subject: [PATCH 497/511] fix(deps): update docusaurus monorepo to v2.4.0 Signed-off-by: Renovate Bot --- microsite/package.json | 6 +- microsite/yarn.lock | 383 +++++++++++++++++++++-------------------- 2 files changed, 195 insertions(+), 194 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index 70b1aa86ad..09409518ee 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -17,7 +17,7 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/module-type-aliases": "2.4.0", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^1.0.6", "@types/webpack-env": "^1.18.0", @@ -29,9 +29,9 @@ }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "2.3.1", + "@docusaurus/core": "2.4.0", "@docusaurus/plugin-client-redirects": "^2.3.1", - "@docusaurus/preset-classic": "2.3.1", + "@docusaurus/preset-classic": "2.4.0", "@swc/core": "^1.3.36", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.3", diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 689171ffa9..b243fcecdb 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -1660,9 +1660,9 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/core@npm:2.3.1" +"@docusaurus/core@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/core@npm:2.4.0" dependencies: "@babel/core": ^7.18.6 "@babel/generator": ^7.18.7 @@ -1674,13 +1674,13 @@ __metadata: "@babel/runtime": ^7.18.6 "@babel/runtime-corejs3": ^7.18.6 "@babel/traverse": ^7.18.8 - "@docusaurus/cssnano-preset": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/mdx-loader": 2.3.1 + "@docusaurus/cssnano-preset": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/mdx-loader": 2.4.0 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-common": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.2.1 autoprefixer: ^10.4.7 @@ -1740,40 +1740,40 @@ __metadata: react-dom: ^16.8.4 || ^17.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 812aecae45af3f4d02fd16e89517ca9f1ba22821a078aaa890f5797ac7e0cc0c79e7623eb999e885cf7e7652a6ffda8ff7c06dfd85ca29aaab600993c3d9980d + checksum: 04d30e31e9c4198ce3f4a47c4f59943f357ef96a5cfa10674fd3049d4cf067c15fa0ae184383ba3e420f59a9b3077ed1cf1f373626399f0e46cea6fcf0897d7b languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/cssnano-preset@npm:2.3.1" +"@docusaurus/cssnano-preset@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/cssnano-preset@npm:2.4.0" dependencies: cssnano-preset-advanced: ^5.3.8 postcss: ^8.4.14 postcss-sort-media-queries: ^4.2.1 tslib: ^2.4.0 - checksum: a3d00ce86b16caffde36734bb2f4541d2c0df5e8ab6891a78ad05bccc631a895fecb04c385626ebcb8f905510c28fa6158288585673ae96565532d4ee4b60d4f + checksum: b8982230ec014378a5453453df400a328a6ecdeecffb666ead5cfbeb5dc689610f0e62ee818ffcc8adc270c7c47cb818ad730c769eb8fa689dd79d4f9d448b6d languageName: node linkType: hard -"@docusaurus/logger@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/logger@npm:2.3.1" +"@docusaurus/logger@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/logger@npm:2.4.0" dependencies: chalk: ^4.1.2 tslib: ^2.4.0 - checksum: eff5f258aeac9c643431426256e3bc4515074cc3cc754fa643579ba427ba232ecace9a9579ae5af542330b22d7361892a1eaf84526983a0c821c5ca3ee895176 + checksum: 0424b77e2abaa50f20d6042ededf831157852656d1242ae9b0829b897e6f5b1e1e5ea30df599839e0ec51c72e42a5a867b136387dd5359032c735f431eddd078 languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/mdx-loader@npm:2.3.1" +"@docusaurus/mdx-loader@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/mdx-loader@npm:2.4.0" dependencies: "@babel/parser": ^7.18.8 "@babel/traverse": ^7.18.8 - "@docusaurus/logger": 2.3.1 - "@docusaurus/utils": 2.3.1 + "@docusaurus/logger": 2.4.0 + "@docusaurus/utils": 2.4.0 "@mdx-js/mdx": ^1.6.22 escape-html: ^1.0.3 file-loader: ^6.2.0 @@ -1790,16 +1790,16 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 4a1c9ef0e8506ab4d9cb4714ff7437664e238e0f2878a5eb4a2e082897bbee7ae8d0b61ba9d45ffa820beb5ce75aa0050201db815b00c18fc136aaa4c6411c21 + checksum: 3d4e7bf6840fa7dcf4250aa5ea019f80dac6cc38e9f8b9a0515b81b6c0f6d6f4ed4103f521784e70db856aec06cff4be176ef281e1cac53afc82bc1182bbf9ad languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/module-type-aliases@npm:2.3.1" +"@docusaurus/module-type-aliases@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/module-type-aliases@npm:2.4.0" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 2.3.1 + "@docusaurus/types": 2.4.0 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1809,19 +1809,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 74f799f81455dc8ff3e6edf07428996764014c2c7b416e6b5d160af15f00ad3aa1ab75dee5356645ec7f2ea832fb2aca6e9a32b19d64abeb9e3d57c4195f1e50 + checksum: fc655d9dc77d88ba9d10abe602c9fd5533992b14de495e4f3e4caea368693a7b7e5a805fb2938287bed949900e7e3d7f94bea3c1a8727b45e19c85996965d0c7 languageName: node linkType: hard "@docusaurus/plugin-client-redirects@npm:^2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-client-redirects@npm:2.3.1" + version: 2.4.0 + resolution: "@docusaurus/plugin-client-redirects@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-common": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 eta: ^2.0.0 fs-extra: ^10.1.0 lodash: ^4.17.21 @@ -1829,21 +1829,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: bb730359c7f9015108a3d4ec8a570e9c73847349747bf71711f522a7dc40007786b7cd25cebc845eeb16b3505e8068242559a2eda790f4c07d4083d9014a6f84 + checksum: e0a82b71521752fb338b928fd0e04c78f01a1b8f240ffde12631a25711cdf63b0bf1a56d1ee19e479ea11d33ef9aabf337071f2eb5dcd55b4f17228374ceae26 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-content-blog@npm:2.3.1" +"@docusaurus/plugin-content-blog@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-content-blog@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/mdx-loader": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-common": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^10.1.0 @@ -1856,21 +1856,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: abc668ceab15269f57be7f74acbec2e139b4f6b90af8771d246a9036d124b49b0d9fd4890e9566df7a4ba960f2da0316c18741eed1be0646f2b4602465219ddd + checksum: e912ea1a01c1769b374aecf1af72cef96dbed5faa01b74cc12d951dd5dccc089994ff649f0a18f994e39730338f99c0aa12f3b2a1eefc40888f1fb7956cece29 languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-content-docs@npm:2.3.1" +"@docusaurus/plugin-content-docs@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-content-docs@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/mdx-loader": 2.3.1 - "@docusaurus/module-type-aliases": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/module-type-aliases": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 "@types/react-router-config": ^5.0.6 combine-promises: ^1.1.0 fs-extra: ^10.1.0 @@ -1883,132 +1883,132 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: bcf8d921407d11b497926a1f61a1dc8c96f82fbe5a1959cc106b082e555f8fb6f42cf9262a658acf33d9543e5eb3e778049d91f71e4a2855993dc759c845cf31 + checksum: 5a273e80f2c28e4a33ab994e8702b3afaff04eb73f156a0a3e42cd9d182f8e1ed2b794348b090ec170cc1e4aba2e997d1fb6e8684f73ac6698bf66d96114c57b languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-content-pages@npm:2.3.1" +"@docusaurus/plugin-content-pages@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-content-pages@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/mdx-loader": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 fs-extra: ^10.1.0 tslib: ^2.4.0 webpack: ^5.73.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 8543050ed7330f54a28c0daeef11662eed3f3a08a6d0015b1a32db3d5e9ec46f0c6a8a5a4cb3e871ce953074d60424cc418b7ffa280695294626855a7a1a146a + checksum: 5381e913101f271476cbdc264e6058a0cbe0835ed4a823e430540da545253c1dc56578c66a6d978ee2f1aca114110aba529443ae835f26ef0eaf7de1ed6a5001 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-debug@npm:2.3.1" +"@docusaurus/plugin-debug@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-debug@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 fs-extra: ^10.1.0 react-json-view: ^1.21.3 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e660575f900eedbeab6e222eb4f8ef6a7a49815c91a97839a4839737c0b3101698bf7c6e035cbafaa49010340010a9ec0d37270dc81a470b3bae42662c7a24b8 + checksum: 921614843453ef189dfa2ada31e7abed8f976b0c314f7486fde35f976911de2ab307863608326e96bea67468e98dc648aeea82dbad04d0701c3c48c92bd40c6c languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-google-analytics@npm:2.3.1" +"@docusaurus/plugin-google-analytics@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-google-analytics@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 9306ae89cd5fb8ca86fd58809d7e624f988411d8908a151e9b6d9e8d0b84e08f1e3eba46024bc4321bcaeb3e9bc38e919b0bcf561adc9d40fa97c8ffeb232888 + checksum: 2d8c7e5689675ced9acffe1e2187144d6ebeea471a5992139c3eea87094e315e272263da5499591e85bc3501b7583f693d33c660507b36a835fc9eb75584c706 languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-google-gtag@npm:2.3.1" +"@docusaurus/plugin-google-gtag@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-google-gtag@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 494f0405d79aa9cb36d1ea4cf739499ad15b59fe876573ab5b304b5e84ab6ef4d428ebdc26647777b0816af452f62959b5ddb25e5bbf73c7fb3d6568258980d0 + checksum: 6aa0bb6ac5e410ea438db2de20c95a4a34d7056855b2e0baa7685e31bd9b3f48ef55f8135ca496688ccbfaba88945219acae146a244141bfb7e2372ba54c0ce2 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-google-tag-manager@npm:2.3.1" +"@docusaurus/plugin-google-tag-manager@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: d0b2ccc212652bb4f1c1bd61420e7f235325d4f2e8de0f5b25282305f54209d05da981c1253325bcae9afbc7575bd5c246d037d2be5fbda06f2842ba8335ab47 + checksum: 2df57cd95808ed7cf58ade342dcc3382e167ecebaedc7184588c214f6b64eab60fa0145ab0ce7e25803acfe3952412c1134d52ad0ea636cef652a73ccd79a5cb languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/plugin-sitemap@npm:2.3.1" +"@docusaurus/plugin-sitemap@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/plugin-sitemap@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-common": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 fs-extra: ^10.1.0 sitemap: ^7.1.1 tslib: ^2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 667d2abbf46efffc4d20e38fe435a19392f07726446193a017306652ee9db3d478e971eefb209e1a5c243b6b82af3de72d4b975b8e74aa93bda4711ce8c309bc + checksum: e96fcc84352880da6a3e566cdc249e44ad825b400f2d798746201c3a4a255b196b999f5bf5d0a5b52c752acf9e9eb1169111b463914502a6cae9c114800fa09e languageName: node linkType: hard -"@docusaurus/preset-classic@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/preset-classic@npm:2.3.1" +"@docusaurus/preset-classic@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/preset-classic@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/plugin-content-blog": 2.3.1 - "@docusaurus/plugin-content-docs": 2.3.1 - "@docusaurus/plugin-content-pages": 2.3.1 - "@docusaurus/plugin-debug": 2.3.1 - "@docusaurus/plugin-google-analytics": 2.3.1 - "@docusaurus/plugin-google-gtag": 2.3.1 - "@docusaurus/plugin-google-tag-manager": 2.3.1 - "@docusaurus/plugin-sitemap": 2.3.1 - "@docusaurus/theme-classic": 2.3.1 - "@docusaurus/theme-common": 2.3.1 - "@docusaurus/theme-search-algolia": 2.3.1 - "@docusaurus/types": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/plugin-content-blog": 2.4.0 + "@docusaurus/plugin-content-docs": 2.4.0 + "@docusaurus/plugin-content-pages": 2.4.0 + "@docusaurus/plugin-debug": 2.4.0 + "@docusaurus/plugin-google-analytics": 2.4.0 + "@docusaurus/plugin-google-gtag": 2.4.0 + "@docusaurus/plugin-google-tag-manager": 2.4.0 + "@docusaurus/plugin-sitemap": 2.4.0 + "@docusaurus/theme-classic": 2.4.0 + "@docusaurus/theme-common": 2.4.0 + "@docusaurus/theme-search-algolia": 2.4.0 + "@docusaurus/types": 2.4.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e4128a1bcb64d5ced04a281476ec1ae2d5523040d41ed57a8f744fb83659a2a2be902e94989de69ab1e6d693ec26c60d1ef6b2fe3ec96d5af6c9b3ef58f5b0cd + checksum: 33961a1edd445f13971e640db9445a0fae418babf0fe5f4078f21e605f9d945f7a3a4b7ad53ac7b578a7302f093c708429f462a76a3f297b3439d8e23b3990aa languageName: node linkType: hard @@ -2024,26 +2024,26 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/theme-classic@npm:2.3.1" +"@docusaurus/theme-classic@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/theme-classic@npm:2.4.0" dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/mdx-loader": 2.3.1 - "@docusaurus/module-type-aliases": 2.3.1 - "@docusaurus/plugin-content-blog": 2.3.1 - "@docusaurus/plugin-content-docs": 2.3.1 - "@docusaurus/plugin-content-pages": 2.3.1 - "@docusaurus/theme-common": 2.3.1 - "@docusaurus/theme-translations": 2.3.1 - "@docusaurus/types": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-common": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/module-type-aliases": 2.4.0 + "@docusaurus/plugin-content-blog": 2.4.0 + "@docusaurus/plugin-content-docs": 2.4.0 + "@docusaurus/plugin-content-pages": 2.4.0 + "@docusaurus/theme-common": 2.4.0 + "@docusaurus/theme-translations": 2.4.0 + "@docusaurus/types": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 "@mdx-js/react": ^1.6.22 clsx: ^1.2.1 copy-text-to-clipboard: ^3.0.1 - infima: 0.2.0-alpha.42 + infima: 0.2.0-alpha.43 lodash: ^4.17.21 nprogress: ^0.2.0 postcss: ^8.4.14 @@ -2056,20 +2056,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 273812924fc29b2316aff554ae0302509ebeaca5aa829b58253e74d22a66e69444f1c324a2d5e8e170e6c6f27dd0d6927e6c6a22a7e0c14567ff777d04a5b0c1 + checksum: 7f3161d7be653b6a86ffd58d8a6c6d62f464db919c32b7b9ab2ec9ca1b79136e2278fdc908e90cfa31cf21385d87cd7496d5bf9c80d30c2279ef95e7f7be28aa languageName: node linkType: hard -"@docusaurus/theme-common@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/theme-common@npm:2.3.1" +"@docusaurus/theme-common@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/theme-common@npm:2.4.0" dependencies: - "@docusaurus/mdx-loader": 2.3.1 - "@docusaurus/module-type-aliases": 2.3.1 - "@docusaurus/plugin-content-blog": 2.3.1 - "@docusaurus/plugin-content-docs": 2.3.1 - "@docusaurus/plugin-content-pages": 2.3.1 - "@docusaurus/utils": 2.3.1 + "@docusaurus/mdx-loader": 2.4.0 + "@docusaurus/module-type-aliases": 2.4.0 + "@docusaurus/plugin-content-blog": 2.4.0 + "@docusaurus/plugin-content-docs": 2.4.0 + "@docusaurus/plugin-content-pages": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-common": 2.4.0 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -2082,22 +2083,22 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 6b902e9e782721c3c49bcdee5d969ea1c1138ebcb03891e34f827b16f2c06f43a86d95f240a60ed084539e9b16435312a41be7bff4e724f4fb209998dd4d3a59 + checksum: 0790c6e5ad14bc8518173314a058e01837321d5992364d1ae4f9907f1d055f5852f883512d7a64e5add95dcfe362a009b374220de6493b32624a406d8ce74750 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/theme-search-algolia@npm:2.3.1" +"@docusaurus/theme-search-algolia@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/theme-search-algolia@npm:2.4.0" dependencies: "@docsearch/react": ^3.1.1 - "@docusaurus/core": 2.3.1 - "@docusaurus/logger": 2.3.1 - "@docusaurus/plugin-content-docs": 2.3.1 - "@docusaurus/theme-common": 2.3.1 - "@docusaurus/theme-translations": 2.3.1 - "@docusaurus/utils": 2.3.1 - "@docusaurus/utils-validation": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/logger": 2.4.0 + "@docusaurus/plugin-content-docs": 2.4.0 + "@docusaurus/theme-common": 2.4.0 + "@docusaurus/theme-translations": 2.4.0 + "@docusaurus/utils": 2.4.0 + "@docusaurus/utils-validation": 2.4.0 algoliasearch: ^4.13.1 algoliasearch-helper: ^3.10.0 clsx: ^1.2.1 @@ -2109,23 +2110,23 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 965303068e43b11f58d20b95bb6dfc01d5e575c2070d2730b94303bd2a1d33794075cae43bfe472f08061bd8770f14c8eb54932274e6b39f954ab34e7cfc5689 + checksum: a74a199faf6bab1d663cd41f9477c65c17f8dd2080664d5c00f998eb7c57345f1c30ff4f2c3bc88863f2e606c6f7475300747480dc145e61dd42798ca4fd435e languageName: node linkType: hard -"@docusaurus/theme-translations@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/theme-translations@npm:2.3.1" +"@docusaurus/theme-translations@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/theme-translations@npm:2.4.0" dependencies: fs-extra: ^10.1.0 tslib: ^2.4.0 - checksum: dd3796be63c4c946af789c3da18ed2704a2fa90d8e752ba2b780a124dc13369ba590218afad0ac4ea2342f7331ccb9eb1be086226c950b8384978d94a15c57ad + checksum: 37f329eb74fcb16c14bd370038d8bd1e18017fb1f78564d960c53fd4e110eb166f6f1c03f323dea28ede95873ebe28a659554d02cc26d1c3e748a772f9d2313a languageName: node linkType: hard -"@docusaurus/types@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/types@npm:2.3.1" +"@docusaurus/types@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/types@npm:2.4.0" dependencies: "@types/history": ^4.7.11 "@types/react": "*" @@ -2138,13 +2139,13 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 91e52f37b97964112aa0d50ee4a6f534d7da941443af5ddc96418817c6ce532a98c73e67045ac703b582c7ed703ebb360205eec30da7f738c0105f2b3ae1a246 + checksum: 54b0cd8992269ab0508d94ce19a7fcc2b3e7c9700eb112c9b859ddac8228dcc64282c414b602ba44894be87be79eeeef730fb8e569be68b6e26453e18addcf21 languageName: node linkType: hard -"@docusaurus/utils-common@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/utils-common@npm:2.3.1" +"@docusaurus/utils-common@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/utils-common@npm:2.4.0" dependencies: tslib: ^2.4.0 peerDependencies: @@ -2152,28 +2153,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 405dc5b8aba9a97b2670ba8ff3911bbdaed274edc15214ab482a7159a07ad1c9b3198835a7bee42de4e0320d42bd402ed89ae6896744a364d64d89d9f78bcfb0 + checksum: 711e61e899b133fc7cd755e6de75fd79a712eeabbd9853b9122e3929c8390e015bb9e4bca2284028e40e7a0fb2b89ef1c184f7e4149097ffd7b64821b38c11da languageName: node linkType: hard -"@docusaurus/utils-validation@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/utils-validation@npm:2.3.1" +"@docusaurus/utils-validation@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/utils-validation@npm:2.4.0" dependencies: - "@docusaurus/logger": 2.3.1 - "@docusaurus/utils": 2.3.1 + "@docusaurus/logger": 2.4.0 + "@docusaurus/utils": 2.4.0 joi: ^17.6.0 js-yaml: ^4.1.0 tslib: ^2.4.0 - checksum: 1e5529d1d0c4fcd9006adf2e5b545458a7dba3877563fb444dcec472f27a3d8492d4c6fb5dd1071bb6e668a13a845d74b8f6c4b6387babfa0e467a9b8b237fda + checksum: 21a229858ed9254830b68dd08de6456dc19b68adead581f86e854ea3e55b64b9616a3bbca521e74f754c9c7bc835ca348dfe9f0949d9a8d189db5b39bcdb9f6b languageName: node linkType: hard -"@docusaurus/utils@npm:2.3.1": - version: 2.3.1 - resolution: "@docusaurus/utils@npm:2.3.1" +"@docusaurus/utils@npm:2.4.0": + version: 2.4.0 + resolution: "@docusaurus/utils@npm:2.4.0" dependencies: - "@docusaurus/logger": 2.3.1 + "@docusaurus/logger": 2.4.0 "@svgr/webpack": ^6.2.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2194,7 +2195,7 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: e8bce9bbd98bf63664fcd7c0a5f8dec30dad31ed19e18d724b43189b04ecdc1174537e1d987293575ec18d421236fb92d3d39d28477e921507260a39c3f6d6d0 + checksum: 7ba6634b6ff71bb7cc64b0eb3c6d2892a21873bce8559bcd460693a80ca0229828c04da751277cdb17c6f18e80e061322bbcd84e9b743adc96c594b43e8a2165 languageName: node linkType: hard @@ -3726,10 +3727,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 2.3.1 - "@docusaurus/module-type-aliases": 2.3.1 + "@docusaurus/core": 2.4.0 + "@docusaurus/module-type-aliases": 2.4.0 "@docusaurus/plugin-client-redirects": ^2.3.1 - "@docusaurus/preset-classic": 2.3.1 + "@docusaurus/preset-classic": 2.4.0 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.36 "@tsconfig/docusaurus": ^1.0.6 @@ -6443,10 +6444,10 @@ __metadata: languageName: node linkType: hard -"infima@npm:0.2.0-alpha.42": - version: 0.2.0-alpha.42 - resolution: "infima@npm:0.2.0-alpha.42" - checksum: 7206f36639c00a08daab811fedc748068951497efb5ec948cba846fb23856443668015f6bd65ddebe857cc2235f6ca98429f7018c73dcac47b0361ef4721bb8f +"infima@npm:0.2.0-alpha.43": + version: 0.2.0-alpha.43 + resolution: "infima@npm:0.2.0-alpha.43" + checksum: fc5f79240e940eddd750439511767092ccb4051e5e91d253ec7630a9e7ce691812da3aa0f05e46b4c0a95dbfadeae5714fd0073f8d2df12e5aaff0697a1d6aa2 languageName: node linkType: hard From a2fcd70aa6d36e88c060cf2a6e3f70dfc5ba9831 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 22 Mar 2023 16:37:19 +0100 Subject: [PATCH 498/511] OWNERS: update to reflect pulp + bux Signed-off-by: Patrik Oldsberg --- OWNERS.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/OWNERS.md b/OWNERS.md index 1834abe227..368620cf42 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -24,6 +24,20 @@ Team: @backstage/catalog-maintainers | ---- | ------------ | --------- | ---------------------------- | ------- | | TBD | Spotify | Chipmunks | [TBD](http://github.com/TBD) | - | +### Discoverability + +Team: @backstage/discoverability-maintainers + +Scope: Discoverability within Backstage, including the home page, information architecture, and search + +| Name | Organization | Team | GitHub | Discord | +| ------------------------ | ------------ | ---- | ---------------------------------------- | ------------------ | +| Avantika Iyer | Spotify | BUX | [tikabom](http://github.com/tikabom) | - | +| Camila Belo | Spotify | BUX | [camilaibs](http://github.com/camilaibs) | Camila Loiola#0226 | +| Emma Indal | Spotify | BUX | [emmaindal](http://github.com/emmaindal) | emmaindal#7503 | +| Raghunandan Balachandran | Spotify | BUX | [soapraj](http://github.com/soapraj) | raghunandanb#1114 | +| Renan Mendes Carvalho | Spotify | BUX | [aitherios](http://github.com/aitherios) | aitherios#0593 | + ### Kubernetes Team: @backstage/kubernetes-maintainers @@ -38,17 +52,12 @@ Scope: The Kubernetes plugin and the base it provides for other plugins to build Team: @backstage/techdocs-maintainers -| Name | Organization | Team | GitHub | Discord | -| ---- | ------------ | ------------ | ---------------------------- | ------- | -| TBD | Spotify | Pulp Fiction | [TBD](http://github.com/TBD) | - | +Scope: The TechDocs plugin and related tooling -### Search - -Team: @backstage/search-maintainers - -| Name | Organization | Team | GitHub | Discord | -| ---- | ------------ | ---- | ---------------------------- | ------- | -| TBD | Spotify | BUX | [TBD](http://github.com/TBD) | - | +| Name | Organization | Team | GitHub | Discord | +| ------------------------ | ------------ | ------------ | ------------------------------------------------ | ------------------ | +| Morgan Bentell | Spotify | Pulp Fiction | [agentbellnorm](http://github.com/agentbellnorm) | morganbentell#9030 | +| Raghunandan Balachandran | Spotify | Pulp Fiction | [soapraj](http://github.com/soapraj) | raghunandanb#1114 | ## Sponsors From c8b464c97e5732eb6387fcd76621f39bf7fdd3f1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Mar 2023 09:57:03 +0100 Subject: [PATCH 499/511] CODEOWNERS: update to reflect techdocs-core change Signed-off-by: Patrik Oldsberg --- .github/CODEOWNERS | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a38d085dc9..b4be92e4ec 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,14 +8,14 @@ yarn.lock @backstage/maintainers @backstage-service */yarn.lock @backstage/maintainers @backstage-service /.changeset/*.md -/cypress/src/integration/plugins/techdocs.spec.ts @backstage/techdocs-core -/docs/assets/search @backstage/techdocs-core -/docs/features/search @backstage/techdocs-core -/docs/features/techdocs @backstage/techdocs-core -/docs/plugins/integrating-search-into-plugins.md @backstage/techdocs-core +/cypress/src/integration/plugins/techdocs.spec.ts @backstage/techdocs-maintainers +/docs/assets/search @backstage/discoverability-maintainers +/docs/features/search @backstage/discoverability-maintainers +/docs/features/techdocs @backstage/techdocs-maintainers +/docs/plugins/integrating-search-into-plugins.md @backstage/discoverability-maintainers /packages/cli/src/commands/onboard @backstage/sharks -/packages/techdocs-cli @backstage/techdocs-core -/packages/techdocs-cli-embedded-app @backstage/techdocs-core +/packages/techdocs-cli @backstage/techdocs-maintainers +/packages/techdocs-cli-embedded-app @backstage/techdocs-maintainers /plugins/adr @backstage/maintainers @kuangp /plugins/adr-* @backstage/maintainers @kuangp /plugins/allure @backstage/maintainers @deepak-bhardwaj-ps @@ -55,7 +55,7 @@ yarn.lock @backstage/maintainers @back /plugins/fossa @backstage/maintainers @backstage/sda-se-reviewers /plugins/gcalendar @backstage/maintainers @szubster @ptychu @kielosz @alexrybch /plugins/git-release-manager @backstage/maintainers @erikengervall -/plugins/home @backstage/techdocs-core +/plugins/home @backstage/discoverability-maintainers /plugins/ilert @backstage/maintainers @yacut /plugins/jenkins @backstage/maintainers @timja /plugins/jenkins-backend @backstage/maintainers @timja @@ -71,13 +71,13 @@ yarn.lock @backstage/maintainers @back /plugins/rollbar-backend @backstage/maintainers @andrewthauer /plugins/scaffolder-backend-module-rails @backstage/maintainers @angeliski /plugins/scaffolder-backend-module-yeoman @backstage/maintainers @pawelmitka -/plugins/search @backstage/techdocs-core -/plugins/search-* @backstage/techdocs-core +/plugins/search @backstage/discoverability-maintainers +/plugins/search-* @backstage/discoverability-maintainers /plugins/sonarqube @backstage/maintainers @backstage/sda-se-reviewers -/plugins/stack-overflow @backstage/techdocs-core -/plugins/stack-overflow-backend @backstage/techdocs-core -/plugins/techdocs @backstage/techdocs-core -/plugins/techdocs-* @backstage/techdocs-core +/plugins/stack-overflow @backstage/discoverability-maintainers +/plugins/stack-overflow-backend @backstage/discoverability-maintainers +/plugins/techdocs @backstage/techdocs-maintainers +/plugins/techdocs-* @backstage/techdocs-maintainers /plugins/user-settings-backend @backstage/maintainers @backstage/sda-se-reviewers /tech-insights-backend @backstage/maintainers @xantier @iain-b /tech-insights-backend-module-jsonfc @backstage/maintainers @xantier @iain-b From 5c392e50b11d4dd0536780ca6f8cac6d3f65ff90 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 Mar 2023 11:30:38 +0100 Subject: [PATCH 500/511] OWNERS: add org members pjungermann, jamieklassen, OrkoHunter Signed-off-by: Patrik Oldsberg --- OWNERS.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/OWNERS.md b/OWNERS.md index 368620cf42..08736d5723 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -69,17 +69,20 @@ Scope: The TechDocs plugin and related tooling ## Organization Members -| Name | Organization | GitHub | Discord | -| --------------- | ------------------------ | ----------------------------------------------- | ------------------------------ | -| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | -| Andre Wanlin | Keyloop | [awanlin](https://github.com/awanlin) | `Ahhhndre#3095` | -| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | -| Brian Fletcher | RoadieHQ | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` | -| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | -| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | -| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | -| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | -| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` | +| Name | Organization | GitHub | Discord | +| ------------------ | ------------------------- | ----------------------------------------------- | ------------------------------ | +| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` | +| Andre Wanlin | Keyloop | [awanlin](https://github.com/awanlin) | `Ahhhndre#3095` | +| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` | +| Brian Fletcher | RoadieHQ | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` | +| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` | +| Himanshu Mishra | Harness.io | [OrkoHunter](https://github.com/OrkoHunter) | `OrkoHunter#1520` | +| Jamie Klassen | VMware | [jamieklassen](https://github.com/jamieklassen) | `jamieklassen#3047` | +| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` | +| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` | +| Patrick Jungermann | Bonial International GmbH | [pjungermann](https://github.com/pjungermann) | `pjungermann#6933` | +| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` | +| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` | ## Emeritus Core Maintainers From 1e4f5e91b8e172e57f7893bf4f9065a1f56beab2 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Fri, 24 Mar 2023 14:15:51 +0100 Subject: [PATCH 501/511] chore: Bump zod deps Signed-off-by: Johan Haals --- .changeset/popular-parents-crash.md | 18 +++++++++ packages/backend-tasks/package.json | 2 +- packages/cli/package.json | 2 +- packages/core-app-api/package.json | 2 +- packages/core-components/package.json | 2 +- plugins/catalog-backend/package.json | 2 +- plugins/permission-backend/package.json | 2 +- plugins/permission-common/package.json | 2 +- plugins/permission-node/package.json | 4 +- plugins/playlist-backend/package.json | 2 +- plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-node/package.json | 4 +- plugins/scaffolder-react/package.json | 4 +- plugins/scaffolder/package.json | 4 +- plugins/search-backend/package.json | 2 +- yarn.lock | 53 ++++++++++++++----------- 16 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 .changeset/popular-parents-crash.md diff --git a/.changeset/popular-parents-crash.md b/.changeset/popular-parents-crash.md new file mode 100644 index 0000000000..0c1046aba5 --- /dev/null +++ b/.changeset/popular-parents-crash.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-permission-common': patch +'@backstage/core-components': patch +'@backstage/plugin-playlist-backend': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-permission-node': patch +'@backstage/plugin-scaffolder-node': patch +'@backstage/backend-tasks': patch +'@backstage/plugin-search-backend': patch +'@backstage/core-app-api': patch +'@backstage/plugin-scaffolder': patch +'@backstage/cli': patch +--- + +Bump `zod` and `zod-to-json-schema` dependencies. diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 43553cd740..4b78b5f5c4 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -43,7 +43,7 @@ "luxon": "^3.0.0", "uuid": "^8.0.0", "winston": "^3.2.1", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/packages/cli/package.json b/packages/cli/package.json index 707a9a1f6e..d4b4547225 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -128,7 +128,7 @@ "yaml": "^2.0.0", "yml-loader": "^2.1.0", "yn": "^4.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-common": "workspace:^", diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index a2239301f2..1dda0c58f8 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -40,7 +40,7 @@ "prop-types": "^15.7.2", "react-use": "^17.2.4", "zen-observable": "^0.10.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/packages/core-components/package.json b/packages/core-components/package.json index e210219ef3..2d83426a09 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -68,7 +68,7 @@ "react-window": "^1.8.6", "remark-gfm": "^3.0.1", "zen-observable": "^0.10.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 023d709d81..6bd5313e7d 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -81,7 +81,7 @@ "winston": "^3.2.1", "yaml": "^2.0.0", "yn": "^4.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index ab44a3c9bf..88e58cc531 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -36,7 +36,7 @@ "node-fetch": "^2.6.7", "winston": "^3.2.1", "yn": "^4.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 4d45347f7a..8b8a6f60c0 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -46,7 +46,7 @@ "@backstage/types": "workspace:^", "cross-fetch": "^3.1.5", "uuid": "^8.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index e4b2229bbc..23c24fe3cc 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -41,8 +41,8 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "zod": "~3.18.0", - "zod-to-json-schema": "~3.18.0" + "zod": "^3.21.4", + "zod-to-json-schema": "^3.20.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 870284f364..054651b841 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -39,7 +39,7 @@ "uuid": "^8.2.0", "winston": "^3.2.1", "yn": "^4.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 93506eb01c..d8d7347d6c 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -96,7 +96,7 @@ "winston": "^3.2.1", "yaml": "^2.0.0", "zen-observable": "^0.10.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 624fb4bdd2..d63fddc0b5 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -30,8 +30,8 @@ "@backstage/types": "workspace:^", "jsonschema": "^1.2.6", "winston": "^3.2.1", - "zod": "~3.18.0", - "zod-to-json-schema": "~3.18.0" + "zod": "^3.21.4", + "zod-to-json-schema": "^3.20.4" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 0cae342b8c..db0b30c758 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -77,8 +77,8 @@ "react-use": "^17.2.4", "use-immer": "^0.8.0", "zen-observable": "^0.10.0", - "zod": "~3.18.0", - "zod-to-json-schema": "~3.18.0" + "zod": "^3.21.4", + "zod-to-json-schema": "^3.20.4" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 357b727c95..de51720aa0 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -84,8 +84,8 @@ "react-use": "^17.2.4", "yaml": "^2.0.0", "zen-observable": "^0.10.0", - "zod": "~3.18.0", - "zod-to-json-schema": "~3.18.0" + "zod": "^3.21.4", + "zod-to-json-schema": "^3.20.4" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 3091e0e8b4..e8277afa2d 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -54,7 +54,7 @@ "qs": "^6.10.1", "winston": "^3.2.1", "yn": "^4.0.0", - "zod": "~3.18.0" + "zod": "^3.21.4" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 3f5fbf684b..831803e993 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3636,7 +3636,7 @@ __metadata: uuid: ^8.0.0 wait-for-expect: ^3.0.2 winston: ^3.2.1 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -3834,7 +3834,7 @@ __metadata: yaml: ^2.0.0 yml-loader: ^2.1.0 yn: ^4.0.0 - zod: ~3.18.0 + zod: ^3.21.4 peerDependencies: "@microsoft/api-extractor": ^7.21.2 peerDependenciesMeta: @@ -3930,7 +3930,7 @@ __metadata: react-router-stable: "npm:react-router@^6.3.0" react-use: ^17.2.4 zen-observable: ^0.10.0 - zod: ~3.18.0 + zod: ^3.21.4 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 @@ -4050,7 +4050,7 @@ __metadata: react-window: ^1.8.6 remark-gfm: ^3.0.1 zen-observable: ^0.10.0 - zod: ~3.18.0 + zod: ^3.21.4 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 @@ -5309,7 +5309,7 @@ __metadata: winston: ^3.2.1 yaml: ^2.0.0 yn: ^4.0.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -7381,7 +7381,7 @@ __metadata: supertest: ^6.1.6 winston: ^3.2.1 yn: ^4.0.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -7396,7 +7396,7 @@ __metadata: cross-fetch: ^3.1.5 msw: ^1.0.0 uuid: ^8.0.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -7417,8 +7417,8 @@ __metadata: express-promise-router: ^4.1.0 msw: ^1.0.0 supertest: ^6.1.3 - zod: ~3.18.0 - zod-to-json-schema: ~3.18.0 + zod: ^3.21.4 + zod-to-json-schema: ^3.20.4 languageName: unknown linkType: soft @@ -7469,7 +7469,7 @@ __metadata: uuid: ^8.2.0 winston: ^3.2.1 yn: ^4.0.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -7787,7 +7787,7 @@ __metadata: winston: ^3.2.1 yaml: ^2.0.0 zen-observable: ^0.10.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -7813,8 +7813,8 @@ __metadata: "@backstage/types": "workspace:^" jsonschema: ^1.2.6 winston: ^3.2.1 - zod: ~3.18.0 - zod-to-json-schema: ~3.18.0 + zod: ^3.21.4 + zod-to-json-schema: ^3.20.4 languageName: unknown linkType: soft @@ -7865,8 +7865,8 @@ __metadata: react-use: ^17.2.4 use-immer: ^0.8.0 zen-observable: ^0.10.0 - zod: ~3.18.0 - zod-to-json-schema: ~3.18.0 + zod: ^3.21.4 + zod-to-json-schema: ^3.20.4 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 @@ -7932,8 +7932,8 @@ __metadata: react-use: ^17.2.4 yaml: ^2.0.0 zen-observable: ^0.10.0 - zod: ~3.18.0 - zod-to-json-schema: ~3.18.0 + zod: ^3.21.4 + zod-to-json-schema: ^3.20.4 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 @@ -8093,7 +8093,7 @@ __metadata: supertest: ^6.1.3 winston: ^3.2.1 yn: ^4.0.0 - zod: ~3.18.0 + zod: ^3.21.4 languageName: unknown linkType: soft @@ -40316,12 +40316,19 @@ __metadata: languageName: node linkType: hard -"zod-to-json-schema@npm:~3.18.0": - version: 3.18.2 - resolution: "zod-to-json-schema@npm:3.18.2" +"zod-to-json-schema@npm:^3.20.4": + version: 3.20.4 + resolution: "zod-to-json-schema@npm:3.20.4" peerDependencies: - zod: ^3.18.0 - checksum: 10e84864a3ccc2e04500b9bc81369ed7c5b3ec068ea582a13369175ed40e785091a63ae7fa86ebb4ddf1bccd55c3dab32f4d3070bbcc3296e68305ff787c9df3 + zod: ^3.20.0 + checksum: 55bc649dbc82ce25fbfbfdd42ca530d883d83be5d02cb81e89f6401d54bca151fc6b8cc57999c75eb6a3dcaa3f000697315fbd4f505637472621570ed52784d8 + languageName: node + linkType: hard + +"zod@npm:^3.21.4": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f languageName: node linkType: hard From 6217874ea674829fe56fb504fac8fb1508499472 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Fri, 24 Mar 2023 14:41:52 +0100 Subject: [PATCH 502/511] update api-reports Signed-off-by: Johan Haals --- plugins/catalog-backend/alpha-api-report.md | 12 +++---- plugins/scaffolder-backend/api-report.md | 4 ++- plugins/scaffolder/api-report.md | 36 ++++++++++----------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/plugins/catalog-backend/alpha-api-report.md b/plugins/catalog-backend/alpha-api-report.md index df2fa3d2e9..df3e809ade 100644 --- a/plugins/catalog-backend/alpha-api-report.md +++ b/plugins/catalog-backend/alpha-api-report.md @@ -20,8 +20,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; annotation: string; + value?: string | undefined; } >; hasLabel: PermissionRule< @@ -37,8 +37,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; key: string; + value?: string | undefined; } >; hasSpec: PermissionRule< @@ -46,8 +46,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; key: string; + value?: string | undefined; } >; isEntityKind: PermissionRule< @@ -104,8 +104,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; annotation: string; + value?: string | undefined; } >; hasLabel: PermissionRule< @@ -121,8 +121,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; key: string; + value?: string | undefined; } >; hasSpec: PermissionRule< @@ -130,8 +130,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { - value?: string | undefined; key: string; + value?: string | undefined; } >; isEntityKind: PermissionRule< diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index be24be46cc..a50bb7a515 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -83,8 +83,10 @@ export function createCatalogRegisterAction(options: { // @public export function createCatalogWriteAction(): TemplateAction_2<{ + entity: {} & { + [k: string]: unknown; + }; filePath?: string | undefined; - entity: {}; }>; // @public diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 8f37f7cf50..3495522310 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -75,10 +75,10 @@ export const EntityNamePickerFieldExtension: FieldExtensionComponent_2< export const EntityPickerFieldExtension: FieldExtensionComponent_2< string, { - defaultKind?: string | undefined; - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; + defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; catalogFilter?: | Record< string, @@ -104,10 +104,10 @@ export const EntityPickerFieldExtension: FieldExtensionComponent_2< export const EntityPickerFieldSchema: FieldSchema< string, { - defaultKind?: string | undefined; - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; + defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; catalogFilter?: | Record< string, @@ -137,8 +137,8 @@ export type EntityPickerUiOptions = export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { - showCounts?: boolean | undefined; kinds?: string[] | undefined; + showCounts?: boolean | undefined; helperText?: string | undefined; } >; @@ -147,8 +147,8 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< export const EntityTagsPickerFieldSchema: FieldSchema< string[], { - showCounts?: boolean | undefined; kinds?: string[] | undefined; + showCounts?: boolean | undefined; helperText?: string | undefined; } >; @@ -210,10 +210,10 @@ export function makeFieldSchemaFromZod< export const OwnedEntityPickerFieldExtension: FieldExtensionComponent_2< string, { - defaultKind?: string | undefined; - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; + defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; } >; @@ -221,10 +221,10 @@ export const OwnedEntityPickerFieldExtension: FieldExtensionComponent_2< export const OwnedEntityPickerFieldSchema: FieldSchema< string, { - defaultKind?: string | undefined; - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; + defaultKind?: string | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; } >; @@ -236,9 +236,9 @@ export type OwnedEntityPickerUiOptions = export const OwnerPickerFieldExtension: FieldExtensionComponent_2< string, { - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; catalogFilter?: | Record< string, @@ -264,9 +264,9 @@ export const OwnerPickerFieldExtension: FieldExtensionComponent_2< export const OwnerPickerFieldSchema: FieldSchema< string, { - defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + defaultNamespace?: string | false | undefined; catalogFilter?: | Record< string, @@ -311,16 +311,16 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent_2< allowedRepos?: string[] | undefined; requestUserCredentials?: | { + secretsKey: string; additionalScopes?: | { - azure?: string[] | undefined; + gerrit?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; - gerrit?: string[] | undefined; + azure?: string[] | undefined; } | undefined; - secretsKey: string; } | undefined; } @@ -337,16 +337,16 @@ export const RepoUrlPickerFieldSchema: FieldSchema< allowedRepos?: string[] | undefined; requestUserCredentials?: | { + secretsKey: string; additionalScopes?: | { - azure?: string[] | undefined; + gerrit?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; - gerrit?: string[] | undefined; + azure?: string[] | undefined; } | undefined; - secretsKey: string; } | undefined; } From 24432ae52fb911b85372d33d2c73c19e8cadae88 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 24 Mar 2023 16:48:40 +0100 Subject: [PATCH 503/511] cli: fix package build to avoid duplicate modules for multiple entry points Signed-off-by: Patrik Oldsberg --- .changeset/chatty-coats-thank.md | 5 + packages/cli/src/lib/builder/config.ts | 203 +++++++++++++------------ 2 files changed, 111 insertions(+), 97 deletions(-) create mode 100644 .changeset/chatty-coats-thank.md diff --git a/.changeset/chatty-coats-thank.md b/.changeset/chatty-coats-thank.md new file mode 100644 index 0000000000..17faf43d87 --- /dev/null +++ b/.changeset/chatty-coats-thank.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Fix the build for packages with multiple entry points to avoid duplicated modules. diff --git a/packages/cli/src/lib/builder/config.ts b/packages/cli/src/lib/builder/config.ts index 3e61dd113a..7bd10cfcc3 100644 --- a/packages/cli/src/lib/builder/config.ts +++ b/packages/cli/src/lib/builder/config.ts @@ -75,117 +75,126 @@ export async function makeRollupConfigs( const distDir = resolvePath(targetDir, 'dist'); const entryPoints = readEntryPoints(targetPkg); - for (const { path, name, ext } of entryPoints) { - if (!SCRIPT_EXTS.includes(ext)) { - continue; - } + const scriptEntryPoints = entryPoints.filter(e => + SCRIPT_EXTS.includes(e.ext), + ); - if (options.outputs.has(Output.cjs) || options.outputs.has(Output.esm)) { - const output = new Array(); - const mainFields = ['module', 'main']; + if (options.outputs.has(Output.cjs) || options.outputs.has(Output.esm)) { + const output = new Array(); + const mainFields = ['module', 'main']; - if (options.outputs.has(Output.cjs)) { - output.push({ - dir: distDir, - entryFileNames: `${name}.cjs.js`, - chunkFileNames: `cjs/${name}/[name]-[hash].cjs.js`, - format: 'commonjs', - sourcemap: true, - }); - } - if (options.outputs.has(Output.esm)) { - output.push({ - dir: distDir, - entryFileNames: `${name}.esm.js`, - chunkFileNames: `esm/${name}/[name]-[hash].esm.js`, - format: 'module', - sourcemap: true, - }); - // Assume we're building for the browser if ESM output is included - mainFields.unshift('browser'); - } - - configs.push({ - input: resolvePath(targetDir, path), - output, - onwarn, - preserveEntrySignatures: 'strict', - // All module imports are always marked as external - external: (source, importer, isResolved) => - Boolean(importer && !isResolved && !isFileImport(source)), - plugins: [ - resolve({ mainFields }), - commonjs({ - include: /node_modules/, - exclude: [/\/[^/]+\.(?:stories|test)\.[^/]+$/], - }), - postcss(), - forwardFileImports({ - exclude: /\.icon\.svg$/, - include: [ - /\.svg$/, - /\.png$/, - /\.gif$/, - /\.jpg$/, - /\.jpeg$/, - /\.eot$/, - /\.woff$/, - /\.woff2$/, - /\.ttf$/, - /\.md$/, - ], - }), - json(), - yaml(), - svgr({ - include: /\.icon\.svg$/, - template: svgrTemplate, - }), - esbuild({ - target: 'es2019', - minify: options.minify, - }), - ], + if (options.outputs.has(Output.cjs)) { + output.push({ + dir: distDir, + entryFileNames: `[name].cjs.js`, + chunkFileNames: `cjs/[name]-[hash].cjs.js`, + format: 'commonjs', + sourcemap: true, }); } + if (options.outputs.has(Output.esm)) { + output.push({ + dir: distDir, + entryFileNames: `[name].esm.js`, + chunkFileNames: `esm/[name]-[hash].esm.js`, + format: 'module', + sourcemap: true, + }); + // Assume we're building for the browser if ESM output is included + mainFields.unshift('browser'); + } - if (options.outputs.has(Output.types) && !options.useApiExtractor) { - const typesInput = paths.resolveTargetRoot( - 'dist-types', - relativePath(paths.targetRoot, targetDir), - path.replace(/\.ts$/, '.d.ts'), - ); + configs.push({ + input: Object.fromEntries( + scriptEntryPoints.map(e => [e.name, resolvePath(targetDir, e.path)]), + ), + output, + onwarn, + preserveEntrySignatures: 'strict', + // All module imports are always marked as external + external: (source, importer, isResolved) => + Boolean(importer && !isResolved && !isFileImport(source)), + plugins: [ + resolve({ mainFields }), + commonjs({ + include: /node_modules/, + exclude: [/\/[^/]+\.(?:stories|test)\.[^/]+$/], + }), + postcss(), + forwardFileImports({ + exclude: /\.icon\.svg$/, + include: [ + /\.svg$/, + /\.png$/, + /\.gif$/, + /\.jpg$/, + /\.jpeg$/, + /\.eot$/, + /\.woff$/, + /\.woff2$/, + /\.ttf$/, + /\.md$/, + ], + }), + json(), + yaml(), + svgr({ + include: /\.icon\.svg$/, + template: svgrTemplate, + }), + esbuild({ + target: 'es2019', + minify: options.minify, + }), + ], + }); + } - const declarationsExist = await fs.pathExists(typesInput); + if (options.outputs.has(Output.types) && !options.useApiExtractor) { + const input = Object.fromEntries( + scriptEntryPoints.map(e => [ + e.name, + paths.resolveTargetRoot( + 'dist-types', + relativePath(paths.targetRoot, targetDir), + e.path.replace(/\.ts$/, '.d.ts'), + ), + ]), + ); + + for (const path of Object.values(input)) { + const declarationsExist = await fs.pathExists(path); if (!declarationsExist) { - const declarationPath = relativePath(targetDir, typesInput); + const declarationPath = relativePath(targetDir, path); throw new Error( `No declaration files found at ${declarationPath}, be sure to run ${chalk.bgRed.white( 'yarn tsc', )} to generate .d.ts files before packaging`, ); } - - configs.push({ - input: typesInput, - output: { - file: resolvePath(distDir, `${name}.d.ts`), - format: 'es', - }, - external: [ - /\.css$/, - /\.scss$/, - /\.sass$/, - /\.svg$/, - /\.eot$/, - /\.woff$/, - /\.woff2$/, - /\.ttf$/, - ], - onwarn, - plugins: [dts()], - }); } + + configs.push({ + input, + output: { + dir: distDir, + entryFileNames: `[name].d.ts`, + chunkFileNames: `types/[name]-[hash].d.ts`, + format: 'es', + }, + external: [ + /\.css$/, + /\.scss$/, + /\.sass$/, + /\.svg$/, + /\.eot$/, + /\.woff$/, + /\.woff2$/, + /\.ttf$/, + ], + onwarn, + plugins: [dts()], + }); } return configs; From 9521ff5e647402b909d8688248f8c924ea5b48ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 13:07:19 +0000 Subject: [PATCH 504/511] chore(deps): update dependency esbuild to v0.17.14 Signed-off-by: Renovate Bot --- yarn.lock | 182 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3f5fbf684b..b734c1133a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9649,9 +9649,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-arm64@npm:0.17.12" +"@esbuild/android-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-arm64@npm:0.17.14" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -9670,9 +9670,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-arm@npm:0.17.12" +"@esbuild/android-arm@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-arm@npm:0.17.14" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -9684,9 +9684,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-x64@npm:0.17.12" +"@esbuild/android-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-x64@npm:0.17.14" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -9698,9 +9698,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/darwin-arm64@npm:0.17.12" +"@esbuild/darwin-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/darwin-arm64@npm:0.17.14" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -9712,9 +9712,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/darwin-x64@npm:0.17.12" +"@esbuild/darwin-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/darwin-x64@npm:0.17.14" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -9726,9 +9726,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/freebsd-arm64@npm:0.17.12" +"@esbuild/freebsd-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/freebsd-arm64@npm:0.17.14" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -9740,9 +9740,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/freebsd-x64@npm:0.17.12" +"@esbuild/freebsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/freebsd-x64@npm:0.17.14" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -9754,9 +9754,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-arm64@npm:0.17.12" +"@esbuild/linux-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-arm64@npm:0.17.14" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -9768,9 +9768,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-arm@npm:0.17.12" +"@esbuild/linux-arm@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-arm@npm:0.17.14" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -9782,9 +9782,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-ia32@npm:0.17.12" +"@esbuild/linux-ia32@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-ia32@npm:0.17.14" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -9803,9 +9803,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-loong64@npm:0.17.12" +"@esbuild/linux-loong64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-loong64@npm:0.17.14" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -9817,9 +9817,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-mips64el@npm:0.17.12" +"@esbuild/linux-mips64el@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-mips64el@npm:0.17.14" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -9831,9 +9831,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-ppc64@npm:0.17.12" +"@esbuild/linux-ppc64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-ppc64@npm:0.17.14" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -9845,9 +9845,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-riscv64@npm:0.17.12" +"@esbuild/linux-riscv64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-riscv64@npm:0.17.14" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -9859,9 +9859,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-s390x@npm:0.17.12" +"@esbuild/linux-s390x@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-s390x@npm:0.17.14" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -9873,9 +9873,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-x64@npm:0.17.12" +"@esbuild/linux-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-x64@npm:0.17.14" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -9887,9 +9887,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/netbsd-x64@npm:0.17.12" +"@esbuild/netbsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/netbsd-x64@npm:0.17.14" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -9901,9 +9901,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/openbsd-x64@npm:0.17.12" +"@esbuild/openbsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/openbsd-x64@npm:0.17.14" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -9915,9 +9915,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/sunos-x64@npm:0.17.12" +"@esbuild/sunos-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/sunos-x64@npm:0.17.14" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -9929,9 +9929,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-arm64@npm:0.17.12" +"@esbuild/win32-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-arm64@npm:0.17.14" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -9943,9 +9943,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-ia32@npm:0.17.12" +"@esbuild/win32-ia32@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-ia32@npm:0.17.14" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -9957,9 +9957,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-x64@npm:0.17.12" +"@esbuild/win32-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-x64@npm:0.17.14" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -22305,31 +22305,31 @@ __metadata: linkType: hard "esbuild@npm:^0.17.0": - version: 0.17.12 - resolution: "esbuild@npm:0.17.12" + version: 0.17.14 + resolution: "esbuild@npm:0.17.14" dependencies: - "@esbuild/android-arm": 0.17.12 - "@esbuild/android-arm64": 0.17.12 - "@esbuild/android-x64": 0.17.12 - "@esbuild/darwin-arm64": 0.17.12 - "@esbuild/darwin-x64": 0.17.12 - "@esbuild/freebsd-arm64": 0.17.12 - "@esbuild/freebsd-x64": 0.17.12 - "@esbuild/linux-arm": 0.17.12 - "@esbuild/linux-arm64": 0.17.12 - "@esbuild/linux-ia32": 0.17.12 - "@esbuild/linux-loong64": 0.17.12 - "@esbuild/linux-mips64el": 0.17.12 - "@esbuild/linux-ppc64": 0.17.12 - "@esbuild/linux-riscv64": 0.17.12 - "@esbuild/linux-s390x": 0.17.12 - "@esbuild/linux-x64": 0.17.12 - "@esbuild/netbsd-x64": 0.17.12 - "@esbuild/openbsd-x64": 0.17.12 - "@esbuild/sunos-x64": 0.17.12 - "@esbuild/win32-arm64": 0.17.12 - "@esbuild/win32-ia32": 0.17.12 - "@esbuild/win32-x64": 0.17.12 + "@esbuild/android-arm": 0.17.14 + "@esbuild/android-arm64": 0.17.14 + "@esbuild/android-x64": 0.17.14 + "@esbuild/darwin-arm64": 0.17.14 + "@esbuild/darwin-x64": 0.17.14 + "@esbuild/freebsd-arm64": 0.17.14 + "@esbuild/freebsd-x64": 0.17.14 + "@esbuild/linux-arm": 0.17.14 + "@esbuild/linux-arm64": 0.17.14 + "@esbuild/linux-ia32": 0.17.14 + "@esbuild/linux-loong64": 0.17.14 + "@esbuild/linux-mips64el": 0.17.14 + "@esbuild/linux-ppc64": 0.17.14 + "@esbuild/linux-riscv64": 0.17.14 + "@esbuild/linux-s390x": 0.17.14 + "@esbuild/linux-x64": 0.17.14 + "@esbuild/netbsd-x64": 0.17.14 + "@esbuild/openbsd-x64": 0.17.14 + "@esbuild/sunos-x64": 0.17.14 + "@esbuild/win32-arm64": 0.17.14 + "@esbuild/win32-ia32": 0.17.14 + "@esbuild/win32-x64": 0.17.14 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -22377,7 +22377,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b + checksum: 8f4c05f5d3da04f05c48d65f60f3c6422253f406cd56a7ab7a898f0971b0366c454635a6340172874950771dc005a9928dd999b732a6d4caa504b537bfcbf2ff languageName: node linkType: hard From 39dbc8608df5cb75bef33e58dd390728056d2034 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 19:43:49 +0000 Subject: [PATCH 505/511] chore(deps): update dependency @frsource/cypress-plugin-visual-regression-diff to v3.2.11 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b734c1133a..b80764b05f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10048,8 +10048,8 @@ __metadata: linkType: hard "@frsource/cypress-plugin-visual-regression-diff@npm:^3.2.8": - version: 3.2.8 - resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.8" + version: 3.2.11 + resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.11" dependencies: "@frsource/base64": 1.0.5 glob: 8.0.3 @@ -10060,7 +10060,7 @@ __metadata: sharp: 0.31.2 peerDependencies: cypress: ">=4.5.0" - checksum: 7e5a1daf3a36ec7f62ea643da8eff73aadb595e4fb8b400abec37e38a356a200de1ce47ff2e14666e71556300e4d044d5fa5ad21bdd2d214b93402addb1a490e + checksum: eeaafc011915d15baa4ad4244ab52eb4c22d1ee9f79c1d61dc50653f781a6713e1450de393b1aecd6199e206954ae6277c62d3ee69cf6c855f6550c0e9849511 languageName: node linkType: hard From 57d36e432445a6591afa2fd61fcdfe279fbfb466 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 19:50:24 +0000 Subject: [PATCH 506/511] chore(deps): update dependency prettier to v2.8.7 Signed-off-by: Renovate Bot --- microsite/yarn.lock | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/microsite/yarn.lock b/microsite/yarn.lock index b243fcecdb..021d21a043 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -8560,11 +8560,11 @@ __metadata: linkType: hard "prettier@npm:^2.6.2": - version: 2.8.6 - resolution: "prettier@npm:2.8.6" + version: 2.8.7 + resolution: "prettier@npm:2.8.7" bin: prettier: bin-prettier.js - checksum: 8ac94fa67aec0e65743ea15ebf954ef2f1e52638abd129dc04e8b49e8bb3224c0233c98df6b5c98efd31bd2a43866590486559438ee4ead09dc81be389068572 + checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index b734c1133a..73de785c7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33239,11 +33239,11 @@ __metadata: linkType: hard "prettier@npm:^2.2.1, prettier@npm:^2.7.1": - version: 2.8.6 - resolution: "prettier@npm:2.8.6" + version: 2.8.7 + resolution: "prettier@npm:2.8.7" bin: prettier: bin-prettier.js - checksum: 8ac94fa67aec0e65743ea15ebf954ef2f1e52638abd129dc04e8b49e8bb3224c0233c98df6b5c98efd31bd2a43866590486559438ee4ead09dc81be389068572 + checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 languageName: node linkType: hard From a298d8b8f404c95142e52fb12195906cdce73aff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 20:42:07 +0000 Subject: [PATCH 507/511] chore(deps): update dependency @frsource/cypress-plugin-visual-regression-diff to v3.2.12 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b80764b05f..52f918064e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10048,8 +10048,8 @@ __metadata: linkType: hard "@frsource/cypress-plugin-visual-regression-diff@npm:^3.2.8": - version: 3.2.11 - resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.11" + version: 3.2.13 + resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.13" dependencies: "@frsource/base64": 1.0.5 glob: 8.0.3 @@ -10060,7 +10060,7 @@ __metadata: sharp: 0.31.2 peerDependencies: cypress: ">=4.5.0" - checksum: eeaafc011915d15baa4ad4244ab52eb4c22d1ee9f79c1d61dc50653f781a6713e1450de393b1aecd6199e206954ae6277c62d3ee69cf6c855f6550c0e9849511 + checksum: 1e841ee2bb78bfde1982c12b013270f6228292a5fb0194cec45b75caf12421bac3ab025f8de9962f98ea8117d13857ab1777df66a9b564f52d0e29dc7236da91 languageName: node linkType: hard From 7768978a3dc3108c9cd7e54df04656c896d39eb8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:35:46 +0000 Subject: [PATCH 508/511] fix(deps): update dependency @uiw/react-codemirror to v4.19.10 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 52f918064e..e208a87393 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16694,9 +16694,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.19.9": - version: 4.19.9 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.19.9" +"@uiw/codemirror-extensions-basic-setup@npm:4.19.10": + version: 4.19.10 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.19.10" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -16713,19 +16713,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: f248d1623f33b88b61dd75955441d1b5925b2b2c78d595eac1d4603dc31f107d5973d9cff42c3ade4a2493828d679a8908e5dad03a570511e6095d0028089f85 + checksum: 2eca6545f29699bf938238f089a08c7134e04611473a338c7a59377ca1b0ebdfddb73402819921fc718c317fa52c0c473188e4dea20007e5ac68c83caaaa83f0 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.19.9 - resolution: "@uiw/react-codemirror@npm:4.19.9" + version: 4.19.10 + resolution: "@uiw/react-codemirror@npm:4.19.10" 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.19.9 + "@uiw/codemirror-extensions-basic-setup": 4.19.10 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -16735,7 +16735,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: ed0d9a7b927df718535bccf553fa7cdabd2cb776f74e6ae75eab0ba321bc60468b5f1b8576a12543729770a11e5438fd4fc925f3f74643985c34a2184c5ae7f6 + checksum: 3210787e4ec717c1945ef31b8a7f066bc1b326da6e63f295f8bb790aa200359151e791ebc3420afbf9f615c03509a17fae62f4ab7eaeb1dec51f074a26ac9e08 languageName: node linkType: hard From 6598069cf48756e290544d31026fb5d1265fceef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 22:21:46 +0000 Subject: [PATCH 509/511] fix(deps): update dependency slugify to v1.6.6 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e208a87393..21c59c163a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36269,9 +36269,9 @@ __metadata: linkType: hard "slugify@npm:^1.6.4": - version: 1.6.5 - resolution: "slugify@npm:1.6.5" - checksum: a955a1b600201030f4c1daa9bb74a17d4402a0693fc40978bbd17e44e64fd72dad3bac4037422aa8aed55b5170edd57f3f4cd8f59ba331f5cf0f10f1a7795609 + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 04773c2d3b7aea8d2a61fa47cc7e5d29ce04e1a96cbaec409da57139df906acb3a449fac30b167d203212c806e73690abd4ff94fbad0a9a7b7ea109a2a638ae9 languageName: node linkType: hard From 49e6a4efd2c1df705ba87b5bb7f20ea35d1ff70c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 26 Mar 2023 23:05:37 +0000 Subject: [PATCH 510/511] chore(deps): update dependency @frsource/cypress-plugin-visual-regression-diff to v3.2.14 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 21c59c163a..d040d888fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10048,8 +10048,8 @@ __metadata: linkType: hard "@frsource/cypress-plugin-visual-regression-diff@npm:^3.2.8": - version: 3.2.13 - resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.13" + version: 3.2.14 + resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.2.14" dependencies: "@frsource/base64": 1.0.5 glob: 8.0.3 @@ -10060,7 +10060,7 @@ __metadata: sharp: 0.31.2 peerDependencies: cypress: ">=4.5.0" - checksum: 1e841ee2bb78bfde1982c12b013270f6228292a5fb0194cec45b75caf12421bac3ab025f8de9962f98ea8117d13857ab1777df66a9b564f52d0e29dc7236da91 + checksum: 1650eded6db559ef13d0d8b3aba8b19e703dc103a9e806c87cb49ce495a37e296c041530f509f4c0372c15217c8b54a17f51b034261b5b109f4503ab24a8181f languageName: node linkType: hard From 7af3c9c8e9cf737812d587b7b9173ab2a17cd40f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 00:03:50 +0000 Subject: [PATCH 511/511] fix(deps): update aws-sdk-js-v3 monorepo to v3.299.0 Signed-off-by: Renovate Bot --- yarn.lock | 362 ++++++++++++++++++++++++++---------------------------- 1 file changed, 171 insertions(+), 191 deletions(-) diff --git a/yarn.lock b/yarn.lock index d040d888fd..b9253910ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -499,16 +499,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/chunked-blob-reader-native@npm:3.295.0": - version: 3.295.0 - resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.295.0" - dependencies: - "@aws-sdk/util-base64": 3.295.0 - tslib: ^2.5.0 - checksum: eab9ddf813bf36fd462c3ea8e4e2ce122717f4200e9d0fb621f241e8e839b1c2ea76df627632516ab6258bbd6005ad93c84c058a9c73d5d5788428e35118db95 - languageName: node - linkType: hard - "@aws-sdk/chunked-blob-reader@npm:3.295.0": version: 3.295.0 resolution: "@aws-sdk/chunked-blob-reader@npm:3.295.0" @@ -518,28 +508,28 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.298.0" +"@aws-sdk/client-cognito-identity@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.299.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.298.0 - "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.298.0 + "@aws-sdk/client-sts": 3.299.0 + "@aws-sdk/config-resolver": 3.299.0 + "@aws-sdk/credential-provider-node": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-host-header": 3.296.0 "@aws-sdk/middleware-logger": 3.296.0 "@aws-sdk/middleware-recursion-detection": 3.296.0 "@aws-sdk/middleware-retry": 3.296.0 "@aws-sdk/middleware-serde": 3.296.0 - "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-signing": 3.299.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 @@ -550,39 +540,39 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 92ec17e7bfa2f71e06a916311ae624e3973b67d0ab1bd0ba7f27481df5cf34f0ee48d26b34bb0c328c7cc0adfd75e4822da0d186fd95cc99a7ac50b165751721 + checksum: fdcf53a12c4d5a4b71e29cac553c1aa8137fa4e5df3c23134f168618f4bd10e2480786a3de50bc9fab66aead74bd359bdbc5bf64c4d3553d71eb2488377a3f1f languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/client-s3@npm:3.298.0" + version: 3.299.0 + resolution: "@aws-sdk/client-s3@npm:3.299.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.298.0 - "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.298.0 + "@aws-sdk/client-sts": 3.299.0 + "@aws-sdk/config-resolver": 3.299.0 + "@aws-sdk/credential-provider-node": 3.299.0 "@aws-sdk/eventstream-serde-browser": 3.296.0 "@aws-sdk/eventstream-serde-config-resolver": 3.296.0 - "@aws-sdk/eventstream-serde-node": 3.296.0 + "@aws-sdk/eventstream-serde-node": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 - "@aws-sdk/hash-blob-browser": 3.296.0 + "@aws-sdk/hash-blob-browser": 3.299.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/hash-stream-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/md5-js": 3.296.0 - "@aws-sdk/middleware-bucket-endpoint": 3.296.0 + "@aws-sdk/middleware-bucket-endpoint": 3.299.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-expect-continue": 3.296.0 "@aws-sdk/middleware-flexible-checksums": 3.296.0 "@aws-sdk/middleware-host-header": 3.296.0 @@ -592,14 +582,14 @@ __metadata: "@aws-sdk/middleware-retry": 3.296.0 "@aws-sdk/middleware-sdk-s3": 3.296.0 "@aws-sdk/middleware-serde": 3.296.0 - "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-signing": 3.299.0 "@aws-sdk/middleware-ssec": 3.296.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 - "@aws-sdk/signature-v4-multi-region": 3.296.0 + "@aws-sdk/signature-v4-multi-region": 3.299.0 "@aws-sdk/smithy-client": 3.296.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/url-parser": 3.296.0 @@ -607,46 +597,46 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 "@aws-sdk/util-stream-browser": 3.296.0 "@aws-sdk/util-stream-node": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 "@aws-sdk/util-waiter": 3.296.0 "@aws-sdk/xml-builder": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: 83d5876eb92493f64fc64dc49229b33f44f7f8def6fa9b32f42e341d0cbe50a340daaa9cbf4e7132e8271fd2f0c07a0a9a790249da3b34e54856d5003d3134bb + checksum: 564fb486c47550e44abee25ebb98349418dc0c7d016695aeeb7fc08a0401353e0789f3191eb02825aee06e892d15c175434bf727d8e79a7af8c8deb9c08bf54d languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/client-sqs@npm:3.298.0" + version: 3.299.0 + resolution: "@aws-sdk/client-sqs@npm:3.299.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.298.0 - "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.298.0 + "@aws-sdk/client-sts": 3.299.0 + "@aws-sdk/config-resolver": 3.299.0 + "@aws-sdk/credential-provider-node": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/md5-js": 3.296.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-host-header": 3.296.0 "@aws-sdk/middleware-logger": 3.296.0 "@aws-sdk/middleware-recursion-detection": 3.296.0 "@aws-sdk/middleware-retry": 3.296.0 "@aws-sdk/middleware-sdk-sqs": 3.296.0 "@aws-sdk/middleware-serde": 3.296.0 - "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-signing": 3.299.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 @@ -657,37 +647,37 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: 262b174e0c7df07dcc3eaf2741596caa7b2f9e964421e6e16102b55d11292c8c626061bf6e39175b80b19083f0e593302e7bb5328dbff80ea92b3aa50cb619c8 + checksum: a9e40735cfbef7beea646aa1047b0e629006b882b42bea61b129df415521ae5cb2e93c823d0117fb0deb38f43d7c239d4147e9268f3b78f7fd74c33634f8e7cf languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.298.0" +"@aws-sdk/client-sso-oidc@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.299.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/config-resolver": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-host-header": 3.296.0 "@aws-sdk/middleware-logger": 3.296.0 "@aws-sdk/middleware-recursion-detection": 3.296.0 "@aws-sdk/middleware-retry": 3.296.0 "@aws-sdk/middleware-serde": 3.296.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 @@ -698,36 +688,36 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 48786eb7287a7430bd0460d6faf76903aa8979248d626da53727a20b2e4499d5b01e9ebc0206a7f4061673796c07d597d3fc52bd157d765483a59a5e7a484292 + checksum: 67ab9a7a85cd6802e3247baa0932dbad6a385075975ba6ee939115fa9531ddb2c38a0829dff6def2a62e1d868a6f6bf340e2ba494c075128fafcc851ad352ab6 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/client-sso@npm:3.298.0" +"@aws-sdk/client-sso@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/client-sso@npm:3.299.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/config-resolver": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-host-header": 3.296.0 "@aws-sdk/middleware-logger": 3.296.0 "@aws-sdk/middleware-recursion-detection": 3.296.0 "@aws-sdk/middleware-retry": 3.296.0 "@aws-sdk/middleware-serde": 3.296.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 @@ -738,39 +728,39 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: 226b8c211e78a384db7106c6c5ed4d8ae7cfb672ed31c595c6f8531d17b5704315b06cba07aabbc35d8dbccc3fe0ed4f1c290e33d9e599e2f75af9d51afdb1fe + checksum: e83a26facdf0f08677f883df4e382654db6850a71a370c7f60afba1c00ecf7aac315477fcfc571e7300dd016804445d416fce3edd14966aa1b366e662a3697be languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.298.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/client-sts@npm:3.298.0" +"@aws-sdk/client-sts@npm:3.299.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.299.0 + resolution: "@aws-sdk/client-sts@npm:3.299.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.296.0 - "@aws-sdk/credential-provider-node": 3.298.0 + "@aws-sdk/config-resolver": 3.299.0 + "@aws-sdk/credential-provider-node": 3.299.0 "@aws-sdk/fetch-http-handler": 3.296.0 "@aws-sdk/hash-node": 3.296.0 "@aws-sdk/invalid-dependency": 3.296.0 "@aws-sdk/middleware-content-length": 3.296.0 - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/middleware-host-header": 3.296.0 "@aws-sdk/middleware-logger": 3.296.0 "@aws-sdk/middleware-recursion-detection": 3.296.0 "@aws-sdk/middleware-retry": 3.296.0 - "@aws-sdk/middleware-sdk-sts": 3.296.0 + "@aws-sdk/middleware-sdk-sts": 3.299.0 "@aws-sdk/middleware-serde": 3.296.0 - "@aws-sdk/middleware-signing": 3.296.0 + "@aws-sdk/middleware-signing": 3.299.0 "@aws-sdk/middleware-stack": 3.296.0 - "@aws-sdk/middleware-user-agent": 3.296.0 + "@aws-sdk/middleware-user-agent": 3.299.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/node-http-handler": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 @@ -781,40 +771,39 @@ __metadata: "@aws-sdk/util-body-length-browser": 3.295.0 "@aws-sdk/util-body-length-node": 3.295.0 "@aws-sdk/util-defaults-mode-browser": 3.296.0 - "@aws-sdk/util-defaults-mode-node": 3.296.0 + "@aws-sdk/util-defaults-mode-node": 3.299.0 "@aws-sdk/util-endpoints": 3.296.0 "@aws-sdk/util-retry": 3.296.0 - "@aws-sdk/util-user-agent-browser": 3.296.0 - "@aws-sdk/util-user-agent-node": 3.296.0 + "@aws-sdk/util-user-agent-browser": 3.299.0 + "@aws-sdk/util-user-agent-node": 3.299.0 "@aws-sdk/util-utf8": 3.295.0 fast-xml-parser: 4.1.2 tslib: ^2.5.0 - checksum: a46024185263e548101746cc6c1841d904b02a5bc44e580384bd616ab5325ecb2d27bd0231bce7fab9796e10ce60387c98853e5915b4718f9b2715482c5eca46 + checksum: 4a9160e0e79a3f5d39646d56dbd9a0cb52063164df42e88640019ca74e88e49f7c36ddb98beae537051eb0798d912e283262657bdf420c6640ed04783f2d3d72 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/config-resolver@npm:3.296.0" +"@aws-sdk/config-resolver@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/config-resolver@npm:3.299.0" dependencies: - "@aws-sdk/signature-v4": 3.296.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/util-config-provider": 3.295.0 "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: 0c9c58940434317108410f4d532b170f651d47e952dcdab16e711cbb3d29dec08b2f17c50f66064a32889ea5fb4c27283f364d9db7990720d513d8f8aa5953cd + checksum: 2fc2bd424a3b24cabf1df549b6102a47657ddf77f6d81cf2d477fd7eec407071febc5ec5e21384903104526b753c71777106c24dfdfd055e2b8cd810d7d50730 languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.298.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.299.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.298.0 + "@aws-sdk/client-cognito-identity": 3.299.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: d6bf9bf5c3d5ef916b931a4a69ae3e54cd90ff86da508a22e24b1b401f771461be73ccacf3aaed844b27019355f3c0c2a64af5815140fdcd7438c7190dc7a207 + checksum: 03a1719599fa72cd42677a6b59cdb22285b0b27353489c9b04ddafc0a61d3cdd2206f90e456c2e162fb8b85f7d8214f25b774368624fa087dcd42f6ef187c8e6 languageName: node linkType: hard @@ -842,38 +831,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.298.0" +"@aws-sdk/credential-provider-ini@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.299.0" dependencies: "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.298.0 + "@aws-sdk/credential-provider-sso": 3.299.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: b729aa62ea23377185c031d5738f4d97e263b2e24eae8643a12ce493ba63729a19c4590f861ead268c6264f5b1bb06dd4cff8e52b4cc0b906c3dae254ab1d11c + checksum: 2bb3b76ee7083cd861ac81bfd3f9e3f2a610277e23a4235503101d262d3ed9e4fd9f2fff079549f0b180e7383e0388c30f965e55eb107f90dc3b9aef69a51946 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.298.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.298.0" +"@aws-sdk/credential-provider-node@npm:3.299.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.299.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.299.0" dependencies: "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 - "@aws-sdk/credential-provider-ini": 3.298.0 + "@aws-sdk/credential-provider-ini": 3.299.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.298.0 + "@aws-sdk/credential-provider-sso": 3.299.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 7ac85fff40f4c266f5890ae02998f166c10cda43c6ce50b59c475e776be3356cadca8bf00f0f687c62a38ce6030597e850f98068c862a1103fee62198c206f3a + checksum: e622fe0c550cdfc6df247591becfdb747c6a0aecc1142f954a728f72677a00391302b90ee90b019861093d2c79050ba4bc038430235c56a0f5bb8f131865a4ca languageName: node linkType: hard @@ -889,17 +878,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.298.0" +"@aws-sdk/credential-provider-sso@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.299.0" dependencies: - "@aws-sdk/client-sso": 3.298.0 + "@aws-sdk/client-sso": 3.299.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 - "@aws-sdk/token-providers": 3.298.0 + "@aws-sdk/token-providers": 3.299.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: cabb308ec19016f7ab416e2f77b9ec4293c1b8a7e129c60133f19532cd9fedb2dbef6471e48119b8e084539cd095b08ad810680d82d2059288ac43d69cea2163 + checksum: b837ea99a623f0d7e427db70160dcc1ac4c0c6e497ec4b4dadc9fdd16aa6fc0a0434998b48af50e3490be3c591c5fe7601a4b70e71b03118ce45d38cb22dd846 languageName: node linkType: hard @@ -915,25 +904,24 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/credential-providers@npm:3.298.0" + version: 3.299.0 + resolution: "@aws-sdk/credential-providers@npm:3.299.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.298.0 - "@aws-sdk/client-sso": 3.298.0 - "@aws-sdk/client-sts": 3.298.0 - "@aws-sdk/credential-provider-cognito-identity": 3.298.0 + "@aws-sdk/client-cognito-identity": 3.299.0 + "@aws-sdk/client-sso": 3.299.0 + "@aws-sdk/client-sts": 3.299.0 + "@aws-sdk/credential-provider-cognito-identity": 3.299.0 "@aws-sdk/credential-provider-env": 3.296.0 "@aws-sdk/credential-provider-imds": 3.296.0 - "@aws-sdk/credential-provider-ini": 3.298.0 - "@aws-sdk/credential-provider-node": 3.298.0 + "@aws-sdk/credential-provider-ini": 3.299.0 + "@aws-sdk/credential-provider-node": 3.299.0 "@aws-sdk/credential-provider-process": 3.296.0 - "@aws-sdk/credential-provider-sso": 3.298.0 + "@aws-sdk/credential-provider-sso": 3.299.0 "@aws-sdk/credential-provider-web-identity": 3.296.0 "@aws-sdk/property-provider": 3.296.0 - "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 133c41843a4d5913ab7ec8a833a7868cb243ed56a574e3ab8f557bcc0366933ce09f06d48e17e461eeaf0eb7f86991e527f76b9b22fbb082d5c9af804fe4fc5d + checksum: 0c1f49d6e057925f13a1a7028bb4fee124a1ec08d16fe5616aa7272007d8a9e70cd292726628a95d17a7d7099c91b88d94712faa2751da34bebee574f6e2ee4d languageName: node linkType: hard @@ -970,14 +958,14 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/eventstream-serde-node@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/eventstream-serde-node@npm:3.296.0" +"@aws-sdk/eventstream-serde-node@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/eventstream-serde-node@npm:3.299.0" dependencies: "@aws-sdk/eventstream-serde-universal": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: a24aa86efc88c0646fe50381f943cb724e746108a60d4cbf4d241884ab5962f40fb207f2db5a9f4fc7acc985c86b960e0cab8f9853e1153772f48727493f354c + checksum: b570a1b9310b56ed0f81c2bb682676c0754d82af946a6187905198244e530da370150ada6dd04c2a5bcd0c196654db9013ed9f5da81245968b98974523b32818 languageName: node linkType: hard @@ -1005,15 +993,14 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/hash-blob-browser@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/hash-blob-browser@npm:3.296.0" +"@aws-sdk/hash-blob-browser@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/hash-blob-browser@npm:3.299.0" dependencies: "@aws-sdk/chunked-blob-reader": 3.295.0 - "@aws-sdk/chunked-blob-reader-native": 3.295.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 1dbee7df76b65711c37e009e58bc714e1fe6a2fe5c11294b2d3641ae8776405813b110f5aa5251c512cf824a1e011c5c7b5c25971787b84fcb9fe61a94dca855 + checksum: a21e6cc2f64b925e3283af0d878c6fea4621b66b77809d85612708f54df3000db52966c70fd981b761e59216e6ddb66c57b66706d8f027b7b2d8fab2e08971be languageName: node linkType: hard @@ -1060,10 +1047,10 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.298.0 - resolution: "@aws-sdk/lib-storage@npm:3.298.0" + version: 3.299.0 + resolution: "@aws-sdk/lib-storage@npm:3.299.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.296.0 + "@aws-sdk/middleware-endpoint": 3.299.0 "@aws-sdk/smithy-client": 3.296.0 buffer: 5.6.0 events: 3.3.0 @@ -1072,7 +1059,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 5148a92123a4bbf596ead6901cdbfb4985cc59a50437593dfc483ddf29c66a9d9fbf3040b4b6675a2b92517a01bb9fbf0cffc31c3391ad212787cc77d5867d51 + checksum: bbf180386c03ac4fb78c65c7b476dbb6bb5c81a4d8013e8c216710b6654642e89d4cd6dc8fe3383b42c285c098ca8f325199b58efdc13b5278ed6ce011b28331 languageName: node linkType: hard @@ -1087,16 +1074,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.296.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.299.0" dependencies: "@aws-sdk/protocol-http": 3.296.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/util-arn-parser": 3.295.0 "@aws-sdk/util-config-provider": 3.295.0 tslib: ^2.5.0 - checksum: 9286868fe07706d69a474f097825230e5c1c487ad62514778155acc29ac27ad67a2502c29a2d6c16833f72557fbfb228de8eb38d85678b68bec8da30f0c2466e + checksum: ed6bddb44c9e7212cea418cbc0ff0541f4d303722133708092dd25b08979b5cb3730f96b5ba1172604fc3274dcbcc84af9d96b511f499642aa191f00f9b5d0e5 languageName: node linkType: hard @@ -1111,19 +1098,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.296.0" +"@aws-sdk/middleware-endpoint@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.299.0" dependencies: "@aws-sdk/middleware-serde": 3.296.0 - "@aws-sdk/protocol-http": 3.296.0 - "@aws-sdk/signature-v4": 3.296.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/url-parser": 3.296.0 - "@aws-sdk/util-config-provider": 3.295.0 "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: 1fa4c3f91618e255853ef1e155fa6591ee1daf88daa78ec6c2512f9bbf64f509a439402fdc22a6c8aa1b828c5ecb4b86b70e2f593ea89dabbb63a1736c490472 + checksum: 7e8c6a85575019871c87dc5c1b19c47999bd5ae3fc2546b72e3e617bf8bdea1392fb385e25a51f382b37d01d171de51dfaf2f53b79fb09adc10049ee571fbc13 languageName: node linkType: hard @@ -1234,17 +1218,14 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.296.0" +"@aws-sdk/middleware-sdk-sts@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.299.0" dependencies: - "@aws-sdk/middleware-signing": 3.296.0 - "@aws-sdk/property-provider": 3.296.0 - "@aws-sdk/protocol-http": 3.296.0 - "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/middleware-signing": 3.299.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 5caff7928034f48041a353c439c647aa05c8ea6e7793568a5a2a01ff0dd71e2ecdb3aa6be70209bbd076e4c14a8764aca48de59e8889d0b7ac701ee806e71882 + checksum: b1e2b28d29d924bbe176203c9a0abbe05a48748845da970a5aa61723b5ad118d50b3790baf63cecb69db63b89dc6e4abca218f14ce258bce87858acf339696de languageName: node linkType: hard @@ -1258,17 +1239,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/middleware-signing@npm:3.296.0" +"@aws-sdk/middleware-signing@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/middleware-signing@npm:3.299.0" dependencies: "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/protocol-http": 3.296.0 - "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/signature-v4": 3.299.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/util-middleware": 3.296.0 tslib: ^2.5.0 - checksum: 91b53744c1ddda26041f957762e80a5d8714724df70e5d20985898b10659d4520bd2eb9929622564f36b5e8c872d69d99f2f964a5741b1be4d675ff4bc465358 + checksum: 4eaa0a3b51eefa0f5e839a55ffa98f7cc79644fb7e8e3a3fbbdc4de2e2d10fb07cbd5201f44464a5550462af5efe47977feb6f057e6bd2160eed0904cd9d1752 languageName: node linkType: hard @@ -1291,15 +1272,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.296.0" +"@aws-sdk/middleware-user-agent@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.299.0" dependencies: "@aws-sdk/protocol-http": 3.296.0 "@aws-sdk/types": 3.296.0 "@aws-sdk/util-endpoints": 3.296.0 tslib: ^2.5.0 - checksum: ac72cace0df77edaeba789f15e9f6b9bc28ac8f60cf3af5f4a5b45415346f9eb8c32a76294150ed73bdb9b1a777bf1e21d649e11d1e0c9c316b18068e2176719 + checksum: 7ae91b41d2a9ab6d016e749458c30eb99f7fc1b11093410e6e2b0f0258aba8269fd5e22a980eb54bcbf8456679bf65c7e76fbf5bb145a13ff7d31398a82821ae languageName: node linkType: hard @@ -1386,27 +1367,26 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.296.0" +"@aws-sdk/signature-v4-multi-region@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.299.0" dependencies: "@aws-sdk/protocol-http": 3.296.0 - "@aws-sdk/signature-v4": 3.296.0 + "@aws-sdk/signature-v4": 3.299.0 "@aws-sdk/types": 3.296.0 - "@aws-sdk/util-arn-parser": 3.295.0 tslib: ^2.5.0 peerDependencies: "@aws-sdk/signature-v4-crt": ^3.118.0 peerDependenciesMeta: "@aws-sdk/signature-v4-crt": optional: true - checksum: 48bd01847c8ccb346bbf2ddf341da5076e43a54a980eff7102a5aa0801ca6408789218602c89b55fc377cde29e6b8767a4157aaa585ce088c7540663469bbdba + checksum: 6e1b20d4586ec02a30c272d978ddafc492cedee2e98853163f842e870cc3abe3ed4f4b9dd23bd8673841e0d64b58adc12fc5a21289ad6bcadf67e7d59bd1b400 languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/signature-v4@npm:3.296.0" +"@aws-sdk/signature-v4@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/signature-v4@npm:3.299.0" dependencies: "@aws-sdk/is-array-buffer": 3.295.0 "@aws-sdk/types": 3.296.0 @@ -1415,7 +1395,7 @@ __metadata: "@aws-sdk/util-uri-escape": 3.295.0 "@aws-sdk/util-utf8": 3.295.0 tslib: ^2.5.0 - checksum: fc208a696d38aeae1908dba7e2c9ebf5c84d5585f3620387fe0297d283562d8e9c6125ab8973a0f4740f25472dda0ac3280c5411b3d8090fea67a0e8bd5d7689 + checksum: 642e49ef1cb87649a0fdceb82c55f5153f9d662d5429d49fb18601c3ff8c12a1b050d8856fb18c041511be9d4d38fa741628c23f4be508cb816be696446139cd languageName: node linkType: hard @@ -1430,16 +1410,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.298.0": - version: 3.298.0 - resolution: "@aws-sdk/token-providers@npm:3.298.0" +"@aws-sdk/token-providers@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/token-providers@npm:3.299.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.298.0 + "@aws-sdk/client-sso-oidc": 3.299.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/shared-ini-file-loader": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: aed172e630a4d5de12f77564782486989cf12fe90b837bf0b82347cf1ed6c73c086aacad284d753a9e47676d4bdf251232b845d57f2f9943e5c815bb9321b465 + checksum: 37fac12eead196c717385511344a0125871a2a1a745ce85fc7c2cf086023aeb19ce9cd0c5289ba425cb7df1182d346f8c6c50087467243850c879b3d74dc4a17 languageName: node linkType: hard @@ -1531,17 +1511,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.296.0" +"@aws-sdk/util-defaults-mode-node@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.299.0" dependencies: - "@aws-sdk/config-resolver": 3.296.0 + "@aws-sdk/config-resolver": 3.299.0 "@aws-sdk/credential-provider-imds": 3.296.0 "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/property-provider": 3.296.0 "@aws-sdk/types": 3.296.0 tslib: ^2.5.0 - checksum: 0cba68364659c3e28a351a42b9e5c80441388a1963187c4c349b63d4ebefed6bbffb8dfe4cb372f7ec29dd005f6d9f2a05a46b4bfc4e465c26cd0926b06134d2 + checksum: f0a30f8a58a5f92ea8ee6bc0239f635f318f16b3cf00ef00ce622715a267c598f55791532bd845070344f35d4ba7e8b6063ecb7bc76caac3c2eb90cca3150657 languageName: node linkType: hard @@ -1627,20 +1607,20 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.296.0" +"@aws-sdk/util-user-agent-browser@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.299.0" dependencies: "@aws-sdk/types": 3.296.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 377146a591ee2ddced39cb4b624678ef7e38e7a0bc105da4459f939ad716ef2b3c28fa0800ea01d17f1f610b8cb103a8adfd9ebe696427ccf69e1721fcb986c9 + checksum: 60ebb1c0f5de624c212f00641fdcc8b667dac6442413d0d882745b660f72a6d1107cd6b04e7a5eee4013f0444b9fedfe151317937ac1f7d333dd3feeefa027b0 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.296.0": - version: 3.296.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.296.0" +"@aws-sdk/util-user-agent-node@npm:3.299.0": + version: 3.299.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.299.0" dependencies: "@aws-sdk/node-config-provider": 3.296.0 "@aws-sdk/types": 3.296.0 @@ -1650,7 +1630,7 @@ __metadata: peerDependenciesMeta: aws-crt: optional: true - checksum: 20b370e1ebee13f70d7f2ee804c6069e5bcaa676591ba2aed09ef28fbd05ac8e201b0473dd0572e9e47c98bbc27f5b55d61ad469f330833576a7972c5c387be9 + checksum: 50bfcaf9bc0ee6f0ca87bfbcbacf10394631d62dba508f0b43b7c3cf2a6febe75ca1160e18d0abc96caddb0608504ab7ceb4a92078184764669a935db1af7cf8 languageName: node linkType: hard