diff --git a/app-config.yaml b/app-config.yaml
index a29240fd9c..d46c601e33 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -16,9 +16,6 @@ backend:
proxy:
'/circleci/api':
target: https://circleci.com/api/v1.1
- changeOrigin: true
- pathRewrite:
- '^/proxy/circleci/api/': '/'
headers:
Circle-Token:
$secret:
@@ -31,6 +28,15 @@ proxy:
$secret:
env: JENKINS_BASIC_AUTH_HEADER
+ '/travisci/api':
+ target: https://api.travis-ci.com
+ changeOrigin: true
+ headers:
+ Authorization:
+ $secret:
+ env: TRAVISCI_AUTH_TOKEN
+ travis-api-version: 3
+
organization:
name: Spotify
diff --git a/docs/FAQ.md b/docs/FAQ.md
index b4c4970ff8..d4d129a0d6 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -86,7 +86,7 @@ well-known tech and a large flora of components.
### What technology does Backstage use?
-The code base is a large-scale React application that uses TypeScript. For
+The codebase is a large-scale React application that uses TypeScript. For
[Phase 2](https://github.com/spotify/backstage#project-roadmap), we plan to use
Node.js and GraphQL.
@@ -205,7 +205,7 @@ Please report sensitive security issues via Spotify's
### Does Backstage collect any information that is shared with Spotify?
No. Backstage does not collect any telemetry from any third party using the
-platform. Spotify, and the open source community, does have access to
+platform. Spotify, and the open source community, do have access to
[GitHub Insights](https://github.com/features/insights), which contains
information such as contributors, commits, traffic, and dependencies. Backstage
is an open platform, but you are in control of your own data. You control who
diff --git a/docs/api/utility-apis.md b/docs/api/utility-apis.md
index 599bbbb66c..1ebf2ae88b 100644
--- a/docs/api/utility-apis.md
+++ b/docs/api/utility-apis.md
@@ -248,8 +248,8 @@ directly tied to React.
The indirection provided by Utility APIs also makes it straightforward to test
components that depend on APIs, and to provide a standard common development
environment for plugins. A proper test wrapper with mocked API implementations
-is not yet ready, but it will provided as a part of `@backstage/test-utils`. It
-will provide mocked variants of APIs, with additional methods for asserting a
+is not yet ready, but it will be provided as a part of `@backstage/test-utils`.
+It will provide mocked variants of APIs, with additional methods for asserting a
component's interaction with the API.
The common development environment for plugins is included in
diff --git a/docs/architecture-decisions/adr002-default-catalog-file-format.md b/docs/architecture-decisions/adr002-default-catalog-file-format.md
index f4fd3a1158..d831581d5b 100644
--- a/docs/architecture-decisions/adr002-default-catalog-file-format.md
+++ b/docs/architecture-decisions/adr002-default-catalog-file-format.md
@@ -22,7 +22,7 @@ This ADR describes the default format of these descriptor files.
### Inspiration
-Internally at Spotify, a home grown software catalog system is used heavily and
+Internally at Spotify, a homegrown software catalog system is used heavily and
forms a core part of Backstage and other important pieces of the infrastructure.
The user experience, learnings and certain pieces of metadata from that catalog
are being carried over to the open source effort.
@@ -40,7 +40,7 @@ triggers from the version control system, etc.
Each file describes one or more entities in accordance with the
[Backstage System Model](https://github.com/spotify/backstage/issues/390). All
-of these entities have a common stucture and nomenclature, and they are stored
+of these entities have a common structure and nomenclature, and they are stored
in the software catalog from which they then can be queried.
Entities have distinct names, and they may reference each other by those names.
diff --git a/docs/architecture-decisions/adr003-avoid-default-exports.md b/docs/architecture-decisions/adr003-avoid-default-exports.md
index 8634a19632..d08bc6a882 100644
--- a/docs/architecture-decisions/adr003-avoid-default-exports.md
+++ b/docs/architecture-decisions/adr003-avoid-default-exports.md
@@ -44,7 +44,7 @@ A summary:
name each.
Using named exports helps prevent needing to rename symbols, which has myriad
-benefts. A few are:
+benefits. A few are:
- IDE tools like "Find All References" and "Go To Definition" function
- Manual codebase searching ("grep", etc) is easier with a unique symbol
diff --git a/docs/architecture-decisions/adr004-module-export-structure.md b/docs/architecture-decisions/adr004-module-export-structure.md
index 85f06c6894..14c94c4ed1 100644
--- a/docs/architecture-decisions/adr004-module-export-structure.md
+++ b/docs/architecture-decisions/adr004-module-export-structure.md
@@ -22,7 +22,7 @@ or
We currently do not use any pattern for how to structure exports. There is a mix
of package-level re-exports deep into the directory tree, shallow re-exports for
each directory, exports using `*` and explicit lists of each symbol, etc. The
-mix and lack of predictability makes it difficult to reason about the boundaries
+mix and lack of predictability make it difficult to reason about the boundaries
of a module, and for example knowing whether it is safe to export a symbol in a
given file.
diff --git a/docs/architecture-decisions/adr006-avoid-react-fc.md b/docs/architecture-decisions/adr006-avoid-react-fc.md
index bea36712d7..4aafa307cf 100644
--- a/docs/architecture-decisions/adr006-avoid-react-fc.md
+++ b/docs/architecture-decisions/adr006-avoid-react-fc.md
@@ -13,7 +13,7 @@ with next to no benefits in combination with a few downsides.
The main reasons were:
- **children props** were implicitly added
-- **Generic Type** were not supported on children
+- **Generic Type** was not supported on children
Read more about the removal in
[this PR](https://github.com/facebook/create-react-app/pull/8177).
diff --git a/docs/architecture-decisions/adr007-use-msw-to-mock-service-requests.md b/docs/architecture-decisions/adr007-use-msw-to-mock-service-requests.md
index 6b18f67d40..045588f505 100644
--- a/docs/architecture-decisions/adr007-use-msw-to-mock-service-requests.md
+++ b/docs/architecture-decisions/adr007-use-msw-to-mock-service-requests.md
@@ -11,7 +11,7 @@ tests, unit tests to e2e tests always have their own implementation of mocking
these requests. There's been traction in the outer community towards using this
library to mock network requests by using an express style declaration for
routes. react-testing-library suggests using this library instead of mocking
-fetch directly wether this be in a browser or in node.
+fetch directly whether this be in a browser or in node.
https://github.com/mswjs/msw
diff --git a/docs/auth/index.md b/docs/auth/index.md
index aed3a580b0..d7fb5d8c59 100644
--- a/docs/auth/index.md
+++ b/docs/auth/index.md
@@ -6,7 +6,7 @@ description: Documentation on User Authentication and Authorization in Backstage
## Summary
-The purpose of the Auth APIs in Backstage are to identify the user, and to
+The purpose of the Auth APIs in Backstage is to identify the user, and to
provide a way for plugins to request access to 3rd party services on behalf of
the user (OAuth). This documentation focuses on the implementation of that
solution and how to extend it. For documentation on how to consume the Auth APIs
diff --git a/docs/auth/oauth.md b/docs/auth/oauth.md
index e90b7b665a..178b99b153 100644
--- a/docs/auth/oauth.md
+++ b/docs/auth/oauth.md
@@ -52,7 +52,7 @@ in a new popup window that is opened by the app. By using a popup-based flow it
is possible to request authentication at any point in the app, without requiring
a redirect. Because of this there is no need to ask for all scopes upfront, or
interrupt the app with a redirect and forcing plugin authors to take care in
-restoring state after a redirect has been make. All in all it makes it much
+restoring state after a redirect has been made. All in all it makes it much
easier to make authenticated requests inside a plugin.
## OAuth Flow
@@ -67,7 +67,7 @@ Component and APIs can request Access or ID Tokens from any available Auth
provider. If there already exists a cached fresh token that covers (at least)
the requested scopes, it will be returned immediately. If the OAuth provider
implements token refreshes, this check will also trigger a token refresh attempt
-if no session is a available.
+if no session is available.
If new scopes are requested, or the user is not yet logged in with that
provider, a dialog is shown informing the user that they need to log in with the
diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md
index 4e8a357ea7..7e2a4c3867 100644
--- a/docs/features/software-catalog/extending-the-model.md
+++ b/docs/features/software-catalog/extending-the-model.md
@@ -18,7 +18,7 @@ Backstage natively supports tracking of the following component
Since these types are likely not the only kind of software you will want to
track in Backstage, it is possible to
-It is possible to add your own software types that fits your organization's data
+It is possible to add your own software types that fit your organization's data
model. Inside Spotify our model has grown significantly over the years, and now
includes ML models, Apps, data pipelines and many more.
@@ -30,7 +30,7 @@ catalog.
## The Other type
It might be tempting to put software that doesn't fit into any of the existing
-types into Other. There are a few reasons why we advice against this; firstly,
+types into Other. There are a few reasons why we advise against this; firstly,
we have found that it is preferred to match the conceptual model that your
engineers have when describing your software. Secondly, Backstage helps your
engineers manage their software by integrating the infrastructure tooling
diff --git a/docs/features/software-catalog/index.md b/docs/features/software-catalog/index.md
index 49a490d78b..8be6a00579 100644
--- a/docs/features/software-catalog/index.md
+++ b/docs/features/software-catalog/index.md
@@ -84,7 +84,7 @@ registered in the catalog.
### Static catalog configuration
In addition to manually registering components, it is also possible to register
-components though [static configuration](../../conf/index.md). For example, the
+components through [static configuration](../../conf/index.md). For example, the
above example can be added using the following configuration:
```yaml
diff --git a/docs/features/software-catalog/references.md b/docs/features/software-catalog/references.md
index 5093ecc49e..e438ddc977 100644
--- a/docs/features/software-catalog/references.md
+++ b/docs/features/software-catalog/references.md
@@ -67,7 +67,7 @@ be left out in its own yaml file because that's the default value there too),
and name `pet-managers`.
The entries in `implementsApis` are also references. In this case, none of them
-need to specify a kind since we know from the context that that's the only kind
+needs to specify a kind since we know from the context that that's the only kind
that's supported here. The second entry specifies a namespace but the other ones
don't, and in this context, the default is to refer to the same namespace as the
originating entity (`external-systems` here). So the three references
@@ -79,7 +79,7 @@ there to exist three API kind entities in the catalog matching those references.
This is a more verbose version of a reference, where each part of the
kind-namespace-name triplet is expressed as a field in a structure. This format
-can be used where necessary, such as if either of the three elements contain
+can be used where necessary, such as if either of the three elements contains
colons or forward slashes. Avoid using it where possible, since it is harder to
read and write for humans.
diff --git a/docs/features/software-catalog/well-known-annotations.md b/docs/features/software-catalog/well-known-annotations.md
index e5b66bb3b2..e0fc10ff1e 100644
--- a/docs/features/software-catalog/well-known-annotations.md
+++ b/docs/features/software-catalog/well-known-annotations.md
@@ -57,7 +57,7 @@ spec:
This annotation allows to fetch an API definition from another location, instead
of wrapping the API definition inside the definition field. This allows to
-easitly consume existing API definition. The definition is fetched during
+easily consume existing API definition. The definition is fetched during
ingestion by a processor and included in the entity. It is updated on every
refresh. The annotation contains a location reference string that contains the
location processor type and the target.
diff --git a/docs/features/software-templates/adding-templates.md b/docs/features/software-templates/adding-templates.md
index 59019e754e..4283af7c72 100644
--- a/docs/features/software-templates/adding-templates.md
+++ b/docs/features/software-templates/adding-templates.md
@@ -5,7 +5,7 @@ description: Documentation on Adding your own Templates
---
Templates are stored in the **Service Catalog** under a kind `Template`. The
-minimum that the a template skeleton needs is a `template.yaml` but it would be
+minimum that the template skeleton needs is a `template.yaml` but it would be
good to also have some files in there that can be templated in.
A simple `template.yaml` definition might look something like this:
@@ -30,7 +30,7 @@ spec:
templater: cookiecutter
# what does this template create
type: website
- # if the template is not in the current directory where this definition is kept then specfiy
+ # if the template is not in the current directory where this definition is kept then specify
path: './template'
# the schema for the form which is displayed in the frontend.
# should follow JSON schema for forms: https://jsonforms.io/
@@ -107,7 +107,7 @@ This should then have added the catalog, and also should now be listed under the
create page at http://localhost:3000/create.
The `type` field which is chosen in the request to add the `template.yaml` to
-the Service Catalog here, will be come the `PreparerKey` which will be used to
+the Service Catalog here, will become the `PreparerKey` which will be used to
select the `Preparer` when creating a job.
### Adding form values in the Scaffolder Wizard
diff --git a/docs/features/software-templates/extending/create-your-own-preparer.md b/docs/features/software-templates/extending/create-your-own-preparer.md
index 14c75b0ffb..e354c0941e 100644
--- a/docs/features/software-templates/extending/create-your-own-preparer.md
+++ b/docs/features/software-templates/extending/create-your-own-preparer.md
@@ -17,7 +17,7 @@ location protocols:
These two are added to the `PreparersBuilder` and then passed into the
`createRouter` function of the `@spotify/plugin-scaffolder-backend`
-An full example backend can be found
+A full example backend can be found
[here](https://github.com/spotify/backstage/blob/d91c10f654475a60829fa33a5c81018e517a319a/packages/backend/src/plugins/scaffolder.ts),
but it looks something like the following
@@ -98,4 +98,4 @@ const preparers = new Preparers();
preparers.register('gcs', new GoogleCloudStoragePreparer());
```
-And then pass this in to the `createRouter` function.
+And then pass this into the `createRouter` function.
diff --git a/docs/features/software-templates/extending/create-your-own-publisher.md b/docs/features/software-templates/extending/create-your-own-publisher.md
index 25d7bcf676..ecb097f9d9 100644
--- a/docs/features/software-templates/extending/create-your-own-publisher.md
+++ b/docs/features/software-templates/extending/create-your-own-publisher.md
@@ -8,10 +8,10 @@ Publishers are responsible for pushing and storing the templated skeleton after
the values have been templated by the `Templater`. See
[Create your own templater](./create-your-own-templater.md) for more info.
-They receive a directory or location where the templater has sucessfully run and
-is now ready to store somewhere. They also are given some other options which
-are sent from the frontend, such as the `storePath` which is a string of where
-the frontend thinks we should save this templated folder.
+They receive a directory or location where the templater has successfully run
+and is now ready to store somewhere. They also are given some other options
+which are sent from the frontend, such as the `storePath` which is a string of
+where the frontend thinks we should save this templated folder.
Currently we provide the following `publishers`:
diff --git a/docs/features/software-templates/extending/create-your-own-templater.md b/docs/features/software-templates/extending/create-your-own-templater.md
index 36c362b9c3..d4a6eef5d2 100644
--- a/docs/features/software-templates/extending/create-your-own-templater.md
+++ b/docs/features/software-templates/extending/create-your-own-templater.md
@@ -147,4 +147,4 @@ const templaters = new Templaters();
templaters.register('handlebars', new HandlebarsTemplater());
```
-And then pass this in to the `createRouter` function.
+And then pass this into the `createRouter` function.
diff --git a/docs/features/software-templates/extending/index.md b/docs/features/software-templates/extending/index.md
index 02d27a5725..944bf0e3ca 100644
--- a/docs/features/software-templates/extending/index.md
+++ b/docs/features/software-templates/extending/index.md
@@ -11,13 +11,13 @@ You're at the right place.
This guide is going to take you through how the Scaffolder in Backstage works.
We'll dive into some jargon and run through what's going on in the backend to be
able to create these templates. There's also more guides that you might find
-useful at the bottom of this document. At it's core, theres 3 simple stages.
+useful at the bottom of this document. At its core, there are 3 simple stages.
1. Pick a skeleton
2. Template some variables into the skeleton
3. Send the templated skeleton somewhere
-These three steps are translated to the folllowing stages under the hood in the
+These three steps are translated to the following stages under the hood in the
scaffolder that you will need to know:
1. Prepare
@@ -38,7 +38,7 @@ the router to pick the correct `Preparer` to run for the `Template` entity.
**Templater** - The templater is responsible for actually running the chosen
templater on top of the previously returned temporary directory from the
-**Preprarer**. We advise making these Docker containers as it can keep all
+**Preparer**. We advise making these Docker containers as it can keep all
dependencies--for example Cookiecutter--self contained and not a dependency on
the host machine.
@@ -82,7 +82,7 @@ Once that has been posted, a job will be setup with different stages, and the
job processor will complete each stage before moving onto the next stage, whilst
collecting logs and mutating the running job.
-Here's some futher reading that you might find useful:
+Here's some further reading that you might find useful:
- [Adding your own Template](../adding-templates.md)
- [Creating your own Templater](./create-your-own-templater.md)
diff --git a/docs/features/software-templates/installation.md b/docs/features/software-templates/installation.md
index 90d25cab81..9bd36ff4dd 100644
--- a/docs/features/software-templates/installation.md
+++ b/docs/features/software-templates/installation.md
@@ -240,7 +240,7 @@ scaffolder:
You can configure who can see the new repositories that the scaffolder creates
by specifying `visibility` option. Valid options are `public`, `private` and
-`internal`. `internal` options is for GitHub Enterprise clients, which means
+`internal`. `internal` option is for GitHub Enterprise clients, which means
public within the organization.
### Running the Backend
diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md
index 03494564c3..2e5c8d000d 100644
--- a/docs/features/techdocs/getting-started.md
+++ b/docs/features/techdocs/getting-started.md
@@ -13,7 +13,7 @@ If you haven't setup Backstage already, start
## Installing TechDocs
TechDocs is provided with the Backstage application by default. If you want to
-set up TechDocs manually, keep follow the instructions below.
+set up TechDocs manually, keep following the instructions below.
### Adding the package
diff --git a/docs/plugins/index.md b/docs/plugins/index.md
index 32cbfebc4b..8836c1cd42 100644
--- a/docs/plugins/index.md
+++ b/docs/plugins/index.md
@@ -21,7 +21,7 @@ To create a plugin, follow the steps outlined [here](create-a-plugin.md).
## Suggesting a plugin
If you start developing a plugin that you aim to release as open source, we
-suggest that you create a new
+suggest that you create a
[new Issue](https://github.com/spotify/backstage/issues/new?labels=plugin&template=plugin_template.md&title=%5BPlugin%5D+THE+PLUGIN+NAME).
This helps the community know what plugins are in development.
diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md
index f799d5fd33..a691c7f0bc 100644
--- a/docs/plugins/proxying.md
+++ b/docs/plugins/proxying.md
@@ -49,7 +49,7 @@ Each key under the proxy configuration entry is a route to match, below the
prefix that the proxy plugin is mounted on. It must start with a slash. For
example, if the backend mounts the proxy plugin as `/proxy`, the above
configuration will lead to the proxy acting on backend requests to
-`/proxy/simple-example/...` and `/proxy/larger-example/v1/...`.
+`/api/proxy/simple-example/...` and `/api/proxy/larger-example/v1/...`.
The value inside each route is either a simple URL string, or an object on the
format accepted by
@@ -74,6 +74,6 @@ except with the following caveats for convenience:
commonly useful value.
- If `pathRewrite` is not specified, it is set to a single rewrite that removes
the entire prefix and route. In the above example, a rewrite of
- `'^/proxy/larger-example/v1/': '/'` is added. That means that a request to
- `/proxy/larger-example/v1/some/path` will be translated to a request to
+ `'^/api/proxy/larger-example/v1/': '/'` is added. That means that a request to
+ `/api/proxy/larger-example/v1/some/path` will be translated to a request to
`http://larger.example.com:8080/svc.v1/some/path`.
diff --git a/docs/plugins/structure-of-a-plugin.md b/docs/plugins/structure-of-a-plugin.md
index f061d2f4a8..ee0a27cde2 100644
--- a/docs/plugins/structure-of-a-plugin.md
+++ b/docs/plugins/structure-of-a-plugin.md
@@ -84,7 +84,7 @@ structure our plugins. There are usually one or multiple page components and
next to them you can split up the UI in as many components as you feel like.
We have the `ExamplePage` to show an example Backstage page component. The
-`ExampleFetchComponent` show cases the common task of making an async request to
+`ExampleFetchComponent` showcases the common task of making an async request to
a public API and plot the response data in a table using Material-UI components.
You may tweak these components, rename them and/or replace them completely.
diff --git a/docs/plugins/testing.md b/docs/plugins/testing.md
index 696f8b1368..bb5a577c7d 100644
--- a/docs/plugins/testing.md
+++ b/docs/plugins/testing.md
@@ -32,7 +32,7 @@ working on.
## Naming Test Files
-Tests should be name `[filename].test.js`.
+Tests should be named `[filename].test.js`.
For example, the tests for **`Link.js`** exist in the file **`Link.test.js`**.
@@ -54,7 +54,7 @@ TODO.
# Writing Unit Tests
-The following principles are good guides to determining if you are writing high
+The following principles are good guides for determining if you are writing high
quality frontend unit tests.
## Bad Unit Test Principle
@@ -170,7 +170,7 @@ input changes
component is mounted, just that it is mounted in response to the input.
✓ **Fulfills Scalability Principle**: If we decide to refactor the entire way
-the loading indicator is displayed the test still works without touching it.
+the loading indicator has displayed the test still works without touching it.
✓ **Fulfills Broken Functionality Principle**: this test verifies the
functionality (displaying an indicator) is working, rather than how it is
diff --git a/docs/tutorials/journey.md b/docs/tutorials/journey.md
index 24765e8531..908d7fc61b 100644
--- a/docs/tutorials/journey.md
+++ b/docs/tutorials/journey.md
@@ -134,7 +134,7 @@ work.
# 5. The First User
At this point the only things that anyone that wants to use Sam's plugin needs
-to do is to add
+to do are to add
https://raw.githubusercontent.com/sam/backstage-spotify-theme/master/annotation.json#/sam.wise/spotify-track-id
to their catalog schema, import and add the `PlayerWidget` on the desired entity
template pages, and make sure they're providing Spotify auth.
@@ -145,7 +145,7 @@ select a theme tune when creating a new component. Sam jumps on the idea and
adds a new creation hook that is exported by the plugin. The hook can be
installed either in a single, all, or component templates that match a label. It
adds a field as a part of the component creation process with a nice search box
-that allow users to search for a track that they want to use as the theme tune.
+that allows users to search for a track that they want to use as the theme tune.
# 6. Return to the Repo
@@ -203,7 +203,7 @@ backend plugin also extends the common GraphQL schema with a mutation that
updates the track ID in the database.
On the frontend the Pull Request doesn't change much. It defines the save action
-the was previously using the `RepoApi` in it's own API.
+the was previously using the `RepoApi` in its own API.
```ts
type ThemeTuneStorageApi = {
@@ -247,7 +247,7 @@ once an internal concern of the plugin is now becoming a standard in the
community.
In order to standardize the annotation in Backstage, Sam submits a Pull Request
-to the Backstage Core repo. The request suggest a new well-known metadata
+to the Backstage Core repo. The request suggests a new well-known metadata
annotation called `spotify.com/track-id`, with the same schema definition as
Sam's label, and refers to Sam's own plugin and the `spotify-album-art` plugin
as existing usages. The Backstage maintainers merge the Pull Request, after
diff --git a/docs/tutorials/quickstart-app-plugin.md b/docs/tutorials/quickstart-app-plugin.md
index 87bc1bb38a..020c43a294 100644
--- a/docs/tutorials/quickstart-app-plugin.md
+++ b/docs/tutorials/quickstart-app-plugin.md
@@ -312,6 +312,6 @@ return (
> Break apart ExampleFetchComponent into smaller logical parts contained in
> their own files. Rename your components to something other than ExampleXxx.
>
-> You might be real proud of a plugin you develop. Follow this next tutorial for
-> an in-depth look at publishing and including that for the entire Backstage
+> You might be really proud of a plugin you develop. Follow this next tutorial
+> for an in-depth look at publishing and including that for the entire Backstage
> community. [TODO](#).
diff --git a/packages/app/package.json b/packages/app/package.json
index 77b1882b47..a24cda7c25 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -32,7 +32,7 @@
"@material-ui/icons": "^4.9.1",
"@octokit/rest": "^18.0.0",
"@roadiehq/backstage-plugin-github-pull-requests": "0.3.0",
- "@roadiehq/backstage-plugin-travis-ci": "^0.1.4",
+ "@roadiehq/backstage-plugin-travis-ci": "^0.2.3",
"history": "^5.0.0",
"prop-types": "^15.7.2",
"react": "^16.12.0",
diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx
index 79ca074c35..3438c01abf 100644
--- a/packages/app/src/components/catalog/EntityPage.tsx
+++ b/packages/app/src/components/catalog/EntityPage.tsx
@@ -13,6 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import {
+ isPluginApplicableToEntity as isTravisCIAvailable,
+ RecentTravisCIBuildsWidget,
+ Router as TravisCIRouter,
+} from '@roadiehq/backstage-plugin-travis-ci';
import {
isPluginApplicableToEntity as isGitHubActionsAvailable,
RecentWorkflowRunsCard,
@@ -51,6 +56,8 @@ const CICDSwitcher = ({ entity }: { entity: Entity }) => {
return ;
case isCircleCIAvailable(entity):
return ;
+ case isTravisCIAvailable(entity):
+ return ;
default:
return (
@@ -70,6 +77,9 @@ const RecentCICDRunsSwitcher = ({ entity }: { entity: Entity }) => {
case isGitHubActionsAvailable(entity):
content = ;
break;
+ case isTravisCIAvailable(entity):
+ content = ;
+ break;
default:
content = null;
}
diff --git a/plugins/circleci/README.md b/plugins/circleci/README.md
index 48e1bee6cc..19c2c35899 100644
--- a/plugins/circleci/README.md
+++ b/plugins/circleci/README.md
@@ -55,9 +55,6 @@ import { Router as CircleCIRouter } from '@backstage/plugin-circleci';
proxy:
'/circleci/api':
target: https://circleci.com/api/v1.1
- changeOrigin: true
- pathRewrite:
- '^/proxy/circleci/api/': '/'
headers:
Circle-Token:
$secret:
diff --git a/plugins/kubernetes-backend/examples/dice-roller/dice-roller-manifests.yaml b/plugins/kubernetes-backend/examples/dice-roller/dice-roller-manifests.yaml
index f3a478f4d3..13fe26d051 100644
--- a/plugins/kubernetes-backend/examples/dice-roller/dice-roller-manifests.yaml
+++ b/plugins/kubernetes-backend/examples/dice-roller/dice-roller-manifests.yaml
@@ -88,6 +88,26 @@ spec:
- protocol: TCP
port: 80
targetPort: 9376
+ name: port1
+ - protocol: TCP
+ port: 81
+ targetPort: 9377
+ name: port2
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: dice-roller-lb
+ labels:
+ 'backstage.io/kubernetes-id': dice-roller
+spec:
+ selector:
+ app: dice-roller
+ ports:
+ - port: 8765
+ targetPort: 9376
+ type: LoadBalancer
---
apiVersion: v1
diff --git a/plugins/kubernetes-backend/src/service/getKubernetesObjectsByServiceIdHandler.ts b/plugins/kubernetes-backend/src/service/getKubernetesObjectsByServiceIdHandler.ts
index 52968d4c20..b2dde1a393 100644
--- a/plugins/kubernetes-backend/src/service/getKubernetesObjectsByServiceIdHandler.ts
+++ b/plugins/kubernetes-backend/src/service/getKubernetesObjectsByServiceIdHandler.ts
@@ -34,7 +34,6 @@ const DEFAULT_OBJECTS = new Set([
'pods',
'services',
'configmaps',
- 'secrets',
'deployments',
'replicasets',
]);
diff --git a/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.test.tsx b/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.test.tsx
new file mode 100644
index 0000000000..161a0ed487
--- /dev/null
+++ b/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.test.tsx
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 React from 'react';
+import { render } from '@testing-library/react';
+import { ConfigMaps } from './ConfigMaps';
+import * as configmapFixture from './__fixtures__/configmap.json';
+import { wrapInTestApp } from '@backstage/test-utils';
+
+describe('ConfigMaps', () => {
+ it('should render configmap', async () => {
+ const { getByText } = render(
+ wrapInTestApp(
+ ,
+ ),
+ );
+
+ // title
+ expect(getByText('dice-roller')).toBeInTheDocument();
+ expect(getByText('ConfigMap')).toBeInTheDocument();
+
+ // values
+ expect(getByText('Immutable')).toBeInTheDocument();
+ expect(getByText('false')).toBeInTheDocument();
+ expect(getByText('Data')).toBeInTheDocument();
+ expect(getByText('Foo: bar')).toBeInTheDocument(); // TODO wish this wasn't upper case
+ });
+});
diff --git a/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.tsx b/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.tsx
new file mode 100644
index 0000000000..f757d1c0fc
--- /dev/null
+++ b/plugins/kubernetes/src/components/ConfigMaps/ConfigMaps.tsx
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 React from 'react';
+import { Grid } from '@material-ui/core';
+import { V1ConfigMap } from '@kubernetes/client-node';
+import { InfoCard, StructuredMetadataTable } from '@backstage/core';
+
+type ConfigMapsProps = {
+ configMaps: V1ConfigMap[];
+ children?: React.ReactNode;
+};
+
+export const ConfigMaps = ({ configMaps }: ConfigMapsProps) => {
+ return (
+
+ {configMaps.map((cm, i) => {
+ return (
+
+
+
+
+
+
+
+ );
+ })}
+
+ );
+};
diff --git a/plugins/kubernetes/src/components/ConfigMaps/__fixtures__/configmap.json b/plugins/kubernetes/src/components/ConfigMaps/__fixtures__/configmap.json
new file mode 100644
index 0000000000..77ea844611
--- /dev/null
+++ b/plugins/kubernetes/src/components/ConfigMaps/__fixtures__/configmap.json
@@ -0,0 +1,46 @@
+[
+ {
+ "data": {
+ "foo": "bar"
+ },
+ "metadata": {
+ "annotations": {
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"foo\":\"bar\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"}}\n"
+ },
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:data": {
+ ".": {},
+ "f:foo": {}
+ },
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:26.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "503867",
+ "selfLink": "/api/v1/namespaces/default/configmaps/dice-roller",
+ "uid": "e9efe5ee-53b9-4422-aef2-877a03c73d5f"
+ }
+ }
+]
diff --git a/plugins/kubernetes/src/components/ConfigMaps/index.ts b/plugins/kubernetes/src/components/ConfigMaps/index.ts
new file mode 100644
index 0000000000..b1c7d37a5a
--- /dev/null
+++ b/plugins/kubernetes/src/components/ConfigMaps/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 { ConfigMaps } from './ConfigMaps';
diff --git a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx
index d14a2dc4f7..315a5e0377 100644
--- a/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx
+++ b/plugins/kubernetes/src/components/KubernetesContent/KubernetesContent.tsx
@@ -17,23 +17,33 @@
import React, { useEffect, useState } from 'react';
import { Grid } from '@material-ui/core';
import {
+ CardTab,
Content,
- InfoCard,
Page,
pageTheme,
Progress,
+ TabbedCard,
useApi,
} from '@backstage/core';
import { Entity } from '@backstage/catalog-model';
import { kubernetesApiRef } from '../../api/types';
import {
+ ClusterObjects,
FetchResponse,
ObjectsByServiceIdResponse,
} from '@backstage/plugin-kubernetes-backend';
import { DeploymentTables } from '../DeploymentTables';
import { DeploymentTriple } from '../../types/types';
+import { V1ConfigMap, V1Service } from '@kubernetes/client-node';
+import { Services } from '../Services';
+import { ConfigMaps } from '../ConfigMaps';
-const findDeployments = (fetchResponse: FetchResponse[]): DeploymentTriple => {
+interface GroupedResponses extends DeploymentTriple {
+ services: V1Service[];
+ configMaps: V1ConfigMap[];
+}
+
+const groupResponses = (fetchResponse: FetchResponse[]) => {
return fetchResponse.reduce(
(prev, next) => {
switch (next.type) {
@@ -46,6 +56,12 @@ const findDeployments = (fetchResponse: FetchResponse[]): DeploymentTriple => {
case 'replicasets':
prev.replicaSets.push(...next.resources);
break;
+ case 'services':
+ prev.services.push(...next.resources);
+ break;
+ case 'configmaps':
+ prev.configMaps.push(...next.resources);
+ break;
default:
}
return prev;
@@ -54,7 +70,9 @@ const findDeployments = (fetchResponse: FetchResponse[]): DeploymentTriple => {
pods: [],
replicaSets: [],
deployments: [],
- } as DeploymentTriple,
+ services: [],
+ configMaps: [],
+ } as GroupedResponses,
);
};
@@ -89,11 +107,7 @@ export const KubernetesContent = ({ entity }: KubernetesContentProps) => {
{error !== undefined && {error}
}
{kubernetesObjects?.items.map((item, i) => (
-
-
-
+
))}
@@ -101,3 +115,47 @@ export const KubernetesContent = ({ entity }: KubernetesContentProps) => {
);
};
+
+type ClusterProps = {
+ clusterObjects: ClusterObjects;
+ children?: React.ReactNode;
+};
+
+const Cluster = ({ clusterObjects }: ClusterProps) => {
+ const [selectedTab, setSelectedTab] = useState('one');
+
+ const handleChange = (_ev: any, newSelectedTab: string | number) =>
+ setSelectedTab(newSelectedTab);
+
+ const groupedResponses = groupResponses(clusterObjects.resources);
+
+ const configMaps = groupedResponses.configMaps;
+
+ return (
+ <>
+
+
+
+
+
+
+
+ {configMaps && (
+
+
+
+ )}
+
+ >
+ );
+};
diff --git a/plugins/kubernetes/src/components/Services/Services.test.tsx b/plugins/kubernetes/src/components/Services/Services.test.tsx
new file mode 100644
index 0000000000..5e74499bc5
--- /dev/null
+++ b/plugins/kubernetes/src/components/Services/Services.test.tsx
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 React from 'react';
+import { render } from '@testing-library/react';
+import { Services } from './Services';
+import * as servicesFixture from './__fixtures__/services.json';
+import { wrapInTestApp } from '@backstage/test-utils';
+
+describe('Services', () => {
+ it('should render 2 services', async () => {
+ const { getByText, getAllByText } = render(
+ wrapInTestApp(),
+ );
+
+ // common elements
+ expect(getAllByText('Service')).toHaveLength(2);
+ expect(getAllByText('Ports')).toHaveLength(2);
+ expect(getAllByText('Type')).toHaveLength(2);
+ expect(getAllByText('Protocol: TCP')).toHaveLength(3);
+
+ // service 1
+ expect(getByText('dice-roller')).toBeInTheDocument();
+ expect(getByText('ClusterIP')).toBeInTheDocument();
+
+ expect(getByText('Name: port1')).toBeInTheDocument();
+ expect(getByText('Port: 80')).toBeInTheDocument();
+ expect(getByText('Target Port: 9376')).toBeInTheDocument();
+ expect(getByText('Name: port1')).toBeInTheDocument();
+ expect(getByText('Port: 81')).toBeInTheDocument();
+ expect(getByText('Target Port: 9377')).toBeInTheDocument();
+ expect(getByText('10.102.223.105')).toBeInTheDocument();
+
+ // service 2
+ expect(getByText('dice-roller-lb')).toBeInTheDocument();
+ expect(getByText('LoadBalancer')).toBeInTheDocument();
+ expect(getByText('Node Port: 32276')).toBeInTheDocument();
+ expect(getByText('Port: 8765')).toBeInTheDocument();
+ expect(getByText('Target Port: 9378')).toBeInTheDocument();
+ });
+});
diff --git a/plugins/kubernetes/src/components/Services/Services.tsx b/plugins/kubernetes/src/components/Services/Services.tsx
new file mode 100644
index 0000000000..d0a4f71eae
--- /dev/null
+++ b/plugins/kubernetes/src/components/Services/Services.tsx
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 React from 'react';
+import { Grid } from '@material-ui/core';
+import { V1Service } from '@kubernetes/client-node';
+import { InfoCard, StructuredMetadataTable } from '@backstage/core';
+
+type ServicesProps = {
+ services: V1Service[];
+ children?: React.ReactNode;
+};
+
+export const Services = ({ services }: ServicesProps) => {
+ return (
+
+ {services.map((s, i) => {
+ const metadata: any = {};
+
+ if (s.status?.loadBalancer?.ingress?.length ?? -1 > 0) {
+ metadata.loadbalancer = s.status?.loadBalancer;
+ }
+
+ if (s.spec?.type === 'ClusterIP') {
+ metadata.clusterIP = s.spec.clusterIP;
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+ })}
+
+ );
+};
diff --git a/plugins/kubernetes/src/components/Services/__fixtures__/services.json b/plugins/kubernetes/src/components/Services/__fixtures__/services.json
new file mode 100644
index 0000000000..7f9b49a9f6
--- /dev/null
+++ b/plugins/kubernetes/src/components/Services/__fixtures__/services.json
@@ -0,0 +1,164 @@
+[
+ {
+ "metadata": {
+ "annotations": {
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"name\":\"port1\",\"port\":80,\"protocol\":\"TCP\",\"targetPort\":9376},{\"name\":\"port2\",\"port\":81,\"protocol\":\"TCP\",\"targetPort\":9377}],\"selector\":{\"app\":\"dice-roller\"}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:ports": {
+ ".": {},
+ "k:{\"port\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:name": {},
+ "f:port": {},
+ "f:protocol": {},
+ "f:targetPort": {}
+ },
+ "k:{\"port\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:name": {},
+ "f:port": {},
+ "f:protocol": {},
+ "f:targetPort": {}
+ }
+ },
+ "f:selector": {
+ ".": {},
+ "f:app": {}
+ },
+ "f:sessionAffinity": {},
+ "f:type": {}
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-28T08:50:11.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "665838",
+ "selfLink": "/api/v1/namespaces/default/services/dice-roller",
+ "uid": "ae9aff92-a525-4bc9-82dc-a0537bf8034c"
+ },
+ "spec": {
+ "clusterIP": "10.102.223.105",
+ "ports": [
+ {
+ "name": "port1",
+ "port": 80,
+ "protocol": "TCP",
+ "targetPort": 9376
+ },
+ {
+ "name": "port2",
+ "port": 81,
+ "protocol": "TCP",
+ "targetPort": 9377
+ }
+ ],
+ "selector": {
+ "app": "dice-roller"
+ },
+ "sessionAffinity": "None",
+ "type": "ClusterIP"
+ },
+ "status": {
+ "loadBalancer": {}
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller-lb\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"port\":8765,\"targetPort\":9376}],\"selector\":{\"app\":\"dice-roller\"},\"type\":\"LoadBalancer\"}}\n"
+ },
+ "creationTimestamp": "2020-09-28T08:51:21.000Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:externalTrafficPolicy": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"port\":8765,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:port": {},
+ "f:protocol": {},
+ "f:targetPort": {}
+ }
+ },
+ "f:selector": {
+ ".": {},
+ "f:app": {}
+ },
+ "f:sessionAffinity": {},
+ "f:type": {}
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-28T08:51:21.000Z"
+ }
+ ],
+ "name": "dice-roller-lb",
+ "namespace": "default",
+ "resourceVersion": "665998",
+ "selfLink": "/api/v1/namespaces/default/services/dice-roller-lb",
+ "uid": "5554da3b-2041-4403-8cf4-cd2ccae760f8"
+ },
+ "spec": {
+ "clusterIP": "10.99.205.233",
+ "externalTrafficPolicy": "Cluster",
+ "ports": [
+ {
+ "nodePort": 32276,
+ "port": 8765,
+ "protocol": "TCP",
+ "targetPort": 9378
+ }
+ ],
+ "selector": {
+ "app": "dice-roller"
+ },
+ "sessionAffinity": "None",
+ "type": "LoadBalancer"
+ },
+ "status": {
+ "loadBalancer": {}
+ }
+ }
+]
diff --git a/plugins/kubernetes/src/components/Services/index.ts b/plugins/kubernetes/src/components/Services/index.ts
new file mode 100644
index 0000000000..d52ebf5f14
--- /dev/null
+++ b/plugins/kubernetes/src/components/Services/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 { Services } from './Services';
diff --git a/yarn.lock b/yarn.lock
index 736bfc6b42..36ab5f9b3b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1628,6 +1628,22 @@
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+"@eslint/eslintrc@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085"
+ integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
"@evocateur/libnpmaccess@^3.1.2":
version "3.1.2"
resolved "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845"
@@ -3209,7 +3225,7 @@
resolved "https://registry.npmjs.org/@material-icons/font/-/font-1.0.3.tgz#f722e5a69a03f20ef47d015cb69420bebeeaabe5"
integrity sha512-aIRd0Z9b/HJ/O24KOaP7dNsXypMnXhpWrpLVYvQB/JesVqXYSbioYND200sR+C14a0LSCp+qWnWCnSXmN1hWGw==
-"@material-ui/core@^4.11.0", "@material-ui/core@^4.9.1":
+"@material-ui/core@^4.11.0", "@material-ui/core@^4.9.1", "@material-ui/core@^4.9.10":
version "4.11.0"
resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a"
integrity sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g==
@@ -3245,6 +3261,17 @@
prop-types "^15.7.2"
react-is "^16.8.0"
+"@material-ui/lab@^4.0.0-alpha.49":
+ version "4.0.0-alpha.56"
+ resolved "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.56.tgz#ff63080949b55b40625e056bbda05e130d216d34"
+ integrity sha512-xPlkK+z/6y/24ka4gVJgwPfoCF4RCh8dXb1BNE7MtF9bXEBLN/lBxNTK8VAa0qm3V2oinA6xtUIdcRh0aeRtVw==
+ dependencies:
+ "@babel/runtime" "^7.4.4"
+ "@material-ui/utils" "^4.10.2"
+ clsx "^1.0.4"
+ prop-types "^15.7.2"
+ react-is "^16.8.0"
+
"@material-ui/pickers@^3.2.2":
version "3.2.10"
resolved "https://registry.npmjs.org/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae"
@@ -3518,7 +3545,7 @@
dependencies:
"@types/node" ">= 8"
-"@open-draft/until@^1.0.3":
+"@open-draft/until@^1.0.0", "@open-draft/until@^1.0.3":
version "1.0.3"
resolved "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca"
integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==
@@ -3599,6 +3626,11 @@
prop-types "^15.6.1"
react-lifecycles-compat "^3.0.4"
+"@rehooks/local-storage@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.npmjs.org/@rehooks/local-storage/-/local-storage-2.4.0.tgz#fb884b2b657cad5f77aa6ab60bb3532f0e0725d2"
+ integrity sha512-LoXDbEHsuIckVgBsFAv8SuU/M7memjyfWut9Zf36TQXqqCHBRFv8bweg9PymQCa1aWIMjNrZQflFdo55FDlXYg==
+
"@rjsf/core@^2.1.0":
version "2.3.0"
resolved "https://registry.npmjs.org/@rjsf/core/-/core-2.3.0.tgz#334c73d2262ef1a8cda477e238067af7336c5599"
@@ -3644,26 +3676,6 @@
react-router-dom "6.0.0-beta.0"
react-use "^15.3.3"
-"@roadiehq/backstage-plugin-travis-ci@^0.1.4":
- version "0.1.4"
- resolved "https://registry.npmjs.org/@roadiehq/backstage-plugin-travis-ci/-/backstage-plugin-travis-ci-0.1.4.tgz#ddbb2ba5b9d47f474462ecbc8c769759578e8526"
- integrity sha512-T1eJ0huhwZcRHjrDKWoAzlKBv8UbhXgrvE7wuHD7dCcmfQdln0jbn7cskOpTnVmrzGXWKQ6mDyKX3LfdEPYbAw==
- dependencies:
- "@backstage/core" "^0.1.1-alpha.18"
- "@backstage/theme" "^0.1.1-alpha.18"
- "@material-ui/core" "^4.9.1"
- "@material-ui/icons" "^4.9.1"
- "@material-ui/lab" "4.0.0-alpha.45"
- date-fns "^2.15.0"
- history "^5.0.0"
- moment "^2.27.0"
- react "^16.13.1"
- react-dom "^16.13.1"
- react-lazylog "^4.5.2"
- react-router "6.0.0-beta.0"
- react-router-dom "6.0.0-beta.0"
- react-use "^15.3.3"
-
"@rollup/plugin-commonjs@^13.0.0":
version "13.0.0"
resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.0.tgz#8a1d684ba6848afe8b9e3d85649d4b2f6f7217ec"
@@ -3677,6 +3689,19 @@
magic-string "^0.25.2"
resolve "^1.11.0"
+"@rollup/plugin-commonjs@^14.0.0":
+ version "14.0.0"
+ resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz#4285f9ec2db686a31129e5a2b415c94aa1f836f0"
+ integrity sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==
+ dependencies:
+ "@rollup/pluginutils" "^3.0.8"
+ commondir "^1.0.1"
+ estree-walker "^1.0.1"
+ glob "^7.1.2"
+ is-reference "^1.1.2"
+ magic-string "^0.25.2"
+ resolve "^1.11.0"
+
"@rollup/plugin-json@^4.0.2":
version "4.1.0"
resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
@@ -3684,7 +3709,7 @@
dependencies:
"@rollup/pluginutils" "^3.0.8"
-"@rollup/plugin-node-resolve@^8.1.0":
+"@rollup/plugin-node-resolve@^8.1.0", "@rollup/plugin-node-resolve@^8.4.0":
version "8.4.0"
resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz#261d79a680e9dc3d86761c14462f24126ba83575"
integrity sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==
@@ -4510,7 +4535,7 @@
lodash "^4.17.15"
redent "^3.0.0"
-"@testing-library/react-hooks@^3.3.0":
+"@testing-library/react-hooks@^3.3.0", "@testing-library/react-hooks@^3.4.1":
version "3.4.1"
resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.4.1.tgz#1f8ccd21208086ec228d9743fe40b69d0efcd7e5"
integrity sha512-LbzvE7oKsVzuW1cxA/aOeNgeVvmHWG2p/WSzalIGyWuqZT3jVcNDT5KPEwy36sUYWde0Qsh32xqIUFXukeywXg==
@@ -4743,6 +4768,11 @@
dependencies:
"@types/express" "*"
+"@types/cookie@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803"
+ integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==
+
"@types/cookie@^0.4.0":
version "0.4.0"
resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108"
@@ -5016,6 +5046,14 @@
jest-diff "^25.2.1"
pretty-format "^25.2.1"
+"@types/jest@^25.2.2":
+ version "25.2.3"
+ resolved "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf"
+ integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==
+ dependencies:
+ jest-diff "^25.2.1"
+ pretty-format "^25.2.1"
+
"@types/jquery@^3.3.34":
version "3.5.1"
resolved "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.1.tgz#cebb057acf5071c40e439f30e840c57a30d406c3"
@@ -5737,6 +5775,18 @@
regexpp "^3.0.0"
tsutils "^3.17.1"
+"@typescript-eslint/eslint-plugin@^3.8.0":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f"
+ integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "3.10.1"
+ debug "^4.1.1"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
"@typescript-eslint/experimental-utils@2.24.0", "@typescript-eslint/experimental-utils@^2.5.0":
version "2.24.0"
resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz#a5cb2ed89fedf8b59638dc83484eb0c8c35e1143"
@@ -5746,6 +5796,17 @@
"@typescript-eslint/typescript-estree" "2.24.0"
eslint-scope "^5.0.0"
+"@typescript-eslint/experimental-utils@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"
+ integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/typescript-estree" "3.10.1"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
+
"@typescript-eslint/parser@^2.14.0":
version "2.24.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz#2cf0eae6e6dd44d162486ad949c126b887f11eb8"
@@ -5756,6 +5817,22 @@
"@typescript-eslint/typescript-estree" "2.24.0"
eslint-visitor-keys "^1.1.0"
+"@typescript-eslint/parser@^3.8.0":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467"
+ integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "3.10.1"
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/typescript-estree" "3.10.1"
+ eslint-visitor-keys "^1.1.0"
+
+"@typescript-eslint/types@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"
+ integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==
+
"@typescript-eslint/typescript-estree@2.24.0":
version "2.24.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz#38bbc8bb479790d2f324797ffbcdb346d897c62a"
@@ -5769,6 +5846,27 @@
semver "^6.3.0"
tsutils "^3.17.1"
+"@typescript-eslint/typescript-estree@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"
+ integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==
+ dependencies:
+ "@typescript-eslint/types" "3.10.1"
+ "@typescript-eslint/visitor-keys" "3.10.1"
+ debug "^4.1.1"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/visitor-keys@3.10.1":
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
+ integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
@@ -6046,6 +6144,11 @@ acorn@^7.1.1, acorn@^7.2.0:
resolved "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
+acorn@^7.4.0:
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
+ integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
+
address@1.1.2, address@^1.0.1:
version "1.1.2"
resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
@@ -9245,7 +9348,7 @@ cyclist@^1.0.1:
resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-cypress@*, cypress@^4.2.0:
+cypress@*, cypress@^4.11.0, cypress@^4.2.0:
version "4.12.1"
resolved "https://registry.npmjs.org/cypress/-/cypress-4.12.1.tgz#0ead1b9f4c0917d69d8b57f996b6e01fe693b6ec"
integrity sha512-9SGIPEmqU8vuRA6xst2CMTYd9sCFCxKSzrHt0wr+w2iAQMCIIsXsQ5Gplns1sT6LDbZcmLv6uehabAOl3fhc9Q==
@@ -10244,6 +10347,23 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-
string.prototype.trimleft "^2.1.1"
string.prototype.trimright "^2.1.1"
+es-abstract@^1.17.5:
+ version "1.17.6"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
+ integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-regex "^1.1.0"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
@@ -10334,6 +10454,11 @@ esbuild@0.6.3:
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.6.3.tgz#a957e22f2503c745793514388110f9b55b3a6f83"
integrity sha512-4lHgz/EvGLRQnDYzzrvW+eilaPHim5pCLz4mP0k0QIalD/n8Ji2NwQwoIa1uX+yKkbn9R/FAZvaEbodjx55rDg==
+esbuild@^0.6.18:
+ version "0.6.34"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.6.34.tgz#76565a60e006f45d5f273b6e59e61ed0816551f5"
+ integrity sha512-InRdL/Q96pUucPqovJzvuLhquZr6jOn81FDVwFjCKz1rYKIm9OdOC+7Fs4vr6x48vKBl5LzKgtjU39BUpO636A==
+
escalade@^3.0.1:
version "3.0.2"
resolved "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4"
@@ -10405,7 +10530,7 @@ eslint-module-utils@^2.1.1, eslint-module-utils@^2.6.0:
debug "^2.6.9"
pkg-dir "^2.0.0"
-eslint-plugin-cypress@^2.10.3:
+eslint-plugin-cypress@^2.10.3, eslint-plugin-cypress@^2.11.1:
version "2.11.1"
resolved "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.1.tgz#a945e2774b88211e2c706a059d431e262b5c2862"
integrity sha512-MxMYoReSO5+IZMGgpBZHHSx64zYPSPTpXDwsgW7ChlJTF/sA+obqRbHplxD6sBStE+g4Mi0LCLkG4t9liu//mQ==
@@ -10508,6 +10633,23 @@ eslint-plugin-react@^7.12.4:
string.prototype.matchall "^4.0.2"
xregexp "^4.3.0"
+eslint-plugin-react@^7.20.5:
+ version "7.21.2"
+ resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.2.tgz#3bd5d2c4c36d5a0428d0d6dda301ac9a84d681b2"
+ integrity sha512-j3XKvrK3rpBzveKFbgAeGsWb9uz6iUOrR0jixRfjwdFeGSRsXvVTFtHDQYCjsd1/6Z/xvb8Vy3LiI5Reo7fDrg==
+ dependencies:
+ array-includes "^3.1.1"
+ array.prototype.flatmap "^1.2.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.4.1"
+ object.entries "^1.1.2"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.17.0"
+ string.prototype.matchall "^4.0.2"
+
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -10524,6 +10666,14 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
eslint-utils@^1.4.3:
version "1.4.3"
resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
@@ -10538,11 +10688,23 @@ eslint-utils@^2.0.0:
dependencies:
eslint-visitor-keys "^1.1.0"
+eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa"
integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==
+eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
eslint@^7.1.0:
version "7.4.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f"
@@ -10585,6 +10747,49 @@ eslint@^7.1.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
+eslint@^7.6.0:
+ version "7.10.0"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9"
+ integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@eslint/eslintrc" "^0.1.3"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^1.3.0"
+ espree "^7.3.0"
+ esquery "^1.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
esm@^3.2.25:
version "3.2.25"
resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
@@ -10599,6 +10804,15 @@ espree@^7.1.0:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.2.0"
+espree@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348"
+ integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.3.0"
+
esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -10618,6 +10832,13 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
@@ -10628,6 +10849,11 @@ estraverse@^5.1.0:
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
estree-walker@^0.6.0, estree-walker@^0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
@@ -12255,7 +12481,7 @@ graphql-upload@^8.0.2:
http-errors "^1.7.3"
object-path "^0.11.4"
-graphql@15.3.0, graphql@^15.3.0:
+graphql@15.3.0, graphql@^15.0.0, graphql@^15.3.0:
version "15.3.0"
resolved "https://registry.npmjs.org/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278"
integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==
@@ -12431,7 +12657,7 @@ he@^1.1.0, he@^1.2.0:
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-headers-utils@^1.2.0:
+headers-utils@^1.1.9, headers-utils@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/headers-utils/-/headers-utils-1.2.0.tgz#5e10d1bc9d2bccf789547afca5b991a3167241e8"
integrity sha512-4/BMXcWrJErw7JpM87gF8MNEXcIMLzepYZjNRv/P9ctgupl2Ywa3u1PgHtNhSRq84bHH9Ndlkdy7bSi+bZ9I9A==
@@ -13229,6 +13455,11 @@ is-callable@^1.1.4, is-callable@^1.1.5:
resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
+is-callable@^1.2.0:
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
+ integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
+
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -13520,7 +13751,7 @@ is-reference@^1.1.2:
dependencies:
"@types/estree" "0.0.39"
-is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.1:
+is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
@@ -14228,6 +14459,11 @@ jose@^2.0.2:
dependencies:
"@panva/asn1.js" "^1.0.0"
+joycon@^2.2.5:
+ version "2.2.5"
+ resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615"
+ integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==
+
js-cookie@^2.2.1:
version "2.2.1"
resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
@@ -14655,6 +14891,14 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
array-includes "^3.0.3"
object.assign "^4.1.0"
+jsx-ast-utils@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
+ integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
+ dependencies:
+ array-includes "^3.1.1"
+ object.assign "^4.1.0"
+
jwa@^1.4.1:
version "1.4.1"
resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
@@ -16057,6 +16301,22 @@ ms@^2.0.0, ms@^2.1.1:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+msw@^0.19.5:
+ version "0.19.5"
+ resolved "https://registry.npmjs.org/msw/-/msw-0.19.5.tgz#7d2a1a852ccf1644d3db6735d69fff6777aac33f"
+ integrity sha512-J5eQ++gDVZoHPC8gVXtWcakLjgmPipvFj/sEnlRV/WViXuiq2CamSqO3Wbh6H8bAmj+k2vUWCfcVT1HjMdKB2Q==
+ dependencies:
+ "@open-draft/until" "^1.0.0"
+ "@types/cookie" "^0.3.3"
+ chalk "^4.0.0"
+ cookie "^0.4.1"
+ graphql "^15.0.0"
+ headers-utils "^1.1.9"
+ node-match-path "^0.4.2"
+ node-request-interceptor "^0.2.5"
+ statuses "^2.0.0"
+ yargs "^15.3.1"
+
msw@^0.20.5:
version "0.20.5"
resolved "https://registry.npmjs.org/msw/-/msw-0.20.5.tgz#b6141080c0d8b17c451d9ca36c28cc47b4ac487a"
@@ -16339,7 +16599,7 @@ node-libs-browser@^2.2.1:
util "^0.11.0"
vm-browserify "^1.0.1"
-node-match-path@^0.4.4:
+node-match-path@^0.4.2, node-match-path@^0.4.4:
version "0.4.4"
resolved "https://registry.npmjs.org/node-match-path/-/node-match-path-0.4.4.tgz#516a10926093c0cc6f237d020685b593b19baebb"
integrity sha512-pBq9gp7TG0r0VXuy/oeZmQsjBSnYQo7G886Ly/B3azRwZuEtHCY155dzmfoKWcDPGgyfIGD8WKVC7h3+6y7yTg==
@@ -16398,6 +16658,14 @@ node-releases@^1.1.52, node-releases@^1.1.58:
resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084"
integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==
+node-request-interceptor@^0.2.5:
+ version "0.2.6"
+ resolved "https://registry.npmjs.org/node-request-interceptor/-/node-request-interceptor-0.2.6.tgz#541278d7033bb6a8befb5dd793f83428cf6446a2"
+ integrity sha512-aJW1tPSM7nzuZFRe+C/KSz22GJO3CVFMxHHmMGX8Z+tjP7TCIVbzeckLFVfJG68BdVgrdOOP7Ejc57ag820eyA==
+ dependencies:
+ debug "^4.1.1"
+ headers-utils "^1.2.0"
+
node-request-interceptor@^0.3.5:
version "0.3.5"
resolved "https://registry.npmjs.org/node-request-interceptor/-/node-request-interceptor-0.3.5.tgz#4b26159617829c9a70643012c0fdc3ae4c78ae43"
@@ -16708,6 +16976,15 @@ object.entries@^1.1.0, object.entries@^1.1.1:
function-bind "^1.1.1"
has "^1.0.3"
+object.entries@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
+ integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+ has "^1.0.3"
+
"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
@@ -20013,6 +20290,13 @@ rollup-plugin-dts@1.4.11:
optionalDependencies:
"@babel/code-frame" "^7.10.4"
+rollup-plugin-dts@^1.4.10:
+ version "1.4.13"
+ resolved "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-1.4.13.tgz#4f086e84f4fdcc1f49160799ebc66f6b09db292b"
+ integrity sha512-7mxoQ6PcmCkBE5ZhrjGDL4k42XLy8BkSqpiRi1MipwiGs+7lwi4mQkp2afX+OzzLjJp/TGM8llfe8uayIUhPEw==
+ optionalDependencies:
+ "@babel/code-frame" "^7.10.4"
+
rollup-plugin-esbuild@^2.0.0:
version "2.3.0"
resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.3.0.tgz#7c107d4508af80d30966a148b306cb7d5b36b258"
@@ -20020,6 +20304,15 @@ rollup-plugin-esbuild@^2.0.0:
dependencies:
"@rollup/pluginutils" "^3.1.0"
+rollup-plugin-esbuild@^2.4.2:
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-2.5.0.tgz#5748352d0b688743ac64fc85fa86939e00098524"
+ integrity sha512-Tfi8Zynux67j4h4xEp/OvP2EDrKk/nM9Eghe1sT2+Nw4s6ei9vsqO1ajU+Y8EFfizMk3KEfYCicBKX6QLTW33w==
+ dependencies:
+ "@rollup/pluginutils" "^3.1.0"
+ joycon "^2.2.5"
+ strip-json-comments "^3.1.1"
+
rollup-plugin-image-files@^1.4.2:
version "1.4.2"
resolved "https://registry.npmjs.org/rollup-plugin-image-files/-/rollup-plugin-image-files-1.4.2.tgz#0a329723bace95168a9a6efdacb51370c14fbfe5"
@@ -20028,7 +20321,7 @@ rollup-plugin-image-files@^1.4.2:
rollup "0.64.1"
rollup-pluginutils "2.4.1"
-rollup-plugin-peer-deps-external@^2.2.2:
+rollup-plugin-peer-deps-external@^2.2.2, rollup-plugin-peer-deps-external@^2.2.3:
version "2.2.3"
resolved "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.3.tgz#059a8aec1eefb48a475e9fcedc3b9e3deb521213"
integrity sha512-W6IePXTExGXVDAlfZbNUUrx3GxUOZP248u5n4a4ID1XZMrbQ+uGeNiEfapvdzwx0qZi5DNH/hDLiPUP+pzFIxg==
@@ -20102,6 +20395,13 @@ rollup@^0.63.4:
"@types/estree" "0.0.39"
"@types/node" "*"
+rollup@^2.23.1:
+ version "2.28.2"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-2.28.2.tgz#599ec4978144a82d8a8ec3d37670a8440cb04e4b"
+ integrity sha512-8txbsFBFLmm9Xdt4ByTOGa9Muonmc8MfNjnGAR8U8scJlF1ZW7AgNZa7aqBXaKtlvnYP/ab++fQIq9dB9NWUbg==
+ optionalDependencies:
+ fsevents "~2.1.2"
+
rsvp@^4.8.4:
version "4.8.5"
resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
@@ -21211,6 +21511,14 @@ string.prototype.padstart@^3.0.0:
define-properties "^1.1.3"
es-abstract "^1.17.0-next.1"
+string.prototype.trimend@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
string.prototype.trimleft@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74"
@@ -21227,6 +21535,14 @@ string.prototype.trimright@^2.1.1:
define-properties "^1.1.3"
function-bind "^1.1.1"
+string.prototype.trimstart@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
+
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -21329,6 +21645,11 @@ strip-json-comments@^3.1.0:
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"