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: ( + {user.name.first} + ), + 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"