diff --git a/code/Dockerfile b/code/Dockerfile
index f202a26..26baf83 100644
--- a/code/Dockerfile
+++ b/code/Dockerfile
@@ -7,7 +7,7 @@ COPY package.json yarn.lock ./
COPY packages packages
# Comment this out if you don't have any internal plugins
-# COPY plugins plugins
+COPY plugins plugins
RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {} \+
diff --git a/code/examples/entities.yaml b/code/examples/entities.yaml
index 447e8b1..4243846 100644
--- a/code/examples/entities.yaml
+++ b/code/examples/entities.yaml
@@ -12,6 +12,8 @@ apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: example-website
+ annotations:
+ github.com/project-slug: test
spec:
type: website
lifecycle: experimental
diff --git a/code/packages/app/package.json b/code/packages/app/package.json
index c32d4bf..2a15d58 100644
--- a/code/packages/app/package.json
+++ b/code/packages/app/package.json
@@ -39,8 +39,10 @@
"@backstage/plugin-techdocs-react": "^1.1.16",
"@backstage/plugin-user-settings": "^0.8.1",
"@backstage/theme": "^0.5.1",
+ "@internal/backstage-plugin-my-plugin": "^0.1.0",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
+ "@roadiehq/backstage-plugin-github-pull-requests": "^2.5.23",
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
@@ -51,10 +53,10 @@
"devDependencies": {
"@backstage/test-utils": "^1.5.0",
"@playwright/test": "^1.32.3",
+ "@testing-library/dom": "^9.0.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.0.0",
- "@testing-library/dom": "^9.0.0",
"@types/react-dom": "*",
"cross-env": "^7.0.0"
},
diff --git a/code/packages/app/src/App.tsx b/code/packages/app/src/App.tsx
index 8d62f29..2e15d4b 100644
--- a/code/packages/app/src/App.tsx
+++ b/code/packages/app/src/App.tsx
@@ -33,6 +33,7 @@ import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import { RequirePermission } from '@backstage/plugin-permission-react';
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
+import { MyPluginPage } from '@internal/backstage-plugin-my-plugin';
const app = createApp({
apis,
@@ -93,6 +94,7 @@ const routes = (
} />
} />
+ } />
);
diff --git a/code/packages/app/src/components/catalog/EntityPage.tsx b/code/packages/app/src/components/catalog/EntityPage.tsx
index 7c6a71e..5e947ab 100644
--- a/code/packages/app/src/components/catalog/EntityPage.tsx
+++ b/code/packages/app/src/components/catalog/EntityPage.tsx
@@ -57,6 +57,8 @@ import {
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
+import { EntityGithubPullRequestsContent } from '@roadiehq/backstage-plugin-github-pull-requests';
+import { EntityGithubPullRequestsOverviewCard } from '@roadiehq/backstage-plugin-github-pull-requests';
const techdocsContent = (
@@ -137,6 +139,10 @@ const overviewContent = (
+
+
+
+
);
@@ -175,6 +181,10 @@ const serviceEntityPage = (
{techdocsContent}
+
+
+
+
);
@@ -202,6 +212,8 @@ const websiteEntityPage = (
{techdocsContent}
+
+
);
diff --git a/code/plugins/my-plugin/.eslintrc.js b/code/plugins/my-plugin/.eslintrc.js
new file mode 100644
index 0000000..e2a53a6
--- /dev/null
+++ b/code/plugins/my-plugin/.eslintrc.js
@@ -0,0 +1 @@
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
diff --git a/code/plugins/my-plugin/README.md b/code/plugins/my-plugin/README.md
new file mode 100644
index 0000000..57444c5
--- /dev/null
+++ b/code/plugins/my-plugin/README.md
@@ -0,0 +1,13 @@
+# my-plugin
+
+Welcome to the my-plugin plugin!
+
+_This plugin was created through the Backstage CLI_
+
+## Getting started
+
+Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/my-plugin](http://localhost:3000/my-plugin).
+
+You can also serve the plugin in isolation by running `yarn start` in the plugin directory.
+This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads.
+It is only meant for local development, and the setup for it can be found inside the [/dev](./dev) directory.
diff --git a/code/plugins/my-plugin/dev/index.tsx b/code/plugins/my-plugin/dev/index.tsx
new file mode 100644
index 0000000..35eaedf
--- /dev/null
+++ b/code/plugins/my-plugin/dev/index.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { createDevApp } from '@backstage/dev-utils';
+import { myPluginPlugin, MyPluginPage } from '../src/plugin';
+
+createDevApp()
+ .registerPlugin(myPluginPlugin)
+ .addPage({
+ element: ,
+ title: 'Root Page',
+ path: '/my-plugin'
+ })
+ .render();
diff --git a/code/plugins/my-plugin/package.json b/code/plugins/my-plugin/package.json
new file mode 100644
index 0000000..ba56abf
--- /dev/null
+++ b/code/plugins/my-plugin/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "@internal/backstage-plugin-my-plugin",
+ "version": "0.1.0",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "private": true,
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.esm.js",
+ "types": "dist/index.d.ts"
+ },
+ "backstage": {
+ "role": "frontend-plugin"
+ },
+ "sideEffects": false,
+ "scripts": {
+ "start": "backstage-cli package start",
+ "build": "backstage-cli package build",
+ "lint": "backstage-cli package lint",
+ "test": "backstage-cli package test",
+ "clean": "backstage-cli package clean",
+ "prepack": "backstage-cli package prepack",
+ "postpack": "backstage-cli package postpack"
+ },
+ "dependencies": {
+ "@backstage/core-components": "^0.14.0",
+ "@backstage/core-plugin-api": "^1.9.0",
+ "@backstage/theme": "^0.5.1",
+ "@material-ui/core": "^4.9.13",
+ "@material-ui/icons": "^4.9.1",
+ "@material-ui/lab": "^4.0.0-alpha.60",
+ "react-use": "^17.2.4"
+ },
+ "peerDependencies": {
+ "react": "^16.13.1 || ^17.0.0 || ^18.0.0"
+ },
+ "devDependencies": {
+ "@backstage/cli": "^0.25.2",
+ "@backstage/core-app-api": "^1.12.0",
+ "@backstage/dev-utils": "^1.0.27",
+ "@backstage/test-utils": "^1.5.0",
+ "@testing-library/jest-dom": "^6.0.0",
+ "@testing-library/react": "^14.0.0",
+ "@testing-library/user-event": "^14.0.0",
+ "msw": "^1.0.0"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx b/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx
new file mode 100644
index 0000000..e320ba3
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+import { ExampleComponent } from './ExampleComponent';
+import { rest } from 'msw';
+import { setupServer } from 'msw/node';
+import { screen } from '@testing-library/react';
+import {
+ setupRequestMockHandlers,
+ renderInTestApp,
+} from "@backstage/test-utils";
+
+describe('ExampleComponent', () => {
+ const server = setupServer();
+ // Enable sane handlers for network requests
+ setupRequestMockHandlers(server);
+
+ // setup mock response
+ beforeEach(() => {
+ server.use(
+ rest.get('/*', (_, res, ctx) => res(ctx.status(200), ctx.json({}))),
+ );
+ });
+
+ it('should render', async () => {
+ await renderInTestApp();
+ expect(screen.getByText('Welcome to my-plugin!')).toBeInTheDocument();
+ });
+});
diff --git a/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.tsx b/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.tsx
new file mode 100644
index 0000000..64139a9
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleComponent/ExampleComponent.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Typography, Grid } from '@material-ui/core';
+import {
+ InfoCard,
+ Header,
+ Page,
+ Content,
+ ContentHeader,
+ HeaderLabel,
+ SupportButton,
+} from '@backstage/core-components';
+import { ExampleFetchComponent } from '../ExampleFetchComponent';
+
+export const ExampleComponent = () => (
+
+
+
+
+ A description of your plugin goes here.
+
+
+
+
+
+ All content should be wrapped in a card like this.
+
+
+
+
+
+
+
+
+
+);
diff --git a/code/plugins/my-plugin/src/components/ExampleComponent/index.ts b/code/plugins/my-plugin/src/components/ExampleComponent/index.ts
new file mode 100644
index 0000000..8b84375
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleComponent/index.ts
@@ -0,0 +1 @@
+export { ExampleComponent } from './ExampleComponent';
diff --git a/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx b/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx
new file mode 100644
index 0000000..c1035a8
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { render, screen } from '@testing-library/react';
+import { ExampleFetchComponent } from './ExampleFetchComponent';
+
+describe('ExampleFetchComponent', () => {
+ it('renders the user table', async () => {
+ render();
+
+ // Wait for the table to render
+ const table = await screen.findByRole('table');
+ const nationality = screen.getAllByText("GB")
+ // Assert that the table contains the expected user data
+ expect(table).toBeInTheDocument();
+ expect(screen.getByAltText('Carolyn')).toBeInTheDocument();
+ expect(screen.getByText('Carolyn Moore')).toBeInTheDocument();
+ expect(screen.getByText('carolyn.moore@example.com')).toBeInTheDocument();
+ expect(nationality[0]).toBeInTheDocument();
+ });
+});
\ No newline at end of file
diff --git a/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx b/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx
new file mode 100644
index 0000000..b8a91d1
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx
@@ -0,0 +1,304 @@
+import React from 'react';
+import { makeStyles } from '@material-ui/core/styles';
+import { Table, TableColumn, Progress, ResponseErrorPanel } from '@backstage/core-components';
+import useAsync from 'react-use/lib/useAsync';
+
+export const exampleUsers = {
+ "results": [
+ {
+ "gender": "female",
+ "name": {
+ "title": "Miss",
+ "first": "Carolyn",
+ "last": "Moore"
+ },
+ "email": "carolyn.moore@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Carolyn",
+ "nat": "GB"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Esma",
+ "last": "Berberoğlu"
+ },
+ "email": "esma.berberoglu@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Esma",
+ "nat": "TR"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Isabella",
+ "last": "Rhodes"
+ },
+ "email": "isabella.rhodes@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella",
+ "nat": "GB"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Derrick",
+ "last": "Carter"
+ },
+ "email": "derrick.carter@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Derrick",
+ "nat": "IE"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Miss",
+ "first": "Mattie",
+ "last": "Lambert"
+ },
+ "email": "mattie.lambert@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mattie",
+ "nat": "AU"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Mijat",
+ "last": "Rakić"
+ },
+ "email": "mijat.rakic@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mijat",
+ "nat": "RS"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Javier",
+ "last": "Reid"
+ },
+ "email": "javier.reid@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Javier",
+ "nat": "US"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Isabella",
+ "last": "Li"
+ },
+ "email": "isabella.li@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella",
+ "nat": "CA"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Mrs",
+ "first": "Stephanie",
+ "last": "Garrett"
+ },
+ "email": "stephanie.garrett@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Stephanie",
+ "nat": "AU"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Antonia",
+ "last": "Núñez"
+ },
+ "email": "antonia.nunez@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Antonia",
+ "nat": "ES"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Donald",
+ "last": "Young"
+ },
+ "email": "donald.young@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Donald",
+ "nat": "US"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Iegor",
+ "last": "Holodovskiy"
+ },
+ "email": "iegor.holodovskiy@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Iegor",
+ "nat": "UA"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Madame",
+ "first": "Jessica",
+ "last": "David"
+ },
+ "email": "jessica.david@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Jessica",
+ "nat": "CH"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Eve",
+ "last": "Martinez"
+ },
+ "email": "eve.martinez@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Eve",
+ "nat": "FR"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Caleb",
+ "last": "Silva"
+ },
+ "email": "caleb.silva@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Caleb",
+ "nat": "US"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Miss",
+ "first": "Marcia",
+ "last": "Jenkins"
+ },
+ "email": "marcia.jenkins@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Marcia",
+ "nat": "US"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Mrs",
+ "first": "Mackenzie",
+ "last": "Jones"
+ },
+ "email": "mackenzie.jones@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mackenzie",
+ "nat": "NZ"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Jeremiah",
+ "last": "Gutierrez"
+ },
+ "email": "jeremiah.gutierrez@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Jeremiah",
+ "nat": "AU"
+ },
+ {
+ "gender": "female",
+ "name": {
+ "title": "Ms",
+ "first": "Luciara",
+ "last": "Souza"
+ },
+ "email": "luciara.souza@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Luciara",
+ "nat": "BR"
+ },
+ {
+ "gender": "male",
+ "name": {
+ "title": "Mr",
+ "first": "Valgi",
+ "last": "da Cunha"
+ },
+ "email": "valgi.dacunha@example.com",
+ "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Valgi",
+ "nat": "BR"
+ }
+ ]
+}
+
+const useStyles = makeStyles({
+ avatar: {
+ height: 32,
+ width: 32,
+ borderRadius: '50%',
+ },
+});
+
+type User = {
+ gender: string; // "male"
+ name: {
+ title: string; // "Mr",
+ first: string; // "Duane",
+ last: string; // "Reed"
+ };
+ email: string; // "duane.reed@example.com"
+ picture: string; // "https://api.dicebear.com/6.x/open-peeps/svg?seed=Duane"
+ nat: string; // "AU"
+};
+
+type DenseTableProps = {
+ users: User[];
+};
+
+export const DenseTable = ({ users }: DenseTableProps) => {
+ const classes = useStyles();
+
+ const columns: TableColumn[] = [
+ { title: 'Avatar', field: 'avatar' },
+ { title: 'Name', field: 'name' },
+ { title: 'Email', field: 'email' },
+ { title: 'Nationality', field: 'nationality' },
+ ];
+
+ const data = users.map(user => {
+ return {
+ avatar: (
+
+ ),
+ name: `${user.name.first} ${user.name.last}`,
+ email: user.email,
+ nationality: user.nat,
+ };
+ });
+
+ return (
+
+ );
+};
+
+export const ExampleFetchComponent = () => {
+
+ const { value, loading, error } = useAsync(async (): Promise => {
+ // Would use fetch in a real world example
+ return exampleUsers.results;
+ }, []);
+
+ if (loading) {
+ return ;
+ } else if (error) {
+ return ;
+ }
+
+ return ;
+};
diff --git a/code/plugins/my-plugin/src/components/ExampleFetchComponent/index.ts b/code/plugins/my-plugin/src/components/ExampleFetchComponent/index.ts
new file mode 100644
index 0000000..41a43e8
--- /dev/null
+++ b/code/plugins/my-plugin/src/components/ExampleFetchComponent/index.ts
@@ -0,0 +1 @@
+export { ExampleFetchComponent } from './ExampleFetchComponent';
diff --git a/code/plugins/my-plugin/src/index.ts b/code/plugins/my-plugin/src/index.ts
new file mode 100644
index 0000000..6eb67c2
--- /dev/null
+++ b/code/plugins/my-plugin/src/index.ts
@@ -0,0 +1 @@
+export { myPluginPlugin, MyPluginPage } from './plugin';
diff --git a/code/plugins/my-plugin/src/plugin.test.ts b/code/plugins/my-plugin/src/plugin.test.ts
new file mode 100644
index 0000000..abba6f3
--- /dev/null
+++ b/code/plugins/my-plugin/src/plugin.test.ts
@@ -0,0 +1,7 @@
+import { myPluginPlugin } from './plugin';
+
+describe('my-plugin', () => {
+ it('should export plugin', () => {
+ expect(myPluginPlugin).toBeDefined();
+ });
+});
diff --git a/code/plugins/my-plugin/src/plugin.ts b/code/plugins/my-plugin/src/plugin.ts
new file mode 100644
index 0000000..7a9674d
--- /dev/null
+++ b/code/plugins/my-plugin/src/plugin.ts
@@ -0,0 +1,19 @@
+import { createPlugin, createRoutableExtension } from '@backstage/core-plugin-api';
+
+import { rootRouteRef } from './routes';
+
+export const myPluginPlugin = createPlugin({
+ id: 'my-plugin',
+ routes: {
+ root: rootRouteRef,
+ },
+});
+
+export const MyPluginPage = myPluginPlugin.provide(
+ createRoutableExtension({
+ name: 'MyPluginPage',
+ component: () =>
+ import('./components/ExampleComponent').then(m => m.ExampleComponent),
+ mountPoint: rootRouteRef,
+ }),
+);
diff --git a/code/plugins/my-plugin/src/routes.ts b/code/plugins/my-plugin/src/routes.ts
new file mode 100644
index 0000000..28d6acb
--- /dev/null
+++ b/code/plugins/my-plugin/src/routes.ts
@@ -0,0 +1,5 @@
+import { createRouteRef } from '@backstage/core-plugin-api';
+
+export const rootRouteRef = createRouteRef({
+ id: 'my-plugin',
+});
diff --git a/code/plugins/my-plugin/src/setupTests.ts b/code/plugins/my-plugin/src/setupTests.ts
new file mode 100644
index 0000000..7b0828b
--- /dev/null
+++ b/code/plugins/my-plugin/src/setupTests.ts
@@ -0,0 +1 @@
+import '@testing-library/jest-dom';
diff --git a/code/yarn.lock b/code/yarn.lock
index 0e97ac3..4e50622 100644
--- a/code/yarn.lock
+++ b/code/yarn.lock
@@ -2256,7 +2256,7 @@
cross-fetch "^4.0.0"
uri-template "^2.0.0"
-"@backstage/catalog-model@^1.4.4":
+"@backstage/catalog-model@^1.4.3", "@backstage/catalog-model@^1.4.4":
version "1.4.4"
resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.4.4.tgz#53ebbe754c72a0e01bb7ea025af0358dc459db9c"
integrity sha512-JiCeAgUdRMQTjO0+34QeKDxYh/UQrXtDUvVic5z11uf8WuX3L9N7LiPOqJG+3t9TAyc5side21nDD7REdHoVFA==
@@ -2507,7 +2507,7 @@
zen-observable "^0.10.0"
zod "^3.22.4"
-"@backstage/core-plugin-api@^1.9.0":
+"@backstage/core-plugin-api@^1.8.1", "@backstage/core-plugin-api@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.9.0.tgz#49cda87ab82b968c9c7439da99549a4c34c4f720"
integrity sha512-k+w9TfJCFv/5YyiATuZfnlg/8KkJEL0fo9MHGFcOTOeqX0rcb0eecEWmb2kiA4NfPzLmEeNSSc4Nv8zdRQwCQA==
@@ -2519,6 +2519,24 @@
"@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0"
history "^5.0.0"
+"@backstage/dev-utils@^1.0.27":
+ version "1.0.27"
+ resolved "https://registry.yarnpkg.com/@backstage/dev-utils/-/dev-utils-1.0.27.tgz#0da942c0c8cae11f9b771ec106b0b881cc84fdc1"
+ integrity sha512-K8A6WN8CHyBJQV3omQClEdbre9nobPUr6TJvuKbadYU+z8AprjG8/u71BowEGiXV2PjBv8NNbWqj0tgpB7uNIg==
+ dependencies:
+ "@backstage/app-defaults" "^1.5.0"
+ "@backstage/catalog-model" "^1.4.4"
+ "@backstage/core-app-api" "^1.12.0"
+ "@backstage/core-components" "^0.14.0"
+ "@backstage/core-plugin-api" "^1.9.0"
+ "@backstage/integration-react" "^1.1.24"
+ "@backstage/plugin-catalog-react" "^1.10.0"
+ "@backstage/theme" "^0.5.1"
+ "@material-ui/core" "^4.12.2"
+ "@material-ui/icons" "^4.9.1"
+ "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0"
+ react-use "^17.2.4"
+
"@backstage/e2e-test-utils@^0.1.1":
version "0.1.1"
resolved "https://registry.yarnpkg.com/@backstage/e2e-test-utils/-/e2e-test-utils-0.1.1.tgz#309164a5006593da711f55f430dc4d11a3036514"
@@ -2996,7 +3014,7 @@
"@backstage/plugin-permission-node" "^0.7.23"
"@backstage/types" "^1.1.1"
-"@backstage/plugin-catalog-react@^1.10.0":
+"@backstage/plugin-catalog-react@^1.10.0", "@backstage/plugin-catalog-react@^1.9.2":
version "1.10.0"
resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.10.0.tgz#5c0bab60bd2bf854f4778c111e1f06e2db8ae881"
integrity sha512-xeejxqVp20NCtQIlWrOfvI/scWOefu7PsfQ0Eovqn0dULDVKAJTSgULpdm/AwgJ4E3F46voGw4FE/k5Rlf8Glg==
@@ -3086,6 +3104,18 @@
luxon "^3.0.0"
react-use "^17.2.4"
+"@backstage/plugin-home-react@^0.1.6":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-home-react/-/plugin-home-react-0.1.8.tgz#0667e246db12232b2cbcb57b6d46f7b81b74c2a1"
+ integrity sha512-IQ8goSKFvkzdFwQdT0KKt272LTSwyS7xWC0t7zP6AknK94NontF/bSngehBT8LaEGNuehROcUi9mqXLkZIufjw==
+ dependencies:
+ "@backstage/core-components" "^0.14.0"
+ "@backstage/core-plugin-api" "^1.9.0"
+ "@material-ui/core" "^4.12.2"
+ "@material-ui/icons" "^4.9.1"
+ "@rjsf/utils" "5.17.0"
+ "@types/react" "^16.13.1 || ^17.0.0"
+
"@backstage/plugin-org@^0.6.20":
version "0.6.20"
resolved "https://registry.yarnpkg.com/@backstage/plugin-org/-/plugin-org-0.6.20.tgz#b54f2abe46afaece16c2691ffc069c530a5365b9"
@@ -5267,7 +5297,7 @@
react-double-scrollbar "0.0.15"
uuid "^3.4.0"
-"@material-ui/core@^4.12.2", "@material-ui/core@^4.12.4":
+"@material-ui/core@^4.12.2", "@material-ui/core@^4.12.4", "@material-ui/core@^4.9.13":
version "4.12.4"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73"
integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==
@@ -5292,7 +5322,7 @@
dependencies:
"@babel/runtime" "^7.4.4"
-"@material-ui/lab@4.0.0-alpha.61":
+"@material-ui/lab@4.0.0-alpha.61", "@material-ui/lab@^4.0.0-alpha.60":
version "4.0.0-alpha.61"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978"
integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==
@@ -5474,6 +5504,28 @@
hey-listen "^1.0.8"
tslib "^2.3.1"
+"@mswjs/cookies@^0.2.2":
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.2.tgz#b4e207bf6989e5d5427539c2443380a33ebb922b"
+ integrity sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==
+ dependencies:
+ "@types/set-cookie-parser" "^2.4.0"
+ set-cookie-parser "^2.4.6"
+
+"@mswjs/interceptors@^0.17.10":
+ version "0.17.10"
+ resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.17.10.tgz#857b41f30e2b92345ed9a4e2b1d0a08b8b6fcad4"
+ integrity sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw==
+ dependencies:
+ "@open-draft/until" "^1.0.3"
+ "@types/debug" "^4.1.7"
+ "@xmldom/xmldom" "^0.8.3"
+ debug "^4.3.3"
+ headers-polyfill "3.2.5"
+ outvariant "^1.2.1"
+ strict-event-emitter "^0.2.4"
+ web-encoding "^1.1.5"
+
"@mui/base@5.0.0-beta.37":
version "5.0.0-beta.37"
resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.37.tgz#0e7e0f28402391fcfbb05476d5acc6c4f2d817b1"
@@ -6272,6 +6324,11 @@
"@octokit/webhooks-types" "7.3.2"
aggregate-error "^3.1.0"
+"@open-draft/until@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca"
+ integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==
+
"@openapi-contrib/openapi-schema-to-json-schema@~3.2.0":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz#c4c92edd4478b5ecb3d99c29ecb355118259dccc"
@@ -6749,6 +6806,29 @@
lodash "^4.17.21"
lodash-es "^4.17.21"
+"@roadiehq/backstage-plugin-github-pull-requests@^2.5.23":
+ version "2.5.23"
+ resolved "https://registry.yarnpkg.com/@roadiehq/backstage-plugin-github-pull-requests/-/backstage-plugin-github-pull-requests-2.5.23.tgz#048eaa9783f710aed94da71583be20586811ef9c"
+ integrity sha512-HYs2wp8SfprN9BOvQ27ygJO5eV2WP8LsHVAGvwNz84aBLVH7VrrDtjArzBz7eVc8Bo/YfBplUUdYoLjdtfyRgQ==
+ dependencies:
+ "@backstage/catalog-model" "^1.4.3"
+ "@backstage/core-components" "^0.14.0"
+ "@backstage/core-plugin-api" "^1.8.1"
+ "@backstage/plugin-catalog-react" "^1.9.2"
+ "@backstage/plugin-home-react" "^0.1.6"
+ "@material-ui/core" "^4.12.2"
+ "@material-ui/icons" "^4.9.1"
+ "@material-ui/lab" "^4.0.0-alpha.60"
+ "@octokit/rest" "^19.0.3"
+ "@octokit/types" "^9.0.0"
+ "@types/node-fetch" "^2.5.7"
+ history "^5.0.0"
+ lodash "^4.17.21"
+ luxon "^3.0.0"
+ msw "^1.0.1"
+ node-fetch "^2.6.1"
+ react-use "^17.2.4"
+
"@rollup/plugin-commonjs@^25.0.0":
version "25.0.7"
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf"
@@ -8488,6 +8568,11 @@
dependencies:
"@types/node" "*"
+"@types/cookie@^0.4.1":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
+ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
+
"@types/cors@^2.8.6":
version "2.8.17"
resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b"
@@ -8649,6 +8734,11 @@
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3"
integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==
+"@types/js-levenshtein@^1.1.1":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz#a6fd0bdc8255b274e5438e0bfb25f154492d1106"
+ integrity sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ==
+
"@types/js-yaml@^4.0.1":
version "4.0.9"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2"
@@ -8756,7 +8846,7 @@
dependencies:
"@types/express" "*"
-"@types/node-fetch@^2.5.0":
+"@types/node-fetch@^2.5.0", "@types/node-fetch@^2.5.7":
version "2.6.11"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
@@ -8865,7 +8955,7 @@
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
-"@types/react-dom@*", "@types/react-dom@^18", "@types/react-dom@^18.0.0":
+"@types/react-dom@*", "@types/react-dom@^18.0.0":
version "18.2.19"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58"
integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==
@@ -8903,10 +8993,19 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@^16.13.1 || ^17.0.0", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18":
- version "18.2.60"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.60.tgz#df026eaef1100b6dafe420f36fecb1d209a8cee1"
- integrity sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==
+"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0":
+ version "18.2.61"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.61.tgz#5607308495037436779939ec0348a5816c08799d"
+ integrity sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/react@^16.13.1 || ^17.0.0":
+ version "17.0.76"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.76.tgz#bfdf762046699e265655cd8f67a51beab6cd1e80"
+ integrity sha512-w9Aq+qeszGYoQM0hgFcdsAODGJdogadBDiitPm+zjBFJ0mLymvn2qSXsDaLJUndFRqqXk1FQfa9avHUBk1JhJQ==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -8978,6 +9077,13 @@
"@types/mime" "*"
"@types/node" "*"
+"@types/set-cookie-parser@^2.4.0":
+ version "2.4.7"
+ resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz#4a341ed1d3a922573ee54db70b6f0a6d818290e7"
+ integrity sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==
+ dependencies:
+ "@types/node" "*"
+
"@types/sockjs@^0.3.33":
version "0.3.36"
resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535"
@@ -9403,7 +9509,7 @@
fast-querystring "^1.1.1"
tslib "^2.3.1"
-"@xmldom/xmldom@^0.8.5", "@xmldom/xmldom@^0.8.6", "@xmldom/xmldom@^0.8.8":
+"@xmldom/xmldom@^0.8.3", "@xmldom/xmldom@^0.8.5", "@xmldom/xmldom@^0.8.6", "@xmldom/xmldom@^0.8.8":
version "0.8.10"
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
@@ -9451,6 +9557,11 @@
dependencies:
argparse "^2.0.1"
+"@zxing/text-encoding@0.9.0":
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b"
+ integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==
+
JSONStream@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
@@ -9720,6 +9831,7 @@ anymatch@^3.0.3, anymatch@~3.1.2:
"@backstage/plugin-techdocs-react" "^1.1.16"
"@backstage/plugin-user-settings" "^0.8.1"
"@backstage/theme" "^0.5.1"
+ "@internal/backstage-plugin-my-plugin" "^0.1.0"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
history "^5.0.0"
@@ -11476,6 +11588,11 @@ cookie@0.6.0, cookie@~0.6.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+cookie@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+ integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
copy-to-clipboard@^3.2.0, copy-to-clipboard@^3.3.1:
version "3.3.3"
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
@@ -13216,7 +13333,7 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-events@3.3.0, events@^3.0.0, events@^3.2.0:
+events@3.3.0, events@^3.0.0, events@^3.2.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
@@ -14425,7 +14542,7 @@ graphql-ws@^5.14.0, graphql-ws@^5.4.1:
resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.15.0.tgz#2db79e1b42468a8363bf5ca6168d076e2f8fdebc"
integrity sha512-xWGAtm3fig9TIhSaNsg0FaDZ8Pyn/3re3RFlP4rhQcmjRDIPpk1EhRuNB+YSJtLzttyuToaDiNhwT1OMoGnJnw==
-graphql@^16.0.0:
+graphql@^16.0.0, graphql@^16.8.1:
version "16.8.1"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07"
integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==
@@ -14588,6 +14705,11 @@ he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+headers-polyfill@3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed"
+ integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==
+
helmet@^6.0.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/helmet/-/helmet-6.2.0.tgz#c29d62014be4c70b8ef092c9c5e54c8c26b8e16e"
@@ -15302,6 +15424,11 @@ is-negative-zero@^2.0.2:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
+is-node-process@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134"
+ integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==
+
is-number-object@^1.0.4:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
@@ -16076,6 +16203,11 @@ js-file-download@^0.4.12:
resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.12.tgz#10c70ef362559a5b23cdbdc3bd6f399c3d91d821"
integrity sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==
+js-levenshtein@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
+ integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -18038,6 +18170,31 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+msw@^1.0.0, msw@^1.0.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/msw/-/msw-1.3.2.tgz#35e0271293e893fc3c55116e90aad5d955c66899"
+ integrity sha512-wKLhFPR+NitYTkQl5047pia0reNGgf0P6a1eTnA5aNlripmiz0sabMvvHcicE8kQ3/gZcI0YiPFWmYfowfm3lA==
+ dependencies:
+ "@mswjs/cookies" "^0.2.2"
+ "@mswjs/interceptors" "^0.17.10"
+ "@open-draft/until" "^1.0.3"
+ "@types/cookie" "^0.4.1"
+ "@types/js-levenshtein" "^1.1.1"
+ chalk "^4.1.1"
+ chokidar "^3.4.2"
+ cookie "^0.4.2"
+ graphql "^16.8.1"
+ headers-polyfill "3.2.5"
+ inquirer "^8.2.0"
+ is-node-process "^1.2.0"
+ js-levenshtein "^1.1.6"
+ node-fetch "^2.6.7"
+ outvariant "^1.4.0"
+ path-to-regexp "^6.2.0"
+ strict-event-emitter "^0.4.3"
+ type-fest "^2.19.0"
+ yargs "^17.3.1"
+
multer@^1.4.5-lts.1:
version "1.4.5-lts.1"
resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac"
@@ -18874,6 +19031,11 @@ os-tmpdir@~1.0.2:
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+outvariant@^1.2.1, outvariant@^1.4.0:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066"
+ integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==
+
p-cancelable@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
@@ -21462,6 +21624,11 @@ set-blocking@^2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+set-cookie-parser@^2.4.6:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51"
+ integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==
+
set-function-length@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425"
@@ -22017,6 +22184,18 @@ streamx@^2.15.0:
optionalDependencies:
bare-events "^2.2.0"
+strict-event-emitter@^0.2.4:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz#b4e768927c67273c14c13d20e19d5e6c934b47ca"
+ integrity sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==
+ dependencies:
+ events "^3.3.0"
+
+strict-event-emitter@^0.4.3:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3"
+ integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==
+
strict-uri-encode@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
@@ -22941,6 +23120,11 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+type-fest@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
+ integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
type-is@^1.6.4, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -23597,6 +23781,15 @@ wcwidth@>=1.0.1, wcwidth@^1.0.0, wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
+web-encoding@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864"
+ integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==
+ dependencies:
+ util "^0.12.3"
+ optionalDependencies:
+ "@zxing/text-encoding" "0.9.0"
+
web-streams-polyfill@^3.0.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"