Merge branch 'backstage:master' into plugin-azure-functions
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
Added two new `EntityRefLinks` props, the first being `getTitle` that allows for customization of the title used for each link. The second one is `fetchEntities`, which triggers a fetching of all entities so that the full entity definition is available in the `getTitle` callback.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Support custom layouts in dry run editor
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-github-issues': patch
|
||||
---
|
||||
|
||||
Updated the `luxon` dependency to 3.x
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
run: yarn build
|
||||
|
||||
- name: Install mkdocs & techdocs-core
|
||||
run: python -m pip install mkdocs-techdocs-core==1.1.6 mkdocs==1.3.1
|
||||
run: python -m pip install mkdocs-techdocs-core==1.1.7 mkdocs==1.4.0
|
||||
|
||||
- name: techdocs-cli e2e test
|
||||
working-directory: packages/techdocs-cli
|
||||
|
||||
+6
-6
@@ -1415,22 +1415,22 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"typescript@npm:^4.1.3":
|
||||
version: 4.8.2
|
||||
resolution: "typescript@npm:4.8.2"
|
||||
version: 4.8.4
|
||||
resolution: "typescript@npm:4.8.4"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 7f5b81d0d558c9067f952c7af52ab7f19c2e70a916817929e4a5b256c93990bf3178eccb1ac8a850bc75df35f6781b6f4cb3370ce20d8b1ded92ed462348f628
|
||||
checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@^4.1.3#~builtin<compat/typescript>":
|
||||
version: 4.8.2
|
||||
resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin<compat/typescript>::version=4.8.2&hash=a1c5e5"
|
||||
version: 4.8.4
|
||||
resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin<compat/typescript>::version=4.8.4&hash=a1c5e5"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 5cb0f02f414f5405f4b0e7ee1fd7fa9177b6a8783c9017b6cad85f56ce4c4f93e0e6f2ce37e863cb597d44227cd009474c9fbd85bf7a50004e5557426cb58079
|
||||
checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
---
|
||||
id: service-to-service-auth
|
||||
title: Service to Service Auth
|
||||
# prettier-ignore
|
||||
description: This section describes how to use service to service authentication, both internally within Backstage plugins and towards external services.
|
||||
---
|
||||
|
||||
This article describes the steps needed to introduce _backend-to-backend auth_.
|
||||
This allows plugin backends to determine whether a given request originates from
|
||||
a legitimate Backstage plugin (or other external caller), by requiring a special
|
||||
type of service-to-service token which is signed with a shared secret.
|
||||
|
||||
When enabling this protection on your Backstage backend plugins, for example the
|
||||
catalog, other callers in the ecosystem such as the search indexer and
|
||||
scaffolder would need to present a valid token to the catalog to be able to
|
||||
request its contents.
|
||||
|
||||
## Setup
|
||||
|
||||
In a newly created Backstage app, the backend is setup up to not require any
|
||||
auth at all. This means that generated service-to-service tokens are empty, and
|
||||
that incoming requests are not validated. If you want to enable
|
||||
service-to-service auth, the first step is to switch out the following line in
|
||||
your backend setup at `packages/backend/src/index.ts`:
|
||||
|
||||
```diff
|
||||
- const tokenManager = ServerTokenManager.noop();
|
||||
+ const tokenManager = ServerTokenManager.fromConfig(config, { logger: root });
|
||||
```
|
||||
|
||||
By switching from the no-op `ServiceTokenManager` to one created from config,
|
||||
you enable service-to-service auth for any plugin that implements it. The local
|
||||
development setup will generally not be impacted by this, as temporary keys are
|
||||
generated under the hood. But for the production setup, this means you must now
|
||||
provide a shared secret that enables your backend plugins to communicate with
|
||||
each other.
|
||||
|
||||
Backstage service-to-service tokens are currently always signed with a single
|
||||
secret key. It needs to be shared across all backend plugins and services that
|
||||
ones wishes to communicate across. The key can be any base64 encoded secret.
|
||||
The following command can be used to generate such a key in a terminal:
|
||||
|
||||
```bash
|
||||
node -p 'require("crypto").randomBytes(24).toString("base64")'
|
||||
```
|
||||
|
||||
Then place it in the backend configuration, either as a direct value or
|
||||
injected as an env variable.
|
||||
|
||||
```yaml
|
||||
# commonly in your app-config.production.yaml
|
||||
backend:
|
||||
auth:
|
||||
keys:
|
||||
- secret: <the string returned by the above crypto command>
|
||||
# - secret: ${BACKEND_SECRET} - if you want to use an env variable instead
|
||||
```
|
||||
|
||||
**NOTE**: For ease of development, we auto-generate a key for you if you haven't
|
||||
configured a secret in dev mode. You _must set your own secret_ in order for
|
||||
backend-to-backend auth to work in production; the `ServiceTokenManager` will
|
||||
throw an exception in production if it has no keys to work with, which will lead
|
||||
to the backend failing to start up.
|
||||
|
||||
## Usage in Backend Plugins
|
||||
|
||||
There are a few steps if you want to make use of the service-to-service auth in
|
||||
your own backend plugin. First you need to add the `TokenManager` dependency to
|
||||
the `createRouter` options. Typically as `tokenManager: TokenManager`. Along
|
||||
with this you'll need to ask users to start providing this new dependency in
|
||||
their backend setup code.
|
||||
|
||||
Once the `TokenManager` is available, you use the `.getToken()` method to generate
|
||||
a new token for any outgoing requests towards other Backstage backend plugins.
|
||||
This method should be called for every request that you make; do not store the
|
||||
token for later use. The `TokenManager` implementations should already cache
|
||||
tokens as needed. The returned token should then be added as a `Bearer` token
|
||||
for the upstream request, for example:
|
||||
|
||||
```ts
|
||||
const { token } = await this.tokenManager.getToken();
|
||||
|
||||
const response = await fetch(pluginBackendApiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
...headers,
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
To authenticate an incoming request you use the `.authenticate(token)` method.
|
||||
At the time of writing this method doesn't return anything, it will simply
|
||||
throw if the token is invalid.
|
||||
|
||||
```ts
|
||||
await tokenManager.authenticate(token); // throws if token is invalid
|
||||
```
|
||||
|
||||
## Usage in External Callers
|
||||
|
||||
If you have enabled server-to-server auth, you may be interested in generating
|
||||
tokens in code that is external to Backstage itself. External callers may even
|
||||
be written in other languages than Node.js. This section explains how to generate
|
||||
a valid token yourself.
|
||||
|
||||
The token must be a JWT with a `HS256` signature, using the raw base64 decoded
|
||||
value of the configured key as the secret. It must also have the following payload:
|
||||
|
||||
- `sub`: "backstage-server" (only this value supported currently)
|
||||
- `exp`: one hour from the time it was generated, in epoch seconds
|
||||
|
||||
## Granular Access Control
|
||||
|
||||
We plan to build out the service-to-service auth to be much more powerful in the
|
||||
future, but before that is done there are a few tricks you can use with the
|
||||
current system to harden your deployments. This section assumes that you have
|
||||
already split your backend plugins into more than one backend deployment, in
|
||||
order to scale or isolate them.
|
||||
|
||||
The backend auth configuration has support for providing multiple keys, for
|
||||
example:
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
auth:
|
||||
keys:
|
||||
- secret: my-secret-key-1
|
||||
- secret: my-secret-key-2
|
||||
- secret: my-secret-key-3
|
||||
```
|
||||
|
||||
The first key will be used for signing requests, while all of the keys will be
|
||||
used for validation. This means that you can set up an asymmetric configuration
|
||||
where some backend deployments do not have access to each other.
|
||||
|
||||
For example, consider the case where we have split up the catalog, scaffolder,
|
||||
and search plugin into three separate backend deployments. We can use the
|
||||
following configurations to allow both the scaffolder and search plugin to speak
|
||||
to the
|
||||
catalog, but not the other way around, and to not allow any communication between
|
||||
the scaffolder and search plugins.
|
||||
|
||||
```yaml
|
||||
# catalog config
|
||||
backend:
|
||||
auth:
|
||||
keys:
|
||||
- secret: my-secret-key-catalog
|
||||
- secret: my-secret-key-scaffolder
|
||||
- secret: my-secret-key-search
|
||||
|
||||
# scaffolder config
|
||||
backend:
|
||||
auth:
|
||||
keys:
|
||||
- secret: my-secret-key-scaffolder
|
||||
|
||||
# search config
|
||||
backend:
|
||||
auth:
|
||||
keys:
|
||||
- secret: my-secret-key-search
|
||||
```
|
||||
@@ -4,68 +4,4 @@ title: Backend-to-Backend Authentication
|
||||
description: Guide for authenticating API requests between Backstage plugin backends
|
||||
---
|
||||
|
||||
This tutorial describes the steps needed to handle _backend-to-backend
|
||||
authentication_, which allows plugin backends to determine whether a given
|
||||
request originates from a legitimate Backstage backend by verifying a token
|
||||
signed with a shared secret. This system has limited use for now, but will be
|
||||
needed to support the upcoming framework for permissions and authorization (see
|
||||
[the PRFC on the topic](https://github.com/backstage/backstage/pull/7761) for
|
||||
more details).
|
||||
|
||||
Backends have no concept of a Backstage identity, so instead they use a token
|
||||
generated using a shared key stored in config. You can generate a unique key for
|
||||
your app in a terminal, and set the `BACKEND_SECRET` environment variable to the
|
||||
resulting value.
|
||||
|
||||
```bash
|
||||
node -p 'require("crypto").randomBytes(24).toString("base64")'
|
||||
```
|
||||
|
||||
**NOTE**: For ease of development, we auto-generate a key for you if you haven't
|
||||
configured a secret in dev mode. You _must set your own secret_ in order for
|
||||
backend-to-backend authentication to work in production.
|
||||
|
||||
Requests originating from a backend plugin can be authenticated by decorating
|
||||
them with a backend token. Backend tokens can be generated using a
|
||||
`TokenManager`, which can be passed to plugin backends via the
|
||||
`PluginEnvironment`. The `TokenManager` provided in new Backstage instances
|
||||
generated by `create-app` is a stub, which returns empty tokens and accepts any
|
||||
input string as valid. To enable backend-to-backend authentication, you'll need
|
||||
to instantiate a new one using the secret from your config instead:
|
||||
|
||||
```diff
|
||||
// packages/backend/src/index.ts
|
||||
|
||||
function makeCreateEnv(config: Config) {
|
||||
const root = getRootLogger();
|
||||
const reader = UrlReaders.default({ logger: root, config });
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
|
||||
root.info(`Created UrlReader ${reader}`);
|
||||
|
||||
const cacheManager = CacheManager.fromConfig(config);
|
||||
const databaseManager = DatabaseManager.fromConfig(config);
|
||||
- const tokenManager = ServerTokenManager.noop();
|
||||
+ const tokenManager = ServerTokenManager.fromConfig(config, { logger: root });
|
||||
```
|
||||
|
||||
With this `tokenManager`, you can then generate a server token for requests:
|
||||
|
||||
```typescript
|
||||
const { token } = await this.tokenManager.getToken();
|
||||
|
||||
const response = await fetch(pluginBackendApiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
...headers,
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
You can use the same `tokenManager` to authenticate tokens supplied on incoming
|
||||
requests:
|
||||
|
||||
```typescript
|
||||
await tokenManager.authenticate(token); // throws if token is invalid
|
||||
```
|
||||
See [new docs](../auth/service-to-service-auth.md)
|
||||
|
||||
@@ -279,6 +279,7 @@
|
||||
"auth/identity-resolver",
|
||||
"auth/oauth",
|
||||
"auth/add-auth-provider",
|
||||
"auth/service-to-service-auth",
|
||||
"auth/troubleshooting",
|
||||
"auth/glossary"
|
||||
],
|
||||
@@ -335,7 +336,6 @@
|
||||
"tutorials/configuring-plugin-databases",
|
||||
"tutorials/switching-sqlite-postgres",
|
||||
"tutorials/using-backstage-proxy-within-plugin",
|
||||
"tutorials/backend-to-backend-auth",
|
||||
"tutorials/yarn-migration"
|
||||
],
|
||||
"Architecture Decision Records (ADRs)": [
|
||||
|
||||
@@ -164,6 +164,7 @@ nav:
|
||||
- Sign in resolvers: 'auth/identity-resolver.md'
|
||||
- OAuth and OpenID Connect: 'auth/oauth.md'
|
||||
- Contributing New Providers: 'auth/add-auth-provider.md'
|
||||
- Service to Service Auth: 'auth/service-to-service-auth.md'
|
||||
- Troubleshooting Auth: 'auth/troubleshooting.md'
|
||||
- Glossary: 'auth/glossary.md'
|
||||
- Deployment:
|
||||
|
||||
@@ -279,13 +279,28 @@ export type EntityRefLinkProps = {
|
||||
} & Omit<LinkProps, 'to'>;
|
||||
|
||||
// @public
|
||||
export function EntityRefLinks(props: EntityRefLinksProps): JSX.Element;
|
||||
export function EntityRefLinks<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
>(props: EntityRefLinksProps<TRef>): JSX.Element;
|
||||
|
||||
// @public
|
||||
export type EntityRefLinksProps = {
|
||||
entityRefs: (string | Entity | CompoundEntityRef)[];
|
||||
defaultKind?: string;
|
||||
} & Omit<LinkProps, 'to'>;
|
||||
export type EntityRefLinksProps<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
> = (
|
||||
| {
|
||||
defaultKind?: string;
|
||||
entityRefs: TRef[];
|
||||
fetchEntities?: false;
|
||||
getTitle?(entity: TRef): string | undefined;
|
||||
}
|
||||
| {
|
||||
defaultKind?: string;
|
||||
entityRefs: TRef[];
|
||||
fetchEntities: true;
|
||||
getTitle(entity: Entity): string | undefined;
|
||||
}
|
||||
) &
|
||||
Omit<LinkProps, 'to'>;
|
||||
|
||||
// @public
|
||||
export function entityRouteParams(entity: Entity): {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020 The Backstage Authors
|
||||
* 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.
|
||||
@@ -13,41 +13,72 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Entity, CompoundEntityRef } from '@backstage/catalog-model';
|
||||
import React from 'react';
|
||||
import { EntityRefLink } from './EntityRefLink';
|
||||
import { LinkProps } from '@backstage/core-components';
|
||||
import { FetchedEntityRefLinks } from './FetchedEntityRefLinks';
|
||||
|
||||
/**
|
||||
* Props for {@link EntityRefLink}.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type EntityRefLinksProps = {
|
||||
entityRefs: (string | Entity | CompoundEntityRef)[];
|
||||
defaultKind?: string;
|
||||
} & Omit<LinkProps, 'to'>;
|
||||
export type EntityRefLinksProps<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
> = (
|
||||
| {
|
||||
defaultKind?: string;
|
||||
entityRefs: TRef[];
|
||||
fetchEntities?: false;
|
||||
getTitle?(entity: TRef): string | undefined;
|
||||
}
|
||||
| {
|
||||
defaultKind?: string;
|
||||
entityRefs: TRef[];
|
||||
fetchEntities: true;
|
||||
getTitle(entity: Entity): string | undefined;
|
||||
}
|
||||
) &
|
||||
Omit<LinkProps, 'to'>;
|
||||
|
||||
/**
|
||||
* Shows a list of clickable links to entities.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export function EntityRefLinks(props: EntityRefLinksProps) {
|
||||
const { entityRefs, defaultKind, ...linkProps } = props;
|
||||
export function EntityRefLinks<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
>(props: EntityRefLinksProps<TRef>) {
|
||||
const { entityRefs, defaultKind, fetchEntities, getTitle, ...linkProps } =
|
||||
props;
|
||||
|
||||
if (fetchEntities) {
|
||||
return (
|
||||
<FetchedEntityRefLinks
|
||||
{...linkProps}
|
||||
defaultKind={defaultKind}
|
||||
entityRefs={entityRefs}
|
||||
getTitle={getTitle}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{entityRefs.map((r, i) => (
|
||||
<React.Fragment key={i}>
|
||||
{i > 0 && ', '}
|
||||
<EntityRefLink
|
||||
{...linkProps}
|
||||
entityRef={r}
|
||||
defaultKind={defaultKind}
|
||||
/>
|
||||
</React.Fragment>
|
||||
))}
|
||||
{entityRefs.map((r: TRef, i: number) => {
|
||||
return (
|
||||
<React.Fragment key={i}>
|
||||
{i > 0 && ', '}
|
||||
<EntityRefLink
|
||||
{...linkProps}
|
||||
defaultKind={defaultKind}
|
||||
entityRef={r}
|
||||
title={getTitle ? getTitle(r) : undefined}
|
||||
/>
|
||||
</React.Fragment>
|
||||
);
|
||||
})}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* 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 { FetchedEntityRefLinks } from './FetchedEntityRefLinks';
|
||||
import { entityRouteRef } from '../../routes';
|
||||
import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import React from 'react';
|
||||
import { JsonObject } from '@backstage/types';
|
||||
import { catalogApiRef } from '../../api';
|
||||
import { CatalogApi } from '@backstage/catalog-client';
|
||||
|
||||
describe('<FetchedEntityRefLinks />', () => {
|
||||
const getTitle = (e: Entity): string =>
|
||||
(e.spec?.profile!! as JsonObject).displayName!!.toString()!!;
|
||||
|
||||
it('should fetch entities and render the custom display text', async () => {
|
||||
const entityRefs = [
|
||||
{
|
||||
kind: 'Component',
|
||||
namespace: 'default',
|
||||
name: 'software',
|
||||
},
|
||||
{
|
||||
kind: 'API',
|
||||
namespace: 'default',
|
||||
name: 'interface',
|
||||
},
|
||||
];
|
||||
|
||||
const catalogApi: Partial<CatalogApi> = {
|
||||
getEntities: () =>
|
||||
Promise.resolve({
|
||||
items: entityRefs.map(ref => ({
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: ref.kind,
|
||||
metadata: {
|
||||
name: ref.name,
|
||||
namespace: ref.namespace,
|
||||
},
|
||||
spec: {
|
||||
profile: {
|
||||
displayName: ref.name.toLocaleUpperCase('en-US'),
|
||||
},
|
||||
type: 'organization',
|
||||
},
|
||||
})),
|
||||
}),
|
||||
};
|
||||
|
||||
const rendered = await renderInTestApp(
|
||||
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
|
||||
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
|
||||
</TestApiProvider>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(rendered.getByText('SOFTWARE')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/component/software',
|
||||
);
|
||||
|
||||
expect(rendered.getByText('INTERFACE')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/api/interface',
|
||||
);
|
||||
});
|
||||
|
||||
it('should use entities as they are provided and render the custom display text', async () => {
|
||||
const entityRefs = [
|
||||
{
|
||||
kind: 'Component',
|
||||
namespace: 'default',
|
||||
name: 'tool',
|
||||
},
|
||||
{
|
||||
kind: 'API',
|
||||
namespace: 'default',
|
||||
name: 'implementation',
|
||||
},
|
||||
].map(ref => ({
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: ref.kind,
|
||||
metadata: {
|
||||
name: ref.name,
|
||||
namespace: ref.namespace,
|
||||
},
|
||||
spec: {
|
||||
profile: {
|
||||
displayName: ref.name.toLocaleUpperCase('en-US'),
|
||||
},
|
||||
type: 'organization',
|
||||
},
|
||||
}));
|
||||
|
||||
const catalogApi: Partial<CatalogApi> = {};
|
||||
|
||||
const rendered = await renderInTestApp(
|
||||
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
|
||||
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
|
||||
</TestApiProvider>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(rendered.getByText('TOOL')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/component/tool',
|
||||
);
|
||||
|
||||
expect(rendered.getByText('IMPLEMENTATION')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/api/implementation',
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle heterogeneous array of values to render the custom display text', async () => {
|
||||
const entityRefs = [
|
||||
...[
|
||||
{
|
||||
kind: 'Component',
|
||||
namespace: 'default',
|
||||
name: 'tool',
|
||||
},
|
||||
{
|
||||
kind: 'API',
|
||||
namespace: 'default',
|
||||
name: 'implementation',
|
||||
},
|
||||
].map(ref => ({
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: ref.kind,
|
||||
metadata: {
|
||||
name: ref.name,
|
||||
namespace: ref.namespace,
|
||||
},
|
||||
spec: {
|
||||
profile: {
|
||||
displayName: ref.name.toLocaleUpperCase('en-US'),
|
||||
},
|
||||
type: 'organization',
|
||||
},
|
||||
})),
|
||||
{
|
||||
kind: 'Component',
|
||||
namespace: 'default',
|
||||
name: 'interface',
|
||||
},
|
||||
];
|
||||
|
||||
const catalogApi: Partial<CatalogApi> = {
|
||||
getEntities: () =>
|
||||
Promise.resolve({
|
||||
items: [
|
||||
{
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Component',
|
||||
metadata: {
|
||||
name: 'interface',
|
||||
namespace: 'default',
|
||||
},
|
||||
spec: {
|
||||
profile: {
|
||||
displayName: 'INTERFACE',
|
||||
},
|
||||
type: 'organization',
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
};
|
||||
|
||||
const rendered = await renderInTestApp(
|
||||
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
|
||||
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
|
||||
</TestApiProvider>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(rendered.getByText('TOOL')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/component/tool',
|
||||
);
|
||||
|
||||
expect(rendered.getByText('IMPLEMENTATION')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/api/implementation',
|
||||
);
|
||||
|
||||
expect(rendered.getByText('INTERFACE')).toHaveAttribute(
|
||||
'href',
|
||||
'/catalog/default/component/interface',
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* 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 {
|
||||
Entity,
|
||||
CompoundEntityRef,
|
||||
parseEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import React from 'react';
|
||||
import { EntityRefLink } from './EntityRefLink';
|
||||
import { ErrorPanel, LinkProps, Progress } from '@backstage/core-components';
|
||||
import useAsync from 'react-use/lib/useAsync';
|
||||
import { catalogApiRef } from '../../api';
|
||||
import { useApi } from '@backstage/core-plugin-api';
|
||||
|
||||
/**
|
||||
* Props for {@link FetchedEntityRefLinks}.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type FetchedEntityRefLinksProps<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
> = {
|
||||
defaultKind?: string;
|
||||
entityRefs: TRef[];
|
||||
getTitle(entity: Entity): string | undefined;
|
||||
} & Omit<LinkProps, 'to'>;
|
||||
|
||||
/**
|
||||
* Shows a list of clickable links to entities with auto-fetching of entities
|
||||
* for customising a displayed text via title attribute.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export function FetchedEntityRefLinks<
|
||||
TRef extends string | CompoundEntityRef | Entity,
|
||||
>(props: FetchedEntityRefLinksProps<TRef>) {
|
||||
const { entityRefs, defaultKind, getTitle, ...linkProps } = props;
|
||||
|
||||
const catalogApi = useApi(catalogApiRef);
|
||||
|
||||
const {
|
||||
value: entities = new Array<Entity>(),
|
||||
loading,
|
||||
error,
|
||||
} = useAsync(async () => {
|
||||
const refs = entityRefs.reduce((acc, current) => {
|
||||
return 'metadata' in current ? acc : [...acc, parseEntityRef(current)];
|
||||
}, new Array<CompoundEntityRef>());
|
||||
|
||||
const pureEntities = entityRefs.filter(
|
||||
ref => 'metadata' in ref,
|
||||
) as Array<Entity>;
|
||||
|
||||
return refs.length > 0
|
||||
? [
|
||||
...(
|
||||
await catalogApi.getEntities({
|
||||
filter: refs.map(ref => ({
|
||||
kind: ref.kind,
|
||||
'metadata.namespace': ref.namespace,
|
||||
'metadata.name': ref.name,
|
||||
})),
|
||||
})
|
||||
).items,
|
||||
...pureEntities,
|
||||
]
|
||||
: pureEntities;
|
||||
}, [entityRefs]);
|
||||
|
||||
if (loading) {
|
||||
return <Progress />;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
return <ErrorPanel error={error} />;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{entities.map((r: Entity, i) => {
|
||||
return (
|
||||
<React.Fragment key={i}>
|
||||
{i > 0 && ', '}
|
||||
<EntityRefLink
|
||||
{...linkProps}
|
||||
defaultKind={defaultKind}
|
||||
entityRef={r}
|
||||
title={getTitle(r as Entity)}
|
||||
/>
|
||||
</React.Fragment>
|
||||
);
|
||||
})}
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -32,7 +32,7 @@
|
||||
"@material-ui/core": "^4.12.4",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "^4.0.0-alpha.61",
|
||||
"luxon": "^2.4.0",
|
||||
"luxon": "^3.0.0",
|
||||
"octokit": "^2.0.4",
|
||||
"react-use": "^17.4.0"
|
||||
},
|
||||
|
||||
@@ -207,7 +207,7 @@ export function TemplateEditorFormDirectoryEditorDryRun(
|
||||
'setErrorText' | 'fieldExtensions' | 'layouts'
|
||||
>,
|
||||
) {
|
||||
const { setErrorText, fieldExtensions = [] } = props;
|
||||
const { setErrorText, fieldExtensions = [], layouts } = props;
|
||||
const dryRun = useDryRun();
|
||||
|
||||
const directoryEditor = useDirectoryEditor();
|
||||
@@ -246,6 +246,7 @@ export function TemplateEditorFormDirectoryEditorDryRun(
|
||||
content={content}
|
||||
data={data}
|
||||
onUpdate={setData}
|
||||
layouts={layouts}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
+55
-55
@@ -2977,126 +2977,126 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-android-arm-eabi@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
|
||||
"@swc/core-android-arm-eabi@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-android-arm-eabi@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.122
|
||||
conditions: os=android & cpu=arm
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-android-arm64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-android-arm64@npm:1.3.3"
|
||||
"@swc/core-android-arm64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-android-arm64@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=android & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-arm64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
|
||||
"@swc/core-darwin-arm64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.3.4"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-x64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-darwin-x64@npm:1.3.3"
|
||||
"@swc/core-darwin-x64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-darwin-x64@npm:1.3.4"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-freebsd-x64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
|
||||
"@swc/core-freebsd-x64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-freebsd-x64@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=freebsd & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=linux & cpu=arm
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-gnu@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
|
||||
"@swc/core-linux-arm64-gnu@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-musl@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
|
||||
"@swc/core-linux-arm64-musl@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.3.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-gnu@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
|
||||
"@swc/core-linux-x64-gnu@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.3.4"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-musl@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
|
||||
"@swc/core-linux-x64-musl@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.3.4"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-arm64-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-arm64-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-ia32-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-ia32-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-x64-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-x64-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.3.4"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core@npm:^1.2.239":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core@npm:1.3.3"
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/core-android-arm-eabi": 1.3.3
|
||||
"@swc/core-android-arm64": 1.3.3
|
||||
"@swc/core-darwin-arm64": 1.3.3
|
||||
"@swc/core-darwin-x64": 1.3.3
|
||||
"@swc/core-freebsd-x64": 1.3.3
|
||||
"@swc/core-linux-arm-gnueabihf": 1.3.3
|
||||
"@swc/core-linux-arm64-gnu": 1.3.3
|
||||
"@swc/core-linux-arm64-musl": 1.3.3
|
||||
"@swc/core-linux-x64-gnu": 1.3.3
|
||||
"@swc/core-linux-x64-musl": 1.3.3
|
||||
"@swc/core-win32-arm64-msvc": 1.3.3
|
||||
"@swc/core-win32-ia32-msvc": 1.3.3
|
||||
"@swc/core-win32-x64-msvc": 1.3.3
|
||||
"@swc/core-android-arm-eabi": 1.3.4
|
||||
"@swc/core-android-arm64": 1.3.4
|
||||
"@swc/core-darwin-arm64": 1.3.4
|
||||
"@swc/core-darwin-x64": 1.3.4
|
||||
"@swc/core-freebsd-x64": 1.3.4
|
||||
"@swc/core-linux-arm-gnueabihf": 1.3.4
|
||||
"@swc/core-linux-arm64-gnu": 1.3.4
|
||||
"@swc/core-linux-arm64-musl": 1.3.4
|
||||
"@swc/core-linux-x64-gnu": 1.3.4
|
||||
"@swc/core-linux-x64-musl": 1.3.4
|
||||
"@swc/core-win32-arm64-msvc": 1.3.4
|
||||
"@swc/core-win32-ia32-msvc": 1.3.4
|
||||
"@swc/core-win32-x64-msvc": 1.3.4
|
||||
dependenciesMeta:
|
||||
"@swc/core-android-arm-eabi":
|
||||
optional: true
|
||||
@@ -3126,7 +3126,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
swcx: run_swcx.js
|
||||
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
|
||||
checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -755,6 +755,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/generator@npm:^7.18.13":
|
||||
version: 7.19.3
|
||||
resolution: "@babel/generator@npm:7.19.3"
|
||||
dependencies:
|
||||
"@babel/types": ^7.19.3
|
||||
"@jridgewell/gen-mapping": ^0.3.2
|
||||
jsesc: ^2.5.1
|
||||
checksum: b1585e398f6c37f442a2fdac964a326b348fbc8fb99a6aaf4f72bbe993adb0ca792bc0a9c65e59930b2a2e55eb5aa3aab360ceb678d3d40692eb0cda2b7b6aa6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/generator@npm:^7.18.9":
|
||||
version: 7.18.9
|
||||
resolution: "@babel/generator@npm:7.18.9"
|
||||
@@ -1269,6 +1280,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/helper-validator-identifier@npm:^7.19.1":
|
||||
version: 7.19.1
|
||||
resolution: "@babel/helper-validator-identifier@npm:7.19.1"
|
||||
checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/helper-validator-option@npm:^7.16.7":
|
||||
version: 7.16.7
|
||||
resolution: "@babel/helper-validator-option@npm:7.16.7"
|
||||
@@ -2986,6 +3004,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/types@npm:^7.18.13, @babel/types@npm:^7.19.3":
|
||||
version: 7.19.3
|
||||
resolution: "@babel/types@npm:7.19.3"
|
||||
dependencies:
|
||||
"@babel/helper-string-parser": ^7.18.10
|
||||
"@babel/helper-validator-identifier": ^7.19.1
|
||||
to-fast-properties: ^2.0.0
|
||||
checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9":
|
||||
version: 7.18.9
|
||||
resolution: "@babel/types@npm:7.18.9"
|
||||
@@ -5709,7 +5738,7 @@ __metadata:
|
||||
"@types/node": "*"
|
||||
"@types/react": ^16.13.1 || ^17.0.0
|
||||
cross-fetch: ^3.1.5
|
||||
luxon: ^2.4.0
|
||||
luxon: ^3.0.0
|
||||
msw: ^0.47.0
|
||||
octokit: ^2.0.4
|
||||
react-use: ^17.4.0
|
||||
@@ -8520,14 +8549,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@google-cloud/firestore@npm:^6.0.0":
|
||||
version: 6.2.0
|
||||
resolution: "@google-cloud/firestore@npm:6.2.0"
|
||||
version: 6.3.0
|
||||
resolution: "@google-cloud/firestore@npm:6.3.0"
|
||||
dependencies:
|
||||
fast-deep-equal: ^3.1.1
|
||||
functional-red-black-tree: ^1.0.1
|
||||
google-gax: ^3.5.1
|
||||
protobufjs: ^7.0.0
|
||||
checksum: fce0d729d63b5722df0dcedb78c8b494b2876de128128de8c8dc7d9add1ff7e00a8df1d04e7e2210a71331e623877e67149593341f714d2b0f92b6fef73dfcbd
|
||||
checksum: 50f52dc06746fe3af1e9abb1063244015f968b71387104f65bd752ce6522406fe987291791c40fd40e84a11033c993e7847e5b8619173b7202c70382e55e853b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8615,11 +8644,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@graphql-codegen/cli@npm:^2.3.1":
|
||||
version: 2.12.2
|
||||
resolution: "@graphql-codegen/cli@npm:2.12.2"
|
||||
version: 2.13.1
|
||||
resolution: "@graphql-codegen/cli@npm:2.13.1"
|
||||
dependencies:
|
||||
"@babel/generator": ^7.18.13
|
||||
"@babel/template": ^7.18.10
|
||||
"@babel/types": ^7.18.13
|
||||
"@graphql-codegen/core": 2.6.2
|
||||
"@graphql-codegen/plugin-helpers": ^2.7.1
|
||||
"@graphql-codegen/plugin-helpers": ^2.6.2
|
||||
"@graphql-tools/apollo-engine-loader": ^7.3.6
|
||||
"@graphql-tools/code-file-loader": ^7.3.1
|
||||
"@graphql-tools/git-loader": ^7.2.1
|
||||
@@ -8630,12 +8662,12 @@ __metadata:
|
||||
"@graphql-tools/prisma-loader": ^7.2.7
|
||||
"@graphql-tools/url-loader": ^7.13.2
|
||||
"@graphql-tools/utils": ^8.9.0
|
||||
"@whatwg-node/fetch": ^0.4.0
|
||||
"@whatwg-node/fetch": ^0.3.0
|
||||
ansi-escapes: ^4.3.1
|
||||
chalk: ^4.1.0
|
||||
chokidar: ^3.5.2
|
||||
cosmiconfig: ^7.0.0
|
||||
cosmiconfig-typescript-loader: ^4.0.0
|
||||
cosmiconfig-typescript-loader: 4.0.0
|
||||
debounce: ^1.2.0
|
||||
detect-indent: ^6.0.0
|
||||
graphql-config: ^4.3.5
|
||||
@@ -8657,7 +8689,7 @@ __metadata:
|
||||
graphql-code-generator: cjs/bin.js
|
||||
graphql-codegen: cjs/bin.js
|
||||
graphql-codegen-esm: esm/bin.js
|
||||
checksum: 38262533b4bfcdacab25a3ce874082895ca3da164313466c531ac012d868f748c2f764f50dd4e98f03d3d5a5253c397488dde7c164b59677659eb8838459e518
|
||||
checksum: 750c2a5f598def903842b8b91bbc4a4493703c1f0a2a2300af88b35cffce21128ccb4896e10a789dcdc9ed8076b89144a463da4772ccecf72d44645fc0ab67fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8707,22 +8739,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@graphql-codegen/plugin-helpers@npm:^2.7.1":
|
||||
version: 2.7.1
|
||||
resolution: "@graphql-codegen/plugin-helpers@npm:2.7.1"
|
||||
dependencies:
|
||||
"@graphql-tools/utils": ^8.8.0
|
||||
change-case-all: 1.0.14
|
||||
common-tags: 1.8.2
|
||||
import-from: 4.0.0
|
||||
lodash: ~4.17.0
|
||||
tslib: ~2.4.0
|
||||
peerDependencies:
|
||||
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
||||
checksum: fffb801ccccee36d729c134caa79cc5eb6a1b3717253646cd1759e2dd0e754bccb6b0b6b5341a649fd18794f8b0b970776b71907d5a7b15048521ea9eb283180
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@graphql-codegen/schema-ast@npm:^2.5.1":
|
||||
version: 2.5.1
|
||||
resolution: "@graphql-codegen/schema-ast@npm:2.5.1"
|
||||
@@ -10856,9 +10872,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@microsoft/microsoft-graph-types@npm:^2.6.0":
|
||||
version: 2.24.0
|
||||
resolution: "@microsoft/microsoft-graph-types@npm:2.24.0"
|
||||
checksum: 94dfcf83905d4e416b8ddc52a338d583cbdc15bdc4bad0aff2212a0692d81870c55f9a01165dd3878442d2de512de57f02c575ebb77f1d393ac87449fb8e5c51
|
||||
version: 2.25.0
|
||||
resolution: "@microsoft/microsoft-graph-types@npm:2.25.0"
|
||||
checksum: b311385e0a51f827082af5a016f35b1d6cd4d861121e8767b3279ab1a17475977cddbbdcc208abdddf0f953fd6ce4634d3c302e317cf50af4cb6111385347b4f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12580,126 +12596,126 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-android-arm-eabi@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
|
||||
"@swc/core-android-arm-eabi@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-android-arm-eabi@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.122
|
||||
conditions: os=android & cpu=arm
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-android-arm64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-android-arm64@npm:1.3.3"
|
||||
"@swc/core-android-arm64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-android-arm64@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=android & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-arm64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
|
||||
"@swc/core-darwin-arm64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.3.4"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-x64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-darwin-x64@npm:1.3.3"
|
||||
"@swc/core-darwin-x64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-darwin-x64@npm:1.3.4"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-freebsd-x64@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
|
||||
"@swc/core-freebsd-x64@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-freebsd-x64@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=freebsd & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=linux & cpu=arm
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-gnu@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
|
||||
"@swc/core-linux-arm64-gnu@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-musl@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
|
||||
"@swc/core-linux-arm64-musl@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.3.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-gnu@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
|
||||
"@swc/core-linux-x64-gnu@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.3.4"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-musl@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
|
||||
"@swc/core-linux-x64-musl@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.3.4"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-arm64-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-arm64-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-ia32-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-ia32-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/wasm": 1.2.130
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-x64-msvc@npm:1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
|
||||
"@swc/core-win32-x64-msvc@npm:1.3.4":
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.3.4"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core@npm:^1.2.239":
|
||||
version: 1.3.3
|
||||
resolution: "@swc/core@npm:1.3.3"
|
||||
version: 1.3.4
|
||||
resolution: "@swc/core@npm:1.3.4"
|
||||
dependencies:
|
||||
"@swc/core-android-arm-eabi": 1.3.3
|
||||
"@swc/core-android-arm64": 1.3.3
|
||||
"@swc/core-darwin-arm64": 1.3.3
|
||||
"@swc/core-darwin-x64": 1.3.3
|
||||
"@swc/core-freebsd-x64": 1.3.3
|
||||
"@swc/core-linux-arm-gnueabihf": 1.3.3
|
||||
"@swc/core-linux-arm64-gnu": 1.3.3
|
||||
"@swc/core-linux-arm64-musl": 1.3.3
|
||||
"@swc/core-linux-x64-gnu": 1.3.3
|
||||
"@swc/core-linux-x64-musl": 1.3.3
|
||||
"@swc/core-win32-arm64-msvc": 1.3.3
|
||||
"@swc/core-win32-ia32-msvc": 1.3.3
|
||||
"@swc/core-win32-x64-msvc": 1.3.3
|
||||
"@swc/core-android-arm-eabi": 1.3.4
|
||||
"@swc/core-android-arm64": 1.3.4
|
||||
"@swc/core-darwin-arm64": 1.3.4
|
||||
"@swc/core-darwin-x64": 1.3.4
|
||||
"@swc/core-freebsd-x64": 1.3.4
|
||||
"@swc/core-linux-arm-gnueabihf": 1.3.4
|
||||
"@swc/core-linux-arm64-gnu": 1.3.4
|
||||
"@swc/core-linux-arm64-musl": 1.3.4
|
||||
"@swc/core-linux-x64-gnu": 1.3.4
|
||||
"@swc/core-linux-x64-musl": 1.3.4
|
||||
"@swc/core-win32-arm64-msvc": 1.3.4
|
||||
"@swc/core-win32-ia32-msvc": 1.3.4
|
||||
"@swc/core-win32-x64-msvc": 1.3.4
|
||||
dependenciesMeta:
|
||||
"@swc/core-android-arm-eabi":
|
||||
optional: true
|
||||
@@ -12729,7 +12745,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
swcx: run_swcx.js
|
||||
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
|
||||
checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12743,13 +12759,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@swc/jest@npm:^0.2.22":
|
||||
version: 0.2.22
|
||||
resolution: "@swc/jest@npm:0.2.22"
|
||||
version: 0.2.23
|
||||
resolution: "@swc/jest@npm:0.2.23"
|
||||
dependencies:
|
||||
"@jest/create-cache-key-function": ^27.4.2
|
||||
jsonc-parser: ^3.2.0
|
||||
peerDependencies:
|
||||
"@swc/core": "*"
|
||||
checksum: c624cfcc9325a719fc7d811536011c4bde0c63c808827b47d7bbcc57621323146cb3891d8702fd01c1bebfc54a9148692f772af4db8e839eb2c6ccd7850fa5f5
|
||||
checksum: 1c7db1f6995916ad77369311be078e9d33f2c6a586be9c87927f6a36d124dcd49c29d8c596758cd9dbf4e388ec30f41989e70e574eb59bef3fb41d3131629763
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -12776,18 +12793,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tanstack/query-core@npm:4.3.8":
|
||||
version: 4.3.8
|
||||
resolution: "@tanstack/query-core@npm:4.3.8"
|
||||
checksum: 25ea16db7632f5acc7c80e60b9f1410cf9df430240ec5077a1607c3ffea14db2c78db800f7bc70efafd7ce26f7216cda767824fa279049cc9c7e40ac1818f38e
|
||||
"@tanstack/query-core@npm:4.7.2":
|
||||
version: 4.7.2
|
||||
resolution: "@tanstack/query-core@npm:4.7.2"
|
||||
checksum: 5be625bf27505acded2c5add69c54a48be8c6cacdf4ea821ef499ca449a3a5694bda995bdc2439a83039563f91cb3424b765c597fd28861c6a867efda039e6d1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tanstack/react-query@npm:^4.1.3":
|
||||
version: 4.3.9
|
||||
resolution: "@tanstack/react-query@npm:4.3.9"
|
||||
version: 4.7.2
|
||||
resolution: "@tanstack/react-query@npm:4.7.2"
|
||||
dependencies:
|
||||
"@tanstack/query-core": 4.3.8
|
||||
"@tanstack/query-core": 4.7.2
|
||||
use-sync-external-store: ^1.2.0
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
@@ -12798,7 +12815,7 @@ __metadata:
|
||||
optional: true
|
||||
react-native:
|
||||
optional: true
|
||||
checksum: 1f77aadda55722519458185b4db5378d05d95bcbe9f7c4fda0ef82121a975223ede1a56729db6030984b336e533c04b1c7aa8fed344e5c52ec73a0486b65f8e7
|
||||
checksum: 07f6ec6c44c6826986167d772d78051414f15f08c874fe38187e1175a527ec71f77025d1466651802b8cde991618acece668fc17d7dc62af837ad7fb02882fa3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -13455,7 +13472,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8":
|
||||
"@types/dockerode@npm:^3.3.0":
|
||||
version: 3.3.10
|
||||
resolution: "@types/dockerode@npm:3.3.10"
|
||||
dependencies:
|
||||
"@types/docker-modem": "*"
|
||||
"@types/node": "*"
|
||||
checksum: ef2231adebbdc1876a00fd16a51963ed2ea05a2305031467420c753f77a27a6f2a47617e2f4a42702be84c88046a5a5f6dfd471e3579f11f21166f539a3d2373
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/dockerode@npm:^3.3.8":
|
||||
version: 3.3.9
|
||||
resolution: "@types/dockerode@npm:3.3.9"
|
||||
dependencies:
|
||||
@@ -13575,14 +13602,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/express@npm:*, @types/express@npm:4.17.13, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6":
|
||||
version: 4.17.13
|
||||
resolution: "@types/express@npm:4.17.13"
|
||||
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: 12a2a0e6c4b993fc0854bec665906788aea0d8ee4392389d7a98a5de1eefdd33c9e1e40a91f3afd274011119c506f7b4126acb97fae62ae20b654974d44cba12
|
||||
checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -13952,9 +13979,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/luxon@npm:*, @types/luxon@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "@types/luxon@npm:3.0.0"
|
||||
checksum: 7738d3f4b91097a8139eca966ab53c6b40bb417b2cc2014c3bbd0aee033d6ff54af14c62046c2eb042434923b6bf796874f24b2af90e07ef422e6d841463d4b2
|
||||
version: 3.0.1
|
||||
resolution: "@types/luxon@npm:3.0.1"
|
||||
checksum: a81444f9b474ea9b3063ab4cc68b917a2634e38b4e229f86c78c35023a32bf5e8d1044d7c229c011291662c976cb6c4cf109dc3d2077c571790a31779a554178
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -15378,19 +15405,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@whatwg-node/fetch@npm:^0.4.0":
|
||||
version: 0.4.4
|
||||
resolution: "@whatwg-node/fetch@npm:0.4.4"
|
||||
"@whatwg-node/fetch@npm:^0.3.0":
|
||||
version: 0.3.2
|
||||
resolution: "@whatwg-node/fetch@npm:0.3.2"
|
||||
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: f91ebad3c07f1244dec0c57b1bdc4d70e8e2b0eccd237407f649439eb091e1e8a23dfb8e13159468c727537c5ebf6f66f20f5659ca682495cd1a0752de2c2fad
|
||||
checksum: d9cb1b1293694edf0d61889512e5b5a0b8b69db2cf8c4cca4acdbbe652f899742456d10954312ef96a8f7257a898d6275b50df03cc481e5a97740cb301930892
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -18896,7 +18924,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cosmiconfig-typescript-loader@npm:^4.0.0":
|
||||
"cosmiconfig-typescript-loader@npm:4.0.0, cosmiconfig-typescript-loader@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "cosmiconfig-typescript-loader@npm:4.0.0"
|
||||
peerDependencies:
|
||||
@@ -27351,6 +27379,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsonc-parser@npm:^3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "jsonc-parser@npm:3.2.0"
|
||||
checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsonfile@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "jsonfile@npm:4.0.0"
|
||||
@@ -28552,17 +28587,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"luxon@npm:^2.4.0":
|
||||
version: 2.5.0
|
||||
resolution: "luxon@npm:2.5.0"
|
||||
checksum: 2fccce6bbdfc8f13c5a8c148ff045ab3b10f4f80cac28dd92575588fffce9b2d7197096d7fedcc61a6245b59f4233507797f530e63f22b9ae4c425dff2909ae3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"luxon@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "luxon@npm:3.0.1"
|
||||
checksum: aa966eb919bf95b1bd819cda784d1f6f66e3fb65bd9ec7bf68b6a978eeb4e3e14f7e2275021b473f93b15b6b7ba2e5a30471e53add3929a7e695fcfd6dd40ec8
|
||||
version: 3.0.4
|
||||
resolution: "luxon@npm:3.0.4"
|
||||
checksum: d0908c3951da2a10ccf23040210ead23b0da5366a9d0954e7d5db3560189a7bd703d8af1e00084f197effc9cd7158d1bddf32886d98a70d59ce9bc3fe88bbce0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -30943,7 +30971,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"openid-client@npm:^5.1.3, openid-client@npm:^5.1.6":
|
||||
"openid-client@npm:^5.1.3":
|
||||
version: 5.1.10
|
||||
resolution: "openid-client@npm:5.1.10"
|
||||
dependencies:
|
||||
jose: ^4.1.4
|
||||
lru-cache: ^6.0.0
|
||||
object-hash: ^2.0.1
|
||||
oidc-token-hash: ^5.0.1
|
||||
checksum: 38a4bf08ea4ee4576043968307cf53f0369df224bd025c1bc348b295152df36c47d2a836dfe1505d15c6b79c05f86aadefad798bd3ea3ccbe90834be01f2245c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"openid-client@npm:^5.1.6":
|
||||
version: 5.1.9
|
||||
resolution: "openid-client@npm:5.1.9"
|
||||
dependencies:
|
||||
@@ -37067,8 +37107,8 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"swagger-ui-react@npm:^4.11.1":
|
||||
version: 4.14.0
|
||||
resolution: "swagger-ui-react@npm:4.14.0"
|
||||
version: 4.14.2
|
||||
resolution: "swagger-ui-react@npm:4.14.2"
|
||||
dependencies:
|
||||
"@babel/runtime-corejs3": ^7.18.9
|
||||
"@braintree/sanitize-url": =6.0.0
|
||||
@@ -37106,7 +37146,7 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ">=17.0.0"
|
||||
react-dom: ">=17.0.0"
|
||||
checksum: dbd6ce54bd8d2665aa8cd8b983c7cfd4407a710a6fc662ef61e611d54383abc082f15e55730f70ae214481d8e0c0ddeba100091747315edd5d455657c9fdf346
|
||||
checksum: ee8d19bdfd32032926d86a1c547b5fd423f658e0e4c29bd2b96808143f7ef5c1e094fb6c2a0a6e3f20b8a5d7e0a7732f81a31fc10f8e6e6702b8b1333a40164c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user