diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 41aa10bfbb..b12d7f1212 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -27,4 +27,4 @@ yarn.lock @janus-idp/maintainers-plugins
/plugins/tekton/ @janus-idp/maintainers-plugins @debsmita1 @divyanshiGupta
/plugins/rbac-backend/ @janus-idp/maintainers-plugins @gorkem @AndrienkoAleksandr @PatAKnight
/plugins/rbac-common/ @janus-idp/maintainers-plugins @gorkem @AndrienkoAleksandr @PatAKnight
-
+/plugins/notifications-frontend @janus-idp/maintainers-plugins @mareklibra
diff --git a/app-config.yaml b/app-config.yaml
index ca8b34ba45..cd01d53707 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -28,7 +28,6 @@ backend:
# This is for local development only, it is not recommended to use this in production
# The production database configuration is stored in app-config.production.yaml
database:
- client: better-sqlite3
connection: ':memory:'
cache:
store: memory
diff --git a/packages/app/package.json b/packages/app/package.json
index d326784f41..6cca6281c7 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -37,6 +37,7 @@
"@backstage/plugin-catalog-import": "^0.10.1",
"@backstage/plugin-catalog-react": "^1.8.5",
"@backstage/plugin-github-actions": "^0.6.6",
+ "@backstage/plugin-notifications-frontend": "0.1.0",
"@backstage/plugin-org": "^0.6.15",
"@backstage/plugin-permission-react": "^0.4.16",
"@backstage/plugin-scaffolder": "^1.15.1",
diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx
index 42107c4f4f..5f519654c8 100644
--- a/packages/app/src/components/Root/Root.tsx
+++ b/packages/app/src/components/Root/Root.tsx
@@ -75,6 +75,7 @@ export const Root = ({ children }: PropsWithChildren<{}>) => (
+
{
+ const catalogClient = new CatalogClient({ discoveryApi: env.discovery });
+ const dbConfig = env.config.getConfig('backend.database');
+ // Following is optional
+ const externalCallerSecret = env.config.getOptionalString(
+ 'notifications.externalCallerSecret',
+ );
+
+ return await createRouter({
+ identity: env.identity,
+ logger: env.logger,
+ permissions: env.permissions,
+ tokenManager: env.tokenManager,
+ dbConfig,
+ catalogClient,
+ externalCallerSecret,
+ });
+}
+```
+
+### Add to router
+
+In the `packages/backend/src/index.ts`:
+
+```
+import notifications from './plugins/notifications';
+...
+{/* Existing code for reference: */}
+const apiRouter = Router();
+...
+{/* New code: */}
+const notificationsEnv = useHotMemoize(module, () =>
+ createEnv('notifications'),
+);
+apiRouter.use('/notifications', await notifications(notificationsEnv));
+```
+
+### Configure
+
+#### Optional: Plugin's configuration
+
+If you have issues to create valid JWT tokens by an external caller, use following option to bypass the service-to-service configuration for them:
+
+```
+notifications:
+ # Workaround for issues with external caller JWT token creation.
+ # When following config option is not provided and the request "authentication" header is missing, the request is ALLOWED by default
+ # When following option is present, the request must contain either a valid JWT token or that provided shared secret in the "notifications-secret" header
+ externalCallerSecret: your-secret-token-shared-with-external-services
+```
+
+Mind using HTTPS to help preventing leaking the shared secret.
+
+Example of the request then:
+
+```
+curl -X POST http://localhost:7007/api/notifications/notifications -H "Content-Type: application/json" -H "notifications-secret: your-secret-token-shared-with-external-services" -d '{"title":"my-title","origin":"my-origin","message":"message one","topic":"my-topic"}'
+
+```
+
+Notes:
+
+- The `externalCallerSecret` is an workaround, exclusive use of JWT tokens will probably be required in the future.
+- Sharing the same shared secret with the "auth.secret" option is not recommended.
+
+#### Authentication
+
+Please refer https://backstage.io/docs/auth/ to set-up authentication.
+
+The Notifications flows are based on the identity of the user.
+
+All `targetUsers`, `targetGroups`` or signed-in users receiving notifications must have corresponding entities created in the Catalog.
+Refer https://backstage.io/docs/auth/identity-resolver for details.
+
+For the purpose of development, there is `users.yaml` listing example data created.
+
+#### Authorization
+
+Every service endpoint is guarded by a permission check, enabled by default.
+
+It is up to particular deployment to provide corresponding permission policies based on https://backstage.io/docs/permissions/writing-a-policy. To register your permission policies, refer https://backstage.io/docs/permissions/getting-started#integrating-the-permission-framework-with-your-backstage-instance.
+
+#### Service-to-service and External Calls
+
+The notification-backend is expected to be called by FE plugins (including the notifications-frontend), other backend plugins or external services.
+
+To configure those two flows, refer
+
+- https://backstage.io/docs/auth/service-to-service-auth.
+- https://backstage.io/docs/auth/service-to-service-auth#usage-in-external-callers
+
+#### Catalog
+
+The notifications require target users or groups (as receivers) to be listed in the Catalog.
+
+As an example how to do it, add following to the config:
+
+```
+catalog:
+ import:
+ entityFilename: catalog-info.yaml
+ pullRequestBranchName: backstage-integration
+ rules:
+ # *** Here is new change:
+ - allow: [Component, System, API, Resource, Location, User, Group]
+ locations:
+ # Local example data, file locations are relative to the backend process, typically `packages/backend`
+ - type: file
+ # *** Here is new change, referes to a file stored in the root of the Backstage:
+ target: ../../users.yaml
+```
+
+The example list of users is stored in the `plugins/notifications-backend/users.yaml` and can be copied to the root of the Backstage for development purposes.
+
+## REST API
+
+See `src/openapi.yaml` for full OpenAPI spec.
+
+### Posting a notification
+
+A notification without target users or groups is considered a system notification. That means it is intended for all users (listed among Updates in the UI).
+
+Request (User message and then system message):
+
+```bash
+curl -X POST http://localhost:7007/api/notifications/notifications -H "Content-Type: application/json" -d '{"title": "My message title", "message": "I have nothing to say", "origin": "my-origin", "targetUsers": ["jdoe"], "targetGroups": ["jdoe"], "actions": [{"title": "my-title", "url": "http://foo.bar"}, {"title": "another action", "url": "https://foo.foo.bar"}]}'
+```
+
+```bash
+curl -X POST http://localhost:7007/api/notifications/notifications -H "Content-Type: application/json" -d '{"title": "My message title", "message": "I have nothing to say", "origin": "my-origin", "actions": [{"title": "my-title", "url": "http://foo.bar"}, {"title": "another action", "url": "https://foo.foo.bar"}]}'
+```
+
+Optionally add `-H "Authorization: Bearer eyJh.....` with a valid JWT token if the service-to-service authorization is enabled (see above).
+
+Response:
+
+```json
+{ "msgid": "2daac6ff-3aaa-420d-b755-d94e54248310" }
+```
+
+### Get notifications
+
+Page number starts at '1'. Page number '0' along with page size '0' means no paging.
+User parameter is mandatory because it is needed for message status and filtering (read/unread).
+
+Query parameters:
+
+- `pageSize`. 0 means no paging.
+- `pageNumber`. first page is 1. 0 means no paging.
+- `orderBy`.
+- `orderByDirec`. asc/desc
+- `containsText`. filter title and message containing this text (case insensitive)
+- `createdAfter`. fetch notifications created after this point in time
+- `messageScope`. all/user/system. fetch notifications intended for specific user or system notifications or both
+- `read`. true/false (read/unread)
+
+Request:
+
+```bash
+curl 'http://localhost:7007/api/notifications/notifications?read=false&pageNumber=0&pageSize=0'
+```
+
+Response:
+
+```json
+[
+ {
+ "id": "2daac6ff-3aaa-420d-b755-d94e54248310",
+ "created": "2023-10-30T13:48:34.931Z",
+ "isSystem": false,
+ "readByUser": false,
+ "origin": "my-origin",
+ "title": "My title",
+ "message": "I have nothing to tell",
+ "topic": "my-topic",
+ "actions": []
+ }
+]
+```
+
+### Get count of notifications
+
+User parameter is mandatory because it is needed for filtering (read/unread).
+
+**Important: Logged-in user:**
+
+The query requires a signed-in user whose entity is listed in the Catalog.
+With this condition is met, the HTTP `Authorization` header contains a JWT token with the user's identity.
+
+Optionally add `-H "Authorization: Bearer eyJh.....` with a valid JWT token to the `curl` commands bellow.
+
+Query parameters:
+
+- `containsText`. filter title and message containing this text (case insensitive)
+- `createdAfter`. fetch notifications created after this point in time
+- `messageScope`. all/user/system. fetch notifications intended for specific user or system notifications or both
+- `read`. true/false (read/unread)
+
+Request:
+
+```bash
+curl http://localhost:7007/api/notifications/notifications/count
+```
+
+Response:
+
+```json
+{ "count": "1" }
+```
+
+### Set notification as read/unread
+
+Request:
+
+```bash
+curl -X PUT 'http://localhost:7007/api/notifications/notifications/read?messageID=48bbf896-4b7c-4b68-a446-246b6a801000&read=true'
+```
+
+Response: just HTTP status
+
+## Building a client for the API
+
+We supply an Open API spec YAML file: openapi.yaml.
diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json
new file mode 100644
index 0000000000..37a3aa3b50
--- /dev/null
+++ b/plugins/notifications-backend/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "@backstage/plugin-notifications-backend",
+ "version": "0.1.0",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "private": true,
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.cjs.js",
+ "types": "dist/index.d.ts"
+ },
+ "backstage": {
+ "role": "backend-plugin"
+ },
+ "scripts": {
+ "start": "backstage-cli package start",
+ "build": "backstage-cli package build",
+ "lint": "backstage-cli package lint",
+ "test": "backstage-cli package test --passWithNoTests --coverage",
+ "clean": "backstage-cli package clean",
+ "prepack": "backstage-cli package prepack",
+ "postpack": "backstage-cli package postpack",
+ "tsc": "tsc",
+ "openapi": "openapi typegen src/openapi.yaml > src/openapi.d.ts"
+ },
+ "dependencies": {
+ "@backstage/backend-common": "^0.19.8",
+ "@backstage/backend-openapi-utils": "^0.1.0",
+ "@backstage/catalog-client": "^1.4.5",
+ "@backstage/config": "^1.1.1",
+ "@backstage/errors": "^1.2.3",
+ "@backstage/plugin-auth-node": "^0.4.0",
+ "@backstage/plugin-permission-common": "^0.7.9",
+ "@backstage/plugin-permission-node": "^0.7.17",
+ "ajv-formats": "^2.1.1",
+ "express": "^4.18.2",
+ "express-promise-router": "^4.1.1",
+ "knex": "2.5.1",
+ "lodash": "^4.17.21",
+ "node-fetch": "^3.3.2",
+ "openapi": "^1.0.1",
+ "openapi-backend": "^5.10.5",
+ "winston": "^3.11.0",
+ "yn": "^4.0.0"
+ },
+ "devDependencies": {
+ "@backstage/backend-test-utils": "^0.2.7",
+ "@backstage/catalog-model": "^1.4.3",
+ "@backstage/cli": "0.23.0",
+ "@types/express": "*",
+ "@types/supertest": "2.0.16",
+ "knex-mock-client": "2.0.0",
+ "msw": "1.3.2",
+ "openapicmd": "^2.1.0",
+ "supertest": "6.3.3"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/plugins/notifications-backend/src/index.ts b/plugins/notifications-backend/src/index.ts
new file mode 100644
index 0000000000..7d319394d7
--- /dev/null
+++ b/plugins/notifications-backend/src/index.ts
@@ -0,0 +1,2 @@
+export * from './service/router';
+export * from './service/permissions';
diff --git a/plugins/notifications-backend/src/openapi.d.ts b/plugins/notifications-backend/src/openapi.d.ts
new file mode 100644
index 0000000000..59fa470129
--- /dev/null
+++ b/plugins/notifications-backend/src/openapi.d.ts
@@ -0,0 +1,217 @@
+import type {
+ AxiosRequestConfig,
+ OpenAPIClient,
+ OperationResponse,
+ Parameters,
+ UnknownParamsObject,
+} from 'openapi-client-axios';
+
+declare namespace Components {
+ namespace Schemas {
+ export interface Action {
+ id: string;
+ title: string;
+ url: string;
+ }
+ export interface CreateBody {
+ origin: string;
+ title: string;
+ message?: string;
+ actions?: {
+ title: string;
+ url: string;
+ }[];
+ topic?: string;
+ targetUsers?: string[];
+ targetGroups?: string[];
+ }
+ export interface Notification {
+ id: string;
+ created: string; // date-time
+ readByUser: boolean;
+ isSystem: boolean;
+ origin: string;
+ title: string;
+ message?: string;
+ topic?: string;
+ actions: Action[];
+ }
+ export type Notifications = Notification[];
+ }
+}
+declare namespace Paths {
+ namespace CreateNotification {
+ export type RequestBody = Components.Schemas.CreateBody;
+ namespace Responses {
+ export interface $200 {
+ /**
+ * example:
+ * bc9f19de-8b7b-49a8-9262-c5036a1ed35e
+ */
+ messageId: string;
+ }
+ }
+ }
+ namespace GetNotifications {
+ namespace Parameters {
+ export type ContainsText = string;
+ export type CreatedAfter = string; // date-time
+ export type MessageScope = 'all' | 'user' | 'system';
+ export type OrderBy =
+ | 'title'
+ | 'message'
+ | 'created'
+ | 'topic'
+ | 'origin';
+ export type OrderByDirec = 'asc' | 'desc';
+ export type PageNumber = number;
+ export type PageSize = number;
+ export type Read = boolean;
+ export type User = string;
+ }
+ export interface QueryParameters {
+ pageSize?: Parameters.PageSize;
+ pageNumber?: Parameters.PageNumber;
+ orderBy?: Parameters.OrderBy;
+ orderByDirec?: Parameters.OrderByDirec;
+ containsText?: Parameters.ContainsText;
+ createdAfter?: Parameters.CreatedAfter /* date-time */;
+ messageScope?: Parameters.MessageScope;
+ user?: Parameters.User;
+ read?: Parameters.Read;
+ }
+ namespace Responses {
+ export type $200 = Components.Schemas.Notifications;
+ }
+ }
+ namespace GetNotificationsCount {
+ namespace Parameters {
+ export type ContainsText = string;
+ export type CreatedAfter = string; // date-time
+ export type MessageScope = 'all' | 'user' | 'system';
+ export type Read = boolean;
+ export type User = string;
+ }
+ export interface QueryParameters {
+ containsText?: Parameters.ContainsText;
+ createdAfter?: Parameters.CreatedAfter /* date-time */;
+ messageScope?: Parameters.MessageScope;
+ user?: Parameters.User;
+ read?: Parameters.Read;
+ }
+ namespace Responses {
+ export interface $200 {
+ count: number;
+ }
+ }
+ }
+ namespace SetRead {
+ namespace Parameters {
+ export type MessageId = string;
+ export type Read = boolean;
+ export type User = string;
+ }
+ export interface QueryParameters {
+ messageId: Parameters.MessageId;
+ user: Parameters.User;
+ read: Parameters.Read;
+ }
+ namespace Responses {
+ export interface $200 {}
+ }
+ }
+}
+
+export interface OperationMethods {
+ /**
+ * getNotifications - Gets notifications
+ *
+ * Gets notifications
+ */
+ 'getNotifications'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ /**
+ * createNotification - Create notification
+ *
+ * Create notification
+ */
+ 'createNotification'(
+ parameters?: Parameters | null,
+ data?: Paths.CreateNotification.RequestBody,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ /**
+ * getNotificationsCount - Get notifications count
+ *
+ * Gets notifications count
+ */
+ 'getNotificationsCount'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ /**
+ * setRead - Set notification as read/unread
+ *
+ * Set notification as read/unread
+ */
+ 'setRead'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+}
+
+export interface PathsDictionary {
+ ['/notifications']: {
+ /**
+ * createNotification - Create notification
+ *
+ * Create notification
+ */
+ 'post'(
+ parameters?: Parameters | null,
+ data?: Paths.CreateNotification.RequestBody,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ /**
+ * getNotifications - Gets notifications
+ *
+ * Gets notifications
+ */
+ 'get'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ };
+ ['/notifications/count']: {
+ /**
+ * getNotificationsCount - Get notifications count
+ *
+ * Gets notifications count
+ */
+ 'get'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ };
+ ['/notifications/read']: {
+ /**
+ * setRead - Set notification as read/unread
+ *
+ * Set notification as read/unread
+ */
+ 'put'(
+ parameters?: Parameters | null,
+ data?: any,
+ config?: AxiosRequestConfig,
+ ): OperationResponse;
+ };
+}
+
+export type Client = OpenAPIClient;
diff --git a/plugins/notifications-backend/src/openapi.yaml b/plugins/notifications-backend/src/openapi.yaml
new file mode 100644
index 0000000000..4ad93c82ec
--- /dev/null
+++ b/plugins/notifications-backend/src/openapi.yaml
@@ -0,0 +1,254 @@
+openapi: 3.0.3
+info:
+ title: Notifications Plugin - OpenAPI Specs
+ description: |-
+ Notifications Plugin - OpenAPI Specs
+ version: 1.0.0
+tags:
+ - name: notifications
+ description: notifications plugin
+servers:
+ - url: http://localhost:7007/api/notifications
+paths:
+ /notifications:
+ post:
+ tags:
+ - notifications
+ summary: Create notification
+ description: Create notification
+ operationId: createNotification
+ requestBody:
+ description: Create a new notification
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateBody'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ messageId:
+ type: string
+ example: bc9f19de-8b7b-49a8-9262-c5036a1ed35e
+ required: ['messageId']
+ get:
+ tags:
+ - notifications
+ summary: Gets notifications
+ description: Gets notifications
+ operationId: getNotifications
+ parameters:
+ - name: pageSize
+ in: query
+ description: Page size of the result
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ - name: pageNumber
+ in: query
+ description: Page number of the result
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ - name: orderBy
+ in: query
+ description: order by field. e.g. created, origin.
+ required: false
+ schema:
+ type: string
+ enum:
+ - title
+ - message
+ - created
+ - topic
+ - origin
+ - name: orderByDirec
+ in: query
+ description: order ascending or descending
+ required: false
+ schema:
+ type: string
+ enum:
+ - asc
+ - desc
+ - name: containsText
+ in: query
+ description: Filter notifications whose either title or message contains the provided string
+ required: false
+ schema:
+ type: string
+ - name: createdAfter
+ in: query
+ description: Only notifications created after this timestamp will be included
+ required: false
+ schema:
+ type: string
+ format: date-time
+ - name: messageScope
+ in: query
+ description: retrieve either logged-in user messages, system messages or both
+ required: false
+ schema:
+ type: string
+ enum:
+ - all
+ - user
+ - system
+ - name: read
+ in: query
+ description: Notifications read or not
+ required: false
+ schema:
+ type: boolean
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Notifications'
+ /notifications/count:
+ get:
+ tags:
+ - notifications
+ summary: Get notifications count
+ description: Gets notifications count
+ operationId: getNotificationsCount
+ parameters:
+ - name: containsText
+ in: query
+ description: Filter notifications whose either title or message contains the provided string
+ required: false
+ schema:
+ type: string
+ - name: createdAfter
+ in: query
+ description: Only notifications created after this timestamp will be included
+ required: false
+ schema:
+ type: string
+ format: date-time
+ - name: messageScope
+ in: query
+ description: retrieve either logged-in user messages, system messages or both
+ required: false
+ schema:
+ type: string
+ enum:
+ - all
+ - user
+ - system
+ - name: read
+ in: query
+ description: Notifications read or not
+ required: false
+ schema:
+ type: boolean
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ count:
+ type: number
+ required: ['count']
+ /notifications/read:
+ put:
+ tags:
+ - notifications
+ summary: Set notification as read/unread
+ description: Set notification as read/unread
+ operationId: setRead
+ parameters:
+ - name: messageId
+ in: query
+ description: The message ID
+ required: true
+ schema:
+ type: string
+ - name: read
+ in: query
+ description: read/unread
+ required: true
+ schema:
+ type: boolean
+ responses:
+ '200':
+ description: Successful operation
+components:
+ schemas:
+ Notifications:
+ type: array
+ items:
+ $ref: '#/components/schemas/Notification'
+ Notification:
+ properties:
+ id:
+ type: string
+ created:
+ type: string
+ format: date-time
+ readByUser:
+ type: boolean
+ isSystem:
+ type: boolean
+ origin:
+ type: string
+ title:
+ type: string
+ message:
+ type: string
+ topic:
+ type: string
+ actions:
+ type: array
+ items:
+ $ref: '#/components/schemas/Action'
+ required: [id, created, readByUser, isSystem, origin, title, actions]
+ Action:
+ properties:
+ id:
+ type: string
+ title:
+ type: string
+ url:
+ type: string
+ required: [id, title, url]
+ CreateBody:
+ properties:
+ origin:
+ type: string
+ title:
+ type: string
+ message:
+ type: string
+ actions:
+ type: array
+ items:
+ type: object
+ properties:
+ title:
+ type: string
+ url:
+ type: string
+ required: [title, url]
+ topic:
+ type: string
+ targetUsers:
+ type: array
+ items:
+ type: string
+ targetGroups:
+ type: array
+ items:
+ type: string
+ required: [origin, title]
diff --git a/plugins/notifications-backend/src/run.ts b/plugins/notifications-backend/src/run.ts
new file mode 100644
index 0000000000..594839f2e1
--- /dev/null
+++ b/plugins/notifications-backend/src/run.ts
@@ -0,0 +1,19 @@
+import { getRootLogger } from '@backstage/backend-common';
+
+import yn from 'yn';
+
+import { startStandaloneServer } from './service/standaloneServer';
+
+const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7007;
+const enableCors = yn(process.env.PLUGIN_CORS, { default: false });
+const logger = getRootLogger();
+
+startStandaloneServer({ port, enableCors, logger }).catch(err => {
+ logger.error(err);
+ process.exit(1);
+});
+
+process.on('SIGINT', () => {
+ logger.info('CTRL+C pressed; exiting.');
+ process.exit(0);
+});
diff --git a/plugins/notifications-backend/src/service/auth.ts b/plugins/notifications-backend/src/service/auth.ts
new file mode 100644
index 0000000000..009fdcb1f1
--- /dev/null
+++ b/plugins/notifications-backend/src/service/auth.ts
@@ -0,0 +1,110 @@
+import { AuthenticationError, NotAllowedError } from '@backstage/errors';
+import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node';
+import {
+ AuthorizeResult,
+ BasicPermission,
+ PermissionEvaluator,
+} from '@backstage/plugin-permission-common';
+
+import express from 'express';
+
+import { DefaultServiceUser } from './constants';
+import { RouterOptions } from './types';
+
+export type GetLoggedInUserOptions = Pick<
+ RouterOptions,
+ 'identity' | 'tokenManager' | 'externalCallerSecret'
+>;
+export type CheckUserPermission = GetLoggedInUserOptions &
+ Pick;
+
+/*
+ * User's entity must be present in the catalog.
+ */
+export const getLoggedInUser = async (
+ request: express.Request,
+ { identity, tokenManager, externalCallerSecret }: GetLoggedInUserOptions,
+): Promise => {
+ const identityResponse = await identity.getIdentity({ request });
+
+ // To properly set identity, see packages/backend/src/plugins/auth.ts or https://backstage.io/docs/auth/identity-resolver
+ if (identityResponse) {
+ // The auth token contains user's identity, most probably originated in the FE
+ // Example: user:default/guest
+ let author = identityResponse?.identity.userEntityRef;
+ if (author) {
+ if (author.startsWith('user:')) {
+ author = author.slice('user:'.length);
+ }
+ } else {
+ throw new AuthenticationError(
+ 'Missing valid authentication data or the user is not in the Catalog.',
+ );
+ }
+ return author;
+ }
+
+ const token = getBearerTokenFromAuthorizationHeader(
+ request.header('authorization'),
+ );
+ if (token) {
+ // backend service-to-service flow
+ await tokenManager.authenticate(token);
+ }
+
+ // External call - workaround
+ // Following shared-secret is a workaround till we make the creation of valid JWT tokens by external callers simple.
+ // In such case, the flow would be identical with the service-to-service.
+ // https://github.com/backstage/backstage/issues/18622
+ // https://github.com/backstage/backstage/issues/9374
+ if (externalCallerSecret) {
+ if (request.header('notifications-secret') === externalCallerSecret) {
+ return DefaultServiceUser;
+ }
+ throw new AuthenticationError('Provided shared secret does not match.');
+ }
+
+ // Since the shared secret has not been requested in the configuration, we ALLOW the request
+ return DefaultServiceUser;
+};
+
+export const checkPermission = async (
+ request: express.Request,
+ permissions: PermissionEvaluator,
+ permission: BasicPermission,
+ loggedInUser: string,
+) => {
+ const token = getBearerTokenFromAuthorizationHeader(
+ request.header('authorization'),
+ );
+ const decision = (
+ await permissions.authorize([{ permission }], {
+ token,
+ })
+ )[0];
+
+ if (decision.result === AuthorizeResult.DENY) {
+ throw new NotAllowedError(
+ `The user ${loggedInUser} is not authorized to ${permission.name}`,
+ );
+ }
+};
+
+/**
+ * Checks if the logged-in user has the required permission
+ * and returns the username.
+ */
+export const checkUserPermission = async (
+ request: express.Request,
+ options: CheckUserPermission,
+ requiredPermission: BasicPermission,
+): Promise => {
+ const loggedInUser = await getLoggedInUser(request, options);
+ await checkPermission(
+ request,
+ options.permissions,
+ requiredPermission,
+ loggedInUser,
+ );
+ return loggedInUser;
+};
diff --git a/plugins/notifications-backend/src/service/constants.ts b/plugins/notifications-backend/src/service/constants.ts
new file mode 100644
index 0000000000..bbdf8ce050
--- /dev/null
+++ b/plugins/notifications-backend/src/service/constants.ts
@@ -0,0 +1,6 @@
+export const DefaultServiceUser = 'default/guest';
+export const DefaultMessageScope = 'user';
+export const DefaultPageNumber = 1;
+export const DefaultPageSize = 20;
+export const DefaultOrderBy = 'created';
+export const DefaultOrderDirection = 'desc';
diff --git a/plugins/notifications-backend/src/service/db.test.ts b/plugins/notifications-backend/src/service/db.test.ts
new file mode 100644
index 0000000000..b324c48a6d
--- /dev/null
+++ b/plugins/notifications-backend/src/service/db.test.ts
@@ -0,0 +1,108 @@
+import { mockServices } from '@backstage/backend-test-utils';
+
+import { initDB } from './db';
+
+describe('db', () => {
+ it('init ok', async () => {
+ const dbClient = await initDB(
+ mockServices.rootConfig({
+ data: {
+ client: 'better-sqlite3',
+ connection: {
+ filename: ':memory:',
+ },
+ useNullAsDefault: true,
+ },
+ }),
+ );
+
+ await Promise.all([
+ dbClient.schema
+ .hasTable('messages')
+ .then(exists => expect(exists).toBeTruthy()),
+ dbClient.schema
+ .hasTable('users')
+ .then(exists => expect(exists).toBeTruthy()),
+ dbClient.schema
+ .hasTable('groups')
+ .then(exists => expect(exists).toBeTruthy()),
+ dbClient.schema
+ .hasTable('actions')
+ .then(exists => expect(exists).toBeTruthy()),
+ ]);
+
+ expect(dbClient.client.config.connection.database).toEqual(
+ 'backstage_plugin_notifications',
+ );
+
+ await dbClient.destroy();
+ });
+
+ it('set DB name and knex config', async () => {
+ const dbClient = await initDB(
+ mockServices.rootConfig({
+ data: {
+ client: 'better-sqlite3',
+ connection: {
+ filename: ':memory:',
+ database: 'testdb',
+ },
+ useNullAsDefault: true,
+ knexConfig: {
+ pool: {
+ min: 1,
+ max: 1,
+ },
+ },
+ },
+ }),
+ );
+
+ expect(dbClient.client.config.connection.database).toEqual('testdb');
+ expect(dbClient.client.config.pool.min).toEqual(1);
+
+ await dbClient.destroy();
+ });
+
+ it('set plugin config', async () => {
+ const dbClient = await initDB(
+ mockServices.rootConfig({
+ data: {
+ client: 'better-sqlite3',
+ connection: {
+ filename: ':memory:',
+ database: 'testdb',
+ },
+ useNullAsDefault: true,
+ knexConfig: {
+ pool: {
+ min: 1,
+ max: 1,
+ },
+ },
+ plugin: {
+ notifications: {
+ connection: {
+ filename: 'plugin',
+ database: 'plugin',
+ },
+ knexConfig: {
+ pool: {
+ min: 3,
+ max: 3,
+ },
+ },
+ },
+ },
+ },
+ }),
+ );
+
+ expect(dbClient.client.config.connection.database).toEqual('plugin');
+ expect(dbClient.client.config.connection.filename).toEqual('plugin');
+ expect(dbClient.client.config.pool.min).toEqual(3);
+ expect(dbClient.client.config.pool.max).toEqual(3);
+
+ await dbClient.destroy();
+ });
+});
diff --git a/plugins/notifications-backend/src/service/db.ts b/plugins/notifications-backend/src/service/db.ts
new file mode 100644
index 0000000000..bb69b3f3fe
--- /dev/null
+++ b/plugins/notifications-backend/src/service/db.ts
@@ -0,0 +1,112 @@
+import { Config } from '@backstage/config';
+
+import knex, { Knex } from 'knex';
+import merge from 'lodash/merge';
+
+// initDB
+// creates DB client and tables
+export async function initDB(dbConfig: Config): Promise> {
+ // create db client
+ const knexConfig = merge(
+ {},
+ { connection: { database: 'backstage_plugin_notifications' } },
+ dbConfig.getOptional('plugin.notifications'),
+ dbConfig.getOptional('plugin.notifications.knexConfig'),
+ dbConfig.get(),
+ dbConfig.getOptional('knexConfig'),
+ dbConfig.getOptional('plugin.notifications'),
+ dbConfig.getOptional('plugin.notifications.knexConfig'),
+ );
+ const dbClient = knex(knexConfig);
+
+ // create tables
+ if (!(await dbClient.schema.hasTable('messages'))) {
+ await dbClient.schema.createTable('messages', table => {
+ table.uuid('id').primary().notNullable().defaultTo(dbClient.fn.uuid());
+ table.string('origin').notNullable();
+ table.timestamp('created').defaultTo(dbClient.fn.now()).index();
+ table.string('title').notNullable();
+ table.text('message');
+ table.string('topic');
+ table.boolean('is_system').notNullable().index(); // is it a system message or a message for specific users and groups
+ });
+ }
+
+ if (!(await dbClient.schema.hasTable('users'))) {
+ await dbClient.schema.createTable('users', table => {
+ table.uuid('message_id').notNullable().index();
+ table.string('user').notNullable().index();
+ table.boolean('read').defaultTo('false');
+ table
+ .foreign('message_id')
+ .references('id')
+ .inTable('messages')
+ .onDelete('CASCADE');
+ table.primary(['message_id', 'user']);
+ });
+ }
+
+ if (!(await dbClient.schema.hasTable('groups'))) {
+ await dbClient.schema.createTable('groups', table => {
+ table.uuid('message_id').notNullable().index();
+ table.string('group').notNullable().index();
+ table
+ .foreign('message_id')
+ .references('id')
+ .inTable('messages')
+ .onDelete('CASCADE');
+ table.primary(['message_id', 'group']);
+ });
+ }
+
+ if (!(await dbClient.schema.hasTable('actions'))) {
+ await dbClient.schema.createTable('actions', table => {
+ table.uuid('id', { primaryKey: true }).defaultTo(dbClient.fn.uuid());
+ table.uuid('message_id').notNullable().index();
+ table
+ .foreign('message_id')
+ .references('id')
+ .inTable('messages')
+ .onDelete('CASCADE');
+ table.string('url').notNullable();
+ table.string('title').notNullable();
+ });
+ }
+
+ return dbClient;
+}
+
+export type MessagesInsert = {
+ origin: string;
+ title: string;
+ message?: string;
+ topic?: string;
+ is_system: boolean;
+};
+
+export type ActionsInsert = {
+ message_id: string;
+ title: string;
+ url: string;
+};
+
+export function dbValToBoolean(val: any): boolean {
+ if (!val) {
+ return false;
+ }
+
+ const valStr = val.toString();
+
+ switch (valStr) {
+ case 'true':
+ case 'TRUE':
+ case '1':
+ return true;
+ case 'false':
+ case 'FALSE':
+ case '0':
+ return false;
+ default:
+ throw new Error(`${valStr} is not a boolean value`);
+ }
+}
diff --git a/plugins/notifications-backend/src/service/handlers.test.ts b/plugins/notifications-backend/src/service/handlers.test.ts
new file mode 100644
index 0000000000..db103a61de
--- /dev/null
+++ b/plugins/notifications-backend/src/service/handlers.test.ts
@@ -0,0 +1,230 @@
+import { mockServices } from '@backstage/backend-test-utils';
+import { CatalogClient } from '@backstage/catalog-client';
+import { Entity } from '@backstage/catalog-model';
+
+import { Knex } from 'knex';
+
+import { initDB } from './db';
+import {
+ createNotification,
+ getNotifications,
+ getNotificationsCount,
+ setRead,
+} from './handlers';
+
+describe('handlers', () => {
+ //
+ // create global test vars
+ //
+ let dbClient: Knex;
+ let catalogClient: CatalogClient;
+ const catalogUser = 'test';
+ const catalogGroup = 'test';
+ const userEntity: Entity = {
+ apiVersion: 'v1',
+ kind: 'user',
+ metadata: {
+ name: catalogUser,
+ },
+ spec: {
+ memberOf: ['test'],
+ },
+ };
+ const groupEntity: Entity = {
+ apiVersion: 'v1',
+ kind: 'group',
+ metadata: {
+ name: catalogGroup,
+ },
+ };
+
+ //
+ // initialize global test vars
+ //
+ beforeAll(async () => {
+ dbClient = await initDB(
+ mockServices.rootConfig({
+ data: {
+ client: 'better-sqlite3',
+ connection: ':memory:',
+ useNullAsDefault: true,
+ },
+ }),
+ );
+
+ catalogClient = new CatalogClient({
+ discoveryApi: {
+ getBaseUrl: jest.fn(),
+ },
+ fetchApi: {
+ fetch: jest.fn(),
+ },
+ });
+
+ catalogClient.getEntityByRef = jest
+ .fn()
+ .mockImplementation(async (s: string): Promise => {
+ const args = s.split(':', 2);
+ const kind = args[0];
+ const entity = args[1];
+
+ switch (kind) {
+ case 'user':
+ if (entity === catalogUser) {
+ return userEntity;
+ }
+ break;
+ case 'group':
+ if (entity === catalogGroup) {
+ return groupEntity;
+ }
+ break;
+ default:
+ return undefined;
+ }
+
+ return undefined;
+ });
+ });
+
+ //
+ // tests
+ //
+ it('getNotifications - 0 notifications', async () => {
+ const notifications = await getNotifications(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ {},
+ undefined,
+ undefined,
+ {},
+ );
+ expect(Array.isArray(notifications)).toBeTruthy();
+ });
+
+ it('getNotifications - unknown user', async () => {
+ let hadError = false;
+
+ expect.assertions(1);
+ try {
+ await getNotifications(
+ dbClient,
+ 'unknown',
+ catalogClient,
+ {},
+ undefined,
+ undefined,
+ {},
+ );
+ } catch (e) {
+ if (e instanceof Error) {
+ hadError = true;
+ }
+ }
+
+ expect(hadError).toBeTruthy();
+ });
+
+ it('getNotificationsCount - 0 notifications', async () => {
+ const result = await getNotificationsCount(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ {},
+ );
+ expect(result.count).toEqual(0);
+ });
+
+ it('create and get - user notification', async () => {
+ const before = new Date();
+ before.setMilliseconds(0);
+
+ const resultCreate = await createNotification(dbClient, catalogClient, {
+ origin: 'test',
+ title: 'test',
+ targetUsers: [catalogUser],
+ });
+
+ const after = new Date();
+
+ expect(resultCreate.messageId).toBeTruthy();
+
+ const resultGet = await getNotifications(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ {},
+ undefined,
+ undefined,
+ {},
+ );
+
+ const createdDate = new Date(resultGet[0].created);
+
+ expect(resultGet).toHaveLength(1);
+ expect(createdDate >= before).toBeTruthy();
+ expect(createdDate < after).toBeTruthy();
+ expect(resultGet[0].isSystem).toBeFalsy();
+ });
+
+ it('create and get - system notification', async () => {
+ const before = new Date();
+ before.setMilliseconds(0);
+
+ const resultCreate = await createNotification(dbClient, catalogClient, {
+ origin: 'test',
+ title: 'test',
+ });
+
+ const after = new Date();
+
+ expect(resultCreate.messageId).toBeTruthy();
+
+ const resultGet = await getNotifications(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ { messageScope: 'system' },
+ undefined,
+ undefined,
+ {},
+ );
+
+ const createdDate = new Date(resultGet[0].created);
+
+ expect(resultGet).toHaveLength(1);
+ expect(createdDate >= before).toBeTruthy();
+ expect(createdDate < after).toBeTruthy();
+ expect(resultGet[0].isSystem).toBeTruthy();
+ });
+
+ it('mark as read', async () => {
+ const resultGet = await getNotifications(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ { messageScope: 'all' },
+ undefined,
+ undefined,
+ {},
+ );
+
+ const setReadPromises: Promise[] = resultGet.map(notification =>
+ setRead(dbClient, catalogUser, notification.id, true),
+ );
+ await Promise.all(setReadPromises);
+
+ const resultGetRead = await getNotifications(
+ dbClient,
+ catalogUser,
+ catalogClient,
+ { messageScope: 'all', read: true },
+ undefined,
+ undefined,
+ {},
+ );
+
+ expect(resultGetRead).toHaveLength(resultGet.length);
+ });
+});
diff --git a/plugins/notifications-backend/src/service/handlers.ts b/plugins/notifications-backend/src/service/handlers.ts
new file mode 100644
index 0000000000..50ea662df9
--- /dev/null
+++ b/plugins/notifications-backend/src/service/handlers.ts
@@ -0,0 +1,410 @@
+/* eslint-disable func-names */
+import { CatalogClient } from '@backstage/catalog-client';
+
+import { Knex } from 'knex';
+
+import { Components, Paths } from '../openapi';
+import {
+ DefaultMessageScope,
+ DefaultOrderBy,
+ DefaultOrderDirection,
+ DefaultPageNumber,
+ DefaultPageSize,
+} from './constants';
+import { ActionsInsert, dbValToBoolean, MessagesInsert } from './db';
+import {
+ MessageScopes,
+ NotificationsFilterRequest,
+ NotificationsOrderByDirections,
+ NotificationsOrderByFields,
+ NotificationsSortingRequest,
+} from './types';
+
+// createNotification
+// returns string id of created notification
+export async function createNotification(
+ dbClient: Knex,
+ catalogClient: CatalogClient,
+ req: Paths.CreateNotification.RequestBody,
+): Promise {
+ let isUser = false;
+
+ // validate users
+ if (Array.isArray(req.targetGroups) && req.targetGroups.length > 0) {
+ isUser = true;
+ const promises = req.targetGroups.map(group => {
+ return catalogClient.getEntityByRef(`group:${group}`).then(groupRef => {
+ if (!groupRef) {
+ throw new Error(`group '${group}' does not exist`);
+ }
+ });
+ });
+
+ await Promise.all(promises);
+ }
+
+ // validate groups
+ if (Array.isArray(req.targetUsers) && req.targetUsers.length > 0) {
+ isUser = true;
+ const promises = req.targetUsers.map(user => {
+ return catalogClient.getEntityByRef(`user:${user}`).then(userRef => {
+ if (!userRef) {
+ throw new Error(`user '${user}' does not exist`);
+ }
+ });
+ });
+
+ await Promise.all(promises);
+ }
+
+ // validate actions
+ if (Array.isArray(req.actions)) {
+ req.actions.forEach(action => {
+ if (!action.title || !action.url) {
+ throw new Error('Both action title and url are mandatory.');
+ }
+ });
+ }
+
+ const row: MessagesInsert = {
+ origin: req.origin,
+ title: req.title,
+ message: req.message,
+ topic: req.topic,
+ is_system: !isUser,
+ };
+
+ let messageId: string;
+
+ const ret = dbClient.transaction(trx => {
+ return trx
+ .insert(row)
+ .returning('id')
+ .into('messages')
+ .then(ids => {
+ messageId = ids[0].id;
+ if (Array.isArray(req.targetUsers)) {
+ const userInserts = req.targetUsers.map(user => {
+ return {
+ message_id: messageId,
+ user: user,
+ };
+ });
+ return trx('users').insert(userInserts);
+ }
+
+ return undefined;
+ })
+ .then(() => {
+ if (Array.isArray(req.targetGroups)) {
+ const groupInserts = req.targetGroups.map(group => {
+ return {
+ message_id: messageId,
+ group: group,
+ };
+ });
+ return trx('groups').insert(groupInserts);
+ }
+
+ return undefined;
+ })
+ .then(() => {
+ if (Array.isArray(req.actions)) {
+ const actionInserts: ActionsInsert[] = req.actions.map(action => {
+ return {
+ url: action.url,
+ title: action.title,
+ message_id: messageId,
+ };
+ });
+
+ return trx('actions').insert(actionInserts);
+ }
+
+ return undefined;
+ })
+ .then(() => {
+ return { messageId: messageId };
+ });
+ });
+
+ return ret;
+}
+
+// getNotifications
+export async function getNotifications(
+ dbClient: Knex,
+ loggedInUser: string,
+ catalogClient: CatalogClient,
+ filter: NotificationsFilterRequest,
+ pageSize: number = DefaultPageSize,
+ pageNumber: number = DefaultPageNumber,
+ sorting: NotificationsSortingRequest,
+): Promise {
+ if (
+ pageSize < 0 ||
+ pageNumber < 0 ||
+ (pageSize === 0 && pageNumber > 0) ||
+ (pageSize > 0 && pageNumber === 0)
+ ) {
+ throw new Error(
+ 'pageSize and pageNumber must both be either 0 or greater than 0',
+ );
+ }
+
+ if (!filter.messageScope) {
+ filter.messageScope = DefaultMessageScope;
+ } else if (!MessageScopes.includes(filter.messageScope)) {
+ throw new Error(
+ `messageScope parameter must be one of ${MessageScopes.join()}`,
+ );
+ }
+
+ const orderBy = sorting.orderBy || DefaultOrderBy;
+ const orderByDirec = sorting.OrderByDirec || DefaultOrderDirection;
+ if (
+ !NotificationsOrderByFields.includes(orderBy) ||
+ !NotificationsOrderByDirections.includes(orderByDirec)
+ ) {
+ throw new Error(
+ `The orderBy parameter can be one of ${NotificationsOrderByFields.join(
+ ',',
+ )}. The orderByDirec can be either ${NotificationsOrderByDirections.join(
+ ' or ',
+ )}.`,
+ );
+ }
+
+ const userGroups = await getUserGroups(catalogClient, loggedInUser);
+
+ const query = createQuery(dbClient, loggedInUser, filter, userGroups);
+
+ query.orderBy(orderBy, orderByDirec);
+
+ if (pageNumber > 0) {
+ query.limit(pageSize).offset((pageNumber - 1) * pageSize);
+ }
+
+ const notifications = await query.select('*').then(messages =>
+ messages.map((message: any) => {
+ const notification: Components.Schemas.Notification = {
+ id: message.id,
+ created: message.created,
+ isSystem: dbValToBoolean(message.is_system),
+ readByUser: dbValToBoolean(message.read),
+ origin: message.origin,
+ title: message.title,
+ message: message.message,
+ topic: message.topic,
+ actions: [],
+ };
+ return notification;
+ }),
+ );
+
+ const actionsMessageIds = notifications.map(notification => notification.id);
+
+ const actionsQuery = dbClient('actions')
+ .select('*')
+ .whereIn('message_id', actionsMessageIds);
+ await actionsQuery.then(actions => {
+ actions.forEach(action => {
+ const notification = notifications.find(n => n.id === action.message_id);
+ if (notification) {
+ notification.actions.push({
+ id: action.id,
+ url: action.url,
+ title: action.title,
+ });
+ }
+ });
+ });
+
+ return notifications;
+}
+
+export async function getNotificationsCount(
+ dbClient: Knex,
+ loggedInUser: string,
+ catalogClient: CatalogClient,
+ filter: NotificationsFilterRequest,
+): Promise {
+ if (!filter.messageScope) {
+ filter.messageScope = DefaultMessageScope;
+ }
+
+ const userGroups = await getUserGroups(catalogClient, loggedInUser);
+
+ const query = createQuery(dbClient, loggedInUser, filter, userGroups);
+
+ const ret = query.count('* as CNT').then(count => {
+ const msgcount = Number.parseInt(count[0].CNT.toString(), 10);
+ const result: Paths.GetNotificationsCount.Responses.$200 = {
+ count: msgcount,
+ };
+ return result;
+ });
+
+ return ret;
+}
+
+export async function setRead(
+ dbClient: Knex,
+ loggedInUser: string,
+ messageId: string,
+ read: boolean,
+) {
+ let isUpdate = false;
+ let isInsert = false;
+
+ // verify that message id exists
+ await dbClient('messages')
+ .where('id', messageId)
+ .count('* as CNT')
+ .then(count => {
+ const msgcount = count[0].CNT.toString();
+
+ if (msgcount !== '1') {
+ throw new Error(`message ID ${messageId} does not exist`);
+ }
+ });
+
+ // check user row exists
+ await dbClient('users')
+ .where('message_id', messageId)
+ .andWhere('user', loggedInUser)
+ .select('*')
+ .then(rows => {
+ if (!Array.isArray(rows)) {
+ return;
+ }
+ if (rows.length === 1) {
+ isUpdate = true;
+ } else if (rows.length === 0) {
+ isInsert = true;
+ }
+ });
+
+ // insert/update user row
+ if (isInsert) {
+ await dbClient('users').insert({
+ message_id: messageId,
+ user: loggedInUser,
+ read: read,
+ });
+ }
+
+ if (isUpdate) {
+ await dbClient('users')
+ .where('message_id', messageId)
+ .andWhere('user', loggedInUser)
+ .update('read', read);
+ }
+}
+
+function createQuery(
+ dbClient: Knex,
+ loggedInUser: string,
+ filter: NotificationsFilterRequest,
+ userGroups: string[],
+) {
+ // join messages table with users table to get message status. E.g read/unread
+ const query = dbClient('messages');
+
+ query.leftJoin(
+ function () {
+ this.select('*')
+ .from('users')
+ .where('users.user', loggedInUser)
+ .as('users');
+ },
+ function () {
+ this.on('messages.id', '=', 'users.message_id');
+ },
+ );
+
+ // select messages matching filter
+
+ // select either system messages or messages intended for the user
+ query.where(function () {
+ if (filter.messageScope !== 'user') {
+ this.where('is_system', true);
+ }
+
+ if (filter.messageScope !== 'system') {
+ this.orWhere(function () {
+ this.where('is_system', false).andWhere(function () {
+ this.whereIn('id', function () {
+ this.select('message_id').from('users').where('user', loggedInUser);
+ });
+
+ if (Array.isArray(userGroups) && userGroups.length > 0) {
+ this.orWhereIn('id', function () {
+ this.select('message_id')
+ .from('groups')
+ .whereIn('group', userGroups);
+ });
+ }
+ });
+ });
+ }
+ });
+
+ // filter by text
+ if (filter.containsText) {
+ query.andWhere(function () {
+ this.whereILike('title', `%${filter.containsText}%`).orWhereILike(
+ 'message',
+ `%${filter.containsText}%`,
+ );
+ });
+ }
+
+ // filter by time
+ if (filter.createdAfter) {
+ query.andWhere('created', '>', filter.createdAfter);
+ }
+
+ // filter by read/unread
+ switch (filter.read) {
+ case true:
+ query.andWhere('read', true);
+ break;
+ case false:
+ query.andWhere(function () {
+ this.where('read', false).orWhereNull('read');
+ });
+ break;
+ case undefined:
+ break;
+ default:
+ throw new Error(
+ 'value of parameter "read" must be either "false" or "true"',
+ );
+ }
+
+ return query;
+}
+
+function getUserGroups(
+ catalogClient: CatalogClient,
+ user: string,
+): Promise {
+ return catalogClient.getEntityByRef(`user:${user}`).then(userRef => {
+ if (!userRef) {
+ throw new Error(`user '${user}' does not exist`);
+ }
+
+ if (userRef.spec && Array.isArray(userRef.spec.memberOf)) {
+ return userRef.spec.memberOf.map(value => {
+ if (value) {
+ return value.toString();
+ }
+ return '';
+ });
+ }
+
+ return [];
+ });
+}
+/* eslint-enable func-names */
diff --git a/plugins/notifications-backend/src/service/permissions.ts b/plugins/notifications-backend/src/service/permissions.ts
new file mode 100644
index 0000000000..568cc972cd
--- /dev/null
+++ b/plugins/notifications-backend/src/service/permissions.ts
@@ -0,0 +1,22 @@
+import { createPermission } from '@backstage/plugin-permission-common';
+
+export const notificationsCreatePermission = createPermission({
+ name: 'notifications.create',
+ attributes: { action: 'create' },
+});
+
+export const notificationsReadPermission = createPermission({
+ name: 'notifications.list',
+ attributes: { action: 'read' },
+});
+
+export const notificationsSetReadPermission = createPermission({
+ name: 'notifications.update.read',
+ attributes: { action: 'update' },
+});
+
+export const notificationsPermissions = [
+ notificationsCreatePermission,
+ notificationsReadPermission,
+ notificationsSetReadPermission,
+];
diff --git a/plugins/notifications-backend/src/service/router.ts b/plugins/notifications-backend/src/service/router.ts
new file mode 100644
index 0000000000..677067ce6c
--- /dev/null
+++ b/plugins/notifications-backend/src/service/router.ts
@@ -0,0 +1,154 @@
+import { fullFormats } from 'ajv-formats/dist/formats';
+import express from 'express';
+import Router from 'express-promise-router';
+import { Context, OpenAPIBackend, Request } from 'openapi-backend';
+
+import { Paths } from '../openapi';
+import { checkUserPermission } from './auth';
+import { initDB } from './db';
+import {
+ createNotification,
+ getNotifications,
+ getNotificationsCount,
+ setRead,
+} from './handlers';
+import {
+ notificationsCreatePermission,
+ notificationsReadPermission,
+ notificationsSetReadPermission,
+} from './permissions';
+import { RouterOptions } from './types';
+
+export async function createRouter(
+ options: RouterOptions,
+): Promise {
+ const { logger, dbConfig, catalogClient } = options;
+
+ // create DB client and tables
+ if (!dbConfig) {
+ logger.error('Missing dbConfig');
+ throw new Error('Missing database config');
+ }
+
+ const dbClient = await initDB(dbConfig);
+
+ // create openapi requests handler
+ const api = new OpenAPIBackend({
+ ajvOpts: {
+ formats: fullFormats, // open issue: https://github.com/openapistack/openapi-backend/issues/280
+ },
+ validate: true,
+ definition: '../../plugins/notifications-backend/src/openapi.yaml',
+ });
+
+ await api.init();
+
+ api.register(
+ 'createNotification',
+ (
+ c: Context,
+ req: express.Request,
+ res: express.Response,
+ ) =>
+ checkUserPermission(req, options, notificationsCreatePermission).then(
+ () =>
+ createNotification(
+ dbClient,
+ catalogClient,
+ c.request.requestBody,
+ ).then(result => res.json(result)),
+ ),
+ );
+
+ api.register(
+ 'getNotifications',
+ (c, req: express.Request, res: express.Response) =>
+ checkUserPermission(req, options, notificationsReadPermission).then(
+ loggedInUser => {
+ const q: Paths.GetNotifications.QueryParameters = Object.assign(
+ {},
+ c.request.query,
+ );
+ // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571
+ q.pageNumber = stringToNumber(q.pageNumber);
+ q.pageSize = stringToNumber(q.pageSize);
+ q.read = stringToBool(q.read);
+
+ return getNotifications(
+ dbClient,
+ loggedInUser,
+ catalogClient,
+ q,
+ q.pageSize,
+ q.pageNumber,
+ q,
+ ).then(notifications => res.json(notifications));
+ },
+ ),
+ );
+
+ api.register(
+ 'getNotificationsCount',
+ (c, req: express.Request, res: express.Response) =>
+ checkUserPermission(req, options, notificationsReadPermission).then(
+ loggedInUser => {
+ const q: Paths.GetNotificationsCount.QueryParameters = Object.assign(
+ {},
+ c.request.query,
+ );
+
+ // we need to convert strings to real types due to open PR https://github.com/openapistack/openapi-backend/pull/571
+ q.read = q.read = stringToBool(q.read);
+
+ return getNotificationsCount(
+ dbClient,
+ loggedInUser,
+ catalogClient,
+ q,
+ ).then(result => res.json(result));
+ },
+ ),
+ );
+
+ api.register('setRead', (c, req: express.Request, res: express.Response) =>
+ checkUserPermission(req, options, notificationsSetReadPermission).then(
+ loggedInUser => {
+ const messageId = c.request.query.messageId.toString();
+ const read = c.request.query.read.toString() === 'true';
+
+ return setRead(dbClient, loggedInUser, messageId, read).then(result =>
+ res.json(result),
+ );
+ },
+ ),
+ );
+
+ // create router
+ const router = Router();
+ router.use(express.json());
+ router.use((req, res, next) => {
+ if (!next) {
+ throw new Error('next is undefined');
+ }
+ const validation = api.validateRequest(req as Request);
+ if (!validation.valid) {
+ throw validation.errors;
+ }
+
+ api.handleRequest(req as Request, req, res).catch(next);
+ });
+
+ return router;
+}
+
+function stringToNumber(s: number | undefined): number | undefined {
+ return s ? Number.parseInt(s.toString(), 10) : undefined;
+}
+
+function stringToBool(s: boolean | undefined): boolean | undefined {
+ if (!s) {
+ return undefined;
+ }
+
+ return s.toString() === 'true' ? true : false;
+}
diff --git a/plugins/notifications-backend/src/service/standaloneServer.ts b/plugins/notifications-backend/src/service/standaloneServer.ts
new file mode 100644
index 0000000000..2f10918b46
--- /dev/null
+++ b/plugins/notifications-backend/src/service/standaloneServer.ts
@@ -0,0 +1,41 @@
+import { createServiceBuilder } from '@backstage/backend-common';
+
+import { Router } from 'express';
+import { Logger } from 'winston';
+
+import { Server } from 'http';
+
+// import { createRouter } from './router';
+
+export interface ServerOptions {
+ port: number;
+ enableCors: boolean;
+ logger: Logger;
+}
+
+export async function startStandaloneServer(
+ options: ServerOptions,
+): Promise {
+ const logger = options.logger.child({ service: 'notifications-backend' });
+
+ logger.debug('Starting application server...');
+ const router = Router();
+ /* const router = await createRouter({
+ logger,
+ // TODO: get dbClient in standalone mode
+ }); */
+
+ let service = createServiceBuilder(module)
+ .setPort(options.port)
+ .addRouter('/notifications', router);
+ if (options.enableCors) {
+ service = service.enableCors({ origin: 'http://localhost:3000' });
+ }
+
+ return await service.start().catch(err => {
+ logger.error(err);
+ process.exit(1);
+ });
+}
+
+module.hot?.accept();
diff --git a/plugins/notifications-backend/src/service/types.ts b/plugins/notifications-backend/src/service/types.ts
new file mode 100644
index 0000000000..c5049e025d
--- /dev/null
+++ b/plugins/notifications-backend/src/service/types.ts
@@ -0,0 +1,69 @@
+import { TokenManager } from '@backstage/backend-common';
+import { CatalogClient } from '@backstage/catalog-client';
+import { Config } from '@backstage/config';
+import { IdentityApi } from '@backstage/plugin-auth-node';
+import { PermissionEvaluator } from '@backstage/plugin-permission-common';
+
+import { Logger } from 'winston';
+
+export interface RouterOptions {
+ logger: Logger;
+ dbConfig: Config;
+ catalogClient: CatalogClient;
+ identity: IdentityApi;
+ permissions: PermissionEvaluator;
+ tokenManager: TokenManager;
+
+ // Workaround - see auth.ts
+ externalCallerSecret?: string;
+}
+
+export type NotificationsFilterRequest = {
+ /**
+ * Filter notifications whose either title or message contains the provided string.
+ */
+ containsText?: string;
+
+ /**
+ * Only notifications created after this timestamp will be included.
+ */
+ createdAfter?: string;
+
+ /**
+ * See MessageScopes
+ * Default: DefaultMessageScope
+ */
+ messageScope?: string;
+
+ /**
+ * 'false' for user's unread messages, 'true' for read ones.
+ * If undefined, then both marks.
+ */
+ read?: boolean;
+};
+
+/**
+ * How the result set is sorted.
+ */
+export type NotificationsSortingRequest = {
+ orderBy?: string;
+ OrderByDirec?: string;
+};
+
+export const NotificationsOrderByFields: string[] = [
+ 'title',
+ 'message',
+ 'created',
+ 'topic',
+ 'origin',
+];
+
+export const NotificationsOrderByDirections: string[] = ['asc', 'desc'];
+
+/**
+ * MessageScopes
+ * When 'user' is requested, then messages whose targetUsers or targetGroups are matching the "user".
+ * When "system" is requested, only system-wide messages will be filtered (read: those without targetUsers or targetGroups provided).
+ * When 'all' is requests then fetch both system and user messages
+ */
+export const MessageScopes = ['all', 'user', 'system'];
diff --git a/plugins/notifications-backend/src/setupTests.ts b/plugins/notifications-backend/src/setupTests.ts
new file mode 100644
index 0000000000..cb0ff5c3b5
--- /dev/null
+++ b/plugins/notifications-backend/src/setupTests.ts
@@ -0,0 +1 @@
+export {};
diff --git a/plugins/notifications-backend/tsconfig.json b/plugins/notifications-backend/tsconfig.json
new file mode 100644
index 0000000000..5a52294bd8
--- /dev/null
+++ b/plugins/notifications-backend/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "@backstage/cli/config/tsconfig.json",
+ "include": ["src", "dev", "migrations"],
+ "exclude": ["node_modules"],
+ "compilerOptions": {
+ "outDir": "../../dist-types/plugins/notifications-backend",
+ "rootDir": "."
+ }
+}
diff --git a/plugins/notifications-backend/turbo.json b/plugins/notifications-backend/turbo.json
new file mode 100644
index 0000000000..1969dd020e
--- /dev/null
+++ b/plugins/notifications-backend/turbo.json
@@ -0,0 +1,9 @@
+{
+ "extends": ["//"],
+ "pipeline": {
+ "tsc": {
+ "outputs": ["../../dist-types/plugins/notifications-backend/**"],
+ "dependsOn": ["^tsc"]
+ }
+ }
+}
diff --git a/plugins/notifications-backend/users.yaml b/plugins/notifications-backend/users.yaml
new file mode 100644
index 0000000000..60fb810885
--- /dev/null
+++ b/plugins/notifications-backend/users.yaml
@@ -0,0 +1,60 @@
+apiVersion: backstage.io/v1alpha1
+kind: User
+metadata:
+ name: guest
+spec:
+ profile:
+ displayName: Guest User
+ memberOf: []
+---
+apiVersion: backstage.io/v1alpha1
+kind: User
+metadata:
+ name: jdoe
+spec:
+ profile:
+ displayName: Jenny Doe
+ email: jenny-doe@example.com
+ picture: https://example.com/staff/jenny-with-party-hat.jpeg
+ memberOf: [jdoe, jdoe-2]
+---
+apiVersion: backstage.io/v1alpha1
+kind: User
+metadata:
+ name: jdoe-2
+spec:
+ profile:
+ displayName: Jenny Doe
+ email: jenny-doe@example.com
+ picture: https://example.com/staff/jenny-with-party-hat.jpeg
+ memberOf: [jdoe]
+---
+apiVersion: backstage.io/v1alpha1
+kind: Group
+metadata:
+ name: jdoe
+ description: The infra business unit
+spec:
+ type: business-unit
+ profile:
+ displayName: jdoe
+ email: infrastructure@example.com
+ picture: https://example.com/groups/bu-infrastructure.jpeg
+ parent: ops
+ children: [backstage, other]
+ members: [jdoe]
+---
+apiVersion: backstage.io/v1alpha1
+kind: Group
+metadata:
+ name: jdoe-2
+ description: The infra business unit
+spec:
+ type: business-unit
+ profile:
+ displayName: jdoe
+ email: infrastructure@example.com
+ picture: https://example.com/groups/bu-infrastructure.jpeg
+ parent: ops
+ children: [backstage, other]
+ members: [jdoe]
diff --git a/plugins/notifications-frontend/.eslintrc.js b/plugins/notifications-frontend/.eslintrc.js
new file mode 100644
index 0000000000..e2a53a6ad2
--- /dev/null
+++ b/plugins/notifications-frontend/.eslintrc.js
@@ -0,0 +1 @@
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
diff --git a/plugins/notifications-frontend/README.md b/plugins/notifications-frontend/README.md
new file mode 100644
index 0000000000..2c37d0be7a
--- /dev/null
+++ b/plugins/notifications-frontend/README.md
@@ -0,0 +1,72 @@
+# Notifications
+
+This Backstage front-end plugin provides:
+
+- the Notifications page listing notifications from the logged-in user's perspective
+- the NotificationsApi for accessing the notifications backend from front-end plugins
+- an active item to the main left side menu to both notify the user about new messages and provide navigation to the Notifications page
+- an alert about new system notifications
+
+## Getting started
+
+### Prerequisities
+
+Have `@backstage/plugin-notifications-backend` installed and running.
+
+### Add NPM dependency
+
+```
+cd packages/app
+yarn add @backstage/plugin-notifications-frontend
+```
+
+### Add left-side menu item
+
+In the `packages/app/src/components/Root/Root.tsx`:
+
+```
+import { NotificationsSidebarItem } from '@backstage/plugin-notifications-frontend';
+
+...
+export const Root = ({ children }: PropsWithChildren<{}>) => (
+ ...
+ {/* New code: */}
+
+
+
+ {/* Existing code for reference: */}
+
+
+
+
+ {
+ ...
+ {/* New code: */}
+ } />
+```
+
+## How to use the NotificationApi
+
+```
+import { notificationsApiRef, Notification } from '@backstage/plugin-notifications-frontend';
+
+...
+
+const notificationsApi = useApi(notificationsApiRef);
+const notifications: Notification[] = await notificationsApi.getNotifications(params);
+
+```
+
+See `src/api/notificationsApi.ts` for more details.
diff --git a/plugins/notifications-frontend/dev/index.tsx b/plugins/notifications-frontend/dev/index.tsx
new file mode 100644
index 0000000000..d5e3f1e208
--- /dev/null
+++ b/plugins/notifications-frontend/dev/index.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+
+import { createDevApp } from '@backstage/dev-utils';
+
+import { NotificationsPage, notificationsPlugin } from '../src/plugin';
+
+createDevApp()
+ .registerPlugin(notificationsPlugin)
+ .addPage({
+ element: ,
+ title: 'Root Page',
+ path: '/notifications',
+ })
+ .render();
diff --git a/plugins/notifications-frontend/openapitools.json b/plugins/notifications-frontend/openapitools.json
new file mode 100644
index 0000000000..15fef607c4
--- /dev/null
+++ b/plugins/notifications-frontend/openapitools.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
+ "spaces": 2,
+ "generator-cli": {
+ "version": "7.1.0"
+ }
+}
diff --git a/plugins/notifications-frontend/package.json b/plugins/notifications-frontend/package.json
new file mode 100644
index 0000000000..befd2c26e9
--- /dev/null
+++ b/plugins/notifications-frontend/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "@backstage/plugin-notifications-frontend",
+ "description": "Frontend part of the notifications providing the Notifications API, Notifications page, left-side menu item and other REACT components.",
+ "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"
+ },
+ "scripts": {
+ "start": "backstage-cli package start",
+ "build": "backstage-cli package build",
+ "lint": "backstage-cli package lint",
+ "test": "backstage-cli package test --passWithNoTests --coverage",
+ "clean": "backstage-cli package clean",
+ "prepack": "backstage-cli package prepack",
+ "postpack": "backstage-cli package postpack",
+ "tsc": "tsc",
+ "openapi:generate": "openapi-generator-cli generate -i ../notifications-backend/src/openapi.yaml --enable-post-process-file -g typescript-fetch -o ./src/openapi && find ./src/openapi -name '*.ts' -exec sed -i '1i // @ts-nocheck' {} \\;"
+ },
+ "dependencies": {
+ "@backstage/core-components": "^0.13.6",
+ "@backstage/core-plugin-api": "^1.7.0",
+ "@backstage/theme": "^0.4.3",
+ "@material-table/core": "^3.1.0",
+ "@material-ui/core": "^4.9.13",
+ "@material-ui/icons": "^4.11.3",
+ "@material-ui/lab": "^4.0.0-alpha.45",
+ "@mui/material": "^5.12.2",
+ "lodash": "^4.17.21",
+ "react-use": "^17.4.0"
+ },
+ "peerDependencies": {
+ "react": "^16.13.1 || ^17.0.0",
+ "react-router-dom": "^6.11.2"
+ },
+ "devDependencies": {
+ "@backstage/cli": "0.23.0",
+ "@backstage/core-app-api": "1.11.0",
+ "@backstage/dev-utils": "1.0.22",
+ "@backstage/test-utils": "^1.4.4",
+ "@openapitools/openapi-generator-cli": "^2.7.0",
+ "@testing-library/jest-dom": "^5.17.0",
+ "@testing-library/react": "^12.1.5",
+ "@testing-library/user-event": "^14.5.1",
+ "@types/node": "*",
+ "msw": "1.3.2"
+ },
+ "files": [
+ "dist"
+ ],
+ "repository": "github:janus-idp/backstage-plugins",
+ "keywords": [
+ "backstage",
+ "plugin"
+ ],
+ "homepage": "https://janus-idp.io/",
+ "bugs": "https://github.com/janus-idp/backstage-plugins/issues"
+}
diff --git a/plugins/notifications-frontend/src/api/NotificationsApiImpl.ts b/plugins/notifications-frontend/src/api/NotificationsApiImpl.ts
new file mode 100644
index 0000000000..15e9560ed5
--- /dev/null
+++ b/plugins/notifications-frontend/src/api/NotificationsApiImpl.ts
@@ -0,0 +1,49 @@
+import { FetchApi } from '@backstage/core-plugin-api';
+
+import {
+ Configuration,
+ CreateBody,
+ GetNotificationsRequest,
+ Notification,
+ NotificationsApi as NotificationsOpenApi,
+} from '../openapi';
+import {
+ NotificationMarkAsRead,
+ NotificationsApi,
+ NotificationsCountQuery,
+} from './notificationsApi';
+
+export type NotificationsApiOptions = {
+ fetchApi: FetchApi;
+};
+
+export class NotificationsApiImpl implements NotificationsApi {
+ private readonly backendRestApi: NotificationsOpenApi;
+
+ constructor(options: NotificationsApiOptions) {
+ const configuration = new Configuration({
+ fetchApi: options.fetchApi.fetch,
+ });
+ this.backendRestApi = new NotificationsOpenApi(configuration);
+ }
+
+ async createNotification(notification: CreateBody): Promise {
+ const data = await this.backendRestApi.createNotification({
+ createBody: notification,
+ });
+ return data.messageId;
+ }
+
+ getNotifications(query: GetNotificationsRequest): Promise {
+ return this.backendRestApi.getNotifications(query);
+ }
+
+ async getNotificationsCount(query: NotificationsCountQuery): Promise {
+ const data = await this.backendRestApi.getNotificationsCount(query);
+ return data.count;
+ }
+
+ async markAsRead(params: NotificationMarkAsRead): Promise {
+ return this.backendRestApi.setRead(params);
+ }
+}
diff --git a/plugins/notifications-frontend/src/api/index.ts b/plugins/notifications-frontend/src/api/index.ts
new file mode 100644
index 0000000000..b260d8826b
--- /dev/null
+++ b/plugins/notifications-frontend/src/api/index.ts
@@ -0,0 +1,2 @@
+export * from './notificationsApi';
+export * from './NotificationsApiImpl';
diff --git a/plugins/notifications-frontend/src/api/notificationsApi.ts b/plugins/notifications-frontend/src/api/notificationsApi.ts
new file mode 100644
index 0000000000..3d4e5c2ba6
--- /dev/null
+++ b/plugins/notifications-frontend/src/api/notificationsApi.ts
@@ -0,0 +1,37 @@
+import { createApiRef } from '@backstage/core-plugin-api';
+
+import {
+ CreateBody,
+ GetNotificationsCountRequest,
+ GetNotificationsRequest,
+ Notification,
+ SetReadRequest,
+} from '../openapi';
+
+export type NotificationsCreateRequest = CreateBody;
+
+export type NotificationsQuery = Omit;
+
+export type NotificationsCountQuery = Omit<
+ GetNotificationsCountRequest,
+ 'user'
+>;
+
+export type NotificationMarkAsRead = Omit;
+export interface NotificationsApi {
+ /** Create a notification. Returns its new ID. */
+ createNotification(notification: NotificationsCreateRequest): Promise;
+
+ /** Read a list of notifications based on filter parameters. */
+ getNotifications(query?: NotificationsQuery): Promise;
+
+ /** Returns the count of notifications for the user. */
+ getNotificationsCount(query?: NotificationsCountQuery): Promise;
+
+ /** Marks the notification as read by the user. */
+ markAsRead(params: NotificationMarkAsRead): Promise;
+}
+
+export const notificationsApiRef = createApiRef({
+ id: 'plugin.notifications',
+});
diff --git a/plugins/notifications-frontend/src/components/NotificationsPage/NotificationsPage.tsx b/plugins/notifications-frontend/src/components/NotificationsPage/NotificationsPage.tsx
new file mode 100644
index 0000000000..a699844426
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsPage/NotificationsPage.tsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import { useParams } from 'react-router-dom';
+
+import { Page, RoutedTabs } from '@backstage/core-components';
+
+import { PersonalNotifications } from '../PersonalNotifications';
+import { SendNotification } from '../SendNotification';
+import { SystemNotifications } from '../SystemNotifications';
+
+export const NotificationsPage = () => {
+ const params = useParams();
+ const isSend = params['*'] === 'send';
+
+ const routes = [
+ {
+ path: 'personal',
+ title: 'Personal',
+ children: ,
+ },
+ {
+ path: 'updates',
+ title: 'Updates',
+ children: ,
+ },
+ ];
+
+ if (isSend) {
+ // This tab is not displayed by default, only when directly navigated by the URL.
+ // Meant for demonstration and debug purposes, since the notifications are
+ // expected to be send by 3rd party FE/BE plugins or external systems.
+ routes.push({
+ path: 'send',
+ title: 'Send',
+ children: ,
+ });
+ }
+
+ return (
+
+
+
+ );
+};
diff --git a/plugins/notifications-frontend/src/components/NotificationsPage/index.ts b/plugins/notifications-frontend/src/components/NotificationsPage/index.ts
new file mode 100644
index 0000000000..763b7aa964
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsPage/index.ts
@@ -0,0 +1 @@
+export * from './NotificationsPage';
diff --git a/plugins/notifications-frontend/src/components/NotificationsSidebarItem.tsx b/plugins/notifications-frontend/src/components/NotificationsSidebarItem.tsx
new file mode 100644
index 0000000000..1c0fc5d38b
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsSidebarItem.tsx
@@ -0,0 +1,125 @@
+import React from 'react';
+
+import { SidebarItem } from '@backstage/core-components';
+import { useApi } from '@backstage/core-plugin-api';
+
+import {
+ IconButton,
+ Link,
+ makeStyles,
+ Snackbar,
+ Tooltip,
+} from '@material-ui/core';
+import CloseIcon from '@material-ui/icons/Close';
+import NotificationsIcon from '@material-ui/icons/Notifications';
+import NotificationsOffIcon from '@material-ui/icons/NotificationsOff';
+
+import { notificationsApiRef } from '../api';
+import { NOTIFICATIONS_ROUTE } from '../constants';
+import { Notification } from '../openapi';
+import { usePollingEffect } from './usePollingEffect';
+
+const NotificationsErrorIcon = () => (
+
+
+
+);
+
+export type NotificationsSidebarItemProps = {
+ /**
+ * Number of milliseconds between polling the notifications backend.
+ * If negative or zero, the poling is not started.
+ * Example: 5000
+ */
+ pollingInterval?: number;
+};
+
+const useStyles = makeStyles(_theme => ({
+ systemAlertAction: {
+ marginRight: '1rem',
+ },
+}));
+
+export const NotificationsSidebarItem = ({
+ pollingInterval,
+}: NotificationsSidebarItemProps) => {
+ const styles = useStyles();
+ const notificationsApi = useApi(notificationsApiRef);
+
+ const [error, setError] = React.useState(undefined);
+ const [unreadCount, setUnreadCount] = React.useState(0);
+ const [pageLoadingTime] = React.useState(new Date(Date.now()));
+ const [lastSystemWideNotification, setLastSystemWideNotification] =
+ React.useState();
+ const [closedNotificationId, setClosedNotificationId] =
+ React.useState();
+
+ const pollCallback = React.useCallback(async () => {
+ try {
+ setUnreadCount(
+ await notificationsApi.getNotificationsCount({
+ read: false,
+ messageScope: 'user',
+ }),
+ );
+
+ const data = await notificationsApi.getNotifications({
+ pageSize: 1,
+ pageNumber: 1,
+ createdAfter: pageLoadingTime,
+ orderBy: 'created',
+ orderByDirec: 'desc',
+ messageScope: 'system',
+ });
+
+ setLastSystemWideNotification(data?.[0]);
+ } catch (e: unknown) {
+ setError(e as Error);
+ }
+ }, [notificationsApi, pageLoadingTime]);
+
+ usePollingEffect(pollCallback, [], pollingInterval);
+
+ let icon = NotificationsIcon;
+ if (!!error) {
+ icon = NotificationsErrorIcon;
+ }
+
+ return (
+ <>
+
+ {lastSystemWideNotification && !lastSystemWideNotification.readByUser && (
+
+
+ Show
+
+
+ setClosedNotificationId(lastSystemWideNotification.id)
+ }
+ >
+
+
+ >
+ }
+ />
+ )}
+ >
+ );
+};
diff --git a/plugins/notifications-frontend/src/components/NotificationsTable/MarkAsUnreadIcon.tsx b/plugins/notifications-frontend/src/components/NotificationsTable/MarkAsUnreadIcon.tsx
new file mode 100644
index 0000000000..0e6daf0731
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsTable/MarkAsUnreadIcon.tsx
@@ -0,0 +1,35 @@
+import React from 'react';
+
+import { makeStyles } from '@material-ui/core';
+
+const useStyles = makeStyles({
+ svg: {
+ width: 'auto',
+ height: 24,
+ },
+ path: {
+ fill: '#7df3e1',
+ },
+});
+
+const MarkAsUnreadIcon = () => {
+ const classes = useStyles();
+
+ return (
+
+ );
+};
+
+export default MarkAsUnreadIcon;
diff --git a/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsTable.tsx b/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsTable.tsx
new file mode 100644
index 0000000000..58d7fe674c
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsTable.tsx
@@ -0,0 +1,243 @@
+import React, { useMemo } from 'react';
+import { useAsync } from 'react-use';
+
+import {
+ Link,
+ ResponseErrorPanel,
+ Table,
+ TableColumn,
+} from '@backstage/core-components';
+import { useApi } from '@backstage/core-plugin-api';
+
+import { MaterialTableProps } from '@material-table/core';
+import { Grid, IconButton, Tooltip } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
+import MarkAsReadIcon from '@material-ui/icons/CheckCircle';
+import debounce from 'lodash/debounce';
+
+import { notificationsApiRef, NotificationsQuery } from '../../api';
+import { DebounceDelayMs } from '../../constants';
+import {
+ GetNotificationsCountMessageScopeEnum,
+ GetNotificationsOrderByDirecEnum,
+ GetNotificationsOrderByEnum,
+ Notification,
+} from '../../openapi';
+import MarkAsUnreadIcon from './MarkAsUnreadIcon';
+import {
+ CreatedAfterOptions,
+ NotificationsToolbar,
+} from './NotificationsToolbar';
+
+const useStyles = makeStyles({
+ actionsRoot: {
+ justifyContent: 'space-between',
+ paddingRight: '1rem',
+ },
+ readActionIcon: {
+ color: 'black',
+ },
+});
+
+export type NotificationsTableProps = {
+ messageScope: GetNotificationsCountMessageScopeEnum;
+};
+
+export const NotificationsTable = ({
+ messageScope,
+}: NotificationsTableProps) => {
+ const notificationsApi = useApi(notificationsApiRef);
+ const classes = useStyles();
+ const [pageNumber, setPageNumber] = React.useState(0);
+ const [pageSize, setPageSize] = React.useState(5);
+ const [containsText, setContainsText] = React.useState();
+ const [createdAfter, setCreatedAfter] = React.useState('lastWeek');
+ const [unreadOnly, setUnreadOnly] = React.useState(true);
+ const [sorting, setSorting] = React.useState<
+ | {
+ orderBy: GetNotificationsOrderByEnum;
+ orderByDirec: GetNotificationsOrderByDirecEnum;
+ }
+ | undefined
+ >();
+ const [reload, setReload] = React.useState(0);
+
+ const onMarkAsReadSwitch = React.useCallback(
+ (notification: Notification) => {
+ notificationsApi
+ .markAsRead({
+ messageId: notification.id,
+ read: !notification.readByUser,
+ })
+ .then(() => setReload(Date.now()));
+ },
+ [notificationsApi],
+ );
+
+ const debouncedContainsTextHandler = useMemo(
+ () => debounce(setContainsText, DebounceDelayMs),
+ [],
+ );
+
+ const { loading, value, error } = useAsync(async (): Promise<{
+ notifications: Notification[];
+ totalCount: number;
+ }> => {
+ const createdAfterDate = CreatedAfterOptions[createdAfter].getDate();
+
+ const commonParams: Pick<
+ NotificationsQuery,
+ 'containsText' | 'createdAfter' | 'messageScope' | 'read'
+ > = {
+ containsText,
+ createdAfter: createdAfterDate,
+ messageScope,
+ };
+
+ if (unreadOnly !== undefined) {
+ commonParams.read = !unreadOnly;
+ }
+
+ const data = await notificationsApi.getNotifications({
+ ...commonParams,
+ ...sorting,
+ pageSize,
+ pageNumber: pageNumber + 1 /* BE starts at 1 */,
+ });
+
+ // TODO: extend BE to get both in a single query/response
+ const total = await notificationsApi.getNotificationsCount({
+ ...commonParams,
+ });
+
+ return {
+ notifications: data,
+ totalCount: total,
+ };
+ }, [
+ pageNumber,
+ pageSize,
+ containsText,
+ createdAfter,
+ sorting,
+ unreadOnly,
+ reload,
+ ]);
+
+ const actionsColumn: TableColumn = React.useMemo(
+ () => ({
+ title: 'Actions',
+ render: (notification: Notification): React.ReactNode => {
+ let actions;
+ if (!!notification.actions?.length) {
+ actions = (
+
+ {notification.actions.map(action => (
+
+
+ {action.title || 'More info'}
+
+
+ ))}
+
+ );
+ }
+
+ const markAsReadText = notification.readByUser
+ ? 'Return among unread'
+ : 'Mark as read';
+ const IconComponent = notification.readByUser
+ ? MarkAsUnreadIcon
+ : MarkAsReadIcon;
+
+ return (
+
+
+ {actions}
+
+
+
+
+ {
+ onMarkAsReadSwitch(notification);
+ }}
+ >
+
+
+
+
+
+ );
+ },
+ }),
+ [classes.actionsRoot, classes.readActionIcon, onMarkAsReadSwitch],
+ );
+
+ const onOrderChange = React.useCallback<
+ NonNullable['onOrderChange']>
+ >((orderBy, orderByDirec) => {
+ if (orderBy < 0) {
+ setSorting(undefined);
+ return;
+ }
+
+ const fieldNames: GetNotificationsOrderByEnum[] = [
+ /* Keep the order in sync with the column definitions bellow */
+ 'title',
+ 'message',
+ 'created',
+ 'topic',
+ 'origin',
+ ];
+ const fieldName = fieldNames[orderBy];
+
+ setSorting({ orderBy: fieldName, orderByDirec });
+ }, []);
+
+ const columns = React.useMemo(
+ (): TableColumn[] => [
+ { title: 'Title', field: 'title' },
+ { title: 'Message', field: 'message' },
+ { title: 'Created', field: 'created', type: 'datetime' },
+ { title: 'Topic', field: 'topic' },
+ { title: 'Origin', field: 'origin' },
+ // { title: 'ID', field: 'uuid' },
+ actionsColumn,
+ ],
+ [actionsColumn],
+ );
+
+ if (error) {
+ return ;
+ }
+
+ return (
+
+ isLoading={loading}
+ options={{ search: true, paging: true, pageSize }}
+ columns={columns}
+ data={value?.notifications || []}
+ onPageChange={setPageNumber}
+ onRowsPerPageChange={setPageSize}
+ page={pageNumber}
+ totalCount={value?.totalCount}
+ onSearchChange={debouncedContainsTextHandler}
+ onOrderChange={onOrderChange}
+ components={{
+ Toolbar: props => (
+
+ ),
+ }}
+ />
+ );
+};
diff --git a/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsToolbar.tsx b/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsToolbar.tsx
new file mode 100644
index 0000000000..0f9614cf34
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsTable/NotificationsToolbar.tsx
@@ -0,0 +1,130 @@
+import React, { MutableRefObject } from 'react';
+
+import { MTableToolbar } from '@material-table/core';
+import {
+ Grid,
+ makeStyles,
+ MenuItem,
+ Select,
+ withStyles,
+} from '@material-ui/core';
+import FormGroup from '@mui/material/FormGroup';
+
+const StyledMTableToolbar = withStyles(
+ _theme => ({
+ root: {
+ alignItems: 'center',
+ },
+ }),
+ { name: 'BackstageTableToolbar' },
+)(MTableToolbar);
+
+const useFilterStyles = makeStyles(
+ _theme => ({
+ root: {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'flex-end',
+ width: '100%',
+ },
+ filter: {
+ fontSize: 18,
+ whiteSpace: 'nowrap',
+ },
+ tool: {
+ marginLeft: '1rem',
+ },
+ }),
+ { name: 'BackstageTableFiltersContainer' },
+);
+
+export const CreatedAfterOptions: {
+ [key: string]: { label: string; getDate: () => Date };
+} = {
+ last24h: {
+ label: 'Last 24h',
+ getDate: () => new Date(Date.now() - 24 * 3600 * 1000),
+ },
+ lastWeek: {
+ label: 'Last week',
+ getDate: () => new Date(Date.now() - 7 * 24 * 3600 * 1000),
+ },
+ all: {
+ label: 'Any time',
+ getDate: () => new Date(0),
+ },
+};
+
+export const NotificationsToolbar = (toolbarProps: {
+ toolbarRef: MutableRefObject;
+ onSearchChanged: (value: string) => void;
+ createdAfter?: string;
+ unreadOnly: boolean;
+ onCreatedAfterChanged: (value: string) => void;
+ onUnreadOnlyChanged: (checked?: boolean) => void;
+}) => {
+ const { toolbarRef, createdAfter, unreadOnly } = toolbarProps;
+ const filtersClasses = useFilterStyles();
+
+ const handleOnCreatedAfterChanged = (
+ event: React.ChangeEvent<{ name?: string; value: unknown }>,
+ ) => {
+ toolbarProps.onCreatedAfterChanged(event.target.value as string);
+ };
+
+ const handleOnUnreadOnlyChanged = (
+ event: React.ChangeEvent<{ name?: string; value: unknown }>,
+ ) => {
+ let value = undefined;
+ if (event.target.value === 'unread') value = true;
+ if (event.target.value === 'read') value = false;
+ toolbarProps.onUnreadOnlyChanged(value);
+ };
+
+ let unreadOnlyValue = 'all';
+ if (unreadOnly) unreadOnlyValue = 'unread';
+ if (unreadOnly === false) unreadOnlyValue = 'read';
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/plugins/notifications-frontend/src/components/NotificationsTable/index.ts b/plugins/notifications-frontend/src/components/NotificationsTable/index.ts
new file mode 100644
index 0000000000..34b9b4a961
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/NotificationsTable/index.ts
@@ -0,0 +1 @@
+export * from './NotificationsTable';
diff --git a/plugins/notifications-frontend/src/components/PersonalNotifications/PersonalNotifications.tsx b/plugins/notifications-frontend/src/components/PersonalNotifications/PersonalNotifications.tsx
new file mode 100644
index 0000000000..7c816e8f9f
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/PersonalNotifications/PersonalNotifications.tsx
@@ -0,0 +1,7 @@
+import React from 'react';
+
+import { NotificationsTable } from '../NotificationsTable';
+
+export const PersonalNotifications = () => (
+
+);
diff --git a/plugins/notifications-frontend/src/components/PersonalNotifications/index.ts b/plugins/notifications-frontend/src/components/PersonalNotifications/index.ts
new file mode 100644
index 0000000000..9269810652
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/PersonalNotifications/index.ts
@@ -0,0 +1 @@
+export * from './PersonalNotifications';
diff --git a/plugins/notifications-frontend/src/components/SendNotification/SendNotification.tsx b/plugins/notifications-frontend/src/components/SendNotification/SendNotification.tsx
new file mode 100644
index 0000000000..a851c79c30
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/SendNotification/SendNotification.tsx
@@ -0,0 +1,192 @@
+import React from 'react';
+
+import { configApiRef, useApi } from '@backstage/core-plugin-api';
+
+import { makeStyles } from '@material-ui/core';
+import Alert from '@mui/material/Alert';
+import Button from '@mui/material/Button';
+import Stack from '@mui/material/Stack';
+import TextField from '@mui/material/TextField';
+import Typography from '@mui/material/Typography';
+
+import { notificationsApiRef, NotificationsCreateRequest } from '../../api';
+
+const useStyles = makeStyles({
+ container: {
+ width: '60%',
+ minWidth: '30rem',
+ },
+});
+
+export const SendNotification = () => {
+ const notificationsApi = useApi(notificationsApiRef);
+ const configApi = useApi(configApiRef);
+ const styles = useStyles();
+
+ const [notificationId, setNotificationId] = React.useState();
+ const [error, setError] = React.useState();
+
+ const [origin, setOrigin] = React.useState('my-origin');
+ const [title, setTitle] = React.useState('my-title');
+ const [message, setMessage] = React.useState();
+ const [topic, setTopic] = React.useState();
+ const [targetUsers, setTargetUsers] = React.useState();
+ const [targetGroups, setTargetGroups] = React.useState();
+ const [actions, setActions] = React.useState();
+
+ const handleSubmit = async () => {
+ try {
+ const parsedActions = actions ? JSON.parse(actions) : undefined;
+
+ const notification: NotificationsCreateRequest = {
+ origin,
+ title,
+ message,
+ actions: parsedActions,
+ topic,
+ targetUsers,
+ targetGroups,
+ };
+
+ const id = await notificationsApi.createNotification(notification);
+ setNotificationId(id);
+ } catch (_e) {
+ const e = _e as Error;
+ setError(e.message);
+ }
+ };
+
+ const getCurl = () => {
+ const data: NotificationsCreateRequest = {
+ title,
+ origin,
+ };
+
+ try {
+ if (message) {
+ data.message = message;
+ }
+ if (topic) {
+ data.topic = topic;
+ }
+ if (actions) {
+ data.actions = JSON.parse(actions);
+ }
+ if (targetUsers && targetUsers.length > 0) {
+ data.targetUsers = targetUsers;
+ }
+ if (targetGroups && targetGroups.length > 0) {
+ data.targetGroups = targetGroups;
+ }
+
+ return `curl -X POST ${configApi.getString(
+ 'backend.baseUrl',
+ )}/api/notifications/notifications -H "Content-Type: application/json" -d '${JSON.stringify(
+ data,
+ )}'`;
+ } catch {
+ return 'Incorrect input';
+ }
+ };
+
+ return (
+ <>
+
+ {error && {error}}
+
+ {notificationId && (
+
+ A notification has been created with id: ${notificationId}
+
+ )}
+
+
+
+ <>
+ Example cURL
+ {getCurl()}
+ >
+ >
+ );
+};
diff --git a/plugins/notifications-frontend/src/components/SendNotification/index.ts b/plugins/notifications-frontend/src/components/SendNotification/index.ts
new file mode 100644
index 0000000000..9293edf773
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/SendNotification/index.ts
@@ -0,0 +1 @@
+export * from './SendNotification';
diff --git a/plugins/notifications-frontend/src/components/SystemNotifications/SystemNotifications.tsx b/plugins/notifications-frontend/src/components/SystemNotifications/SystemNotifications.tsx
new file mode 100644
index 0000000000..972940fb25
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/SystemNotifications/SystemNotifications.tsx
@@ -0,0 +1,7 @@
+import React from 'react';
+
+import { NotificationsTable } from '../NotificationsTable';
+
+export const SystemNotifications = () => (
+
+);
diff --git a/plugins/notifications-frontend/src/components/SystemNotifications/index.ts b/plugins/notifications-frontend/src/components/SystemNotifications/index.ts
new file mode 100644
index 0000000000..1b33e49f2e
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/SystemNotifications/index.ts
@@ -0,0 +1 @@
+export * from './SystemNotifications';
diff --git a/plugins/notifications-frontend/src/components/usePollingEffect.ts b/plugins/notifications-frontend/src/components/usePollingEffect.ts
new file mode 100644
index 0000000000..1f2440c69b
--- /dev/null
+++ b/plugins/notifications-frontend/src/components/usePollingEffect.ts
@@ -0,0 +1,46 @@
+import { useEffect, useRef } from 'react';
+
+const noop = () => {};
+
+export const usePollingEffect = (
+ asyncCallback: () => Promise,
+ dependencies = [],
+ interval = 0,
+ onCleanUp = noop,
+) => {
+ const timeoutIdRef = useRef(null);
+
+ useEffect(() => {
+ if (!interval || interval < 0) {
+ return noop;
+ }
+
+ let isStopped = false;
+
+ (async function pollingCallback() {
+ try {
+ if (!isStopped) {
+ await asyncCallback();
+ }
+ } finally {
+ // Set timeout after it finished, unless stopped
+ timeoutIdRef.current =
+ !isStopped && setTimeout(pollingCallback, interval);
+ }
+ })();
+
+ return () => {
+ isStopped = true;
+ if (!!timeoutIdRef.current) {
+ clearTimeout(timeoutIdRef.current);
+ }
+ onCleanUp();
+ };
+ }, [
+ asyncCallback,
+ interval,
+ onCleanUp,
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ ...dependencies,
+ ]);
+};
diff --git a/plugins/notifications-frontend/src/constants.ts b/plugins/notifications-frontend/src/constants.ts
new file mode 100644
index 0000000000..fe0c79a340
--- /dev/null
+++ b/plugins/notifications-frontend/src/constants.ts
@@ -0,0 +1,3 @@
+export const NOTIFICATIONS_ROUTE = 'notifications';
+
+export const DebounceDelayMs = 1000;
diff --git a/plugins/notifications-frontend/src/index.ts b/plugins/notifications-frontend/src/index.ts
new file mode 100644
index 0000000000..b6df883e3b
--- /dev/null
+++ b/plugins/notifications-frontend/src/index.ts
@@ -0,0 +1,19 @@
+export { notificationsPlugin, NotificationsPage } from './plugin';
+
+// API Reference
+export {
+ notificationsApiRef,
+ type NotificationsApi,
+ type NotificationsCreateRequest,
+ type NotificationsQuery,
+ type NotificationsCountQuery,
+} from './api';
+
+export { type Notification } from './openapi';
+
+// selected constants for export
+export { NOTIFICATIONS_ROUTE } from './constants';
+
+// selected components for export
+export { NotificationsSidebarItem } from './components/NotificationsSidebarItem';
+export { usePollingEffect } from './components/usePollingEffect';
diff --git a/plugins/notifications-frontend/src/openapi/.openapi-generator-ignore b/plugins/notifications-frontend/src/openapi/.openapi-generator-ignore
new file mode 100644
index 0000000000..7484ee590a
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/plugins/notifications-frontend/src/openapi/.openapi-generator/FILES b/plugins/notifications-frontend/src/openapi/.openapi-generator/FILES
new file mode 100644
index 0000000000..d0367843c0
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/.openapi-generator/FILES
@@ -0,0 +1,11 @@
+apis/NotificationsApi.ts
+apis/index.ts
+index.ts
+models/Action.ts
+models/CreateBody.ts
+models/CreateBodyActionsInner.ts
+models/CreateNotification200Response.ts
+models/GetNotificationsCount200Response.ts
+models/Notification.ts
+models/index.ts
+runtime.ts
diff --git a/plugins/notifications-frontend/src/openapi/.openapi-generator/VERSION b/plugins/notifications-frontend/src/openapi/.openapi-generator/VERSION
new file mode 100644
index 0000000000..3769235d3e
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.1.0
\ No newline at end of file
diff --git a/plugins/notifications-frontend/src/openapi/README.md b/plugins/notifications-frontend/src/openapi/README.md
new file mode 100644
index 0000000000..f97dfb852a
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/README.md
@@ -0,0 +1,8 @@
+The content of this folder is generated, do not update it manually.
+
+Generated by:
+
+```
+cd plugins/notifications-frontend
+yarn openapi:generate
+```
diff --git a/plugins/notifications-frontend/src/openapi/apis/NotificationsApi.ts b/plugins/notifications-frontend/src/openapi/apis/NotificationsApi.ts
new file mode 100644
index 0000000000..711e65cc8c
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/apis/NotificationsApi.ts
@@ -0,0 +1,351 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import type {
+ CreateBody,
+ CreateNotification200Response,
+ GetNotificationsCount200Response,
+ Notification,
+} from '../models/index';
+import {
+ CreateBodyFromJSON,
+ CreateBodyToJSON,
+ CreateNotification200ResponseFromJSON,
+ CreateNotification200ResponseToJSON,
+ GetNotificationsCount200ResponseFromJSON,
+ GetNotificationsCount200ResponseToJSON,
+ NotificationFromJSON,
+ NotificationToJSON,
+} from '../models/index';
+import * as runtime from '../runtime';
+
+export interface CreateNotificationRequest {
+ createBody?: CreateBody;
+}
+
+export interface GetNotificationsRequest {
+ pageSize?: number;
+ pageNumber?: number;
+ orderBy?: GetNotificationsOrderByEnum;
+ orderByDirec?: GetNotificationsOrderByDirecEnum;
+ containsText?: string;
+ createdAfter?: Date;
+ messageScope?: GetNotificationsMessageScopeEnum;
+ read?: boolean;
+}
+
+export interface GetNotificationsCountRequest {
+ containsText?: string;
+ createdAfter?: Date;
+ messageScope?: GetNotificationsCountMessageScopeEnum;
+ read?: boolean;
+}
+
+export interface SetReadRequest {
+ messageId: string;
+ read: boolean;
+}
+
+/**
+ *
+ */
+export class NotificationsApi extends runtime.BaseAPI {
+ /**
+ * Create notification
+ * Create notification
+ */
+ async createNotificationRaw(
+ requestParameters: CreateNotificationRequest,
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise> {
+ const queryParameters: any = {};
+
+ const headerParameters: runtime.HTTPHeaders = {};
+
+ headerParameters['Content-Type'] = 'application/json';
+
+ const response = await this.request(
+ {
+ path: `/notifications`,
+ method: 'POST',
+ headers: headerParameters,
+ query: queryParameters,
+ body: CreateBodyToJSON(requestParameters.createBody),
+ },
+ initOverrides,
+ );
+
+ return new runtime.JSONApiResponse(response, jsonValue =>
+ CreateNotification200ResponseFromJSON(jsonValue),
+ );
+ }
+
+ /**
+ * Create notification
+ * Create notification
+ */
+ async createNotification(
+ requestParameters: CreateNotificationRequest = {},
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise {
+ const response = await this.createNotificationRaw(
+ requestParameters,
+ initOverrides,
+ );
+ return await response.value();
+ }
+
+ /**
+ * Gets notifications
+ * Gets notifications
+ */
+ async getNotificationsRaw(
+ requestParameters: GetNotificationsRequest,
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise>> {
+ const queryParameters: any = {};
+
+ if (requestParameters.pageSize !== undefined) {
+ queryParameters['pageSize'] = requestParameters.pageSize;
+ }
+
+ if (requestParameters.pageNumber !== undefined) {
+ queryParameters['pageNumber'] = requestParameters.pageNumber;
+ }
+
+ if (requestParameters.orderBy !== undefined) {
+ queryParameters['orderBy'] = requestParameters.orderBy;
+ }
+
+ if (requestParameters.orderByDirec !== undefined) {
+ queryParameters['orderByDirec'] = requestParameters.orderByDirec;
+ }
+
+ if (requestParameters.containsText !== undefined) {
+ queryParameters['containsText'] = requestParameters.containsText;
+ }
+
+ if (requestParameters.createdAfter !== undefined) {
+ queryParameters['createdAfter'] = (
+ requestParameters.createdAfter as any
+ ).toISOString();
+ }
+
+ if (requestParameters.messageScope !== undefined) {
+ queryParameters['messageScope'] = requestParameters.messageScope;
+ }
+
+ if (requestParameters.read !== undefined) {
+ queryParameters['read'] = requestParameters.read;
+ }
+
+ const headerParameters: runtime.HTTPHeaders = {};
+
+ const response = await this.request(
+ {
+ path: `/notifications`,
+ method: 'GET',
+ headers: headerParameters,
+ query: queryParameters,
+ },
+ initOverrides,
+ );
+
+ return new runtime.JSONApiResponse(response, jsonValue =>
+ jsonValue.map(NotificationFromJSON),
+ );
+ }
+
+ /**
+ * Gets notifications
+ * Gets notifications
+ */
+ async getNotifications(
+ requestParameters: GetNotificationsRequest = {},
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise> {
+ const response = await this.getNotificationsRaw(
+ requestParameters,
+ initOverrides,
+ );
+ return await response.value();
+ }
+
+ /**
+ * Gets notifications count
+ * Get notifications count
+ */
+ async getNotificationsCountRaw(
+ requestParameters: GetNotificationsCountRequest,
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise> {
+ const queryParameters: any = {};
+
+ if (requestParameters.containsText !== undefined) {
+ queryParameters['containsText'] = requestParameters.containsText;
+ }
+
+ if (requestParameters.createdAfter !== undefined) {
+ queryParameters['createdAfter'] = (
+ requestParameters.createdAfter as any
+ ).toISOString();
+ }
+
+ if (requestParameters.messageScope !== undefined) {
+ queryParameters['messageScope'] = requestParameters.messageScope;
+ }
+
+ if (requestParameters.read !== undefined) {
+ queryParameters['read'] = requestParameters.read;
+ }
+
+ const headerParameters: runtime.HTTPHeaders = {};
+
+ const response = await this.request(
+ {
+ path: `/notifications/count`,
+ method: 'GET',
+ headers: headerParameters,
+ query: queryParameters,
+ },
+ initOverrides,
+ );
+
+ return new runtime.JSONApiResponse(response, jsonValue =>
+ GetNotificationsCount200ResponseFromJSON(jsonValue),
+ );
+ }
+
+ /**
+ * Gets notifications count
+ * Get notifications count
+ */
+ async getNotificationsCount(
+ requestParameters: GetNotificationsCountRequest = {},
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise {
+ const response = await this.getNotificationsCountRaw(
+ requestParameters,
+ initOverrides,
+ );
+ return await response.value();
+ }
+
+ /**
+ * Set notification as read/unread
+ * Set notification as read/unread
+ */
+ async setReadRaw(
+ requestParameters: SetReadRequest,
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise> {
+ if (
+ requestParameters.messageId === null ||
+ requestParameters.messageId === undefined
+ ) {
+ throw new runtime.RequiredError(
+ 'messageId',
+ 'Required parameter requestParameters.messageId was null or undefined when calling setRead.',
+ );
+ }
+
+ if (
+ requestParameters.read === null ||
+ requestParameters.read === undefined
+ ) {
+ throw new runtime.RequiredError(
+ 'read',
+ 'Required parameter requestParameters.read was null or undefined when calling setRead.',
+ );
+ }
+
+ const queryParameters: any = {};
+
+ if (requestParameters.messageId !== undefined) {
+ queryParameters['messageId'] = requestParameters.messageId;
+ }
+
+ if (requestParameters.read !== undefined) {
+ queryParameters['read'] = requestParameters.read;
+ }
+
+ const headerParameters: runtime.HTTPHeaders = {};
+
+ const response = await this.request(
+ {
+ path: `/notifications/read`,
+ method: 'PUT',
+ headers: headerParameters,
+ query: queryParameters,
+ },
+ initOverrides,
+ );
+
+ return new runtime.VoidApiResponse(response);
+ }
+
+ /**
+ * Set notification as read/unread
+ * Set notification as read/unread
+ */
+ async setRead(
+ requestParameters: SetReadRequest,
+ initOverrides?: RequestInit | runtime.InitOverrideFunction,
+ ): Promise {
+ await this.setReadRaw(requestParameters, initOverrides);
+ }
+}
+
+/**
+ * @export
+ */
+export const GetNotificationsOrderByEnum = {
+ Title: 'title',
+ Message: 'message',
+ Created: 'created',
+ Topic: 'topic',
+ Origin: 'origin',
+} as const;
+export type GetNotificationsOrderByEnum =
+ (typeof GetNotificationsOrderByEnum)[keyof typeof GetNotificationsOrderByEnum];
+/**
+ * @export
+ */
+export const GetNotificationsOrderByDirecEnum = {
+ Asc: 'asc',
+ Desc: 'desc',
+} as const;
+export type GetNotificationsOrderByDirecEnum =
+ (typeof GetNotificationsOrderByDirecEnum)[keyof typeof GetNotificationsOrderByDirecEnum];
+/**
+ * @export
+ */
+export const GetNotificationsMessageScopeEnum = {
+ All: 'all',
+ User: 'user',
+ System: 'system',
+} as const;
+export type GetNotificationsMessageScopeEnum =
+ (typeof GetNotificationsMessageScopeEnum)[keyof typeof GetNotificationsMessageScopeEnum];
+/**
+ * @export
+ */
+export const GetNotificationsCountMessageScopeEnum = {
+ All: 'all',
+ User: 'user',
+ System: 'system',
+} as const;
+export type GetNotificationsCountMessageScopeEnum =
+ (typeof GetNotificationsCountMessageScopeEnum)[keyof typeof GetNotificationsCountMessageScopeEnum];
diff --git a/plugins/notifications-frontend/src/openapi/apis/index.ts b/plugins/notifications-frontend/src/openapi/apis/index.ts
new file mode 100644
index 0000000000..d201cd0f61
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/apis/index.ts
@@ -0,0 +1,4 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+export * from './NotificationsApi';
diff --git a/plugins/notifications-frontend/src/openapi/index.ts b/plugins/notifications-frontend/src/openapi/index.ts
new file mode 100644
index 0000000000..af50c5b678
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/index.ts
@@ -0,0 +1,6 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+export * from './runtime';
+export * from './apis/index';
+export * from './models/index';
diff --git a/plugins/notifications-frontend/src/openapi/models/Action.ts b/plugins/notifications-frontend/src/openapi/models/Action.ts
new file mode 100644
index 0000000000..1b391706d3
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/Action.ts
@@ -0,0 +1,86 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+
+/**
+ *
+ * @export
+ * @interface Action
+ */
+export interface Action {
+ /**
+ *
+ * @type {string}
+ * @memberof Action
+ */
+ id: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Action
+ */
+ title: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Action
+ */
+ url: string;
+}
+
+/**
+ * Check if a given object implements the Action interface.
+ */
+export function instanceOfAction(value: object): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'id' in value;
+ isInstance = isInstance && 'title' in value;
+ isInstance = isInstance && 'url' in value;
+
+ return isInstance;
+}
+
+export function ActionFromJSON(json: any): Action {
+ return ActionFromJSONTyped(json, false);
+}
+
+export function ActionFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): Action {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ id: json['id'],
+ title: json['title'],
+ url: json['url'],
+ };
+}
+
+export function ActionToJSON(value?: Action | null): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ id: value.id,
+ title: value.title,
+ url: value.url,
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/CreateBody.ts b/plugins/notifications-frontend/src/openapi/models/CreateBody.ts
new file mode 100644
index 0000000000..803479986c
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/CreateBody.ts
@@ -0,0 +1,130 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+import type { CreateBodyActionsInner } from './CreateBodyActionsInner';
+import {
+ CreateBodyActionsInnerFromJSON,
+ CreateBodyActionsInnerFromJSONTyped,
+ CreateBodyActionsInnerToJSON,
+} from './CreateBodyActionsInner';
+
+/**
+ *
+ * @export
+ * @interface CreateBody
+ */
+export interface CreateBody {
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBody
+ */
+ origin: string;
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBody
+ */
+ title: string;
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBody
+ */
+ message?: string;
+ /**
+ *
+ * @type {Array}
+ * @memberof CreateBody
+ */
+ actions?: Array;
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBody
+ */
+ topic?: string;
+ /**
+ *
+ * @type {Array}
+ * @memberof CreateBody
+ */
+ targetUsers?: Array;
+ /**
+ *
+ * @type {Array}
+ * @memberof CreateBody
+ */
+ targetGroups?: Array;
+}
+
+/**
+ * Check if a given object implements the CreateBody interface.
+ */
+export function instanceOfCreateBody(value: object): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'origin' in value;
+ isInstance = isInstance && 'title' in value;
+
+ return isInstance;
+}
+
+export function CreateBodyFromJSON(json: any): CreateBody {
+ return CreateBodyFromJSONTyped(json, false);
+}
+
+export function CreateBodyFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): CreateBody {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ origin: json['origin'],
+ title: json['title'],
+ message: !exists(json, 'message') ? undefined : json['message'],
+ actions: !exists(json, 'actions')
+ ? undefined
+ : (json['actions'] as Array).map(CreateBodyActionsInnerFromJSON),
+ topic: !exists(json, 'topic') ? undefined : json['topic'],
+ targetUsers: !exists(json, 'targetUsers') ? undefined : json['targetUsers'],
+ targetGroups: !exists(json, 'targetGroups')
+ ? undefined
+ : json['targetGroups'],
+ };
+}
+
+export function CreateBodyToJSON(value?: CreateBody | null): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ origin: value.origin,
+ title: value.title,
+ message: value.message,
+ actions:
+ value.actions === undefined
+ ? undefined
+ : (value.actions as Array).map(CreateBodyActionsInnerToJSON),
+ topic: value.topic,
+ targetUsers: value.targetUsers,
+ targetGroups: value.targetGroups,
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/CreateBodyActionsInner.ts b/plugins/notifications-frontend/src/openapi/models/CreateBodyActionsInner.ts
new file mode 100644
index 0000000000..4bf3a3da3e
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/CreateBodyActionsInner.ts
@@ -0,0 +1,81 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+
+/**
+ *
+ * @export
+ * @interface CreateBodyActionsInner
+ */
+export interface CreateBodyActionsInner {
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBodyActionsInner
+ */
+ title: string;
+ /**
+ *
+ * @type {string}
+ * @memberof CreateBodyActionsInner
+ */
+ url: string;
+}
+
+/**
+ * Check if a given object implements the CreateBodyActionsInner interface.
+ */
+export function instanceOfCreateBodyActionsInner(value: object): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'title' in value;
+ isInstance = isInstance && 'url' in value;
+
+ return isInstance;
+}
+
+export function CreateBodyActionsInnerFromJSON(
+ json: any,
+): CreateBodyActionsInner {
+ return CreateBodyActionsInnerFromJSONTyped(json, false);
+}
+
+export function CreateBodyActionsInnerFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): CreateBodyActionsInner {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ title: json['title'],
+ url: json['url'],
+ };
+}
+
+export function CreateBodyActionsInnerToJSON(
+ value?: CreateBodyActionsInner | null,
+): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ title: value.title,
+ url: value.url,
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/CreateNotification200Response.ts b/plugins/notifications-frontend/src/openapi/models/CreateNotification200Response.ts
new file mode 100644
index 0000000000..856942f98f
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/CreateNotification200Response.ts
@@ -0,0 +1,74 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+
+/**
+ *
+ * @export
+ * @interface CreateNotification200Response
+ */
+export interface CreateNotification200Response {
+ /**
+ *
+ * @type {string}
+ * @memberof CreateNotification200Response
+ */
+ messageId: string;
+}
+
+/**
+ * Check if a given object implements the CreateNotification200Response interface.
+ */
+export function instanceOfCreateNotification200Response(
+ value: object,
+): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'messageId' in value;
+
+ return isInstance;
+}
+
+export function CreateNotification200ResponseFromJSON(
+ json: any,
+): CreateNotification200Response {
+ return CreateNotification200ResponseFromJSONTyped(json, false);
+}
+
+export function CreateNotification200ResponseFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): CreateNotification200Response {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ messageId: json['messageId'],
+ };
+}
+
+export function CreateNotification200ResponseToJSON(
+ value?: CreateNotification200Response | null,
+): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ messageId: value.messageId,
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/GetNotificationsCount200Response.ts b/plugins/notifications-frontend/src/openapi/models/GetNotificationsCount200Response.ts
new file mode 100644
index 0000000000..464bd8f627
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/GetNotificationsCount200Response.ts
@@ -0,0 +1,74 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+
+/**
+ *
+ * @export
+ * @interface GetNotificationsCount200Response
+ */
+export interface GetNotificationsCount200Response {
+ /**
+ *
+ * @type {number}
+ * @memberof GetNotificationsCount200Response
+ */
+ count: number;
+}
+
+/**
+ * Check if a given object implements the GetNotificationsCount200Response interface.
+ */
+export function instanceOfGetNotificationsCount200Response(
+ value: object,
+): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'count' in value;
+
+ return isInstance;
+}
+
+export function GetNotificationsCount200ResponseFromJSON(
+ json: any,
+): GetNotificationsCount200Response {
+ return GetNotificationsCount200ResponseFromJSONTyped(json, false);
+}
+
+export function GetNotificationsCount200ResponseFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): GetNotificationsCount200Response {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ count: json['count'],
+ };
+}
+
+export function GetNotificationsCount200ResponseToJSON(
+ value?: GetNotificationsCount200Response | null,
+): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ count: value.count,
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/Notification.ts b/plugins/notifications-frontend/src/openapi/models/Notification.ts
new file mode 100644
index 0000000000..b3cf5e5c05
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/Notification.ts
@@ -0,0 +1,140 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+import { exists, mapValues } from '../runtime';
+import type { Action } from './Action';
+import { ActionFromJSON, ActionFromJSONTyped, ActionToJSON } from './Action';
+
+/**
+ *
+ * @export
+ * @interface Notification
+ */
+export interface Notification {
+ /**
+ *
+ * @type {string}
+ * @memberof Notification
+ */
+ id: string;
+ /**
+ *
+ * @type {Date}
+ * @memberof Notification
+ */
+ created: Date;
+ /**
+ *
+ * @type {boolean}
+ * @memberof Notification
+ */
+ readByUser: boolean;
+ /**
+ *
+ * @type {boolean}
+ * @memberof Notification
+ */
+ isSystem: boolean;
+ /**
+ *
+ * @type {string}
+ * @memberof Notification
+ */
+ origin: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Notification
+ */
+ title: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Notification
+ */
+ message?: string;
+ /**
+ *
+ * @type {string}
+ * @memberof Notification
+ */
+ topic?: string;
+ /**
+ *
+ * @type {Array}
+ * @memberof Notification
+ */
+ actions: Array;
+}
+
+/**
+ * Check if a given object implements the Notification interface.
+ */
+export function instanceOfNotification(value: object): boolean {
+ let isInstance = true;
+ isInstance = isInstance && 'id' in value;
+ isInstance = isInstance && 'created' in value;
+ isInstance = isInstance && 'readByUser' in value;
+ isInstance = isInstance && 'isSystem' in value;
+ isInstance = isInstance && 'origin' in value;
+ isInstance = isInstance && 'title' in value;
+ isInstance = isInstance && 'actions' in value;
+
+ return isInstance;
+}
+
+export function NotificationFromJSON(json: any): Notification {
+ return NotificationFromJSONTyped(json, false);
+}
+
+export function NotificationFromJSONTyped(
+ json: any,
+ ignoreDiscriminator: boolean,
+): Notification {
+ if (json === undefined || json === null) {
+ return json;
+ }
+ return {
+ id: json['id'],
+ created: new Date(json['created']),
+ readByUser: json['readByUser'],
+ isSystem: json['isSystem'],
+ origin: json['origin'],
+ title: json['title'],
+ message: !exists(json, 'message') ? undefined : json['message'],
+ topic: !exists(json, 'topic') ? undefined : json['topic'],
+ actions: (json['actions'] as Array).map(ActionFromJSON),
+ };
+}
+
+export function NotificationToJSON(value?: Notification | null): any {
+ if (value === undefined) {
+ return undefined;
+ }
+ if (value === null) {
+ return null;
+ }
+ return {
+ id: value.id,
+ created: value.created.toISOString(),
+ readByUser: value.readByUser,
+ isSystem: value.isSystem,
+ origin: value.origin,
+ title: value.title,
+ message: value.message,
+ topic: value.topic,
+ actions: (value.actions as Array).map(ActionToJSON),
+ };
+}
diff --git a/plugins/notifications-frontend/src/openapi/models/index.ts b/plugins/notifications-frontend/src/openapi/models/index.ts
new file mode 100644
index 0000000000..5f553c5119
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/models/index.ts
@@ -0,0 +1,9 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+export * from './Action';
+export * from './CreateBody';
+export * from './CreateBodyActionsInner';
+export * from './CreateNotification200Response';
+export * from './GetNotificationsCount200Response';
+export * from './Notification';
diff --git a/plugins/notifications-frontend/src/openapi/runtime.ts b/plugins/notifications-frontend/src/openapi/runtime.ts
new file mode 100644
index 0000000000..c03f16d4d7
--- /dev/null
+++ b/plugins/notifications-frontend/src/openapi/runtime.ts
@@ -0,0 +1,529 @@
+// @ts-nocheck
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Notifications Plugin - OpenAPI Specs
+ * Notifications Plugin - OpenAPI Specs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+export const BASE_PATH = 'http://localhost:7007/api/notifications';
+
+export interface ConfigurationParameters {
+ basePath?: string; // override base path
+ fetchApi?: FetchAPI; // override for fetch implementation
+ middleware?: Middleware[]; // middleware to apply before/after fetch requests
+ queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings
+ username?: string; // parameter for basic security
+ password?: string; // parameter for basic security
+ apiKey?: string | ((name: string) => string); // parameter for apiKey security
+ accessToken?:
+ | string
+ | Promise
+ | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security
+ headers?: HTTPHeaders; //header params we want to use on every request
+ credentials?: RequestCredentials; //value for the credentials param we want to use on each request
+}
+
+export class Configuration {
+ constructor(private configuration: ConfigurationParameters = {}) {}
+
+ set config(configuration: Configuration) {
+ this.configuration = configuration;
+ }
+
+ get basePath(): string {
+ return this.configuration.basePath != null
+ ? this.configuration.basePath
+ : BASE_PATH;
+ }
+
+ get fetchApi(): FetchAPI | undefined {
+ return this.configuration.fetchApi;
+ }
+
+ get middleware(): Middleware[] {
+ return this.configuration.middleware || [];
+ }
+
+ get queryParamsStringify(): (params: HTTPQuery) => string {
+ return this.configuration.queryParamsStringify || querystring;
+ }
+
+ get username(): string | undefined {
+ return this.configuration.username;
+ }
+
+ get password(): string | undefined {
+ return this.configuration.password;
+ }
+
+ get apiKey(): ((name: string) => string) | undefined {
+ const apiKey = this.configuration.apiKey;
+ if (apiKey) {
+ return typeof apiKey === 'function' ? apiKey : () => apiKey;
+ }
+ return undefined;
+ }
+
+ get accessToken():
+ | ((name?: string, scopes?: string[]) => string | Promise)
+ | undefined {
+ const accessToken = this.configuration.accessToken;
+ if (accessToken) {
+ return typeof accessToken === 'function'
+ ? accessToken
+ : async () => accessToken;
+ }
+ return undefined;
+ }
+
+ get headers(): HTTPHeaders | undefined {
+ return this.configuration.headers;
+ }
+
+ get credentials(): RequestCredentials | undefined {
+ return this.configuration.credentials;
+ }
+}
+
+export const DefaultConfig = new Configuration();
+
+/**
+ * This is the base class for all generated API classes.
+ */
+export class BaseAPI {
+ private static readonly jsonRegex = new RegExp(
+ '^(:?application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$',
+ 'i',
+ );
+ private middleware: Middleware[];
+
+ constructor(protected configuration = DefaultConfig) {
+ this.middleware = configuration.middleware;
+ }
+
+ withMiddleware(this: T, ...middlewares: Middleware[]) {
+ const next = this.clone();
+ next.middleware = next.middleware.concat(...middlewares);
+ return next;
+ }
+
+ withPreMiddleware(
+ this: T,
+ ...preMiddlewares: Array
+ ) {
+ const middlewares = preMiddlewares.map(pre => ({ pre }));
+ return this.withMiddleware(...middlewares);
+ }
+
+ withPostMiddleware(
+ this: T,
+ ...postMiddlewares: Array
+ ) {
+ const middlewares = postMiddlewares.map(post => ({ post }));
+ return this.withMiddleware(...middlewares);
+ }
+
+ /**
+ * Check if the given MIME is a JSON MIME.
+ * JSON MIME examples:
+ * application/json
+ * application/json; charset=UTF8
+ * APPLICATION/JSON
+ * application/vnd.company+json
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
+ * @return True if the given MIME is JSON, false otherwise.
+ */
+ protected isJsonMime(mime: string | null | undefined): boolean {
+ if (!mime) {
+ return false;
+ }
+ return BaseAPI.jsonRegex.test(mime);
+ }
+
+ protected async request(
+ context: RequestOpts,
+ initOverrides?: RequestInit | InitOverrideFunction,
+ ): Promise {
+ const { url, init } = await this.createFetchParams(context, initOverrides);
+ const response = await this.fetchApi(url, init);
+ if (response && response.status >= 200 && response.status < 300) {
+ return response;
+ }
+ throw new ResponseError(response, 'Response returned an error code');
+ }
+
+ private async createFetchParams(
+ context: RequestOpts,
+ initOverrides?: RequestInit | InitOverrideFunction,
+ ) {
+ let url = this.configuration.basePath + context.path;
+ if (
+ context.query !== undefined &&
+ Object.keys(context.query).length !== 0
+ ) {
+ // only add the querystring to the URL if there are query parameters.
+ // this is done to avoid urls ending with a "?" character which buggy webservers
+ // do not handle correctly sometimes.
+ url += '?' + this.configuration.queryParamsStringify(context.query);
+ }
+
+ const headers = Object.assign(
+ {},
+ this.configuration.headers,
+ context.headers,
+ );
+ Object.keys(headers).forEach(key =>
+ headers[key] === undefined ? delete headers[key] : {},
+ );
+
+ const initOverrideFn =
+ typeof initOverrides === 'function'
+ ? initOverrides
+ : async () => initOverrides;
+
+ const initParams = {
+ method: context.method,
+ headers,
+ body: context.body,
+ credentials: this.configuration.credentials,
+ };
+
+ const overriddenInit: RequestInit = {
+ ...initParams,
+ ...(await initOverrideFn({
+ init: initParams,
+ context,
+ })),
+ };
+
+ let body: any;
+ if (
+ isFormData(overriddenInit.body) ||
+ overriddenInit.body instanceof URLSearchParams ||
+ isBlob(overriddenInit.body)
+ ) {
+ body = overriddenInit.body;
+ } else if (this.isJsonMime(headers['Content-Type'])) {
+ body = JSON.stringify(overriddenInit.body);
+ } else {
+ body = overriddenInit.body;
+ }
+
+ const init: RequestInit = {
+ ...overriddenInit,
+ body,
+ };
+
+ return { url, init };
+ }
+
+ private fetchApi = async (url: string, init: RequestInit) => {
+ let fetchParams = { url, init };
+ for (const middleware of this.middleware) {
+ if (middleware.pre) {
+ fetchParams =
+ (await middleware.pre({
+ fetch: this.fetchApi,
+ ...fetchParams,
+ })) || fetchParams;
+ }
+ }
+ let response: Response | undefined = undefined;
+ try {
+ response = await (this.configuration.fetchApi || fetch)(
+ fetchParams.url,
+ fetchParams.init,
+ );
+ } catch (e) {
+ for (const middleware of this.middleware) {
+ if (middleware.onError) {
+ response =
+ (await middleware.onError({
+ fetch: this.fetchApi,
+ url: fetchParams.url,
+ init: fetchParams.init,
+ error: e,
+ response: response ? response.clone() : undefined,
+ })) || response;
+ }
+ }
+ if (response === undefined) {
+ if (e instanceof Error) {
+ throw new FetchError(
+ e,
+ 'The request failed and the interceptors did not return an alternative response',
+ );
+ } else {
+ throw e;
+ }
+ }
+ }
+ for (const middleware of this.middleware) {
+ if (middleware.post) {
+ response =
+ (await middleware.post({
+ fetch: this.fetchApi,
+ url: fetchParams.url,
+ init: fetchParams.init,
+ response: response.clone(),
+ })) || response;
+ }
+ }
+ return response;
+ };
+
+ /**
+ * Create a shallow clone of `this` by constructing a new instance
+ * and then shallow cloning data members.
+ */
+ private clone(this: T): T {
+ const constructor = this.constructor as any;
+ const next = new constructor(this.configuration);
+ next.middleware = this.middleware.slice();
+ return next;
+ }
+}
+
+function isBlob(value: any): value is Blob {
+ return typeof Blob !== 'undefined' && value instanceof Blob;
+}
+
+function isFormData(value: any): value is FormData {
+ return typeof FormData !== 'undefined' && value instanceof FormData;
+}
+
+export class ResponseError extends Error {
+ override name: 'ResponseError' = 'ResponseError';
+ constructor(
+ public response: Response,
+ msg?: string,
+ ) {
+ super(msg);
+ }
+}
+
+export class FetchError extends Error {
+ override name: 'FetchError' = 'FetchError';
+ constructor(
+ public cause: Error,
+ msg?: string,
+ ) {
+ super(msg);
+ }
+}
+
+export class RequiredError extends Error {
+ override name: 'RequiredError' = 'RequiredError';
+ constructor(
+ public field: string,
+ msg?: string,
+ ) {
+ super(msg);
+ }
+}
+
+export const COLLECTION_FORMATS = {
+ csv: ',',
+ ssv: ' ',
+ tsv: '\t',
+ pipes: '|',
+};
+
+export type FetchAPI = WindowOrWorkerGlobalScope['fetch'];
+
+export type Json = any;
+export type HTTPMethod =
+ | 'GET'
+ | 'POST'
+ | 'PUT'
+ | 'PATCH'
+ | 'DELETE'
+ | 'OPTIONS'
+ | 'HEAD';
+export type HTTPHeaders = { [key: string]: string };
+export type HTTPQuery = {
+ [key: string]:
+ | string
+ | number
+ | null
+ | boolean
+ | Array
+ | Set
+ | HTTPQuery;
+};
+export type HTTPBody = Json | FormData | URLSearchParams;
+export type HTTPRequestInit = {
+ headers?: HTTPHeaders;
+ method: HTTPMethod;
+ credentials?: RequestCredentials;
+ body?: HTTPBody;
+};
+export type ModelPropertyNaming =
+ | 'camelCase'
+ | 'snake_case'
+ | 'PascalCase'
+ | 'original';
+
+export type InitOverrideFunction = (requestContext: {
+ init: HTTPRequestInit;
+ context: RequestOpts;
+}) => Promise;
+
+export interface FetchParams {
+ url: string;
+ init: RequestInit;
+}
+
+export interface RequestOpts {
+ path: string;
+ method: HTTPMethod;
+ headers: HTTPHeaders;
+ query?: HTTPQuery;
+ body?: HTTPBody;
+}
+
+export function exists(json: any, key: string) {
+ const value = json[key];
+ return value !== null && value !== undefined;
+}
+
+export function querystring(params: HTTPQuery, prefix: string = ''): string {
+ return Object.keys(params)
+ .map(key => querystringSingleKey(key, params[key], prefix))
+ .filter(part => part.length > 0)
+ .join('&');
+}
+
+function querystringSingleKey(
+ key: string,
+ value:
+ | string
+ | number
+ | null
+ | undefined
+ | boolean
+ | Array
+ | Set
+ | HTTPQuery,
+ keyPrefix: string = '',
+): string {
+ const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);
+ if (value instanceof Array) {
+ const multiValue = value
+ .map(singleValue => encodeURIComponent(String(singleValue)))
+ .join(`&${encodeURIComponent(fullKey)}=`);
+ return `${encodeURIComponent(fullKey)}=${multiValue}`;
+ }
+ if (value instanceof Set) {
+ const valueAsArray = Array.from(value);
+ return querystringSingleKey(key, valueAsArray, keyPrefix);
+ }
+ if (value instanceof Date) {
+ return `${encodeURIComponent(fullKey)}=${encodeURIComponent(
+ value.toISOString(),
+ )}`;
+ }
+ if (value instanceof Object) {
+ return querystring(value as HTTPQuery, fullKey);
+ }
+ return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;
+}
+
+export function mapValues(data: any, fn: (item: any) => any) {
+ return Object.keys(data).reduce(
+ (acc, key) => ({ ...acc, [key]: fn(data[key]) }),
+ {},
+ );
+}
+
+export function canConsumeForm(consumes: Consume[]): boolean {
+ for (const consume of consumes) {
+ if ('multipart/form-data' === consume.contentType) {
+ return true;
+ }
+ }
+ return false;
+}
+
+export interface Consume {
+ contentType: string;
+}
+
+export interface RequestContext {
+ fetch: FetchAPI;
+ url: string;
+ init: RequestInit;
+}
+
+export interface ResponseContext {
+ fetch: FetchAPI;
+ url: string;
+ init: RequestInit;
+ response: Response;
+}
+
+export interface ErrorContext {
+ fetch: FetchAPI;
+ url: string;
+ init: RequestInit;
+ error: unknown;
+ response?: Response;
+}
+
+export interface Middleware {
+ pre?(context: RequestContext): Promise;
+ post?(context: ResponseContext): Promise;
+ onError?(context: ErrorContext): Promise;
+}
+
+export interface ApiResponse {
+ raw: Response;
+ value(): Promise;
+}
+
+export interface ResponseTransformer {
+ (json: any): T;
+}
+
+export class JSONApiResponse {
+ constructor(
+ public raw: Response,
+ private transformer: ResponseTransformer = (jsonValue: any) => jsonValue,
+ ) {}
+
+ async value(): Promise {
+ return this.transformer(await this.raw.json());
+ }
+}
+
+export class VoidApiResponse {
+ constructor(public raw: Response) {}
+
+ async value(): Promise {
+ return undefined;
+ }
+}
+
+export class BlobApiResponse {
+ constructor(public raw: Response) {}
+
+ async value(): Promise {
+ return await this.raw.blob();
+ }
+}
+
+export class TextApiResponse {
+ constructor(public raw: Response) {}
+
+ async value(): Promise {
+ return await this.raw.text();
+ }
+}
diff --git a/plugins/notifications-frontend/src/plugin.test.ts b/plugins/notifications-frontend/src/plugin.test.ts
new file mode 100644
index 0000000000..63644a975b
--- /dev/null
+++ b/plugins/notifications-frontend/src/plugin.test.ts
@@ -0,0 +1,7 @@
+import { notificationsPlugin } from './plugin';
+
+describe('notifications', () => {
+ it('should export plugin', () => {
+ expect(notificationsPlugin).toBeDefined();
+ });
+});
diff --git a/plugins/notifications-frontend/src/plugin.ts b/plugins/notifications-frontend/src/plugin.ts
new file mode 100644
index 0000000000..d9fde98ed7
--- /dev/null
+++ b/plugins/notifications-frontend/src/plugin.ts
@@ -0,0 +1,37 @@
+import {
+ createApiFactory,
+ createPlugin,
+ createRoutableExtension,
+ fetchApiRef,
+ // identityApiRef,
+} from '@backstage/core-plugin-api';
+
+import { NotificationsApiImpl, notificationsApiRef } from './api';
+import { rootRouteRef } from './routes';
+
+export const notificationsPlugin = createPlugin({
+ id: 'notifications',
+ routes: {
+ root: rootRouteRef,
+ },
+ apis: [
+ createApiFactory({
+ api: notificationsApiRef,
+ deps: { fetchApi: fetchApiRef },
+ factory({ fetchApi }) {
+ return new NotificationsApiImpl({
+ fetchApi,
+ });
+ },
+ }),
+ ],
+});
+
+export const NotificationsPage = notificationsPlugin.provide(
+ createRoutableExtension({
+ name: 'NotificationsPage',
+ component: () =>
+ import('./components/NotificationsPage').then(m => m.NotificationsPage),
+ mountPoint: rootRouteRef,
+ }),
+);
diff --git a/plugins/notifications-frontend/src/routes.ts b/plugins/notifications-frontend/src/routes.ts
new file mode 100644
index 0000000000..d07f175254
--- /dev/null
+++ b/plugins/notifications-frontend/src/routes.ts
@@ -0,0 +1,7 @@
+import { createRouteRef } from '@backstage/core-plugin-api';
+
+import { NOTIFICATIONS_ROUTE } from './constants';
+
+export const rootRouteRef = createRouteRef({
+ id: NOTIFICATIONS_ROUTE,
+});
diff --git a/plugins/notifications-frontend/src/setupTests.ts b/plugins/notifications-frontend/src/setupTests.ts
new file mode 100644
index 0000000000..7b0828bfa8
--- /dev/null
+++ b/plugins/notifications-frontend/src/setupTests.ts
@@ -0,0 +1 @@
+import '@testing-library/jest-dom';
diff --git a/plugins/notifications-frontend/tsconfig.json b/plugins/notifications-frontend/tsconfig.json
new file mode 100644
index 0000000000..1964526a24
--- /dev/null
+++ b/plugins/notifications-frontend/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "@backstage/cli/config/tsconfig.json",
+ "include": ["src", "dev", "migrations"],
+ "exclude": ["node_modules"],
+ "compilerOptions": {
+ "outDir": "../../dist-types/plugins/notifications-frontend",
+ "rootDir": "."
+ }
+}
diff --git a/plugins/notifications-frontend/turbo.json b/plugins/notifications-frontend/turbo.json
new file mode 100644
index 0000000000..ff7afb3c84
--- /dev/null
+++ b/plugins/notifications-frontend/turbo.json
@@ -0,0 +1,9 @@
+{
+ "extends": ["//"],
+ "pipeline": {
+ "tsc": {
+ "outputs": ["../../dist-types/plugins/notifications-frontend/**"],
+ "dependsOn": ["^tsc"]
+ }
+ }
+}
diff --git a/plugins/rbac-backend/src/database/casbin-adapter-factory.test.ts b/plugins/rbac-backend/src/database/casbin-adapter-factory.test.ts
index dc3b8790ee..1d25869e05 100644
--- a/plugins/rbac-backend/src/database/casbin-adapter-factory.test.ts
+++ b/plugins/rbac-backend/src/database/casbin-adapter-factory.test.ts
@@ -49,7 +49,7 @@ describe('CasbinAdapterFactory', () => {
let mockDatabaseManager: DatabaseService;
beforeEach(() => {
- const db = Knex.knex({ client: MockClient });
+ const db = Knex.knex({ client: MockClient as unknown as undefined });
db.client = {
config: {
connection: {
diff --git a/yarn.lock b/yarn.lock
index a3a9aaf8e9..a09ca2e8e8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -20,6 +20,30 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
+"@anttiviljami/dtsgenerator@^3.19.1":
+ version "3.19.1"
+ resolved "https://registry.yarnpkg.com/@anttiviljami/dtsgenerator/-/dtsgenerator-3.19.1.tgz#0e84474a21fb3c2e5ebbe5c61a73e1229171954d"
+ integrity sha512-FlGAPqih3CFH9YsktVDtW26UEORjlIj8alH+MR7eNad6z9Cun7M9auRUWRcrdo1pq4ES8q6PmICrev/LyyKKKg==
+ dependencies:
+ commander "^11.1.0"
+ cross-fetch "^4.0.0"
+ debug "^4.3.4"
+ glob "^10.3.10"
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.2"
+ js-yaml "^4.1.0"
+ tslib "^2.6.2"
+ typescript "^5.2.2"
+
+"@apidevtools/json-schema-ref-parser@9.0.6":
+ version "9.0.6"
+ resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c"
+ integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==
+ dependencies:
+ "@jsdevtools/ono" "^7.1.3"
+ call-me-maybe "^1.0.1"
+ js-yaml "^3.13.1"
+
"@apidevtools/json-schema-ref-parser@9.0.9":
version "9.0.9"
resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b"
@@ -30,6 +54,28 @@
call-me-maybe "^1.0.1"
js-yaml "^4.1.0"
+"@apidevtools/json-schema-ref-parser@^10.1.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz#bf54494039a56fa7f77fed17dc6f01dfde50f64c"
+ integrity sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA==
+ dependencies:
+ "@jsdevtools/ono" "^7.1.3"
+ "@types/json-schema" "^7.0.11"
+ "@types/lodash.clonedeep" "^4.5.7"
+ js-yaml "^4.1.0"
+ lodash.clonedeep "^4.5.0"
+
+"@apidevtools/json-schema-ref-parser@^11.1.0":
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.1.0.tgz#0608ed1ba47c377c6732e7185f2ea06731b58fde"
+ integrity sha512-g/VW9ZQEFJAOwAyUb8JFf7MLiLy2uEB4rU270rGzDwICxnxMlPy0O11KVePSgS36K1NI29gSlK84n5INGhd4Ag==
+ dependencies:
+ "@jsdevtools/ono" "^7.1.3"
+ "@types/json-schema" "^7.0.13"
+ "@types/lodash.clonedeep" "^4.5.7"
+ js-yaml "^4.1.0"
+ lodash.clonedeep "^4.5.0"
+
"@apidevtools/json-schema-ref-parser@^9.0.6", "@apidevtools/json-schema-ref-parser@^9.1.2":
version "9.1.2"
resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz#8ff5386b365d4c9faa7c8b566ff16a46a577d9b8"
@@ -40,6 +86,29 @@
call-me-maybe "^1.0.1"
js-yaml "^4.1.0"
+"@apidevtools/openapi-schemas@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17"
+ integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==
+
+"@apidevtools/swagger-methods@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267"
+ integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==
+
+"@apidevtools/swagger-parser@^10.1.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6"
+ integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==
+ dependencies:
+ "@apidevtools/json-schema-ref-parser" "9.0.6"
+ "@apidevtools/openapi-schemas" "^2.1.0"
+ "@apidevtools/swagger-methods" "^3.0.2"
+ "@jsdevtools/ono" "^7.1.3"
+ ajv "^8.6.3"
+ ajv-draft-04 "^1.0.0"
+ call-me-maybe "^1.0.1"
+
"@asyncapi/avro-schema-parser@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@asyncapi/avro-schema-parser/-/avro-schema-parser-1.1.0.tgz#5d0491b53331f0748d8f6e8c33781c27cafe0f30"
@@ -907,6 +976,26 @@
tslib "^2.2.0"
uuid "^8.3.0"
+"@azure/identity@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.0.0.tgz#87d4c7b745f0855b83993518f1c7782dfb258bba"
+ integrity sha512-gtPYxIL0kI39Dw4t3HvlbfhOdXqKD2MqDgynlklF0j728j51dcKgRo6FLX0QzpBw/1gGfLxjMXqq3nKOSQ2lmA==
+ dependencies:
+ "@azure/abort-controller" "^1.0.0"
+ "@azure/core-auth" "^1.5.0"
+ "@azure/core-client" "^1.4.0"
+ "@azure/core-rest-pipeline" "^1.1.0"
+ "@azure/core-tracing" "^1.0.0"
+ "@azure/core-util" "^1.0.0"
+ "@azure/logger" "^1.0.0"
+ "@azure/msal-browser" "^3.5.0"
+ "@azure/msal-node" "^2.5.1"
+ events "^3.0.0"
+ jws "^4.0.0"
+ open "^8.0.0"
+ stoppable "^1.1.0"
+ tslib "^2.2.0"
+
"@azure/logger@^1.0.0":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.4.tgz#28bc6d0e5b3c38ef29296b32d35da4e483593fa1"
@@ -921,11 +1010,23 @@
dependencies:
"@azure/msal-common" "13.3.0"
+"@azure/msal-browser@^3.5.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.7.0.tgz#8536b7378c23be7374bb00ba19ffd1cdacbc3732"
+ integrity sha512-ktDB/Gf7UDgYBJOnoIlh70lxIo4e1/D2UgHuayB4RntN1IlusfTtIVH3k8NpJMdl+38tfTXIaUoR+qlr5voZEg==
+ dependencies:
+ "@azure/msal-common" "14.6.0"
+
"@azure/msal-common@13.3.0", "@azure/msal-common@^13.1.0":
version "13.3.0"
resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-13.3.0.tgz#dfa39810e0fbce6e07ca85a2cf305da58d30b7c9"
integrity sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==
+"@azure/msal-common@14.6.0":
+ version "14.6.0"
+ resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.6.0.tgz#3a565f94e810a67ecbaa2cd8250e658876af8329"
+ integrity sha512-AGusT/JvxdzJIYi5u0n97cmhd3pUT6UuI6rEkT5iDeT2FGcV0/EB8pk+dy6GLPpYg9vhDCuyoYrEZGd+2UeCCQ==
+
"@azure/msal-node@^1.17.3":
version "1.18.3"
resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-1.18.3.tgz#e265556d4db0340590eeab5341469fb6740251d0"
@@ -935,6 +1036,15 @@
jsonwebtoken "^9.0.0"
uuid "^8.3.0"
+"@azure/msal-node@^2.5.1":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.6.1.tgz#097f2def63b70acb11a84ee74d6989ba2315f4af"
+ integrity sha512-wYwz83pWatTNWUCkTi3cAOXbchad5FnZz/pbZz7b8Z6FuEqohXcTtg6BLip9SmcjN6FlbwUdJIZYOof2v1Gnrg==
+ dependencies:
+ "@azure/msal-common" "14.6.0"
+ jsonwebtoken "^9.0.0"
+ uuid "^8.3.0"
+
"@azure/storage-blob@^12.5.0":
version "12.16.0"
resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.16.0.tgz#c41fb1e538d6f6e2a6756bfcc69382eededf4fa1"
@@ -2764,6 +2874,42 @@
winston "^3.2.1"
winston-transport "^4.5.0"
+"@backstage/backend-app-api@^0.5.9":
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-0.5.9.tgz#904030e4c23781ed5848c11e736470aab731727a"
+ integrity sha512-VPwZO+CTJsNR+vRsif+TpW021D0BtrW+uavW2BO5Vcf4tdjaC7O4ZfjMTBE5xJt8lJpvciz09mjbUb1zrc6HIw==
+ dependencies:
+ "@backstage/backend-common" "^0.20.0"
+ "@backstage/backend-plugin-api" "^0.6.8"
+ "@backstage/backend-tasks" "^0.5.13"
+ "@backstage/cli-common" "^0.1.13"
+ "@backstage/cli-node" "^0.2.1"
+ "@backstage/config" "^1.1.1"
+ "@backstage/config-loader" "^1.6.0"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/plugin-auth-node" "^0.4.2"
+ "@backstage/plugin-permission-node" "^0.7.19"
+ "@backstage/types" "^1.1.1"
+ "@manypkg/get-packages" "^1.1.3"
+ "@types/cors" "^2.8.6"
+ "@types/express" "^4.17.6"
+ compression "^1.7.4"
+ cors "^2.8.5"
+ express "^4.17.1"
+ express-promise-router "^4.1.0"
+ fs-extra "10.1.0"
+ helmet "^6.0.0"
+ lodash "^4.17.21"
+ logform "^2.3.2"
+ minimatch "^5.0.0"
+ minimist "^1.2.5"
+ morgan "^1.10.0"
+ node-forge "^1.3.1"
+ selfsigned "^2.0.0"
+ stoppable "^1.1.0"
+ winston "^3.2.1"
+ winston-transport "^4.5.0"
+
"@backstage/backend-common@0.19.8", "@backstage/backend-common@^0.19.4", "@backstage/backend-common@^0.19.8":
version "0.19.8"
resolved "https://registry.yarnpkg.com/@backstage/backend-common/-/backend-common-0.19.8.tgz#df4cb4826edc8b60a74d34904eca349d913c257f"
@@ -2824,6 +2970,67 @@
yauzl "^2.10.0"
yn "^4.0.0"
+"@backstage/backend-common@^0.20.0":
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/@backstage/backend-common/-/backend-common-0.20.0.tgz#b3f6e7a33605ed8c32a4282186e8615169212cda"
+ integrity sha512-/zMfTYCY2YJCLjnjBSAxE1ALZfxxpWrz5HZnH1yjk1H/vdXfxa6YxYTXBtry7ClELokIWWcQzUMHaNy+9dLW5Q==
+ dependencies:
+ "@aws-sdk/abort-controller" "^3.347.0"
+ "@aws-sdk/client-s3" "^3.350.0"
+ "@aws-sdk/credential-providers" "^3.350.0"
+ "@aws-sdk/types" "^3.347.0"
+ "@backstage/backend-app-api" "^0.5.9"
+ "@backstage/backend-dev-utils" "^0.1.2"
+ "@backstage/backend-plugin-api" "^0.6.8"
+ "@backstage/cli-common" "^0.1.13"
+ "@backstage/config" "^1.1.1"
+ "@backstage/config-loader" "^1.6.0"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/integration" "^1.8.0"
+ "@backstage/integration-aws-node" "^0.1.8"
+ "@backstage/types" "^1.1.1"
+ "@google-cloud/storage" "^7.0.0"
+ "@keyv/memcache" "^1.3.5"
+ "@keyv/redis" "^2.5.3"
+ "@kubernetes/client-node" "0.20.0"
+ "@manypkg/get-packages" "^1.1.3"
+ "@octokit/rest" "^19.0.3"
+ "@types/cors" "^2.8.6"
+ "@types/dockerode" "^3.3.0"
+ "@types/express" "^4.17.6"
+ "@types/luxon" "^3.0.0"
+ "@types/webpack-env" "^1.15.2"
+ archiver "^6.0.0"
+ base64-stream "^1.0.0"
+ compression "^1.7.4"
+ concat-stream "^2.0.0"
+ cors "^2.8.5"
+ dockerode "^3.3.1"
+ express "^4.17.1"
+ express-promise-router "^4.1.0"
+ fs-extra "10.1.0"
+ git-url-parse "^13.0.0"
+ helmet "^6.0.0"
+ isomorphic-git "^1.23.0"
+ jose "^4.6.0"
+ keyv "^4.5.2"
+ knex "^3.0.0"
+ lodash "^4.17.21"
+ logform "^2.3.2"
+ luxon "^3.0.0"
+ minimatch "^5.0.0"
+ mysql2 "^2.2.5"
+ node-fetch "^2.6.7"
+ p-limit "^3.1.0"
+ pg "^8.11.3"
+ raw-body "^2.4.1"
+ tar "^6.1.12"
+ uuid "^8.3.2"
+ winston "^3.2.1"
+ winston-transport "^4.5.0"
+ yauzl "^2.10.0"
+ yn "^4.0.0"
+
"@backstage/backend-dev-utils@^0.1.2":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@backstage/backend-dev-utils/-/backend-dev-utils-0.1.2.tgz#357f2b669bed0452d9dca511e35a61071c57ea20"
@@ -2844,6 +3051,24 @@
lodash "^4.17.21"
openapi3-ts "^3.1.2"
+"@backstage/backend-openapi-utils@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@backstage/backend-openapi-utils/-/backend-openapi-utils-0.1.1.tgz#50935584d0640e8a74c3b26284965d34ead28fb4"
+ integrity sha512-3z2w6+NC6z7TNDJwEhSQRTXzyDREXgzAzK1ZK43JKAcZFbPiob/z4SiJm1WmdtABlZaw/3imakpb0xSavpfdfg==
+ dependencies:
+ "@backstage/backend-plugin-api" "^0.6.8"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@types/express" "^4.17.6"
+ "@types/express-serve-static-core" "^4.17.5"
+ express "^4.17.1"
+ express-openapi-validator "^5.0.4"
+ express-promise-router "^4.1.0"
+ json-schema-to-ts "^2.6.2"
+ lodash "^4.17.21"
+ openapi-merge "^1.3.2"
+ openapi3-ts "^3.1.2"
+
"@backstage/backend-plugin-api@0.6.6", "@backstage/backend-plugin-api@^0.6.6":
version "0.6.6"
resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-0.6.6.tgz#55e0ee5f7685438d808bb3ae7351c0b74d1a707c"
@@ -2872,6 +3097,20 @@
express "^4.17.1"
knex "^2.0.0"
+"@backstage/backend-plugin-api@^0.6.8":
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-0.6.8.tgz#05f45db35c0eec191d2eb36df74c29c43c55ddab"
+ integrity sha512-Ylo/uZ1LrKyrJT4zZyjjeDJr/BP9Mf6x46Oi04aXiz3cyCUOxKxjN+NZjiBzdaUnANn4U9+4O2IoHyCd4beYnA==
+ dependencies:
+ "@backstage/backend-tasks" "^0.5.13"
+ "@backstage/config" "^1.1.1"
+ "@backstage/plugin-auth-node" "^0.4.2"
+ "@backstage/plugin-permission-common" "^0.7.11"
+ "@backstage/types" "^1.1.1"
+ "@types/express" "^4.17.6"
+ express "^4.17.1"
+ knex "^3.0.0"
+
"@backstage/backend-plugin-manager@npm:@janus-idp/backend-plugin-manager@0.0.2-janus.5":
version "0.0.2-janus.5"
resolved "https://registry.yarnpkg.com/@janus-idp/backend-plugin-manager/-/backend-plugin-manager-0.0.2-janus.5.tgz#58e3c9fa2fe096da7705b86f0262bae14b3bf0f5"
@@ -2919,6 +3158,25 @@
winston "^3.2.1"
zod "^3.21.4"
+"@backstage/backend-tasks@^0.5.13":
+ version "0.5.13"
+ resolved "https://registry.yarnpkg.com/@backstage/backend-tasks/-/backend-tasks-0.5.13.tgz#535cd0f70f9c79e66cf2033401eecb1f4545138d"
+ integrity sha512-zMMNEolfi5dRWuom74n1piRp9Tkjc68SBNiMKSRvfEDjstTgACChVWl/Mt55LfLAZfKCynjZG1IBErxob5p6Ug==
+ dependencies:
+ "@backstage/backend-common" "^0.20.0"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/types" "^1.1.1"
+ "@opentelemetry/api" "^1.3.0"
+ "@types/luxon" "^3.0.0"
+ cron "^2.0.0"
+ knex "^3.0.0"
+ lodash "^4.17.21"
+ luxon "^3.0.0"
+ uuid "^8.0.0"
+ winston "^3.2.1"
+ zod "^3.22.4"
+
"@backstage/backend-test-utils@0.2.7", "@backstage/backend-test-utils@^0.2.7":
version "0.2.7"
resolved "https://registry.yarnpkg.com/@backstage/backend-test-utils/-/backend-test-utils-0.2.7.tgz#5fcd73e3013b7461d14995263f9b3a6009d458a1"
@@ -2960,6 +3218,16 @@
"@backstage/errors" "^1.2.3"
cross-fetch "^4.0.0"
+"@backstage/catalog-client@^1.5.0":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@backstage/catalog-client/-/catalog-client-1.5.1.tgz#159c2442cbd3aefecb36ca6c61aec8a3355359a8"
+ integrity sha512-GWTwRaJd1i9f5OHSkt4yf3jxohJv5xvqZei1anFxjZvXfxFTa0zG6kWW43qomRiaKsbegohnM7HWVOOgpJ6Azw==
+ dependencies:
+ "@backstage/catalog-model" "^1.4.3"
+ "@backstage/errors" "^1.2.3"
+ cross-fetch "^4.0.0"
+ uri-template "^2.0.0"
+
"@backstage/catalog-model@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.4.1.tgz#8d57217647a3eef68ad7c7c268af573be9974201"
@@ -3007,6 +3275,20 @@
semver "^7.5.3"
zod "^3.21.4"
+"@backstage/cli-node@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@backstage/cli-node/-/cli-node-0.2.1.tgz#7e7da0d6f3471e6843c55b547694def7dce9ee4a"
+ integrity sha512-S67miZbAjVVlQrLyc0hyci4grtSFcnh25Hg9XkPKs28bYEXFC6d0246sl0gpSG9+EMO2TdVQezwVfV3pZn/41w==
+ dependencies:
+ "@backstage/cli-common" "^0.1.13"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/types" "^1.1.1"
+ "@manypkg/get-packages" "^1.1.3"
+ "@yarnpkg/parsers" "^3.0.0-rc.4"
+ fs-extra "10.1.0"
+ semver "^7.5.3"
+ zod "^3.22.4"
+
"@backstage/cli@0.22.9":
version "0.22.9"
resolved "https://registry.yarnpkg.com/@backstage/cli/-/cli-0.22.9.tgz#4f47b23366a2f438f27a0d37ea1790aad725e0b2"
@@ -3257,6 +3539,28 @@
typescript-json-schema "^0.61.0"
yaml "^2.0.0"
+"@backstage/config-loader@^1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@backstage/config-loader/-/config-loader-1.6.0.tgz#f3486f099923838620f7e557753e0180a05cc955"
+ integrity sha512-T8knDbAJYdTqvXqXwyzRQiKQwjeBasy5I7wgKCCzM7xuZSswN6C2Y7Ljx0qmdVHejKclVxXpiUq5uRB9b0IVjg==
+ dependencies:
+ "@backstage/cli-common" "^0.1.13"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/types" "^1.1.1"
+ "@types/json-schema" "^7.0.6"
+ ajv "^8.10.0"
+ chokidar "^3.5.2"
+ fs-extra "10.1.0"
+ json-schema "^0.4.0"
+ json-schema-merge-allof "^0.8.1"
+ json-schema-traverse "^1.0.0"
+ lodash "^4.17.21"
+ minimist "^1.2.5"
+ node-fetch "^2.6.7"
+ typescript-json-schema "^0.62.0"
+ yaml "^2.0.0"
+
"@backstage/config@1.1.1", "@backstage/config@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@backstage/config/-/config-1.1.1.tgz#824ef3d74b391579060d5646fa1f45fcd553ce02"
@@ -3293,6 +3597,25 @@
zen-observable "^0.10.0"
zod "^3.21.4"
+"@backstage/core-app-api@^1.11.2":
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.11.2.tgz#02e0f697b7594854a5c0c32e8f2d973971107590"
+ integrity sha512-ullzDYxavKYs4Xywp7Jsh2sppeUWZY5UGibEVJfcfDuJaaBL7I4KaZMlEPykkCXYfusK8PNPlz1IJJQDzDvbzw==
+ dependencies:
+ "@backstage/config" "^1.1.1"
+ "@backstage/core-plugin-api" "^1.8.1"
+ "@backstage/types" "^1.1.1"
+ "@backstage/version-bridge" "^1.0.7"
+ "@types/prop-types" "^15.7.3"
+ "@types/react" "^16.13.1 || ^17.0.0"
+ history "^5.0.0"
+ i18next "^22.4.15"
+ lodash "^4.17.21"
+ prop-types "^15.7.2"
+ react-use "^17.2.4"
+ zen-observable "^0.10.0"
+ zod "^3.22.4"
+
"@backstage/core-components@0.13.6", "@backstage/core-components@^0.13.6":
version "0.13.6"
resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.13.6.tgz#c34b9ec741c993db7a63634bc25b9d23e4939e6b"
@@ -3413,6 +3736,18 @@
history "^5.0.0"
i18next "^22.4.15"
+"@backstage/core-plugin-api@^1.8.1":
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.8.1.tgz#8059389029d81b858a3774ff84707c71a5294157"
+ integrity sha512-koAOCkjP9mKHs3bsk2LQPDDjvFRKlW6PMlcc1APN1mD7eIo3RaszL7fi/a/MJBtuEpIjs2rhuE+rF/rcffXSyA==
+ dependencies:
+ "@backstage/config" "^1.1.1"
+ "@backstage/types" "^1.1.1"
+ "@backstage/version-bridge" "^1.0.7"
+ "@types/react" "^16.13.1 || ^17.0.0"
+ history "^5.0.0"
+ i18next "^22.4.15"
+
"@backstage/dev-utils@1.0.22":
version "1.0.22"
resolved "https://registry.yarnpkg.com/@backstage/dev-utils/-/dev-utils-1.0.22.tgz#3c6b3844bda776858e16361c6a990ec8c3873b6e"
@@ -3506,6 +3841,19 @@
"@backstage/config" "^1.1.1"
"@backstage/errors" "^1.2.3"
+"@backstage/integration-aws-node@^0.1.8":
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/@backstage/integration-aws-node/-/integration-aws-node-0.1.8.tgz#c0582a63e2348a42bbe172bdcd4609f024cc0051"
+ integrity sha512-WD/ahhk1d92ycjBOIRK2gtvuoP1nt5lNMKkfR1qsRBlgZFUPRCe7rkdELGpmRgrGBzU7ZyWfWGjLUh/Qpfva9Q==
+ dependencies:
+ "@aws-sdk/client-sts" "^3.350.0"
+ "@aws-sdk/credential-provider-node" "^3.350.0"
+ "@aws-sdk/credential-providers" "^3.350.0"
+ "@aws-sdk/types" "^3.347.0"
+ "@aws-sdk/util-arn-parser" "^3.310.0"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+
"@backstage/integration-react@^1.1.20":
version "1.1.20"
resolved "https://registry.yarnpkg.com/@backstage/integration-react/-/integration-react-1.1.20.tgz#f2e6049494b3945cfc8588ec5641c4460ce967fa"
@@ -3573,6 +3921,20 @@
lodash "^4.17.21"
luxon "^3.0.0"
+"@backstage/integration@^1.8.0":
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.8.0.tgz#affc54e1c12c5a4e68a92de4e42c6cf001bdf6ec"
+ integrity sha512-FCFOubvpKK2dt38sNATrImHrS0pkmvS2LPzvLQ01JzRy5F/QxsdRGxJmzB9irpLOUh7F3/Ilr7cBdG5nYyYVOA==
+ dependencies:
+ "@azure/identity" "^4.0.0"
+ "@backstage/config" "^1.1.1"
+ "@octokit/auth-app" "^4.0.0"
+ "@octokit/rest" "^19.0.3"
+ cross-fetch "^4.0.0"
+ git-url-parse "^13.0.0"
+ lodash "^4.17.21"
+ luxon "^3.0.0"
+
"@backstage/plugin-api-docs@^0.9.12":
version "0.9.12"
resolved "https://registry.yarnpkg.com/@backstage/plugin-api-docs/-/plugin-api-docs-0.9.12.tgz#76166304bfd96c1ad54fb552bbdb62cfc6fd0b88"
@@ -3789,6 +4151,29 @@
node-fetch "^2.6.7"
winston "^3.2.1"
+"@backstage/plugin-auth-node@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.4.2.tgz#2101fa8c2fc640dc2c4ca964a5d749ebed9f072e"
+ integrity sha512-f0C+qelouM5Ej02qWw84aIbRXMtre9Lncx2zAlW8VxZfCXH/we7kjjsiY3zn8BR0DvBd9804mbXSFSuK7aEZ5w==
+ dependencies:
+ "@backstage/backend-common" "^0.20.0"
+ "@backstage/backend-plugin-api" "^0.6.8"
+ "@backstage/catalog-client" "^1.5.0"
+ "@backstage/catalog-model" "^1.4.3"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/types" "^1.1.1"
+ "@types/express" "*"
+ "@types/passport" "^1.0.3"
+ express "^4.17.1"
+ jose "^4.6.0"
+ lodash "^4.17.21"
+ node-fetch "^2.6.7"
+ passport "^0.7.0"
+ winston "^3.2.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.21.4"
+
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-backend-module-scaffolder-entity-model/-/plugin-catalog-backend-module-scaffolder-entity-model-0.1.3.tgz#71cbe7c0508fde238d3a2dc52e9b0bb077b3e54c"
@@ -4288,8 +4673,20 @@
uuid "^8.0.0"
zod "^3.21.4"
-"@backstage/plugin-permission-node@0.7.17", "@backstage/plugin-permission-node@^0.7.17":
- version "0.7.17"
+"@backstage/plugin-permission-common@^0.7.11":
+ version "0.7.11"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.7.11.tgz#17f80f80ff8c95466031ba1e0554ce84fe50ba4b"
+ integrity sha512-EU/DY11suQt9I4YU7CxiW25ceiZzqdgAL400lHCCIEKBBmE5XFQkZ8DGOofwJJRfyYJ5Nr7Y2BOsdB40OxAxxQ==
+ dependencies:
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/types" "^1.1.1"
+ cross-fetch "^4.0.0"
+ uuid "^8.0.0"
+ zod "^3.22.4"
+
+"@backstage/plugin-permission-node@0.7.17", "@backstage/plugin-permission-node@^0.7.17":
+ version "0.7.17"
resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.7.17.tgz#6ac25800642b9e6291fd38e571d0bf642a5893e6"
integrity sha512-Q+/OOz1qYAJPb9HqS7nlFWVxCWug25ODOOOyk4NRtPiy6Buxqly6l2cRCqvBpJYv5nV/R0UvQuBk3SoiS5uXjw==
dependencies:
@@ -4305,6 +4702,23 @@
zod "^3.21.4"
zod-to-json-schema "^3.20.4"
+"@backstage/plugin-permission-node@^0.7.19":
+ version "0.7.19"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.7.19.tgz#b114eec0d4341914b7553b030840962ec24813d4"
+ integrity sha512-ym/gjFVjMpSrHf8rcrrm8KQfuXM6eKaW4BcqIteNQ/oWJyCMPgtiE3wgqon0r8+EPzStngJMlvGQOxAMcIfSWA==
+ dependencies:
+ "@backstage/backend-common" "^0.20.0"
+ "@backstage/backend-plugin-api" "^0.6.8"
+ "@backstage/config" "^1.1.1"
+ "@backstage/errors" "^1.2.3"
+ "@backstage/plugin-auth-node" "^0.4.2"
+ "@backstage/plugin-permission-common" "^0.7.11"
+ "@types/express" "^4.17.6"
+ express "^4.17.1"
+ express-promise-router "^4.1.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.20.4"
+
"@backstage/plugin-permission-react@^0.4.16":
version "0.4.16"
resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.16.tgz#016ff8fbb9411faf411e76690ca23a3553879442"
@@ -4331,6 +4745,19 @@
react-use "^17.2.4"
swr "^2.0.0"
+"@backstage/plugin-permission-react@^0.4.18":
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.18.tgz#4339f4738e7991858d7d599e7c9802f9bb38e408"
+ integrity sha512-KU8kFiPM/lODGlGLVzite9hIf9nh8MAToqZamtgsyEQF/omkPWJ24rVqo4XW01dmjm4jUJi3nGIzXZoo5l5ysQ==
+ dependencies:
+ "@backstage/config" "^1.1.1"
+ "@backstage/core-plugin-api" "^1.8.1"
+ "@backstage/plugin-permission-common" "^0.7.11"
+ "@types/react" "^16.13.1 || ^17.0.0"
+ cross-fetch "^4.0.0"
+ react-use "^17.2.4"
+ swr "^2.0.0"
+
"@backstage/plugin-proxy-backend@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@backstage/plugin-proxy-backend/-/plugin-proxy-backend-0.4.3.tgz#45b877cabd8887f41559f5e1ffbe16292e6533dd"
@@ -4935,6 +5362,25 @@
i18next "^22.4.15"
zen-observable "^0.10.0"
+"@backstage/test-utils@^1.4.4":
+ version "1.4.6"
+ resolved "https://registry.yarnpkg.com/@backstage/test-utils/-/test-utils-1.4.6.tgz#09fa814ee72fce418db17861b228f6d9d7679f86"
+ integrity sha512-zHLQzTODCvkJcznm4/ZkXMmldHbmW316VUKAkOy0kJUnO/VyidZuoB+KYGo/2lScXxJBfkBBscZiIQQpiGlOgQ==
+ dependencies:
+ "@backstage/config" "^1.1.1"
+ "@backstage/core-app-api" "^1.11.2"
+ "@backstage/core-plugin-api" "^1.8.1"
+ "@backstage/plugin-permission-common" "^0.7.11"
+ "@backstage/plugin-permission-react" "^0.4.18"
+ "@backstage/theme" "^0.5.0"
+ "@backstage/types" "^1.1.1"
+ "@material-ui/core" "^4.12.2"
+ "@material-ui/icons" "^4.9.1"
+ "@types/react" "^16.13.1 || ^17.0.0"
+ cross-fetch "^4.0.0"
+ i18next "^22.4.15"
+ zen-observable "^0.10.0"
+
"@backstage/theme@0.4.3", "@backstage/theme@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.4.3.tgz#58901531da6b2d9b3058f532ee15c866a06ab9af"
@@ -4953,6 +5399,15 @@
"@emotion/styled" "^11.10.5"
"@mui/material" "^5.12.2"
+"@backstage/theme@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.5.0.tgz#4a4d0fa7dcf5335628f6c261e8bc82516327578a"
+ integrity sha512-lqYzmnNtnv0lkO6XOexUW/wzDFZNMg950WjEi6iTNpFn+D4T1XwC4n+CsF5uAMgYiGAoqZRkRYfGsK+xKciENw==
+ dependencies:
+ "@emotion/react" "^11.10.5"
+ "@emotion/styled" "^11.10.5"
+ "@mui/material" "^5.12.2"
+
"@backstage/types@1.1.1", "@backstage/types@^1.1.0", "@backstage/types@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@backstage/types/-/types-1.1.1.tgz#c9ccb30357005e7fb5fa2ac140198059976eb076"
@@ -5659,6 +6114,11 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa"
integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==
+"@exodus/schemasafe@^1.0.0-rc.2":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f"
+ integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==
+
"@fal-works/esbuild-plugin-global-externals@^2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4"
@@ -5765,16 +6225,34 @@
arrify "^2.0.0"
extend "^3.0.2"
+"@google-cloud/paginator@^5.0.0":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.0.tgz#b8cc62f151685095d11467402cbf417c41bf14e6"
+ integrity sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==
+ dependencies:
+ arrify "^2.0.0"
+ extend "^3.0.2"
+
"@google-cloud/projectify@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-3.0.0.tgz#302b25f55f674854dce65c2532d98919b118a408"
integrity sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==
+"@google-cloud/projectify@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be"
+ integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==
+
"@google-cloud/promisify@^3.0.0":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-3.0.1.tgz#8d724fb280f47d1ff99953aee0c1669b25238c2e"
integrity sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==
+"@google-cloud/promisify@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1"
+ integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==
+
"@google-cloud/storage@^6.0.0":
version "6.12.0"
resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.12.0.tgz#a5d3093cc075252dca5bd19a3cfda406ad3a9de1"
@@ -5799,6 +6277,29 @@
teeny-request "^8.0.0"
uuid "^8.0.0"
+"@google-cloud/storage@^7.0.0":
+ version "7.7.0"
+ resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-7.7.0.tgz#d942ebea018386d276256bad93ceec9bdb955333"
+ integrity sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==
+ dependencies:
+ "@google-cloud/paginator" "^5.0.0"
+ "@google-cloud/projectify" "^4.0.0"
+ "@google-cloud/promisify" "^4.0.0"
+ abort-controller "^3.0.0"
+ async-retry "^1.3.3"
+ compressible "^2.0.12"
+ duplexify "^4.0.0"
+ ent "^2.2.0"
+ fast-xml-parser "^4.3.0"
+ gaxios "^6.0.2"
+ google-auth-library "^9.0.0"
+ mime "^3.0.0"
+ mime-types "^2.0.8"
+ p-limit "^3.0.1"
+ retry-request "^7.0.0"
+ teeny-request "^9.0.0"
+ uuid "^8.0.0"
+
"@graphiql/react@^0.10.0":
version "0.10.0"
resolved "https://registry.yarnpkg.com/@graphiql/react/-/react-0.10.0.tgz#8d888949dc6c9ddebe0817aeba3e2c164bfbb1bb"
@@ -5925,34 +6426,6 @@
"@backstage/config" "^1.1.1"
deep-freeze "^0.0.1"
-"@janus-idp/backstage-plugin-rbac-backend@^1.6.4":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@janus-idp/backstage-plugin-rbac-backend/-/backstage-plugin-rbac-backend-1.7.1.tgz#dfcd6bbf5357db3c88f6223d70ab0f6051abed55"
- integrity sha512-KWFBfFfmteA//Lq/NH79LHXOCCWBHNsoakSMhaFnACt4R1ChlmgOsg0x56jKpIfE/5RqjYetxEDDhX6Pmx2sWw==
- dependencies:
- "@backstage/backend-common" "^0.19.8"
- "@backstage/backend-plugin-api" "^0.5.4"
- "@backstage/catalog-client" "^1.4.5"
- "@backstage/catalog-model" "^1.4.3"
- "@backstage/config" "^1.1.1"
- "@backstage/core-plugin-api" "^1.7.0"
- "@backstage/errors" "^1.2.3"
- "@backstage/plugin-auth-node" "^0.4.0"
- "@backstage/plugin-permission-backend" "^0.5.29"
- "@backstage/plugin-permission-common" "^0.7.9"
- "@backstage/plugin-permission-node" "^0.7.17"
- "@dagrejs/graphlib" "^2.1.13"
- "@janus-idp/backstage-plugin-rbac-common" "1.2.0"
- casbin "^5.27.1"
- express "^4.18.2"
- express-promise-router "^4.1.1"
- knex "^2.0.0"
- lodash "^4.17.21"
- qs "^6.11.2"
- typeorm-adapter "^1.6.1"
- winston "^3.11.0"
- yn "^4.0.0"
-
"@jest/console@^29.7.0":
version "29.7.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc"
@@ -6140,6 +6613,17 @@
slash "^3.0.0"
write-file-atomic "^4.0.2"
+"@jest/types@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+ integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
"@jest/types@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
@@ -6256,6 +6740,13 @@
dependencies:
ioredis "^5.3.2"
+"@koa/cors@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-4.0.0.tgz#b2d300d7368d2e0ad6faa1d918eff6d0cde0859a"
+ integrity sha512-Y4RrbvGTlAaa04DBoPBWJqDR5gPj32OOz827ULXfgB1F7piD1MB/zwn8JR2LAnvdILhxUbXbkXGWuNVsFuVFCQ==
+ dependencies:
+ vary "^1.1.2"
+
"@kubernetes-models/apimachinery@^1.1.0", "@kubernetes-models/apimachinery@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@kubernetes-models/apimachinery/-/apimachinery-1.2.1.tgz#39725bf5e1f50972475ee6e614d5d70e41876b13"
@@ -6306,6 +6797,28 @@
optionalDependencies:
openid-client "^5.3.0"
+"@kubernetes/client-node@0.20.0":
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/@kubernetes/client-node/-/client-node-0.20.0.tgz#4447ae27fd6eef3d4830a5a039f3b84ffd5c5913"
+ integrity sha512-xxlv5GLX4FVR/dDKEsmi4SPeuB49aRc35stndyxcC73XnUEEwF39vXbROpHOirmDse8WE9vxOjABnSVS+jb7EA==
+ dependencies:
+ "@types/js-yaml" "^4.0.1"
+ "@types/node" "^20.1.1"
+ "@types/request" "^2.47.1"
+ "@types/ws" "^8.5.3"
+ byline "^5.0.0"
+ isomorphic-ws "^5.0.0"
+ js-yaml "^4.1.0"
+ jsonpath-plus "^7.2.0"
+ request "^2.88.0"
+ rfc4648 "^1.3.0"
+ stream-buffers "^3.0.2"
+ tar "^6.1.11"
+ tslib "^2.4.1"
+ ws "^8.11.0"
+ optionalDependencies:
+ openid-client "^5.3.0"
+
"@leichtgewicht/ip-codec@^2.0.1":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
@@ -6330,7 +6843,7 @@
dependencies:
"@lezer/common" "^1.0.0"
-"@lukeed/csprng@^1.1.0":
+"@lukeed/csprng@^1.0.0", "@lukeed/csprng@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe"
integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==
@@ -6700,6 +7213,34 @@
pump "^3.0.0"
tar-fs "^2.1.1"
+"@nestjs/axios@0.1.0":
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/@nestjs/axios/-/axios-0.1.0.tgz#6cf93df11ef93b598b3c7411adb980eedd13b3e3"
+ integrity sha512-b2TT2X6BFbnNoeteiaxCIiHaFcSbVW+S5yygYqiIq5i6H77yIU3IVuLdpQkHq8/EqOWFwMopLN8jdkUT71Am9w==
+ dependencies:
+ axios "0.27.2"
+
+"@nestjs/common@9.3.11":
+ version "9.3.11"
+ resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-9.3.11.tgz#95a54a2dd0fec0a7abc1edba793c53a53b59c783"
+ integrity sha512-IFZ2G/5UKWC2Uo7tJ4SxGed2+aiA+sJyWeWsGTogKVDhq90oxVBToh+uCDeI31HNUpqYGoWmkletfty42zUd8A==
+ dependencies:
+ uid "2.0.1"
+ iterare "1.2.1"
+ tslib "2.5.0"
+
+"@nestjs/core@9.3.11":
+ version "9.3.11"
+ resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-9.3.11.tgz#1be65db0e889f8f12b87aec12c9cf66ea6043205"
+ integrity sha512-CI27a2JFd5rvvbgkalWqsiwQNhcP4EAG5BUK8usjp29wVp1kx30ghfBT8FLqIgmkRVo65A0IcEnWsxeXMntkxQ==
+ dependencies:
+ uid "2.0.1"
+ "@nuxtjs/opencollective" "0.3.2"
+ fast-safe-stringify "2.1.1"
+ iterare "1.2.1"
+ path-to-regexp "3.2.0"
+ tslib "2.5.0"
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -6764,6 +7305,45 @@
treeverse "^2.0.0"
walk-up-path "^1.0.0"
+"@npmcli/arborist@^6.3.0", "@npmcli/arborist@^6.5.0":
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.5.0.tgz#ee24ecc56e4c387d78c3bce66918b386df6bd560"
+ integrity sha512-Ir14P+DyH4COJ9fVbmxVy+9GmyU3e/DnlBtijVN7B3Ri53Y9QmAqi1S9IifG0PTGsfa2U4zhAF8e6I/0VXfWjg==
+ dependencies:
+ "@isaacs/string-locale-compare" "^1.1.0"
+ "@npmcli/fs" "^3.1.0"
+ "@npmcli/installed-package-contents" "^2.0.2"
+ "@npmcli/map-workspaces" "^3.0.2"
+ "@npmcli/metavuln-calculator" "^5.0.0"
+ "@npmcli/name-from-folder" "^2.0.0"
+ "@npmcli/node-gyp" "^3.0.0"
+ "@npmcli/package-json" "^4.0.0"
+ "@npmcli/query" "^3.0.0"
+ "@npmcli/run-script" "^6.0.0"
+ bin-links "^4.0.1"
+ cacache "^17.0.4"
+ common-ancestor-path "^1.0.1"
+ hosted-git-info "^6.1.1"
+ json-parse-even-better-errors "^3.0.0"
+ json-stringify-nice "^1.1.4"
+ minimatch "^9.0.0"
+ nopt "^7.0.0"
+ npm-install-checks "^6.2.0"
+ npm-package-arg "^10.1.0"
+ npm-pick-manifest "^8.0.1"
+ npm-registry-fetch "^14.0.3"
+ npmlog "^7.0.1"
+ pacote "^15.0.8"
+ parse-conflict-json "^3.0.0"
+ proc-log "^3.0.0"
+ promise-all-reject-late "^1.0.0"
+ promise-call-limit "^1.0.2"
+ read-package-json-fast "^3.0.2"
+ semver "^7.3.7"
+ ssri "^10.0.1"
+ treeverse "^3.0.0"
+ walk-up-path "^3.0.1"
+
"@npmcli/ci-detect@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89"
@@ -6783,6 +7363,20 @@
semver "^7.3.5"
walk-up-path "^1.0.0"
+"@npmcli/config@^6.2.1":
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.4.0.tgz#3b1ddfa0c452fd09beac2cf05ca49b76c7a36bc8"
+ integrity sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w==
+ dependencies:
+ "@npmcli/map-workspaces" "^3.0.2"
+ ci-info "^3.8.0"
+ ini "^4.1.0"
+ nopt "^7.0.0"
+ proc-log "^3.0.0"
+ read-package-json-fast "^3.0.2"
+ semver "^7.3.5"
+ walk-up-path "^3.0.1"
+
"@npmcli/disparity-colors@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba"
@@ -6790,6 +7384,13 @@
dependencies:
ansi-styles "^4.3.0"
+"@npmcli/disparity-colors@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833"
+ integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg==
+ dependencies:
+ ansi-styles "^4.3.0"
+
"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865"
@@ -6820,6 +7421,20 @@
semver "^7.3.5"
which "^2.0.2"
+"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1", "@npmcli/git@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6"
+ integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==
+ dependencies:
+ "@npmcli/promise-spawn" "^6.0.0"
+ lru-cache "^7.4.4"
+ npm-pick-manifest "^8.0.0"
+ proc-log "^3.0.0"
+ promise-inflight "^1.0.1"
+ promise-retry "^2.0.1"
+ semver "^7.3.5"
+ which "^3.0.0"
+
"@npmcli/installed-package-contents@^1.0.7":
version "1.0.7"
resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa"
@@ -6828,6 +7443,14 @@
npm-bundled "^1.1.1"
npm-normalize-package-bin "^1.0.1"
+"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33"
+ integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==
+ dependencies:
+ npm-bundled "^3.0.0"
+ npm-normalize-package-bin "^3.0.0"
+
"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc"
@@ -6838,6 +7461,16 @@
minimatch "^5.0.1"
read-package-json-fast "^2.0.3"
+"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799"
+ integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==
+ dependencies:
+ "@npmcli/name-from-folder" "^2.0.0"
+ glob "^10.2.2"
+ minimatch "^9.0.0"
+ read-package-json-fast "^3.0.0"
+
"@npmcli/metavuln-calculator@^3.0.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622"
@@ -6848,6 +7481,16 @@
pacote "^13.0.3"
semver "^7.3.5"
+"@npmcli/metavuln-calculator@^5.0.0":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76"
+ integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==
+ dependencies:
+ cacache "^17.0.0"
+ json-parse-even-better-errors "^3.0.0"
+ pacote "^15.0.0"
+ semver "^7.3.5"
+
"@npmcli/move-file@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4"
@@ -6861,11 +7504,21 @@
resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a"
integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==
+"@npmcli/name-from-folder@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815"
+ integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==
+
"@npmcli/node-gyp@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35"
integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==
+"@npmcli/node-gyp@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a"
+ integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==
+
"@npmcli/package-json@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a"
@@ -6873,6 +7526,19 @@
dependencies:
json-parse-even-better-errors "^2.3.1"
+"@npmcli/package-json@^4.0.0", "@npmcli/package-json@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-4.0.1.tgz#1a07bf0e086b640500791f6bf245ff43cc27fa37"
+ integrity sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==
+ dependencies:
+ "@npmcli/git" "^4.1.0"
+ glob "^10.2.2"
+ hosted-git-info "^6.1.1"
+ json-parse-even-better-errors "^3.0.0"
+ normalize-package-data "^5.0.0"
+ proc-log "^3.0.0"
+ semver "^7.5.3"
+
"@npmcli/promise-spawn@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573"
@@ -6880,6 +7546,13 @@
dependencies:
infer-owner "^1.0.4"
+"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1", "@npmcli/promise-spawn@^6.0.2":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2"
+ integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==
+ dependencies:
+ which "^3.0.0"
+
"@npmcli/query@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4"
@@ -6889,6 +7562,13 @@
postcss-selector-parser "^6.0.10"
semver "^7.3.7"
+"@npmcli/query@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.1.tgz#77d63ceb7d27ed748da3cc8b50d45fc341448ed6"
+ integrity sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA==
+ dependencies:
+ postcss-selector-parser "^6.0.10"
+
"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1":
version "4.2.1"
resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946"
@@ -6900,6 +7580,239 @@
read-package-json-fast "^2.0.3"
which "^2.0.2"
+"@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885"
+ integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==
+ dependencies:
+ "@npmcli/node-gyp" "^3.0.0"
+ "@npmcli/promise-spawn" "^6.0.0"
+ node-gyp "^9.0.0"
+ read-package-json-fast "^3.0.0"
+ which "^3.0.0"
+
+"@nuxtjs/opencollective@0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz#620ce1044f7ac77185e825e1936115bb38e2681c"
+ integrity sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==
+ dependencies:
+ chalk "^4.1.0"
+ consola "^2.15.0"
+ node-fetch "^2.6.1"
+
+"@oclif/command@^1.8.36":
+ version "1.8.36"
+ resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.36.tgz#9739b9c268580d064a50887c4597d1b4e86ca8b5"
+ integrity sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ==
+ dependencies:
+ "@oclif/config" "^1.18.2"
+ "@oclif/errors" "^1.3.6"
+ "@oclif/help" "^1.0.1"
+ "@oclif/parser" "^3.8.17"
+ debug "^4.1.1"
+ semver "^7.5.4"
+
+"@oclif/config@1.18.16":
+ version "1.18.16"
+ resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.16.tgz#3235d260ab1eb8388ebb6255bca3dd956249d796"
+ integrity sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA==
+ dependencies:
+ "@oclif/errors" "^1.3.6"
+ "@oclif/parser" "^3.8.16"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-wsl "^2.1.1"
+ tslib "^2.6.1"
+
+"@oclif/config@^1.18.17", "@oclif/config@^1.18.2":
+ version "1.18.17"
+ resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.17.tgz#00aa4049da27edca8f06fc106832d9f0f38786a5"
+ integrity sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg==
+ dependencies:
+ "@oclif/errors" "^1.3.6"
+ "@oclif/parser" "^3.8.17"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-wsl "^2.1.1"
+ tslib "^2.6.1"
+
+"@oclif/core@^1.1.1":
+ version "1.26.2"
+ resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.26.2.tgz#763c68dc91388225acd6f0819c90f93e5d8cde41"
+ integrity sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==
+ dependencies:
+ "@oclif/linewrap" "^1.0.0"
+ "@oclif/screen" "^3.0.4"
+ ansi-escapes "^4.3.2"
+ ansi-styles "^4.3.0"
+ cardinal "^2.1.1"
+ chalk "^4.1.2"
+ clean-stack "^3.0.1"
+ cli-progress "^3.10.0"
+ debug "^4.3.4"
+ ejs "^3.1.6"
+ fs-extra "^9.1.0"
+ get-package-type "^0.1.0"
+ globby "^11.1.0"
+ hyperlinker "^1.0.0"
+ indent-string "^4.0.0"
+ is-wsl "^2.2.0"
+ js-yaml "^3.14.1"
+ natural-orderby "^2.0.3"
+ object-treeify "^1.1.33"
+ password-prompt "^1.1.2"
+ semver "^7.3.7"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ supports-color "^8.1.1"
+ supports-hyperlinks "^2.2.0"
+ tslib "^2.4.1"
+ widest-line "^3.1.0"
+ wrap-ansi "^7.0.0"
+
+"@oclif/core@^2.15.0":
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.15.0.tgz#f27797b30a77d13279fba88c1698fc34a0bd0d2a"
+ integrity sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==
+ dependencies:
+ "@types/cli-progress" "^3.11.0"
+ ansi-escapes "^4.3.2"
+ ansi-styles "^4.3.0"
+ cardinal "^2.1.1"
+ chalk "^4.1.2"
+ clean-stack "^3.0.1"
+ cli-progress "^3.12.0"
+ debug "^4.3.4"
+ ejs "^3.1.8"
+ get-package-type "^0.1.0"
+ globby "^11.1.0"
+ hyperlinker "^1.0.0"
+ indent-string "^4.0.0"
+ is-wsl "^2.2.0"
+ js-yaml "^3.14.1"
+ natural-orderby "^2.0.3"
+ object-treeify "^1.1.33"
+ password-prompt "^1.1.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ supports-color "^8.1.1"
+ supports-hyperlinks "^2.2.0"
+ ts-node "^10.9.1"
+ tslib "^2.5.0"
+ widest-line "^3.1.0"
+ wordwrap "^1.0.0"
+ wrap-ansi "^7.0.0"
+
+"@oclif/core@^3", "@oclif/core@^3.16.0":
+ version "3.18.1"
+ resolved "https://registry.yarnpkg.com/@oclif/core/-/core-3.18.1.tgz#a8c9ee3848ad663d5694bef6079116c70d32fc55"
+ integrity sha512-l0LsjzGcqjbUEdeSBX6bdZieVmEv82Q0W3StiyaDMEnPZ9KLH28HrLpcZg6d50mCYW9CUZNzmRo6qrCHWrgLKw==
+ dependencies:
+ "@types/cli-progress" "^3.11.5"
+ ansi-escapes "^4.3.2"
+ ansi-styles "^4.3.0"
+ cardinal "^2.1.1"
+ chalk "^4.1.2"
+ clean-stack "^3.0.1"
+ cli-progress "^3.12.0"
+ color "^4.2.3"
+ debug "^4.3.4"
+ ejs "^3.1.9"
+ get-package-type "^0.1.0"
+ globby "^11.1.0"
+ hyperlinker "^1.0.0"
+ indent-string "^4.0.0"
+ is-wsl "^2.2.0"
+ js-yaml "^3.14.1"
+ natural-orderby "^2.0.3"
+ object-treeify "^1.1.33"
+ password-prompt "^1.1.3"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ supports-color "^8.1.1"
+ supports-hyperlinks "^2.2.0"
+ widest-line "^3.1.0"
+ wordwrap "^1.0.0"
+ wrap-ansi "^7.0.0"
+
+"@oclif/errors@1.3.6", "@oclif/errors@^1.3.6":
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d"
+ integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==
+ dependencies:
+ clean-stack "^3.0.0"
+ fs-extra "^8.1"
+ indent-string "^4.0.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
+"@oclif/help@^1.0.1":
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/@oclif/help/-/help-1.0.15.tgz#5e36e576b8132a4906d2662204ad9de7ece87e8f"
+ integrity sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g==
+ dependencies:
+ "@oclif/config" "1.18.16"
+ "@oclif/errors" "1.3.6"
+ chalk "^4.1.2"
+ indent-string "^4.0.0"
+ lodash "^4.17.21"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ widest-line "^3.1.0"
+ wrap-ansi "^6.2.0"
+
+"@oclif/linewrap@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91"
+ integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==
+
+"@oclif/parser@^3.8.16", "@oclif/parser@^3.8.17":
+ version "3.8.17"
+ resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.17.tgz#e1ce0f29b22762d752d9da1c7abd57ad81c56188"
+ integrity sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==
+ dependencies:
+ "@oclif/errors" "^1.3.6"
+ "@oclif/linewrap" "^1.0.0"
+ chalk "^4.1.0"
+ tslib "^2.6.2"
+
+"@oclif/plugin-help@^6.0.2":
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-6.0.11.tgz#f287edbc16ab94e4395d36c827999b1be043cbd2"
+ integrity sha512-4O96jKw7E3c222jaS/s/zOCNghtw52fVpd/h7CaejmV/99bkLTCrN2haeNcIR5WbwhyhvkO+GQsLMurLGdfB2Q==
+ dependencies:
+ "@oclif/core" "^3.16.0"
+
+"@oclif/plugin-plugins@^3.9.1":
+ version "3.9.4"
+ resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-3.9.4.tgz#e4fe13882f927360c543e53c9548a5aaf856c90a"
+ integrity sha512-JtumjspRdzJgHk1S10wu68tdlqSnyYRmSgCsmsc6AEvU+Orb0DQfrAgJEO77rPKPNo5MfnVAj0WyCDTi0JT/vw==
+ dependencies:
+ "@oclif/core" "^2.15.0"
+ chalk "^4.1.2"
+ debug "^4.3.4"
+ http-call "^5.2.2"
+ load-json-file "^5.3.0"
+ npm "9.8.1"
+ npm-run-path "^4.0.1"
+ semver "^7.5.4"
+ shelljs "^0.8.5"
+ tslib "^2.6.2"
+ validate-npm-package-name "^5.0.0"
+ yarn "^1.22.18"
+
+"@oclif/screen@^1.0.4 ":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493"
+ integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==
+
+"@oclif/screen@^3.0.4":
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-3.0.8.tgz#f746549c3ae52fdb7794dfc244dfba98ebca37f2"
+ integrity sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg==
+
"@octokit/app@^13.1.5":
version "13.1.8"
resolved "https://registry.yarnpkg.com/@octokit/app/-/app-13.1.8.tgz#9e43e7e1ffc8f028130cabdf587cbacccf0c0257"
@@ -7273,6 +8186,28 @@
dependencies:
fast-deep-equal "^3.1.3"
+"@openapitools/openapi-generator-cli@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.7.0.tgz#5e8001a01b088bbb65ee7aa85cb73cdf88a0363e"
+ integrity sha512-ieEpHTA/KsDz7ANw03lLPYyjdedDEXYEyYoGBRWdduqXWSX65CJtttjqa8ZaB1mNmIjMtchUHwAYQmTLVQ8HYg==
+ dependencies:
+ "@nestjs/axios" "0.1.0"
+ "@nestjs/common" "9.3.11"
+ "@nestjs/core" "9.3.11"
+ "@nuxtjs/opencollective" "0.3.2"
+ chalk "4.1.2"
+ commander "8.3.0"
+ compare-versions "4.1.4"
+ concurrently "6.5.1"
+ console.table "0.10.0"
+ fs-extra "10.1.0"
+ glob "7.1.6"
+ inquirer "8.2.5"
+ lodash "4.17.21"
+ reflect-metadata "0.1.13"
+ rxjs "7.8.0"
+ tslib "2.0.3"
+
"@openshift/dynamic-plugin-sdk-webpack@^3.0.0":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@openshift/dynamic-plugin-sdk-webpack/-/dynamic-plugin-sdk-webpack-3.0.1.tgz#ae62d6b48910ad652d20fd0a725c981826ed98be"
@@ -8200,6 +9135,35 @@
resolved "https://registry.yarnpkg.com/@semrel-extra/npm/-/npm-1.2.2.tgz#bd754f9b13e397a70395c36f2229fd7b69f981e8"
integrity sha512-QoOJFUd00ORaqOQUe2wYmwPwa7NRdGGfUhzjZ9UEZqoqymXaBDVmFF2hE3h8mFaTa/iWpAyRrrjTsg8HbSpZyw==
+"@sigstore/bundle@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1"
+ integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==
+ dependencies:
+ "@sigstore/protobuf-specs" "^0.2.0"
+
+"@sigstore/protobuf-specs@^0.2.0":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b"
+ integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==
+
+"@sigstore/sign@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4"
+ integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==
+ dependencies:
+ "@sigstore/bundle" "^1.1.0"
+ "@sigstore/protobuf-specs" "^0.2.0"
+ make-fetch-happen "^11.0.1"
+
+"@sigstore/tuf@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160"
+ integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==
+ dependencies:
+ "@sigstore/protobuf-specs" "^0.2.0"
+ tuf-js "^1.1.7"
+
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -11137,7 +12101,7 @@
"@babel/runtime" "^7.12.5"
react-error-boundary "^3.1.0"
-"@testing-library/react@12.1.5":
+"@testing-library/react@12.1.5", "@testing-library/react@^12.1.5":
version "12.1.5"
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b"
integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==
@@ -11151,6 +12115,11 @@
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f"
integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==
+"@testing-library/user-event@^14.5.1":
+ version "14.5.2"
+ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd"
+ integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==
+
"@tokenizer/token@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
@@ -11201,6 +12170,19 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+"@tufjs/canonical-json@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31"
+ integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==
+
+"@tufjs/models@1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef"
+ integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==
+ dependencies:
+ "@tufjs/canonical-json" "1.0.0"
+ minimatch "^9.0.0"
+
"@types/archiver@^5.3.1":
version "5.3.4"
resolved "https://registry.yarnpkg.com/@types/archiver/-/archiver-5.3.4.tgz#32172d5a56f165b5b4ac902e366248bf03d3ae84"
@@ -11302,6 +12284,13 @@
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.4.tgz#1326429a519cc077028150343fd502b04686bd6f"
integrity sha512-2in/lrHRNmDvHPgyormtEralhPcN3An1gLjJzj2Bw145VBxkQ75JEXW6CTdMAwShiHQcYsl2d10IjQSdJSJz4g==
+"@types/cli-progress@^3.11.0", "@types/cli-progress@^3.11.5":
+ version "3.11.5"
+ resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.5.tgz#9518c745e78557efda057e3f96a5990c717268c3"
+ integrity sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==
+ dependencies:
+ "@types/node" "*"
+
"@types/connect-history-api-fallback@^1.3.5":
version "1.5.2"
resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz#acf51e088b3bb6507f7b093bd2b0de20940179cc"
@@ -11764,6 +12753,14 @@
"@types/through" "*"
rxjs "^7.2.0"
+"@types/inquirer@^7.3.1":
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.3.tgz#92e6676efb67fa6925c69a2ee638f67a822952ac"
+ integrity sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==
+ dependencies:
+ "@types/through" "*"
+ rxjs "^6.4.0"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068"
@@ -11791,6 +12788,14 @@
expect "^29.0.0"
pretty-format "^29.0.0"
+"@types/jest@^26.0.14":
+ version "26.0.24"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a"
+ integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==
+ dependencies:
+ jest-diff "^26.0.0"
+ pretty-format "^26.0.0"
+
"@types/js-cookie@^2.2.6":
version "2.2.7"
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3"
@@ -11820,6 +12825,11 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1"
integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==
+"@types/json-schema@^7.0.13":
+ version "7.0.15"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -11844,6 +12854,18 @@
resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.4.tgz#def6a9bb0ce78140860602f16ace37a9997f086a"
integrity sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==
+"@types/lodash.clonedeep@^4.5.7":
+ version "4.5.9"
+ resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz#ea48276c7cc18d080e00bb56cf965bcceb3f0fc1"
+ integrity sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*":
+ version "4.14.202"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
+ integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
+
"@types/lodash@4.14.200", "@types/lodash@^4.14.175":
version "4.14.200"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.200.tgz#435b6035c7eba9cdf1e039af8212c9e9281e7149"
@@ -12161,6 +13183,16 @@
"@types/tough-cookie" "*"
form-data "^2.5.0"
+"@types/request@^2.48.8":
+ version "2.48.12"
+ resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30"
+ integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==
+ dependencies:
+ "@types/caseless" "*"
+ "@types/node" "*"
+ "@types/tough-cookie" "*"
+ form-data "^2.5.0"
+
"@types/resolve@1.17.1":
version "1.17.1"
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
@@ -12370,6 +13402,13 @@
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b"
integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==
+"@types/yargs@^15.0.0":
+ version "15.0.19"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9"
+ integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
"@types/yargs@^16.0.0":
version "16.0.6"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638"
@@ -12840,6 +13879,11 @@ abbrev@1, abbrev@^1.0.0, abbrev@~1.1.1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+abbrev@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf"
+ integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
+
abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
@@ -12847,7 +13891,7 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
+accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -12981,7 +14025,7 @@ ajv-formats-draft2019@^1.6.1:
smtp-address-parser "^1.0.3"
uri-js "^4.4.1"
-ajv-formats@^2.1.1:
+ajv-formats@^2.0.2, ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
@@ -13010,7 +14054,7 @@ ajv@^6.10.0, ajv@^6.10.1, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, aj
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.9.0:
+ajv@^8.0.0, ajv@^8.1.0, ajv@^8.10.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.6.2, ajv@^8.6.3, ajv@^8.8.2, ajv@^8.9.0:
version "8.12.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
@@ -13020,7 +14064,7 @@ ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.2, ajv@^8.12.0, ajv@^8.9.0:
require-from-string "^2.0.2"
uri-js "^4.2.2"
-ansi-escapes@^4.2.1:
+ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
@@ -13051,7 +14095,7 @@ ansi-regex@^4.1.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
-ansi-regex@^5.0.1:
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
@@ -13068,7 +14112,7 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
-ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0, ansi-styles@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
@@ -13155,6 +14199,18 @@ archiver-utils@^3.0.4:
normalize-path "^3.0.0"
readable-stream "^3.6.0"
+archiver-utils@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-4.0.1.tgz#66ad15256e69589a77f706c90c6dbcc1b2775d2a"
+ integrity sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==
+ dependencies:
+ glob "^8.0.0"
+ graceful-fs "^4.2.0"
+ lazystream "^1.0.0"
+ lodash "^4.17.15"
+ normalize-path "^3.0.0"
+ readable-stream "^3.6.0"
+
archiver@^5.0.2, archiver@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0"
@@ -13168,6 +14224,19 @@ archiver@^5.0.2, archiver@^5.3.1:
tar-stream "^2.2.0"
zip-stream "^4.1.0"
+archiver@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-6.0.1.tgz#d56968d4c09df309435adb5a1bbfc370dae48133"
+ integrity sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ==
+ dependencies:
+ archiver-utils "^4.0.1"
+ async "^3.2.4"
+ buffer-crc32 "^0.2.1"
+ readable-stream "^3.6.0"
+ readdir-glob "^1.1.2"
+ tar-stream "^3.0.0"
+ zip-stream "^5.0.1"
+
archy@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
@@ -13181,6 +14250,11 @@ are-we-there-yet@^3.0.0:
delegates "^1.0.0"
readable-stream "^3.6.0"
+are-we-there-yet@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz#aed25dd0eae514660d49ac2b2366b175c614785a"
+ integrity sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg==
+
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
@@ -13410,6 +14484,11 @@ ast-types@^0.16.1:
dependencies:
tslib "^2.0.1"
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
async-limiter@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
@@ -13456,6 +14535,14 @@ at-least-node@^1.0.0:
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+atlassian-openapi@^1.0.8:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/atlassian-openapi/-/atlassian-openapi-1.0.18.tgz#963150c17426858b5ac51be9a07a9e9aef427ca9"
+ integrity sha512-IXgF/cYD8DW1mYB/ejDm/lKQMNXi2iCsxus2Y0ffZOxfa/SLoz0RuEZ4xu4suSRjtlda7qZDonQ6TAkQPVuQig==
+ dependencies:
+ jsonpointer "^5.0.0"
+ urijs "^1.19.10"
+
atomic-sleep@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
@@ -13522,6 +14609,23 @@ axios-cached-dns-resolve@0.5.2:
pino "^5.12.2"
pino-pretty "^2.6.0"
+axios@0.27.2, axios@^0.27.2:
+ version "0.27.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
+ integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
+ dependencies:
+ follow-redirects "^1.14.9"
+ form-data "^4.0.0"
+
+axios@>=0.25.0, axios@^1.3.4:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8"
+ integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==
+ dependencies:
+ follow-redirects "^1.15.4"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
axios@^0.21.1:
version "0.21.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
@@ -13536,14 +14640,6 @@ axios@^0.26.1:
dependencies:
follow-redirects "^1.14.8"
-axios@^0.27.2:
- version "0.27.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
- integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
- dependencies:
- follow-redirects "^1.14.9"
- form-data "^4.0.0"
-
axios@^1.4.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7"
@@ -13577,6 +14673,11 @@ azure-devops-node-api@^11.0.1:
tunnel "0.0.6"
typed-rest-client "^1.8.4"
+b4a@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9"
+ integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==
+
babel-core@^7.0.0-bridge.0:
version "7.0.0-bridge.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
@@ -13756,6 +14857,11 @@ batch@0.6.1:
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+bath-es5@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/bath-es5/-/bath-es5-3.0.3.tgz#4e2808e8b33b4a5e3328ec1e9032f370f042193d"
+ integrity sha512-PdCioDToH3t84lP40kUFCKWCOCH389Dl1kbC8FGoqOwamxsmqxxnJSXdkTOsPoNHXjem4+sJ+bbNoQm5zeCqxg==
+
bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
@@ -13829,6 +14935,16 @@ bin-links@^3.0.3:
rimraf "^3.0.0"
write-file-atomic "^4.0.0"
+bin-links@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.3.tgz#9e4a3c5900830aee3d7f52178b65e01dcdde64a5"
+ integrity sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==
+ dependencies:
+ cmd-shim "^6.0.0"
+ npm-normalize-package-bin "^3.0.0"
+ read-cmd-shim "^4.0.0"
+ write-file-atomic "^5.0.0"
+
binary-extensions@^2.0.0, binary-extensions@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -14154,7 +15270,7 @@ bytes@3.0.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
-bytes@3.1.2:
+bytes@3.1.2, bytes@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
@@ -14201,7 +15317,7 @@ cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3:
tar "^6.1.11"
unique-filename "^2.0.0"
-cacache@^17.0.0:
+cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3:
version "17.1.4"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35"
integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==
@@ -14219,6 +15335,14 @@ cacache@^17.0.0:
tar "^6.1.11"
unique-filename "^3.0.0"
+cache-content-type@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
+ integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
+ dependencies:
+ mime-types "^2.1.18"
+ ylru "^1.2.0"
+
cacheable-lookup@^5.0.3:
version "5.0.4"
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
@@ -14307,6 +15431,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001541:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001550.tgz#6ec6a2239eb2a8123cc26cfe0571db5c79eb8669"
integrity sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==
+capital-case@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
+ integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
cardinal@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505"
@@ -14357,7 +15490,15 @@ chalk@2.4.2, chalk@^2.3.2, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@5.3.0, chalk@^5.2.0:
+chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@5.3.0, chalk@^5.2.0, chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
@@ -14370,13 +15511,23 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+change-case@^4.1.1:
version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
+ integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==
dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
+ camel-case "^4.1.2"
+ capital-case "^1.0.4"
+ constant-case "^3.0.4"
+ dot-case "^3.0.4"
+ header-case "^2.0.4"
+ no-case "^3.0.4"
+ param-case "^3.0.4"
+ pascal-case "^3.1.2"
+ path-case "^3.0.4"
+ sentence-case "^3.0.4"
+ snake-case "^3.0.4"
+ tslib "^2.0.3"
char-regex@^1.0.2:
version "1.0.2"
@@ -14448,6 +15599,11 @@ ci-info@^3.2.0, ci-info@^3.7.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
+ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
cidr-regex@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d"
@@ -14490,6 +15646,13 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+clean-stack@^3.0.0, clean-stack@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8"
+ integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==
+ dependencies:
+ escape-string-regexp "4.0.0"
+
clean-stack@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31"
@@ -14538,6 +15701,13 @@ cli-highlight@^2.1.11:
parse5-htmlparser2-tree-adapter "^6.0.0"
yargs "^16.0.0"
+cli-progress@^3.10.0, cli-progress@^3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942"
+ integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==
+ dependencies:
+ string-width "^4.2.3"
+
cli-spinners@^2.5.0:
version "2.9.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35"
@@ -14560,6 +15730,37 @@ cli-truncate@^3.1.0:
slice-ansi "^5.0.0"
string-width "^5.0.0"
+cli-ux@^6.0.9:
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-6.0.9.tgz#b5ab690314348b45b2c7458dad7621ae1be7c61d"
+ integrity sha512-0Ku29QLf+P6SeBNWM7zyoJ49eKKOjxZBZ4OH2aFeRtC0sNXU3ftdJxQPKJ1SJ+axX34I1NsfTFahpXdnxklZgA==
+ dependencies:
+ "@oclif/core" "^1.1.1"
+ "@oclif/linewrap" "^1.0.0"
+ "@oclif/screen" "^1.0.4 "
+ ansi-escapes "^4.3.0"
+ ansi-styles "^4.2.0"
+ cardinal "^2.1.1"
+ chalk "^4.1.0"
+ clean-stack "^3.0.0"
+ cli-progress "^3.10.0"
+ extract-stack "^2.0.0"
+ fs-extra "^8.1"
+ hyperlinker "^1.0.0"
+ indent-string "^4.0.0"
+ is-wsl "^2.2.0"
+ js-yaml "^3.13.1"
+ lodash "^4.17.21"
+ natural-orderby "^2.0.1"
+ object-treeify "^1.1.4"
+ password-prompt "^1.1.2"
+ semver "^7.3.2"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ supports-color "^8.1.0"
+ supports-hyperlinks "^2.1.0"
+ tslib "^2.0.0"
+
cli-width@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
@@ -14636,6 +15837,21 @@ cmd-shim@^5.0.0:
dependencies:
mkdirp-infer-owner "^2.0.0"
+cmd-shim@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.2.tgz#435fd9e5c95340e61715e19f90209ed6fcd9e0a4"
+ integrity sha512-+FFYbB0YLaAkhkcrjkyNLYDiOsFSfRjwjY19LXk/psmMx1z00xlCv7hhQoTGXXIKi+YXHL/iiFo8NqMVQX9nOw==
+
+co-body@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547"
+ integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==
+ dependencies:
+ inflation "^2.0.0"
+ qs "^6.5.2"
+ raw-body "^2.3.3"
+ type-is "^1.6.16"
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -14731,7 +15947,7 @@ color@^3.1.3:
color-convert "^1.9.3"
color-string "^1.6.0"
-color@^4.0.1:
+color@^4.0.1, color@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
@@ -14792,7 +16008,7 @@ command-exists@^1.2.9:
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
-commander@11.1.0, commander@^11.0.0:
+commander@11.1.0, commander@^11.0.0, commander@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
@@ -14802,6 +16018,16 @@ commander@7, commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@8.3.0, commander@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+ integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+commander@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
commander@^2.19.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -14817,16 +16043,11 @@ commander@^5.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
-commander@^6.2.1:
+commander@^6.1.0, commander@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-commander@^8.3.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
- integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
-
commander@^9.1.0:
version "9.5.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
@@ -14842,6 +16063,11 @@ common-path-prefix@^3.0.0:
resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+common-tags@^1.8.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
+ integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==
+
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -14855,6 +16081,11 @@ compare-func@^2.0.0:
array-ify "^1.0.0"
dot-prop "^5.1.0"
+compare-versions@4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.4.tgz#3571f4d610924d4414846a4183d386c8f3d51112"
+ integrity sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==
+
complex.js@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.1.1.tgz#0675dac8e464ec431fb2ab7d30f41d889fb25c31"
@@ -14875,6 +16106,16 @@ compress-commons@^4.1.2:
normalize-path "^3.0.0"
readable-stream "^3.6.0"
+compress-commons@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-5.0.1.tgz#e46723ebbab41b50309b27a0e0f6f3baed2d6590"
+ integrity sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag==
+ dependencies:
+ crc-32 "^1.2.0"
+ crc32-stream "^5.0.0"
+ normalize-path "^3.0.0"
+ readable-stream "^3.6.0"
+
compressible@^2.0.12, compressible@~2.0.16:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -14946,6 +16187,20 @@ concat-with-sourcemaps@^1.1.0:
dependencies:
source-map "^0.6.1"
+concurrently@6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-6.5.1.tgz#4518c67f7ac680cf5c34d5adf399a2a2047edc8c"
+ integrity sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==
+ dependencies:
+ chalk "^4.1.0"
+ date-fns "^2.16.1"
+ lodash "^4.17.21"
+ rxjs "^6.6.3"
+ spawn-command "^0.0.2-1"
+ supports-color "^8.1.0"
+ tree-kill "^1.2.2"
+ yargs "^16.2.0"
+
config-chain@^1.1.11:
version "1.1.13"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
@@ -14967,6 +16222,11 @@ connect-session-knex@^3.0.1:
bluebird "^3.7.2"
knex "^2.3.0"
+consola@^2.15.0:
+ version "2.15.3"
+ resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
+ integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
+
console-browserify@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
@@ -14977,19 +16237,35 @@ console-control-strings@^1.1.0:
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+console.table@0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.10.0.tgz#0917025588875befd70cf2eff4bef2c6e2d75d04"
+ integrity sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==
+ dependencies:
+ easy-table "1.1.0"
+
+constant-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1"
+ integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case "^2.0.2"
+
constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==
-content-disposition@0.5.4:
+content-disposition@0.5.4, content-disposition@~0.5.2:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
dependencies:
safe-buffer "5.2.1"
-content-type@^1.0.5, content-type@~1.0.4:
+content-type@^1.0.4, content-type@^1.0.5, content-type@~1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
@@ -15086,7 +16362,7 @@ cookie@0.4.2, cookie@^0.4.2:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
-cookie@0.5.0, cookie@~0.5.0:
+cookie@0.5.0, cookie@^0.5.0, cookie@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
@@ -15096,6 +16372,14 @@ cookiejar@^2.1.4:
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b"
integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==
+cookies@~0.9.0:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3"
+ integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==
+ dependencies:
+ depd "~2.0.0"
+ keygrip "~1.1.0"
+
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"
@@ -15103,6 +16387,11 @@ copy-to-clipboard@^3.2.0, copy-to-clipboard@^3.3.1:
dependencies:
toggle-selection "^1.0.6"
+copy-to@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
+ integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==
+
core-js-compat@^3.31.0, core-js-compat@^3.32.2:
version "3.33.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966"
@@ -15201,6 +16490,14 @@ crc32-stream@^4.0.2:
crc-32 "^1.2.0"
readable-stream "^3.4.0"
+crc32-stream@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-5.0.0.tgz#a97d3a802c8687f101c27cc17ca5253327354720"
+ integrity sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw==
+ dependencies:
+ crc-32 "^1.2.0"
+ readable-stream "^3.4.0"
+
create-ecdh@^4.0.0:
version "4.0.4"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
@@ -15891,14 +17188,14 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9:
dependencies:
ms "2.0.0"
-debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
+debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
-debug@^3.2.7:
+debug@^3.1.0, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
@@ -15986,6 +17283,11 @@ deep-equal@^2.0.5:
which-collection "^1.0.1"
which-typed-array "^1.1.9"
+deep-equal@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+ integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==
+
deep-extend@0.6.0, deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -16001,7 +17303,7 @@ deep-is@^0.1.3, deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deepmerge@4.3.1, deepmerge@^4.2.2, deepmerge@^4.3.1, deepmerge@~4.3.0:
+deepmerge@4.3.1, deepmerge@^4.2.2, deepmerge@^4.3.0, deepmerge@^4.3.1, deepmerge@~4.3.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
@@ -16119,7 +17421,7 @@ denque@^2.0.1, denque@^2.1.0:
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
-depd@2.0.0, depd@~2.0.0:
+depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
@@ -16139,6 +17441,11 @@ dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3:
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+dereference-json-schema@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/dereference-json-schema/-/dereference-json-schema-0.2.1.tgz#fcad3c98e0116f7124b0989d39d947fa318cae09"
+ integrity sha512-uzJsrg225owJyRQ8FNTPHIuBOdSzIZlHhss9u6W8mp7jJldHqGuLv9cULagP/E26QVJDnjtG8U7Dw139mM1ydA==
+
des.js@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da"
@@ -16147,7 +17454,7 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
-destroy@1.2.0:
+destroy@1.2.0, destroy@^1.0.4:
version "1.2.0"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
@@ -16208,6 +17515,16 @@ dezalgo@^1.0.0, dezalgo@^1.0.4:
asap "^2.0.0"
wrappy "1"
+diff-sequences@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
+ integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==
+
+diff-sequences@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+ integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+
diff-sequences@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
@@ -16508,6 +17825,13 @@ eastasianwidth@^0.2.0:
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+easy-table@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73"
+ integrity sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==
+ optionalDependencies:
+ wcwidth ">=1.0.1"
+
ebnf@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ebnf/-/ebnf-1.9.1.tgz#64c25d8208ec0d221ec11c3c5e8094015131a9d3"
@@ -16533,7 +17857,7 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-ejs@^3.1.8:
+ejs@^3.1.6, ejs@^3.1.8, ejs@^3.1.9:
version "3.1.9"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
@@ -16583,7 +17907,7 @@ enabled@2.0.x:
resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
-encodeurl@~1.0.2:
+encodeurl@^1.0.2, encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
@@ -16797,6 +18121,11 @@ es6-error@^4.1.1:
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+es6-promise@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+ integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==
+
esbuild-loader@^2.18.0:
version "2.21.0"
resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.21.0.tgz#2698a3e565b0db2bb19a3dd91c2b6c9aad526c80"
@@ -16920,6 +18249,11 @@ escape-latex@^1.2.0:
resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1"
integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==
+escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
@@ -16935,11 +18269,6 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
escodegen@^1.13.0, escodegen@^1.8.1:
version "1.14.3"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
@@ -17540,6 +18869,11 @@ external-editor@^3.0.3:
iconv-lite "^0.4.24"
tmp "^0.0.33"
+extract-stack@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b"
+ integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==
+
extract-zip@^1.6.6:
version "1.7.0"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
@@ -17575,6 +18909,11 @@ fast-equals@^5.0.0:
resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d"
integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==
+fast-fifo@^1.1.0, fast-fifo@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
+ integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
+
fast-glob@^3.1.1, fast-glob@^3.2.9, fast-glob@^3.3.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
@@ -17616,7 +18955,7 @@ fast-redact@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-2.1.0.tgz#dfe3c1ca69367fb226f110aa4ec10ec85462ffdf"
integrity sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==
-fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1:
+fast-safe-stringify@2.1.1, fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
@@ -17645,7 +18984,14 @@ fast-xml-parser@^4.2.2:
dependencies:
strnum "^1.0.5"
-fastest-levenshtein@^1.0.12:
+fast-xml-parser@^4.3.0:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.3.tgz#aeaf5778392329f17168c40c51bcbfec8ff965be"
+ integrity sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==
+ dependencies:
+ strnum "^1.0.5"
+
+fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16:
version "1.0.16"
resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
@@ -17924,6 +19270,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.8, fol
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
+follow-redirects@^1.15.4:
+ version "1.15.4"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
+ integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
+
for-each@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
@@ -18094,7 +19445,7 @@ fraction.js@4.3.4:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.4.tgz#b2bac8249a610c3396106da97c5a71da75b94b1c"
integrity sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==
-fresh@0.5.2:
+fresh@0.5.2, fresh@~0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
@@ -18135,7 +19486,7 @@ fs-extra@11.1.1, fs-extra@^11.0.0, fs-extra@^11.1.0, fs-extra@^11.1.1:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-extra@^8.1.0:
+fs-extra@^8.1, fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
@@ -18144,7 +19495,7 @@ fs-extra@^8.1.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
-fs-extra@^9.0.0:
+fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@@ -18161,7 +19512,7 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0:
dependencies:
minipass "^3.0.0"
-fs-minipass@^3.0.0:
+fs-minipass@^3.0.0, fs-minipass@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
@@ -18222,6 +19573,20 @@ gauge@^4.0.3:
strip-ansi "^6.0.1"
wide-align "^1.1.5"
+gauge@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112"
+ integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==
+ dependencies:
+ aproba "^1.0.3 || ^2.0.0"
+ color-support "^1.1.3"
+ console-control-strings "^1.1.0"
+ has-unicode "^2.0.1"
+ signal-exit "^4.0.1"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ wide-align "^1.1.5"
+
gaxios@^5.0.0, gaxios@^5.0.1:
version "5.1.3"
resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013"
@@ -18232,6 +19597,16 @@ gaxios@^5.0.0, gaxios@^5.0.1:
is-stream "^2.0.0"
node-fetch "^2.6.9"
+gaxios@^6.0.0, gaxios@^6.0.2, gaxios@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.1.1.tgz#549629f86a13e756b900f9ff7c94624670102938"
+ integrity sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==
+ dependencies:
+ extend "^3.0.2"
+ https-proxy-agent "^7.0.1"
+ is-stream "^2.0.0"
+ node-fetch "^2.6.9"
+
gcp-metadata@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408"
@@ -18240,6 +19615,14 @@ gcp-metadata@^5.3.0:
gaxios "^5.0.0"
json-bigint "^1.0.0"
+gcp-metadata@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c"
+ integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==
+ dependencies:
+ gaxios "^6.0.0"
+ json-bigint "^1.0.0"
+
generate-function@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
@@ -18294,7 +19677,7 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-get-port@^5.1.1:
+get-port@^5.0.0, get-port@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==
@@ -18424,7 +19807,7 @@ glob@7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^10.0.0:
+glob@^10.0.0, glob@^10.2.7, glob@^10.3.10:
version "10.3.10"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
@@ -18446,7 +19829,7 @@ glob@^10.2.2:
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-scurry "^1.10.1"
-glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0, glob@^7.2.3:
+glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0, glob@^7.2.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -18566,6 +19949,18 @@ google-auth-library@^8.0.0, google-auth-library@^8.0.1, google-auth-library@^8.0
jws "^4.0.0"
lru-cache "^6.0.0"
+google-auth-library@^9.0.0:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.4.2.tgz#4831150d2c049c37450a81141be34027657c38b6"
+ integrity sha512-rTLO4gjhqqo3WvYKL5IdtlCvRqeQ4hxUx/p4lObobY2xotFW3bCQC+Qf1N51CYOfiqfMecdMwW9RIo7dFWYjqw==
+ dependencies:
+ base64-js "^1.3.0"
+ ecdsa-sig-formatter "^1.0.11"
+ gaxios "^6.1.1"
+ gcp-metadata "^6.1.0"
+ gtoken "^7.0.0"
+ jws "^4.0.0"
+
google-gax@^3.5.7:
version "3.6.1"
resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-3.6.1.tgz#02c78fc496f5adf86f2ca9145545f4b6575f6118"
@@ -18623,7 +20018,7 @@ graceful-fs@4.2.10:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -18690,6 +20085,14 @@ gtoken@^6.1.0:
google-p12-pem "^4.0.0"
jws "^4.0.0"
+gtoken@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.0.1.tgz#b64bd01d88268ea3a3572c9076a85d1c48f1a455"
+ integrity sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==
+ dependencies:
+ gaxios "^6.0.0"
+ jws "^4.0.0"
+
gunzip-maybe@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac"
@@ -18841,6 +20244,14 @@ he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+header-case@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
+ integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
+ dependencies:
+ capital-case "^1.0.4"
+ tslib "^2.0.3"
+
headers-polyfill@3.2.5:
version "3.2.5"
resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed"
@@ -18913,6 +20324,13 @@ hosted-git-info@^5.0.0, hosted-git-info@^5.2.1:
dependencies:
lru-cache "^7.5.1"
+hosted-git-info@^6.0.0, hosted-git-info@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58"
+ integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==
+ dependencies:
+ lru-cache "^7.5.1"
+
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -18991,17 +20409,37 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
+http-assert@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f"
+ integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==
+ dependencies:
+ deep-equal "~1.0.1"
+ http-errors "~1.8.0"
+
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+http-call@^5.2.2:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db"
+ integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==
+ dependencies:
+ content-type "^1.0.4"
+ debug "^4.1.1"
+ is-retry-allowed "^1.1.0"
+ is-stream "^2.0.0"
+ parse-json "^4.0.0"
+ tunnel-agent "^0.6.0"
+
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
-http-errors@2.0.0:
+http-errors@2.0.0, http-errors@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
@@ -19012,6 +20450,17 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
+ integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.1"
+
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@@ -19101,6 +20550,11 @@ http-signature@~1.2.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
+http2-client@^1.2.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181"
+ integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==
+
http2-wrapper@^1.0.0-beta.5.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
@@ -19130,7 +20584,7 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
agent-base "6"
debug "4"
-https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.2:
+https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b"
integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==
@@ -19165,11 +20619,21 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
+humanize-number@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18"
+ integrity sha512-un3ZAcNQGI7RzaWGZzQDH47HETM4Wrj6z6E4TId8Yeq9w5ZKUVB1nrT2jwFheTUjEmqcgTjXDc959jum+ai1kQ==
+
husky@8.0.3:
version "8.0.3"
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
+hyperlinker@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
+ integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==
+
hyphenate-style-name@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
@@ -19230,6 +20694,13 @@ ignore-walk@^5.0.1:
dependencies:
minimatch "^5.0.1"
+ignore-walk@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9"
+ integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==
+ dependencies:
+ minimatch "^9.0.0"
+
ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4:
version "5.2.4"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
@@ -19305,6 +20776,11 @@ infer-owner@^1.0.4:
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+inflation@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.1.0.tgz#9214db11a47e6f756d111c4f9df96971c60f886c"
+ integrity sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -19333,6 +20809,11 @@ ini@^3.0.0, ini@^3.0.1:
resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d"
integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==
+ini@^4.1.0, ini@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1"
+ integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==
+
init-package-json@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69"
@@ -19346,6 +20827,19 @@ init-package-json@^3.0.2:
validate-npm-package-license "^3.0.4"
validate-npm-package-name "^4.0.0"
+init-package-json@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40"
+ integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==
+ dependencies:
+ npm-package-arg "^10.0.0"
+ promzard "^1.0.0"
+ read "^2.0.0"
+ read-package-json "^6.0.0"
+ semver "^7.3.5"
+ validate-npm-package-license "^3.0.4"
+ validate-npm-package-name "^5.0.0"
+
inline-style-parser@0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
@@ -19359,6 +20853,46 @@ inline-style-prefixer@^6.0.0:
css-in-js-utils "^3.1.0"
fast-loops "^1.1.3"
+inquirer@8.2.5:
+ version "8.2.5"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8"
+ integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.1"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.21"
+ mute-stream "0.0.8"
+ ora "^5.4.1"
+ run-async "^2.4.0"
+ rxjs "^7.5.5"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+ wrap-ansi "^7.0.0"
+
+inquirer@^7.1.0:
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
+ integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.19"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.6.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
inquirer@^8.2.0:
version "8.2.6"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562"
@@ -19394,6 +20928,11 @@ internal-slot@^1.0.4, internal-slot@^1.0.5:
resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+interpret@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
interpret@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
@@ -19759,6 +21298,11 @@ is-regex@^1.1.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-retry-allowed@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
+ integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
+
is-root@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
@@ -19836,6 +21380,11 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+is-url@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+ integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
is-weakmap@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
@@ -20002,6 +21551,11 @@ istanbul-reports@^3.1.3, istanbul-reports@^3.1.4:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
+iterare@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042"
+ integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==
+
iterator.prototype@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
@@ -20146,6 +21700,26 @@ jest-css-modules@^2.1.0:
dependencies:
identity-obj-proxy "3.0.0"
+jest-diff@^26.0.0:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
+ integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^26.6.2"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.6.2"
+
+jest-diff@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+ integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
jest-diff@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
@@ -20200,6 +21774,16 @@ jest-environment-node@^29.7.0:
jest-mock "^29.7.0"
jest-util "^29.7.0"
+jest-get-type@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
+ integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
+
+jest-get-type@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+ integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
+
jest-get-type@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
@@ -20224,6 +21808,16 @@ jest-haste-map@^29.7.0:
optionalDependencies:
fsevents "^2.3.2"
+jest-json-schema@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jest-json-schema/-/jest-json-schema-6.1.0.tgz#68ccc23424a7b20550d59ab9186530f81113e6af"
+ integrity sha512-LMHuLmKjr/4X+H8v1xF5TEwfYEkzwGeWJ0epYQVQhlVTDDR5FWCdSO8vmsecb5cLf9NeWAqMKn3qhJvP9um0AA==
+ dependencies:
+ ajv "^8.8.2"
+ ajv-formats "^2.1.1"
+ chalk "^4.1.2"
+ jest-matcher-utils "^27.3.1"
+
jest-leak-detector@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728"
@@ -20232,6 +21826,16 @@ jest-leak-detector@^29.7.0:
jest-get-type "^29.6.3"
pretty-format "^29.7.0"
+jest-matcher-utils@^27.3.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+ integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
jest-matcher-utils@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12"
@@ -20454,7 +22058,7 @@ jest-worker@^29.7.0:
merge-stream "^2.0.0"
supports-color "^8.0.0"
-jest@^29.0.2:
+jest@^29.0.2, jest@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613"
integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
@@ -20521,7 +22125,7 @@ js-yaml@=4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.6.1, js-yaml@^3.8.3:
+js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1, js-yaml@^3.8.3:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
@@ -20689,6 +22293,11 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+json-parse-even-better-errors@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0"
+ integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==
+
json-pointer@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd"
@@ -20986,6 +22595,11 @@ just-diff@^5.0.1:
resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241"
integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==
+just-diff@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285"
+ integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==
+
jwa@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
@@ -21033,6 +22647,13 @@ keycloak-js@^17.0.1:
base64-js "^1.5.1"
js-sha256 "^0.9.0"
+keygrip@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
+ integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
+ dependencies:
+ tsscmp "1.0.6"
+
keyv@^4.0.0, keyv@^4.5.2, keyv@^4.5.3:
version "4.5.4"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
@@ -21069,6 +22690,11 @@ kleur@^4.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
+klona@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22"
+ integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
+
knex-mock-client@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/knex-mock-client/-/knex-mock-client-2.0.0.tgz#dfacec7a1771df10cb552c89f046a0a4f96932fd"
@@ -21076,6 +22702,26 @@ knex-mock-client@2.0.0:
dependencies:
lodash.clonedeep "^4.5.0"
+knex@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/knex/-/knex-2.5.1.tgz#a6c6b449866cf4229f070c17411f23871ba52ef9"
+ integrity sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==
+ dependencies:
+ colorette "2.0.19"
+ commander "^10.0.0"
+ debug "4.3.4"
+ escalade "^3.1.1"
+ esm "^3.2.25"
+ get-package-type "^0.1.0"
+ getopts "2.3.0"
+ interpret "^2.2.0"
+ lodash "^4.17.21"
+ pg-connection-string "2.6.1"
+ rechoir "^0.8.0"
+ resolve-from "^5.0.0"
+ tarn "^3.0.2"
+ tildify "2.0.0"
+
knex@^2.0.0, knex@^2.3.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/knex/-/knex-2.4.2.tgz#a34a289d38406dc19a0447a78eeaf2d16ebedd61"
@@ -21096,6 +22742,132 @@ knex@^2.0.0, knex@^2.3.0:
tarn "^3.0.2"
tildify "2.0.0"
+knex@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/knex/-/knex-3.1.0.tgz#b6ddd5b5ad26a6315234a5b09ec38dc4a370bd8c"
+ integrity sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==
+ dependencies:
+ colorette "2.0.19"
+ commander "^10.0.0"
+ debug "4.3.4"
+ escalade "^3.1.1"
+ esm "^3.2.25"
+ get-package-type "^0.1.0"
+ getopts "2.3.0"
+ interpret "^2.2.0"
+ lodash "^4.17.21"
+ pg-connection-string "2.6.2"
+ rechoir "^0.8.0"
+ resolve-from "^5.0.0"
+ tarn "^3.0.2"
+ tildify "2.0.0"
+
+koa-bodyparser@^4.3.0:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz#a908d848e142cc57d9eece478e932bf00dce3029"
+ integrity sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==
+ dependencies:
+ co-body "^6.0.0"
+ copy-to "^2.0.1"
+ type-is "^1.6.18"
+
+koa-compose@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
+ integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
+
+koa-convert@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5"
+ integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==
+ dependencies:
+ co "^4.6.0"
+ koa-compose "^4.1.0"
+
+koa-logger@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/koa-logger/-/koa-logger-3.2.1.tgz#ab9db879526db3837cc9ce4fd983c025b1689f22"
+ integrity sha512-MjlznhLLKy9+kG8nAXKJLM0/ClsQp/Or2vI3a5rbSQmgl8IJBQO0KI5FA70BvW+hqjtxjp49SpH2E7okS6NmHg==
+ dependencies:
+ bytes "^3.1.0"
+ chalk "^2.4.2"
+ humanize-number "0.0.2"
+ passthrough-counter "^1.0.0"
+
+koa-mount@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/koa-mount/-/koa-mount-4.0.0.tgz#e0265e58198e1a14ef889514c607254ff386329c"
+ integrity sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==
+ dependencies:
+ debug "^4.0.1"
+ koa-compose "^4.1.0"
+
+koa-proxy@^1.0.0-alpha.3:
+ version "1.0.0-alpha.3"
+ resolved "https://registry.yarnpkg.com/koa-proxy/-/koa-proxy-1.0.0-alpha.3.tgz#afc61edc9dc6a195464664beccc162cfe994bf55"
+ integrity sha512-8ke0WoQKAsQ8BpkC9+I83lKsFaycE9fcLeTx12jQtEa5SrdTI6mNKR5M4LslHbvkX1hDhXreIszXsnom5Ej7RQ==
+ dependencies:
+ pause-stream "0.0.11"
+ request "^2.88.0"
+ request-promise-native "^1.0.5"
+
+koa-router@^12.0.0:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-12.0.1.tgz#a3c1c331032d442da786f0631d23e74d51b6882e"
+ integrity sha512-gaDdj3GtzoLoeosacd50kBBTnnh3B9AYxDThQUo4sfUyXdOhY6ku1qyZKW88tQCRgc3Sw6ChXYXWZwwgjOxE0w==
+ dependencies:
+ debug "^4.3.4"
+ http-errors "^2.0.0"
+ koa-compose "^4.1.0"
+ methods "^1.1.2"
+ path-to-regexp "^6.2.1"
+
+koa-send@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79"
+ integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==
+ dependencies:
+ debug "^4.1.1"
+ http-errors "^1.7.3"
+ resolve-path "^1.4.0"
+
+koa-static@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
+ integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==
+ dependencies:
+ debug "^3.1.0"
+ koa-send "^5.0.0"
+
+koa@^2.14.1:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/koa/-/koa-2.15.0.tgz#d24ae1b0ff378bf12eb3df584ab4204e4c12ac2b"
+ integrity sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==
+ dependencies:
+ accepts "^1.3.5"
+ cache-content-type "^1.0.0"
+ content-disposition "~0.5.2"
+ content-type "^1.0.4"
+ cookies "~0.9.0"
+ debug "^4.3.2"
+ delegates "^1.0.0"
+ depd "^2.0.0"
+ destroy "^1.0.4"
+ encodeurl "^1.0.2"
+ escape-html "^1.0.3"
+ fresh "~0.5.2"
+ http-assert "^1.3.0"
+ http-errors "^1.6.3"
+ is-generator-function "^1.0.7"
+ koa-compose "^4.1.0"
+ koa-convert "^2.0.0"
+ on-finished "^2.3.0"
+ only "~0.0.2"
+ parseurl "^1.3.2"
+ statuses "^1.5.0"
+ type-is "^1.6.16"
+ vary "^1.1.2"
+
kubernetes-models@^4.1.0, kubernetes-models@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/kubernetes-models/-/kubernetes-models-4.3.1.tgz#14b8e465410f22d96270e71f9bb62bf7e5066e9c"
@@ -21188,6 +22960,14 @@ libnpmaccess@^6.0.4:
npm-package-arg "^9.0.1"
npm-registry-fetch "^13.0.0"
+libnpmaccess@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52"
+ integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==
+ dependencies:
+ npm-package-arg "^10.1.0"
+ npm-registry-fetch "^14.0.3"
+
libnpmdiff@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0"
@@ -21202,6 +22982,21 @@ libnpmdiff@^4.0.5:
pacote "^13.6.1"
tar "^6.1.0"
+libnpmdiff@^5.0.19:
+ version "5.0.20"
+ resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.20.tgz#fc1d310521ce9765f7bf7693ba6affa02a11bcc1"
+ integrity sha512-oG+qEc0qzg++1YqLwguQvXAyG8BrKq+23RHr4sCa5XZnf1U+hcKUp8itgaBY9sGRYyGXtsRgXWWFHBmqXIctDA==
+ dependencies:
+ "@npmcli/arborist" "^6.5.0"
+ "@npmcli/disparity-colors" "^3.0.0"
+ "@npmcli/installed-package-contents" "^2.0.2"
+ binary-extensions "^2.2.0"
+ diff "^5.1.0"
+ minimatch "^9.0.0"
+ npm-package-arg "^10.1.0"
+ pacote "^15.0.8"
+ tar "^6.1.13"
+
libnpmexec@^4.0.14:
version "4.0.14"
resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773"
@@ -21222,6 +23017,23 @@ libnpmexec@^4.0.14:
semver "^7.3.7"
walk-up-path "^1.0.0"
+libnpmexec@^6.0.3:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.4.tgz#205c7b77be5776576367c39f8d349e388025d77e"
+ integrity sha512-dhFp5yA9M2g8oLg/Ys9not+pNzW8B20pcz455TGqyU5VesXnEPQwK5EPVY8W24JJn7M0jMJ6/GxosywMPOTebA==
+ dependencies:
+ "@npmcli/arborist" "^6.5.0"
+ "@npmcli/run-script" "^6.0.0"
+ ci-info "^3.7.1"
+ npm-package-arg "^10.1.0"
+ npmlog "^7.0.1"
+ pacote "^15.0.8"
+ proc-log "^3.0.0"
+ read "^2.0.0"
+ read-package-json-fast "^3.0.2"
+ semver "^7.3.7"
+ walk-up-path "^3.0.1"
+
libnpmfund@^3.0.5:
version "3.0.5"
resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e"
@@ -21229,6 +23041,13 @@ libnpmfund@^3.0.5:
dependencies:
"@npmcli/arborist" "^5.6.3"
+libnpmfund@^4.0.19:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.2.1.tgz#f52bed09060e003c001cdaae8904ee97a3d6d5c6"
+ integrity sha512-2fbmQMk3wPMdPx1gbYLNbzghj48XAsfytKrmy+A0eFXwDxCwL0BLdgXoeLQCZPpLUMSPPXdKyL6Wm4erWezhnA==
+ dependencies:
+ "@npmcli/arborist" "^6.5.0"
+
libnpmhook@^8.0.4:
version "8.0.4"
resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87"
@@ -21237,6 +23056,14 @@ libnpmhook@^8.0.4:
aproba "^2.0.0"
npm-registry-fetch "^13.0.0"
+libnpmhook@^9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.3.tgz#5dbd6a146feb7e11993d36a26f750ae2347bb1d9"
+ integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw==
+ dependencies:
+ aproba "^2.0.0"
+ npm-registry-fetch "^14.0.3"
+
libnpmorg@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311"
@@ -21245,6 +23072,14 @@ libnpmorg@^4.0.4:
aproba "^2.0.0"
npm-registry-fetch "^13.0.0"
+libnpmorg@^5.0.4:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.4.tgz#94eec2b84fbef736457eb27894c972ae6f5cac82"
+ integrity sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw==
+ dependencies:
+ aproba "^2.0.0"
+ npm-registry-fetch "^14.0.3"
+
libnpmpack@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2"
@@ -21254,6 +23089,16 @@ libnpmpack@^4.1.3:
npm-package-arg "^9.0.1"
pacote "^13.6.1"
+libnpmpack@^5.0.19:
+ version "5.0.20"
+ resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.20.tgz#982e656e87bdfb69b458260d20c6ab243c661e5d"
+ integrity sha512-lPQXok0sU0V7hjb8oMD6HjYTR296aZvCJQZ1PGC7PeuKkBGuNeqSKVE2I9bwI80E4bFa9gfQ1I+rGfkNRjn6tQ==
+ dependencies:
+ "@npmcli/arborist" "^6.5.0"
+ "@npmcli/run-script" "^6.0.0"
+ npm-package-arg "^10.1.0"
+ pacote "^15.0.8"
+
libnpmpublish@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1"
@@ -21265,6 +23110,20 @@ libnpmpublish@^6.0.5:
semver "^7.3.7"
ssri "^9.0.0"
+libnpmpublish@^7.5.0:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.5.1.tgz#80f0b5d30210156af7a1b98b1a7bff06bd868684"
+ integrity sha512-z/7HYMtuRrNgcftrI9ILXezZWHYHG0RaIZFfUvcLktE75vrScE3zOO+qvAbvQodQi4YvYoOGF1ySQ8tdbDCYQQ==
+ dependencies:
+ ci-info "^3.6.1"
+ normalize-package-data "^5.0.0"
+ npm-package-arg "^10.1.0"
+ npm-registry-fetch "^14.0.3"
+ proc-log "^3.0.0"
+ semver "^7.3.7"
+ sigstore "^1.4.0"
+ ssri "^10.0.1"
+
libnpmsearch@^5.0.4:
version "5.0.4"
resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81"
@@ -21272,6 +23131,13 @@ libnpmsearch@^5.0.4:
dependencies:
npm-registry-fetch "^13.0.0"
+libnpmsearch@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.2.tgz#b6a531a312855dd3bf84dd273b1033dd09b4cbec"
+ integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g==
+ dependencies:
+ npm-registry-fetch "^14.0.3"
+
libnpmteam@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef"
@@ -21280,6 +23146,14 @@ libnpmteam@^4.0.4:
aproba "^2.0.0"
npm-registry-fetch "^13.0.0"
+libnpmteam@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.3.tgz#196657e9d87c0cc914c44fee588ad2b838074a3c"
+ integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA==
+ dependencies:
+ aproba "^2.0.0"
+ npm-registry-fetch "^14.0.3"
+
libnpmversion@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d"
@@ -21291,6 +23165,17 @@ libnpmversion@^3.0.7:
proc-log "^2.0.0"
semver "^7.3.7"
+libnpmversion@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.2.tgz#cad9cd1b287fcf9576a64edfe71491b49a65d06f"
+ integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g==
+ dependencies:
+ "@npmcli/git" "^4.0.1"
+ "@npmcli/run-script" "^6.0.0"
+ json-parse-even-better-errors "^3.0.0"
+ proc-log "^3.0.0"
+ semver "^7.3.7"
+
libsodium-wrappers@^0.7.11:
version "0.7.13"
resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz#83299e06ee1466057ba0e64e532777d2929b90d3"
@@ -21385,6 +23270,17 @@ load-json-file@^4.0.0:
pify "^3.0.0"
strip-bom "^3.0.0"
+load-json-file@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3"
+ integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==
+ dependencies:
+ graceful-fs "^4.1.15"
+ parse-json "^4.0.0"
+ pify "^4.0.1"
+ strip-bom "^3.0.0"
+ type-fest "^0.3.0"
+
loader-runner@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
@@ -21550,7 +23446,7 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
-lodash.merge@^4.6.2:
+lodash.merge@^4.6.1, lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
@@ -21580,7 +23476,7 @@ lodash.zipobject@^4.1.3:
resolved "https://registry.yarnpkg.com/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz#b399f5aba8ff62a746f6979bf20b214f964dbef8"
integrity sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ==
-lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0:
+lodash@4.17.21, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -21755,7 +23651,7 @@ make-error@^1.1.1:
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0:
+make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0:
version "10.2.1"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164"
integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==
@@ -21777,7 +23673,7 @@ make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0:
socks-proxy-agent "^7.0.0"
ssri "^9.0.0"
-make-fetch-happen@^11.0.3:
+make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
@@ -22451,7 +24347,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.25, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.25, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -22543,7 +24439,7 @@ minimatch@^7.4.2, minimatch@^7.4.3:
dependencies:
brace-expansion "^2.0.1"
-minimatch@^9.0.1:
+minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3:
version "9.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
@@ -22707,6 +24603,13 @@ mock-fs@5.2.0:
resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.2.0.tgz#3502a9499c84c0a1218ee4bf92ae5bf2ea9b2b5e"
integrity sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw==
+mock-json-schema@^1.0.7:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/mock-json-schema/-/mock-json-schema-1.1.1.tgz#35cf35ae16e519986ff83c22b4a886a8fe5b9ba5"
+ integrity sha512-YV23vlsLP1EEOy0EviUvZTluXjLR+rhMzeayP2rcDiezj3RW01MhOSQkbQskdtg0K2fnGas5LKbSXgNjAOSX4A==
+ dependencies:
+ lodash "^4.17.21"
+
modify-values@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
@@ -22840,6 +24743,11 @@ mute-stream@0.0.8, mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+mute-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e"
+ integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==
+
mysql2@^2.2.5:
version "2.3.3"
resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0"
@@ -22914,6 +24822,11 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+natural-orderby@^2.0.1, natural-orderby@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016"
+ integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==
+
ndjson@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19"
@@ -23011,6 +24924,13 @@ node-fetch-commonjs@^3.3.1:
node-domexception "^1.0.0"
web-streams-polyfill "^3.0.3"
+node-fetch-h2@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac"
+ integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==
+ dependencies:
+ http2-client "^1.2.5"
+
node-fetch-native@^1.4.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.4.1.tgz#5a336e55b4e1b1e72b9927da09fecd2b374c9be5"
@@ -23054,6 +24974,23 @@ node-gyp@^9.0.0, node-gyp@^9.1.0:
tar "^6.1.2"
which "^2.0.2"
+node-gyp@^9.4.0:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185"
+ integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==
+ dependencies:
+ env-paths "^2.2.0"
+ exponential-backoff "^3.1.1"
+ glob "^7.1.4"
+ graceful-fs "^4.2.6"
+ make-fetch-happen "^10.0.3"
+ nopt "^6.0.0"
+ npmlog "^6.0.0"
+ rimraf "^3.0.2"
+ semver "^7.3.5"
+ tar "^6.1.2"
+ which "^2.0.2"
+
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -23088,6 +25025,13 @@ node-libs-browser@^2.2.1:
util "^0.11.0"
vm-browserify "^1.0.1"
+node-readfiles@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d"
+ integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==
+ dependencies:
+ es6-promise "^3.2.1"
+
node-releases@^2.0.13:
version "2.0.13"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
@@ -23116,6 +25060,13 @@ nopt@^6.0.0:
dependencies:
abbrev "^1.0.0"
+nopt@^7.0.0, nopt@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7"
+ integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==
+ dependencies:
+ abbrev "^2.0.0"
+
nopt@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
@@ -23153,6 +25104,16 @@ normalize-package-data@^4.0.0:
semver "^7.3.5"
validate-npm-package-license "^3.0.4"
+normalize-package-data@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588"
+ integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==
+ dependencies:
+ hosted-git-info "^6.0.0"
+ is-core-module "^2.8.1"
+ semver "^7.3.5"
+ validate-npm-package-license "^3.0.4"
+
normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
@@ -23177,6 +25138,11 @@ npm-audit-report@^3.0.0:
dependencies:
chalk "^4.0.0"
+npm-audit-report@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95"
+ integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw==
+
npm-bundled@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
@@ -23191,6 +25157,13 @@ npm-bundled@^2.0.0:
dependencies:
npm-normalize-package-bin "^2.0.0"
+npm-bundled@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7"
+ integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==
+ dependencies:
+ npm-normalize-package-bin "^3.0.0"
+
npm-install-checks@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234"
@@ -23198,6 +25171,13 @@ npm-install-checks@^5.0.0:
dependencies:
semver "^7.1.1"
+npm-install-checks@^6.0.0, npm-install-checks@^6.1.1, npm-install-checks@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe"
+ integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==
+ dependencies:
+ semver "^7.1.1"
+
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
@@ -23208,6 +25188,21 @@ npm-normalize-package-bin@^2.0.0:
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff"
integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==
+npm-normalize-package-bin@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832"
+ integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==
+
+npm-package-arg@^10.0.0, npm-package-arg@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1"
+ integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==
+ dependencies:
+ hosted-git-info "^6.0.0"
+ proc-log "^3.0.0"
+ semver "^7.3.5"
+ validate-npm-package-name "^5.0.0"
+
npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0:
version "9.1.2"
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc"
@@ -23228,6 +25223,13 @@ npm-packlist@^5.0.0, npm-packlist@^5.1.0:
npm-bundled "^2.0.0"
npm-normalize-package-bin "^2.0.0"
+npm-packlist@^7.0.0:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32"
+ integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==
+ dependencies:
+ ignore-walk "^6.0.0"
+
npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84"
@@ -23238,6 +25240,16 @@ npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2:
npm-package-arg "^9.0.0"
semver "^7.3.5"
+npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa"
+ integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==
+ dependencies:
+ npm-install-checks "^6.0.0"
+ npm-normalize-package-bin "^3.0.0"
+ npm-package-arg "^10.0.0"
+ semver "^7.3.5"
+
npm-profile@^6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e"
@@ -23246,6 +25258,14 @@ npm-profile@^6.2.0:
npm-registry-fetch "^13.0.1"
proc-log "^2.0.0"
+npm-profile@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663"
+ integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ==
+ dependencies:
+ npm-registry-fetch "^14.0.0"
+ proc-log "^3.0.0"
+
npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1:
version "13.3.1"
resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e"
@@ -23259,6 +25279,19 @@ npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3
npm-package-arg "^9.0.1"
proc-log "^2.0.0"
+npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5:
+ version "14.0.5"
+ resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d"
+ integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==
+ dependencies:
+ make-fetch-happen "^11.0.0"
+ minipass "^5.0.0"
+ minipass-fetch "^3.0.0"
+ minipass-json-stream "^1.0.1"
+ minizlib "^2.1.2"
+ npm-package-arg "^10.0.0"
+ proc-log "^3.0.0"
+
npm-run-path@^4.0.0, npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -23278,6 +25311,85 @@ npm-user-validate@^1.0.1:
resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561"
integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==
+npm-user-validate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6"
+ integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q==
+
+npm@9.8.1:
+ version "9.8.1"
+ resolved "https://registry.yarnpkg.com/npm/-/npm-9.8.1.tgz#b8f070cc770128b38017160491504184863329f0"
+ integrity sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==
+ dependencies:
+ "@isaacs/string-locale-compare" "^1.1.0"
+ "@npmcli/arborist" "^6.3.0"
+ "@npmcli/config" "^6.2.1"
+ "@npmcli/fs" "^3.1.0"
+ "@npmcli/map-workspaces" "^3.0.4"
+ "@npmcli/package-json" "^4.0.1"
+ "@npmcli/promise-spawn" "^6.0.2"
+ "@npmcli/run-script" "^6.0.2"
+ abbrev "^2.0.0"
+ archy "~1.0.0"
+ cacache "^17.1.3"
+ chalk "^5.3.0"
+ ci-info "^3.8.0"
+ cli-columns "^4.0.0"
+ cli-table3 "^0.6.3"
+ columnify "^1.6.0"
+ fastest-levenshtein "^1.0.16"
+ fs-minipass "^3.0.2"
+ glob "^10.2.7"
+ graceful-fs "^4.2.11"
+ hosted-git-info "^6.1.1"
+ ini "^4.1.1"
+ init-package-json "^5.0.0"
+ is-cidr "^4.0.2"
+ json-parse-even-better-errors "^3.0.0"
+ libnpmaccess "^7.0.2"
+ libnpmdiff "^5.0.19"
+ libnpmexec "^6.0.3"
+ libnpmfund "^4.0.19"
+ libnpmhook "^9.0.3"
+ libnpmorg "^5.0.4"
+ libnpmpack "^5.0.19"
+ libnpmpublish "^7.5.0"
+ libnpmsearch "^6.0.2"
+ libnpmteam "^5.0.3"
+ libnpmversion "^4.0.2"
+ make-fetch-happen "^11.1.1"
+ minimatch "^9.0.3"
+ minipass "^5.0.0"
+ minipass-pipeline "^1.2.4"
+ ms "^2.1.2"
+ node-gyp "^9.4.0"
+ nopt "^7.2.0"
+ npm-audit-report "^5.0.0"
+ npm-install-checks "^6.1.1"
+ npm-package-arg "^10.1.0"
+ npm-pick-manifest "^8.0.1"
+ npm-profile "^7.0.1"
+ npm-registry-fetch "^14.0.5"
+ npm-user-validate "^2.0.0"
+ npmlog "^7.0.1"
+ p-map "^4.0.0"
+ pacote "^15.2.0"
+ parse-conflict-json "^3.0.1"
+ proc-log "^3.0.0"
+ qrcode-terminal "^0.12.0"
+ read "^2.1.0"
+ semver "^7.5.4"
+ sigstore "^1.7.0"
+ ssri "^10.0.4"
+ supports-color "^9.4.0"
+ tar "^6.1.15"
+ text-table "~0.2.0"
+ tiny-relative-date "^1.3.0"
+ treeverse "^3.0.0"
+ validate-npm-package-name "^5.0.0"
+ which "^3.0.1"
+ write-file-atomic "^5.0.1"
+
npm@^8.3.0:
version "8.19.4"
resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.4.tgz#65ad6a2dfdd157a4ef4467fb86e8dcd35a43493f"
@@ -23367,6 +25479,16 @@ npmlog@^6.0.0, npmlog@^6.0.2:
gauge "^4.0.3"
set-blocking "^2.0.0"
+npmlog@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8"
+ integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==
+ dependencies:
+ are-we-there-yet "^4.0.0"
+ console-control-strings "^1.1.0"
+ gauge "^5.0.0"
+ set-blocking "^2.0.0"
+
nth-check@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
@@ -23388,10 +25510,56 @@ nunjucks@^3.2.3:
asap "^2.0.3"
commander "^5.1.0"
-nwsapi@^2.2.0, nwsapi@^2.2.2:
- version "2.2.7"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
- integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+nwsapi@^2.2.0, nwsapi@^2.2.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+ integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
+oas-kit-common@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535"
+ integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==
+ dependencies:
+ fast-safe-stringify "^2.0.7"
+
+oas-linter@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e"
+ integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==
+ dependencies:
+ "@exodus/schemasafe" "^1.0.0-rc.2"
+ should "^13.2.1"
+ yaml "^1.10.0"
+
+oas-resolver@^2.5.6:
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b"
+ integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==
+ dependencies:
+ node-fetch-h2 "^2.3.0"
+ oas-kit-common "^1.0.8"
+ reftools "^1.1.9"
+ yaml "^1.10.0"
+ yargs "^17.0.1"
+
+oas-schema-walker@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22"
+ integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==
+
+oas-validator@^5.0.8:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28"
+ integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ oas-kit-common "^1.0.8"
+ oas-linter "^3.2.2"
+ oas-resolver "^2.5.6"
+ oas-schema-walker "^1.1.5"
+ reftools "^1.1.9"
+ should "^13.2.1"
+ yaml "^1.10.0"
oauth-sign@~0.9.0:
version "0.9.0"
@@ -23413,7 +25581,7 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-hash@^2.2.0:
+object-hash@^2.0.3, object-hash@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
@@ -23441,6 +25609,11 @@ object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+object-treeify@^1.1.33, object-treeify@^1.1.4:
+ version "1.1.33"
+ resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40"
+ integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==
+
object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
@@ -23533,7 +25706,7 @@ oidc-token-hash@^5.0.3:
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz#9a229f0a1ce9d4fc89bcaee5478c97a889e7b7b6"
integrity sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==
-on-finished@2.4.1:
+on-finished@2.4.1, on-finished@^2.3.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
@@ -23580,6 +25753,11 @@ onetime@^6.0.0:
dependencies:
mimic-fn "^4.0.0"
+only@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
+ integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==
+
ono@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/ono/-/ono-7.1.3.tgz#a054e96a388f566a6c4c95e1e92b9b253722d286"
@@ -23604,6 +25782,54 @@ open@^8.0.0, open@^8.0.4, open@^8.0.9, open@^8.4.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
+openapi-backend@^5.10.5, openapi-backend@^5.6.2:
+ version "5.10.5"
+ resolved "https://registry.yarnpkg.com/openapi-backend/-/openapi-backend-5.10.5.tgz#344905d7db0dcddbec827e9aa3e8dc8e7089b0a7"
+ integrity sha512-ivZfL0Lwj7rRctCqxAquGy4j/VcdUXUvDsEVM3NG/2jDuvYT2dS+sf9ntGo5vv4hkOnkWgPnR6HxHp7NPexqAA==
+ dependencies:
+ "@apidevtools/json-schema-ref-parser" "^11.1.0"
+ ajv "^8.6.2"
+ bath-es5 "^3.0.3"
+ cookie "^0.5.0"
+ dereference-json-schema "^0.2.1"
+ lodash "^4.17.15"
+ mock-json-schema "^1.0.7"
+ openapi-schema-validator "^12.0.0"
+ openapi-types "^12.0.2"
+ qs "^6.9.3"
+
+openapi-client-axios-typegen@^7.4.1:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/openapi-client-axios-typegen/-/openapi-client-axios-typegen-7.5.1.tgz#419f5fec82930c98f1f15c0b677df475f7e881cc"
+ integrity sha512-mvBaodjCZ6j/S7Id3qPhRV0F7oLQmY2GuEa4dmckhKMej6Pf4b7CiE+K1WHe5MZ7tb6sUt1dmgl8Shw0gA54Og==
+ dependencies:
+ "@anttiviljami/dtsgenerator" "^3.19.1"
+ "@apidevtools/json-schema-ref-parser" "^10.1.0"
+ axios ">=0.25.0"
+ indent-string "^4.0.0"
+ lodash "^4.17.21"
+ openapi-client-axios "^7.5.1"
+ openapi-types "^12.1.0"
+ yargs "^17.3.0"
+
+openapi-client-axios@^7.4.0, openapi-client-axios@^7.5.1:
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/openapi-client-axios/-/openapi-client-axios-7.5.1.tgz#0444660eca92a0ed7d5a6eb7a95fc8f4697bc894"
+ integrity sha512-mtPKqgQ/+u95SZAeJRobmT2K0q4akXvRVssO/5/muFsc5qfOQqmaP+awHcM4Xu2yFoD8Uumia2zjm8OtmpKqxA==
+ dependencies:
+ bath-es5 "^3.0.3"
+ dereference-json-schema "^0.2.1"
+ openapi-types "^12.1.3"
+
+openapi-merge@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/openapi-merge/-/openapi-merge-1.3.2.tgz#dc77a8e85ac63a5d7373eb63f05ab8b93ff78380"
+ integrity sha512-qRWBwPMiKIUrAcKW6lstMPKpFEWy32dBbP1UjHH9jlWgw++2BCqOVbsjO5Wa4H1Ll3c4cn+lyi4TinUy8iswzw==
+ dependencies:
+ atlassian-openapi "^1.0.8"
+ lodash "^4.17.15"
+ ts-is-present "^1.1.1"
+
openapi-sampler@^1.2.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/openapi-sampler/-/openapi-sampler-1.3.1.tgz#eebb2a1048f830cc277398bc8022b415f887e859"
@@ -23612,6 +25838,21 @@ openapi-sampler@^1.2.1:
"@types/json-schema" "^7.0.7"
json-pointer "0.6.2"
+openapi-schema-validator@^12.0.0:
+ version "12.1.3"
+ resolved "https://registry.yarnpkg.com/openapi-schema-validator/-/openapi-schema-validator-12.1.3.tgz#c9234af67b00cdbbecfdd4eb546d7006bacfe518"
+ integrity sha512-xTHOmxU/VQGUgo7Cm0jhwbklOKobXby+/237EG967+3TQEYJztMgX9Q5UE2taZKwyKPUq0j11dngpGjUuxz1hQ==
+ dependencies:
+ ajv "^8.1.0"
+ ajv-formats "^2.0.2"
+ lodash.merge "^4.6.1"
+ openapi-types "^12.1.3"
+
+openapi-types@^12.0.2, openapi-types@^12.1.0, openapi-types@^12.1.3:
+ version "12.1.3"
+ resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
+ integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
+
openapi-typescript-codegen@0.25.0:
version "0.25.0"
resolved "https://registry.yarnpkg.com/openapi-typescript-codegen/-/openapi-typescript-codegen-0.25.0.tgz#0cb028f54b33b0a63bd9da3756c1c41b4e1a70e2"
@@ -23630,6 +25871,64 @@ openapi3-ts@^3.1.2:
dependencies:
yaml "^2.2.1"
+openapi@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/openapi/-/openapi-1.0.1.tgz#f70ba667cf55b1684a7bfe1e6bcea7134bc9bb72"
+ integrity sha512-hiQ6/K2Q2eFqlOoPQb8V2hzsVsbv31ipMCKfuwZQmqf+MnLzVUcYMBy0h/Y+Sv/HeDCTN4mf0GoOmET4EoJS8A==
+ dependencies:
+ "@types/jest" "^26.0.14"
+ change-case "^4.1.1"
+ commander "^6.1.0"
+ cosmiconfig "^6.0.0"
+ is-url "^1.2.4"
+ js-yaml "^3.13.1"
+ node-fetch "^2.6.0"
+ object-hash "^2.0.3"
+ url-parse "^1.4.7"
+
+openapicmd@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/openapicmd/-/openapicmd-2.1.0.tgz#ac68e0717fb63018486784f03ebda105ed939fbc"
+ integrity sha512-AMe2rEXUCMZoJ7s6rYyVXauRtI0vFhm70lsn+QrV4HLItFK959GghCblgO3BXxqJ4SP4P8f+BY/74RRn0t0ZNA==
+ dependencies:
+ "@apidevtools/swagger-parser" "^10.1.0"
+ "@koa/cors" "^4.0.0"
+ "@oclif/command" "^1.8.36"
+ "@oclif/config" "^1.18.17"
+ "@oclif/core" "^3"
+ "@oclif/errors" "^1.3.6"
+ "@oclif/plugin-help" "^6.0.2"
+ "@oclif/plugin-plugins" "^3.9.1"
+ "@types/inquirer" "^7.3.1"
+ ajv "^8.12.0"
+ axios "^1.3.4"
+ chalk "^4.0.0"
+ cli-ux "^6.0.9"
+ common-tags "^1.8.2"
+ debug "^4.1.1"
+ deepmerge "^4.3.0"
+ get-port "^5.0.0"
+ inquirer "^7.1.0"
+ jest "^29.7.0"
+ jest-json-schema "^6.1.0"
+ js-yaml "^4.1.0"
+ klona "^2.0.6"
+ koa "^2.14.1"
+ koa-bodyparser "^4.3.0"
+ koa-logger "^3.2.1"
+ koa-mount "^4.0.0"
+ koa-proxy "^1.0.0-alpha.3"
+ koa-router "^12.0.0"
+ koa-static "^5.0.0"
+ openapi-backend "^5.6.2"
+ openapi-client-axios "^7.4.0"
+ openapi-client-axios-typegen "^7.4.1"
+ swagger-editor-dist "^4.11.2"
+ swagger-ui-dist "^5.9.0"
+ swagger2openapi "^7.0.8"
+ tslib "^2.5.0"
+ yargs "^17.7.2"
+
opener@1.5.2, opener@^1.5.1, opener@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -23902,6 +26201,30 @@ pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2:
ssri "^9.0.0"
tar "^6.1.11"
+pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0:
+ version "15.2.0"
+ resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3"
+ integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==
+ dependencies:
+ "@npmcli/git" "^4.0.0"
+ "@npmcli/installed-package-contents" "^2.0.1"
+ "@npmcli/promise-spawn" "^6.0.1"
+ "@npmcli/run-script" "^6.0.0"
+ cacache "^17.0.0"
+ fs-minipass "^3.0.0"
+ minipass "^5.0.0"
+ npm-package-arg "^10.0.0"
+ npm-packlist "^7.0.0"
+ npm-pick-manifest "^8.0.0"
+ npm-registry-fetch "^14.0.0"
+ proc-log "^3.0.0"
+ promise-retry "^2.0.1"
+ read-package-json "^6.0.0"
+ read-package-json-fast "^3.0.0"
+ sigstore "^1.3.0"
+ ssri "^10.0.0"
+ tar "^6.1.11"
+
pako@^1.0.10, pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
@@ -23947,6 +26270,15 @@ parse-conflict-json@^2.0.1, parse-conflict-json@^2.0.2:
just-diff "^5.0.1"
just-diff-apply "^5.2.0"
+parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c"
+ integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==
+ dependencies:
+ json-parse-even-better-errors "^3.0.0"
+ just-diff "^6.0.0"
+ just-diff-apply "^5.2.0"
+
parse-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
@@ -24015,7 +26347,7 @@ parse5@^7.0.0, parse5@^7.1.1:
dependencies:
entities "^4.4.0"
-parseurl@~1.3.2, parseurl@~1.3.3:
+parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
@@ -24149,6 +26481,28 @@ passport@^0.6.0:
pause "0.0.1"
utils-merge "^1.0.1"
+passport@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/passport/-/passport-0.7.0.tgz#3688415a59a48cf8068417a8a8092d4492ca3a05"
+ integrity sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==
+ dependencies:
+ passport-strategy "1.x.x"
+ pause "0.0.1"
+ utils-merge "^1.0.1"
+
+passthrough-counter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/passthrough-counter/-/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa"
+ integrity sha512-Wy8PXTLqPAN0oEgBrlnsXPMww3SYJ44tQ8aVrGAI4h4JZYCS0oYqsPqtPR8OhJpv6qFbpbB7XAn0liKV7EXubA==
+
+password-prompt@^1.1.2, password-prompt@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f"
+ integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==
+ dependencies:
+ ansi-escapes "^4.3.2"
+ cross-spawn "^7.0.3"
+
patch-package@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61"
@@ -24180,6 +26534,14 @@ path-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
+path-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f"
+ integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
path-equal@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/path-equal/-/path-equal-1.2.5.tgz#9fcbdd5e5daee448e96f43f3bac06c666b5e982a"
@@ -24200,7 +26562,7 @@ path-exists@^5.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
-path-is-absolute@^1.0.0:
+path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
@@ -24233,7 +26595,12 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
-path-to-regexp@^6.2.0:
+path-to-regexp@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.2.0.tgz#fa7877ecbc495c601907562222453c43cc204a5f"
+ integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==
+
+path-to-regexp@^6.2.0, path-to-regexp@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5"
integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==
@@ -24248,6 +26615,13 @@ pathe@^1.1.1:
resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a"
integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==
+ dependencies:
+ through "~2.3"
+
pause@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
@@ -24264,6 +26638,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+pct-encode@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pct-encode/-/pct-encode-1.0.2.tgz#b99b7b044d6bd7c39e4839a7a80122ad7515caa5"
+ integrity sha512-8W3p1RpEfGKbY68uo/n+FMYf/vIpSiYJhtPCQ3ioxMuKJ8u4Q6j3pIh0LAeszEdPSIguxon8CGjx4aXX33l0Tg==
+
peek-readable@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72"
@@ -24298,7 +26677,12 @@ pg-connection-string@2.5.0:
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34"
integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==
-pg-connection-string@^2.6.2:
+pg-connection-string@2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.1.tgz#78c23c21a35dd116f48e12e23c0965e8d9e2cbfb"
+ integrity sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==
+
+pg-connection-string@2.6.2, pg-connection-string@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
@@ -24849,7 +27233,17 @@ pretty-error@^4.0.0:
lodash "^4.17.20"
renderkid "^3.0.0"
-pretty-format@^27.0.2:
+pretty-format@^26.0.0, pretty-format@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
+ integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^17.0.1"
+
+pretty-format@^27.0.2, pretty-format@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
@@ -24887,6 +27281,11 @@ proc-log@^2.0.0, proc-log@^2.0.1:
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685"
integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==
+proc-log@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8"
+ integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==
+
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -24914,7 +27313,7 @@ promise-all-reject-late@^1.0.0:
resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2"
integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==
-promise-call-limit@^1.0.1:
+promise-call-limit@^1.0.1, promise-call-limit@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea"
integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==
@@ -24957,6 +27356,13 @@ promzard@^0.3.0:
dependencies:
read "1"
+promzard@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b"
+ integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==
+ dependencies:
+ read "^2.0.0"
+
prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
@@ -25172,7 +27578,7 @@ qs@6.11.0:
dependencies:
side-channel "^1.0.4"
-qs@^6.10.0, qs@^6.10.1, qs@^6.10.2, qs@^6.11.0, qs@^6.11.2, qs@^6.4.0, qs@^6.9.1, qs@^6.9.4:
+qs@^6.10.0, qs@^6.10.1, qs@^6.10.2, qs@^6.11.0, qs@^6.11.2, qs@^6.4.0, qs@^6.5.2, qs@^6.9.1, qs@^6.9.3, qs@^6.9.4:
version "6.11.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
@@ -25209,6 +27615,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+queue-tick@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142"
+ integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==
+
quick-format-unescaped@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz#fb3e468ac64c01d22305806c39f121ddac0d1fb9"
@@ -25300,7 +27711,7 @@ raw-body@2.5.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
-raw-body@^2.4.1:
+raw-body@^2.3.3, raw-body@^2.4.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
@@ -25790,6 +28201,11 @@ read-cmd-shim@^3.0.0:
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087"
integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==
+read-cmd-shim@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb"
+ integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==
+
read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83"
@@ -25798,6 +28214,14 @@ read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3:
json-parse-even-better-errors "^2.3.0"
npm-normalize-package-bin "^1.0.1"
+read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049"
+ integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==
+ dependencies:
+ json-parse-even-better-errors "^3.0.0"
+ npm-normalize-package-bin "^3.0.0"
+
read-package-json@^5.0.0, read-package-json@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa"
@@ -25808,6 +28232,16 @@ read-package-json@^5.0.0, read-package-json@^5.0.2:
normalize-package-data "^4.0.0"
npm-normalize-package-bin "^2.0.0"
+read-package-json@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836"
+ integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==
+ dependencies:
+ glob "^10.2.2"
+ json-parse-even-better-errors "^3.0.0"
+ normalize-package-data "^5.0.0"
+ npm-normalize-package-bin "^3.0.0"
+
read-pkg-up@^7.0.0, read-pkg-up@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
@@ -25844,6 +28278,13 @@ read@1, read@^1.0.7, read@~1.0.7:
dependencies:
mute-stream "~0.0.4"
+read@^2.0.0, read@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218"
+ integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==
+ dependencies:
+ mute-stream "~1.0.0"
+
readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
@@ -25940,6 +28381,13 @@ recharts@^2.9.0:
tiny-invariant "^1.3.1"
victory-vendor "^36.6.8"
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
+ dependencies:
+ resolve "^1.1.6"
+
rechoir@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
@@ -25993,7 +28441,7 @@ redux@^4.0.0, redux@^4.0.4, redux@^4.1.2:
dependencies:
"@babel/runtime" "^7.9.2"
-reflect-metadata@^0.1.13:
+reflect-metadata@0.1.13, reflect-metadata@^0.1.13:
version "0.1.13"
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
@@ -26019,6 +28467,11 @@ refractor@^3.6.0:
parse-entities "^2.0.0"
prismjs "~1.27.0"
+reftools@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e"
+ integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==
+
regenerate-unicode-properties@^10.1.0:
version "10.1.1"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480"
@@ -26190,6 +28643,22 @@ replace-in-file@^6.0.0:
glob "^7.2.0"
yargs "^17.2.1"
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise-native@^1.0.5:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ dependencies:
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
request@^2.88.0:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
@@ -26275,6 +28744,14 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-path@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
+ integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==
+ dependencies:
+ http-errors "~1.6.2"
+ path-is-absolute "1.0.1"
+
resolve-pkg-maps@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
@@ -26285,7 +28762,7 @@ resolve.exports@^2.0.0:
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
-resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4:
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -26344,6 +28821,16 @@ retry-request@^5.0.0:
debug "^4.1.1"
extend "^3.0.2"
+retry-request@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.1.tgz#b0163aeb934bd3fa2de76902d683b09b8ce364ba"
+ integrity sha512-ZI6vJp9rfB71mrZpw+n9p/B6HCsd7QJlSEQftZ+xfJzr3cQ9EPGKw1FF0BnViJ0fYREX6FhymBD2CARpmsFciQ==
+ dependencies:
+ "@types/request" "^2.48.8"
+ debug "^4.1.1"
+ extend "^3.0.2"
+ teeny-request "^9.0.0"
+
retry@0.13.1, retry@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
@@ -26509,6 +28996,20 @@ rw@1:
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+rxjs@7.8.0:
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4"
+ integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==
+ dependencies:
+ tslib "^2.1.0"
+
+rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.3:
+ version "6.6.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+ integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
+ dependencies:
+ tslib "^1.9.0"
+
rxjs@^7.2.0, rxjs@^7.5.5:
version "7.8.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
@@ -26743,6 +29244,15 @@ send@0.18.0:
range-parser "~1.2.1"
statuses "2.0.1"
+sentence-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
+ integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
seq-queue@^0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"
@@ -26871,11 +29381,64 @@ shell-quote@^1.7.3, shell-quote@^1.8.1:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+shelljs@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
short-unique-id@^5.0.2:
version "5.0.3"
resolved "https://registry.yarnpkg.com/short-unique-id/-/short-unique-id-5.0.3.tgz#bc6975dc5e8b296960ff5ac91ddabbc7ddb693d9"
integrity sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug==
+should-equal@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3"
+ integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==
+ dependencies:
+ should-type "^1.4.0"
+
+should-format@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1"
+ integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==
+ dependencies:
+ should-type "^1.3.0"
+ should-type-adaptors "^1.0.1"
+
+should-type-adaptors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a"
+ integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==
+ dependencies:
+ should-type "^1.3.0"
+ should-util "^1.0.0"
+
+should-type@^1.3.0, should-type@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3"
+ integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==
+
+should-util@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28"
+ integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==
+
+should@^13.2.1:
+ version "13.2.3"
+ resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10"
+ integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==
+ dependencies:
+ should-equal "^2.0.0"
+ should-format "^3.0.3"
+ should-type "^1.4.0"
+ should-type-adaptors "^1.0.1"
+ should-util "^1.0.0"
+
side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -26904,6 +29467,17 @@ signale@^1.2.1, signale@^1.4.0:
figures "^2.0.0"
pkg-conf "^2.1.0"
+sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.7.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875"
+ integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==
+ dependencies:
+ "@sigstore/bundle" "^1.1.0"
+ "@sigstore/protobuf-specs" "^0.2.0"
+ "@sigstore/sign" "^1.0.0"
+ "@sigstore/tuf" "^1.0.3"
+ make-fetch-happen "^11.0.1"
+
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
@@ -26952,6 +29526,15 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ dependencies:
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
+
slice-ansi@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
@@ -27080,6 +29663,11 @@ spark-md5@^3.0.1:
resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc"
integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==
+spawn-command@^0.0.2-1:
+ version "0.0.2-1"
+ resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
+ integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==
+
spawn-error-forwarder@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029"
@@ -27219,7 +29807,7 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
-ssri@^10.0.0:
+ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4:
version "10.0.5"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c"
integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==
@@ -27301,11 +29889,16 @@ statuses@2.0.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-"statuses@>= 1.4.0 < 2":
+"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==
+
stop-iteration-iterator@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
@@ -27401,6 +29994,14 @@ streamsearch@^1.1.0:
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+streamx@^2.15.0:
+ version "2.15.6"
+ resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887"
+ integrity sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==
+ dependencies:
+ fast-fifo "^1.1.0"
+ queue-tick "^1.0.1"
+
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"
@@ -27436,7 +30037,7 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
-"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -27677,14 +30278,19 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-supports-color@^8.0.0:
+supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
dependencies:
has-flag "^4.0.0"
-supports-hyperlinks@^2.3.0:
+supports-color@^9.4.0:
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954"
+ integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==
+
+supports-hyperlinks@^2.1.0, supports-hyperlinks@^2.2.0, supports-hyperlinks@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
@@ -27748,6 +30354,16 @@ swagger-client@^3.22.3:
traverse "~0.6.6"
undici "^5.24.0"
+swagger-editor-dist@^4.11.2:
+ version "4.11.2"
+ resolved "https://registry.yarnpkg.com/swagger-editor-dist/-/swagger-editor-dist-4.11.2.tgz#de55f0c604bb2b82e18213456f05044ed1a3e26f"
+ integrity sha512-6HtvF933+hUyHLwrEyAIGwqak3U5j5ZjSJPsVbSeoQG1w0T5bAMJBCl4HSqqM0IkD/BoaTUgKWZd7Rrn1NUGeQ==
+
+swagger-ui-dist@^5.9.0:
+ version "5.11.0"
+ resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.11.0.tgz#9bcfd75278b1fa9c36fe52f206f8fc611470547c"
+ integrity sha512-j0PIATqQSEFGOLmiJOJZj1X1Jt6bFIur3JpY7+ghliUnfZs0fpWDdHEkn9q7QUlBtKbkn6TepvSxTqnE8l3s0A==
+
swagger-ui-react@^5.0.0:
version "5.9.0"
resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.9.0.tgz#574411a191f454d2451d2f533caa397b503934fd"
@@ -27788,6 +30404,23 @@ swagger-ui-react@^5.0.0:
xml-but-prettier "^1.0.1"
zenscroll "^4.0.2"
+swagger2openapi@^7.0.8:
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59"
+ integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ node-fetch "^2.6.1"
+ node-fetch-h2 "^2.3.0"
+ node-readfiles "^0.2.0"
+ oas-kit-common "^1.0.8"
+ oas-resolver "^2.5.6"
+ oas-schema-walker "^1.1.5"
+ oas-validator "^5.0.8"
+ reftools "^1.1.9"
+ yaml "^1.10.0"
+ yargs "^17.0.1"
+
swc-loader@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d"
@@ -27857,7 +30490,16 @@ tar-stream@^2.0.0, tar-stream@^2.1.4, tar-stream@^2.2.0:
inherits "^2.0.3"
readable-stream "^3.1.1"
-tar@^6.1.0, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2, tar@^6.2.0:
+tar-stream@^3.0.0:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab"
+ integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==
+ dependencies:
+ b4a "^1.6.4"
+ fast-fifo "^1.2.0"
+ streamx "^2.15.0"
+
+tar@^6.1.0, tar@^6.1.11, tar@^6.1.12, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2, tar@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73"
integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
@@ -27892,6 +30534,17 @@ teeny-request@^8.0.0:
stream-events "^1.0.5"
uuid "^9.0.0"
+teeny-request@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d"
+ integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==
+ dependencies:
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.0"
+ node-fetch "^2.6.9"
+ stream-events "^1.0.5"
+ uuid "^9.0.0"
+
telejson@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32"
@@ -28024,7 +30677,7 @@ through2@^4.0.0:
dependencies:
readable-stream "3"
-through@2, "through@>=2.2.7 <3", through@^2.3.6:
+through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
@@ -28157,6 +30810,14 @@ touch@^3.1.0:
dependencies:
nopt "~1.0.10"
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
tough-cookie@^4.0.0, tough-cookie@^4.1.2:
version "4.1.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
@@ -28167,14 +30828,6 @@ tough-cookie@^4.0.0, tough-cookie@^4.1.2:
universalify "^0.2.0"
url-parse "^1.5.3"
-tough-cookie@~2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
- dependencies:
- psl "^1.1.28"
- punycode "^2.1.1"
-
tr46@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
@@ -28199,6 +30852,11 @@ traverse@~0.6.6:
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe"
integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==
+tree-kill@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
+ integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
+
tree-sitter-json@=0.20.1:
version "0.20.1"
resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.20.1.tgz#d1fe6c59571dd3a987ebb3f5aeef404f37b3a453"
@@ -28226,6 +30884,11 @@ treeverse@^2.0.0:
resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca"
integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==
+treeverse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8"
+ integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==
+
trim-lines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
@@ -28276,6 +30939,11 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+ts-is-present@^1.1.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/ts-is-present/-/ts-is-present-1.2.2.tgz#ba59b4a9d2bc22b99d1ba7f4af3d5eb320408d95"
+ integrity sha512-cA5MPLWGWYXvnlJb4TamUUx858HVHBsxxdy8l7jxODOLDyGYnQOllob2A2jyDghGa5iJHs2gzFNHvwGJ0ZfR8g==
+
ts-node@10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be"
@@ -28326,16 +30994,31 @@ tsconfig-paths@^3.14.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1:
+tslib@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c"
+ integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==
+
+tslib@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
+ integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+
+tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0:
+tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+tsscmp@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
+ integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -28348,6 +31031,15 @@ tty-browserify@0.0.0:
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==
+tuf-js@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43"
+ integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==
+ dependencies:
+ "@tufjs/models" "1.0.4"
+ debug "^4.3.4"
+ make-fetch-happen "^11.1.1"
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -28456,6 +31148,11 @@ type-fest@^0.21.3:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+type-fest@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
+ integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
+
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@@ -28481,7 +31178,7 @@ type-fest@^3.0.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706"
integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
-type-is@^1.6.4, type-is@~1.6.18:
+type-is@^1.6.16, type-is@^1.6.18, 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"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
@@ -28617,6 +31314,11 @@ typescript@5.2.2:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
+typescript@^5.2.2:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
+ integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+
typescript@~5.1.0:
version "5.1.6"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
@@ -28654,6 +31356,13 @@ uid2@^1.0.0:
resolved "https://registry.yarnpkg.com/uid2/-/uid2-1.0.0.tgz#ef8d95a128d7c5c44defa1a3d052eecc17a06bfb"
integrity sha512-+I6aJUv63YAcY9n4mQreLUt0d4lvwkkopDNmpomkAUz0fAkEMV9pRWxN0EjhW1YfRhcuyHg2v3mwddCDW1+LFQ==
+uid@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/uid/-/uid-2.0.1.tgz#a3f57c962828ea65256cd622fc363028cdf4526b"
+ integrity sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==
+ dependencies:
+ "@lukeed/csprng" "^1.0.0"
+
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
@@ -28917,6 +31626,20 @@ update-browserslist-db@^1.0.13:
escalade "^3.1.1"
picocolors "^1.0.0"
+upper-case-first@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
+ integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
+ dependencies:
+ tslib "^2.0.3"
+
+upper-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a"
+ integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==
+ dependencies:
+ tslib "^2.0.3"
+
uri-js@^4.2.2, uri-js@^4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -28924,6 +31647,18 @@ uri-js@^4.2.2, uri-js@^4.4.1:
dependencies:
punycode "^2.1.0"
+uri-template@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uri-template/-/uri-template-2.0.0.tgz#0ed7b34f8dd6f48b9774048336d2bcf2b7f55724"
+ integrity sha512-r/i44nPoo0ktEZDjx+hxp9PSjQuBBfsd6RgCRuuMqCP0FZEp+YE0SpihThI4UGc5ePqQEFsdyZc7UVlowp+LLw==
+ dependencies:
+ pct-encode "~1.0.0"
+
+urijs@^1.19.10:
+ version "1.19.11"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc"
+ integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==
+
url-join@^4.0.0, url-join@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
@@ -28934,7 +31669,7 @@ url-join@^5.0.0:
resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1"
integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==
-url-parse@^1.5.10, url-parse@^1.5.3:
+url-parse@^1.4.7, url-parse@^1.5.10, url-parse@^1.5.3:
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
@@ -29098,6 +31833,13 @@ validate-npm-package-name@^4.0.0:
dependencies:
builtins "^5.0.0"
+validate-npm-package-name@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713"
+ integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==
+ dependencies:
+ builtins "^5.0.0"
+
validate.io-array@^1.0.3:
version "1.0.6"
resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
@@ -29128,7 +31870,7 @@ validate.io-number@^1.0.3:
resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8"
integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==
-vary@^1, vary@~1.1.2:
+vary@^1, vary@^1.1.2, vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
@@ -29434,6 +32176,11 @@ walk-up-path@^1.0.0:
resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e"
integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==
+walk-up-path@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886"
+ integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==
+
walker@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
@@ -29456,7 +32203,7 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
-wcwidth@^1.0.0, wcwidth@^1.0.1:
+wcwidth@>=1.0.1, wcwidth@^1.0.0, wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
@@ -29764,6 +32511,13 @@ which@^2.0.1, which@^2.0.2:
dependencies:
isexe "^2.0.0"
+which@^3.0.0, which@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1"
+ integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==
+ dependencies:
+ isexe "^2.0.0"
+
wide-align@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
@@ -29771,6 +32525,13 @@ wide-align@^1.1.5:
dependencies:
string-width "^1.0.2 || 2 || 3 || 4"
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
winston-transport@^4.5.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b"
@@ -29816,7 +32577,7 @@ wordwrap@^1.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-ansi@^6.0.1:
+wrap-ansi@^6.0.1, wrap-ansi@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
@@ -29856,6 +32617,14 @@ write-file-atomic@^4.0.0, write-file-atomic@^4.0.1, write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
+write-file-atomic@^5.0.0, write-file-atomic@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7"
+ integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==
+ dependencies:
+ imurmurhash "^0.1.4"
+ signal-exit "^4.0.1"
+
ws@^6.1.0:
version "6.2.2"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
@@ -30036,7 +32805,7 @@ yargs@^16.0.0, yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.1.1, yargs@^17.2.1, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2:
+yargs@^17.0.1, yargs@^17.1.1, yargs@^17.2.1, yargs@^17.3.0, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
@@ -30049,6 +32818,11 @@ yargs@^17.1.1, yargs@^17.2.1, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2:
y18n "^5.0.5"
yargs-parser "^21.1.1"
+yarn@^1.22.18:
+ version "1.22.21"
+ resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.21.tgz#1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
+ integrity sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg==
+
yauzl@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
@@ -30057,6 +32831,11 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+ylru@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.3.2.tgz#0de48017473275a4cbdfc83a1eaf67c01af8a785"
+ integrity sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==
+
yml-loader@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/yml-loader/-/yml-loader-2.1.0.tgz#b976b8691b537b6d3dc7d92a9a7d34b90de10870"
@@ -30127,6 +32906,15 @@ zip-stream@^4.1.0:
compress-commons "^4.1.2"
readable-stream "^3.6.0"
+zip-stream@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-5.0.1.tgz#cf3293bba121cad98be2ec7f05991d81d9f18134"
+ integrity sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA==
+ dependencies:
+ archiver-utils "^4.0.1"
+ compress-commons "^5.0.1"
+ readable-stream "^3.6.0"
+
zod-to-json-schema@^3.20.4, zod-to-json-schema@^3.21.4:
version "3.21.4"
resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.21.4.tgz#de97c5b6d4a25e9d444618486cb55c0c7fb949fd"