From e74722d9d91a7c50e756d313abf5e1c40ed44251 Mon Sep 17 00:00:00 2001 From: Jiri Spac Date: Tue, 9 Jul 2024 17:14:53 +0200 Subject: [PATCH] feat: Teams communication adapter (#4968) Co-authored-by: Dimitri POSTOLOV Co-authored-by: Kamil Kisiela Co-authored-by: github-actions[bot] --- .gitignore | 5 +- .nvmrc | 1 + README.md | 15 +- codegen.mts | 1 + docs/DEVELOPMENT.md | 5 +- package.json | 3 +- .../cli/examples/single.with.mutation.graphql | 19 + .../2024.06.11T10-10-00.ms-teams-webhook.ts | 8 + packages/migrations/src/run-pg-migrations.ts | 2 + packages/services/api/package.json | 1 + .../services/api/src/modules/alerts/index.ts | 8 +- .../modules/alerts/module.graphql.mappers.ts | 1 + .../api/src/modules/alerts/module.graphql.ts | 8 + .../alerts/providers/adapters/common.ts | 26 +- .../alerts/providers/adapters/msteams.spec.ts | 255 +++++++++++ .../alerts/providers/adapters/msteams.ts | 209 +++++++++ .../alerts/providers/adapters/slack.ts | 14 +- .../alerts/providers/alerts-manager.ts | 66 ++- .../api/src/modules/alerts/resolvers.ts | 8 + packages/services/storage/src/db/types.ts | 2 +- .../project/alerts/channels-table.tsx | 41 +- .../project/alerts/create-channel.tsx | 23 +- packages/web/app/src/components/ui/card.tsx | 2 +- packages/web/app/src/components/v2/table.tsx | 2 +- packages/web/app/src/components/v2/tag.tsx | 9 +- .../project-msteams-alert-full.png | Bin 0 -> 99992 bytes .../management/project-msteams-alert.png | Bin 0 -> 54079 bytes packages/web/docs/src/authors.ts | 5 + .../src/pages/docs/management/projects.mdx | 23 + .../2024-06-14-ms-teams-webhooks-alerts.mdx | 28 ++ pnpm-lock.yaml | 409 +----------------- scripts/serializer.ts | 1 + vitest.config.ts | 7 +- 33 files changed, 731 insertions(+), 476 deletions(-) create mode 100644 .nvmrc create mode 100644 packages/libraries/cli/examples/single.with.mutation.graphql create mode 100644 packages/migrations/src/actions/2024.06.11T10-10-00.ms-teams-webhook.ts create mode 100644 packages/services/api/src/modules/alerts/providers/adapters/msteams.spec.ts create mode 100644 packages/services/api/src/modules/alerts/providers/adapters/msteams.ts create mode 100644 packages/web/docs/public/changelog/2024-06-14-ms-teams-webhooks-alerts/project-msteams-alert-full.png create mode 100644 packages/web/docs/public/docs/pages/management/project-msteams-alert.png create mode 100644 packages/web/docs/src/pages/product-updates/2024-06-14-ms-teams-webhooks-alerts.mdx diff --git a/.gitignore b/.gitignore index 7d4070eb7..bf05f48e8 100644 --- a/.gitignore +++ b/.gitignore @@ -130,6 +130,7 @@ packages/web/app/environment-*.mjs packages/web/app/src/gql/*.ts packages/web/app/src/gql/*.json packages/web/app/src/graphql/*.ts +packages/web/docs/public/feed.xml # Changelog packages/web/app/src/components/ui/changelog/generated-changelog.ts @@ -142,6 +143,4 @@ deployment/utils/contour.types.ts schema.graphql resolvers.generated.ts -# generated by tsup -configs/tsup/dev.config.*.mjs -packages/web/docs/public/feed.xml +docker/docker-compose.override.yml diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..53d1c14db --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v22 diff --git a/README.md b/README.md index a346487a2..37c337fc8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ + +

+ + Created by The guild + +

+ + # GraphQL Hive GraphQL Hive provides all the tools the get visibility of your GraphQL architecture at all stages, @@ -51,10 +59,11 @@ GraphQL Hive helps you get a global overview of the usage of your GraphQL API wi ### Integrations -GraphQL Hive is well integrated with **Slack** and most **CI/CD** systems to get you up and running -as smoothly as possible! +GraphQL Hive is well integrated with **Slack**, **MS Teams** and most **CI/CD** systems to get you +up and running as smoothly as possible! -GraphQL Hive can notify your team when schema changes occur, either via Slack or a custom webhook. +GraphQL Hive can notify your team when schema changes occur, either via Slack, MS Teams or a custom +webhook. Also, the Hive CLI allows integration of the schema checks mechanism to all CI/CD systems (GitHub, BitBucket, Azure, and others). The same applies to schema publishing and operations checks. diff --git a/codegen.mts b/codegen.mts index 1fbf26bc6..c5401b80e 100644 --- a/codegen.mts +++ b/codegen.mts @@ -140,6 +140,7 @@ const config: CodegenConfig = { AlertChannel: '../modules/alerts/module.graphql.mappers#AlertChannelMapper', AlertSlackChannel: '../modules/alerts/module.graphql.mappers#AlertSlackChannelMapper', AlertWebhookChannel: '../modules/alerts/module.graphql.mappers#AlertWebhookChannelMapper', + TeamsWebhookChannel: '../modules/alerts/module.graphql.mappers#TeamsWebhookChannelMapper', Alert: '../modules/alerts/module.graphql.mappers#AlertMapper', AdminQuery: '../modules/admin/module.graphql.mappers#AdminQueryMapper', AdminStats: '../modules/admin/module.graphql.mappers#AdminStatsMapper', diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 6f23ad19d..1a0060271 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -5,8 +5,9 @@ Developing Hive locally requires you to have the following software installed locally: - Node.js 21 (or `nvm` or `fnm`) -- pnpm v8 -- Docker +- pnpm v9 +- Docker version 26.1.1 or later(previous versions will not work correctly on arm64) +- make sure these ports are free: 5432, 6379, 9000, 9001, 8123, 9092, 8081, 8082, 9644, 3567, 7043 ## Setup Instructions diff --git a/package.json b/package.json index e76ea4846..a279d8cc0 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "build:web": "pnpm prebuild && pnpm turbo build --filter=./packages/web/* --color", "cargo:fix": "bash ./scripts/fix-symbolic-link.sh", "docker:build": "docker buildx bake -f docker/docker.hcl --load build", + "docker:override-up": "docker compose -f ./docker/docker-compose.override.yml up -d --remove-orphans", "env:sync": "tsx scripts/sync-env-files.ts", "generate": "pnpm --filter @hive/storage db:generate && pnpm graphql:generate", "graphql:generate": "graphql-codegen --config codegen.mts", @@ -33,7 +34,7 @@ "lint:env-template": "tsx scripts/check-env-template.ts", "lint:fix": "pnpm lint --fix", "lint:prettier": "prettier --cache --check .", - "local:setup": "docker-compose -f ./docker/docker-compose.dev.yml up -d --remove-orphans && pnpm --filter @hive/migrations db:init", + "local:setup": "docker compose -f ./docker/docker-compose.dev.yml up -d --remove-orphans && pnpm --filter @hive/migrations db:init", "postinstall": "node ./scripts/patch-manifests.js && pnpm env:sync && node ./scripts/turborepo-cleanup.js && pnpm cargo:fix", "pre-commit": "exit 0 && lint-staged", "prebuild": "rimraf deploy-tmp && rimraf packages/**/deploy-tmp", diff --git a/packages/libraries/cli/examples/single.with.mutation.graphql b/packages/libraries/cli/examples/single.with.mutation.graphql new file mode 100644 index 000000000..0692d095c --- /dev/null +++ b/packages/libraries/cli/examples/single.with.mutation.graphql @@ -0,0 +1,19 @@ +type Query { + foo: Int! + bar: String + test: String + last: Boolean + fooTwo: Int! +} + +type Mutation { + addFooAnother(foo: Int!): Int! + addBar(bar: String): String + addTest(test: String): String +} + +schema { + query: Query + mutation: Mutation +} +# test 3 diff --git a/packages/migrations/src/actions/2024.06.11T10-10-00.ms-teams-webhook.ts b/packages/migrations/src/actions/2024.06.11T10-10-00.ms-teams-webhook.ts new file mode 100644 index 000000000..b4f1f2ec5 --- /dev/null +++ b/packages/migrations/src/actions/2024.06.11T10-10-00.ms-teams-webhook.ts @@ -0,0 +1,8 @@ +import { type MigrationExecutor } from '../pg-migrator'; + +export default { + name: '2024.06.11T10-10-00.ms-teams-webhook.ts', + run: ({ sql }) => sql` + ALTER TYPE alert_channel_type ADD VALUE 'MSTEAMS_WEBHOOK'; + `, +} satisfies MigrationExecutor; diff --git a/packages/migrations/src/run-pg-migrations.ts b/packages/migrations/src/run-pg-migrations.ts index cf3edfa52..76b7c9557 100644 --- a/packages/migrations/src/run-pg-migrations.ts +++ b/packages/migrations/src/run-pg-migrations.ts @@ -63,6 +63,7 @@ import migration_2024_01_12_01T00_00_00_contracts from './actions/2024.01.26T00. import migration_2024_01_12_01T00_00_00_schema_check_pagination_index_update from './actions/2024.01.26T00.00.01.schema-check-pagination-index-update'; import migration_2024_02_19_01T00_00_00_schema_check_store_breaking_change_metadata from './actions/2024.02.19T00.00.01.schema-check-store-breaking-change-metadata'; import migration_2024_04_09T10_10_00_check_approval_comment from './actions/2024.04.09T10-10-00.check-approval-comment'; +import migration_2024_06_11T10_10_00_ms_teams_webhook from './actions/2024.06.11T10-10-00.ms-teams-webhook'; import { runMigrations } from './pg-migrator'; export const runPGMigrations = (args: { slonik: DatabasePool; runTo?: string }) => @@ -134,5 +135,6 @@ export const runPGMigrations = (args: { slonik: DatabasePool; runTo?: string }) migration_2024_01_12_01T00_00_00_schema_check_pagination_index_update, migration_2024_02_19_01T00_00_00_schema_check_store_breaking_change_metadata, migration_2024_04_09T10_10_00_check_approval_comment, + migration_2024_06_11T10_10_00_ms_teams_webhook, ], }); diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 263a40b22..f4418b25e 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -62,6 +62,7 @@ "slonik": "30.4.4", "supertokens-node": "15.2.1", "tslib": "2.6.3", + "vitest": "1.6.0", "zod": "3.23.8", "zod-validation-error": "3.3.0" } diff --git a/packages/services/api/src/modules/alerts/index.ts b/packages/services/api/src/modules/alerts/index.ts index 3c386cb63..dfcb8df39 100644 --- a/packages/services/api/src/modules/alerts/index.ts +++ b/packages/services/api/src/modules/alerts/index.ts @@ -1,4 +1,5 @@ import { createModule } from 'graphql-modules'; +import { TeamsCommunicationAdapter } from './providers/adapters/msteams'; import { SlackCommunicationAdapter } from './providers/adapters/slack'; import { WebhookCommunicationAdapter } from './providers/adapters/webhook'; import { AlertsManager } from './providers/alerts-manager'; @@ -10,5 +11,10 @@ export const alertsModule = createModule({ dirname: __dirname, typeDefs, resolvers, - providers: [AlertsManager, SlackCommunicationAdapter, WebhookCommunicationAdapter], + providers: [ + AlertsManager, + SlackCommunicationAdapter, + WebhookCommunicationAdapter, + TeamsCommunicationAdapter, + ], }); diff --git a/packages/services/api/src/modules/alerts/module.graphql.mappers.ts b/packages/services/api/src/modules/alerts/module.graphql.mappers.ts index 9e349a1b9..c34397be6 100644 --- a/packages/services/api/src/modules/alerts/module.graphql.mappers.ts +++ b/packages/services/api/src/modules/alerts/module.graphql.mappers.ts @@ -3,4 +3,5 @@ import type { Alert, AlertChannel } from '../../shared/entities'; export type AlertChannelMapper = AlertChannel; export type AlertSlackChannelMapper = AlertChannel; export type AlertWebhookChannelMapper = AlertChannel; +export type TeamsWebhookChannelMapper = AlertChannel; export type AlertMapper = Alert; diff --git a/packages/services/api/src/modules/alerts/module.graphql.ts b/packages/services/api/src/modules/alerts/module.graphql.ts index c4a304985..85fd65180 100644 --- a/packages/services/api/src/modules/alerts/module.graphql.ts +++ b/packages/services/api/src/modules/alerts/module.graphql.ts @@ -16,6 +16,7 @@ export default gql` enum AlertChannelType { SLACK WEBHOOK + MSTEAMS_WEBHOOK } enum AlertType { @@ -140,6 +141,13 @@ export default gql` endpoint: String! } + type TeamsWebhookChannel implements AlertChannel { + id: ID! + name: String! + type: AlertChannelType! + endpoint: String! + } + type Alert { id: ID! type: AlertType! diff --git a/packages/services/api/src/modules/alerts/providers/adapters/common.ts b/packages/services/api/src/modules/alerts/providers/adapters/common.ts index fb525ee40..c8ef280ee 100644 --- a/packages/services/api/src/modules/alerts/providers/adapters/common.ts +++ b/packages/services/api/src/modules/alerts/providers/adapters/common.ts @@ -8,6 +8,12 @@ import type { Target, } from '../../../../shared/entities'; +interface NotificationIntegrations { + slack: { + token: string | null | undefined; + }; +} + export interface SchemaChangeNotificationInput { event: { organization: Pick; @@ -25,11 +31,7 @@ export interface SchemaChangeNotificationInput { }; alert: Alert; channel: AlertChannel; - integrations: { - slack: { - token: string; - }; - }; + integrations: NotificationIntegrations; } export interface ChannelConfirmationInput { @@ -39,11 +41,7 @@ export interface ChannelConfirmationInput { project: Pick; }; channel: AlertChannel; - integrations: { - slack: { - token: string; - }; - }; + integrations: NotificationIntegrations; } export interface CommunicationAdapter { @@ -59,9 +57,13 @@ export function quotesTransformer(msg: string, symbols = '**') { const findSingleQuotes = /'([^']+)'/gim; const findDoubleQuotes = /"([^"]+)"/gim; - function transformm(_: string, value: string) { + function transform(_: string, value: string) { return `${symbols}${value}${symbols}`; } - return msg.replace(findSingleQuotes, transformm).replace(findDoubleQuotes, transformm); + return msg.replace(findSingleQuotes, transform).replace(findDoubleQuotes, transform); } + +export const createMDLink = ({ text, url }: { text: string; url: string }) => { + return `[${text}](${url})`; +}; diff --git a/packages/services/api/src/modules/alerts/providers/adapters/msteams.spec.ts b/packages/services/api/src/modules/alerts/providers/adapters/msteams.spec.ts new file mode 100644 index 000000000..cb0791034 --- /dev/null +++ b/packages/services/api/src/modules/alerts/providers/adapters/msteams.spec.ts @@ -0,0 +1,255 @@ +import { AlertChannel } from 'packages/services/api/src/shared/entities'; +import { vi } from 'vitest'; +import { SchemaChangeType } from '@hive/storage'; +import { ChannelConfirmationInput, SchemaChangeNotificationInput } from './common'; +import { TeamsCommunicationAdapter } from './msteams'; + +const logger = { + child: () => ({ + debug: vi.fn(), + error: vi.fn(), + }), +}; + +const appBaseUrl = 'app-base-url'; +const webhookUrl = 'webhook-url'; + +describe('TeamsCommunicationAdapter', () => { + describe('sendSchemaChangeNotification', () => { + it('should send schema change notification', async () => { + const changes = [ + { + id: 'id-1', + type: 'FIELD_REMOVED', + approvalMetadata: null, + criticality: 'BREAKING', + message: "Field 'addFoo' was removed from object type 'Mutation'", + meta: { + typeName: 'Mutation', + removedFieldName: 'addFoo', + isRemovedFieldDeprecated: false, + typeType: 'object type', + }, + path: 'Mutation.addFoo', + isSafeBasedOnUsage: false, + reason: + 'Removing a field is a breaking change. It is preferable to deprecate the field before removing it.', + usageStatistics: null, + breakingChangeSchemaCoordinate: 'Mutation.addFoo', + }, + { + id: 'id-2', + type: 'FIELD_REMOVED', + approvalMetadata: null, + criticality: 'BREAKING', + message: "Field 'foo3' was removed from object type 'Query'", + meta: { + typeName: 'Query', + removedFieldName: 'foo3', + isRemovedFieldDeprecated: false, + typeType: 'object type', + }, + path: 'Query.foo3', + isSafeBasedOnUsage: false, + reason: + 'Removing a field is a breaking change. It is preferable to deprecate the field before removing it.', + usageStatistics: null, + breakingChangeSchemaCoordinate: 'Query.foo3', + }, + { + id: 'id-3', + type: 'FIELD_ADDED', + approvalMetadata: null, + criticality: 'NON_BREAKING', + message: "Field 'addFooT' was added to object type 'Mutation'", + meta: { + typeName: 'Mutation', + addedFieldName: 'addFooT', + typeType: 'object type', + }, + path: 'Mutation.addFooT', + isSafeBasedOnUsage: false, + reason: null, + usageStatistics: null, + breakingChangeSchemaCoordinate: null, + }, + { + id: 'id-4', + type: 'FIELD_ADDED', + approvalMetadata: null, + criticality: 'NON_BREAKING', + message: "Field 'foo4' was added to object type 'Query'", + meta: { + typeName: 'Query', + addedFieldName: 'foo4', + typeType: 'object type', + }, + path: 'Query.foo4', + isSafeBasedOnUsage: false, + reason: null, + usageStatistics: null, + breakingChangeSchemaCoordinate: null, + }, + ] as Array; + const messages = [] as string[]; + const input = { + alert: { + id: 'alert-id', + type: 'SCHEMA_CHANGE_NOTIFICATIONS', + channelId: 'channel-id', + projectId: 'project-id', + organizationId: 'org-id', + createdAt: new Date().toISOString(), + targetId: 'target-id', + }, + integrations: { + slack: { + token: null, + }, + }, + event: { + organization: { + id: 'org-id', + cleanId: 'org-clean-id', + name: '', + }, + project: { + id: 'project-id', + cleanId: 'project-clean-id', + name: 'project-name', + }, + target: { + id: 'target-id', + cleanId: 'target-clean-id', + name: 'target-name', + }, + + changes, + messages, + initial: false, + errors: [], + schema: { + id: 'schema-id', + commit: 'commit', + valid: true, + }, + }, + channel: { + webhookEndpoint: webhookUrl, + } as AlertChannel, + } as SchemaChangeNotificationInput; + + const adapter = new TeamsCommunicationAdapter(logger as any, appBaseUrl); + const sendTeamsMessageSpy = vi.spyOn(adapter as any, 'sendTeamsMessage'); + + await adapter.sendSchemaChangeNotification(input); + + expect(sendTeamsMessageSpy.mock.calls[0]).toMatchInlineSnapshot(` + [ + webhook-url, + 🐝 Hi, I found *4 changes* in project [project-name](app-base-url/org-clean-id/project-clean-id), target [target-name](app-base-url/org-clean-id/project-clean-id/target-clean-id) ([view details](app-base-url/org-clean-id/project-clean-id/target-clean-id/history/schema-id)): + + ### Breaking changes + - Field \`addFoo\` was removed from object type \`Mutation\` + - Field \`foo3\` was removed from object type \`Query\` + ### Safe changes + - Field \`addFooT\` was added to object type \`Mutation\` + - Field \`foo4\` was added to object type \`Query\` + , + [view full report](app-base-url/org-clean-id/project-clean-id/target-clean-id/history/schema-id), + ] + `); + }); + + // Add more test cases here if needed + }); +}); +describe('sendChannelConfirmation', () => { + it('should send channel confirmation', async () => { + const appBaseUrl = 'app-base-url'; + const webhookUrl = 'webhook-url'; + const input = { + event: { + organization: { + id: 'org-id', + cleanId: 'org-clean-id', + }, + project: { + id: 'project-id', + cleanId: 'project-clean-id', + name: 'project-name', + }, + kind: 'created', + }, + channel: { + webhookEndpoint: webhookUrl, + }, + } as ChannelConfirmationInput; + const adapter = new TeamsCommunicationAdapter(logger as any, appBaseUrl); + const sendTeamsMessageSpy = vi.spyOn(adapter as any, 'sendTeamsMessage'); + await adapter.sendChannelConfirmation(input); + expect(sendTeamsMessageSpy.mock.calls[0]).toMatchInlineSnapshot(` + [ + webhook-url, + πŸ‘‹ Hi! I'm the notification 🐝. + I will send here notifications about your [project-name](app-base-url/org-clean-id/project-clean-id) project., + ] + `); + + input.event.kind = 'deleted'; + await adapter.sendChannelConfirmation(input); + expect(sendTeamsMessageSpy.mock.calls[1]).toMatchInlineSnapshot(` + [ + webhook-url, + πŸ‘‹ Hi! I'm the notification 🐝. + I will no longer send here notifications about your [project-name](app-base-url/org-clean-id/project-clean-id) project., + ] + `); + }); + + describe('sendTeamsMessage', () => { + const adapter = new TeamsCommunicationAdapter(logger as any, appBaseUrl); + + beforeAll(() => { + // @ts-expect-error mocking fetch + global.fetch = vi.fn(() => + Promise.resolve({ + ok: true, + statusText: 'OK', + }), + ); + }); + + it('sends a message under 27k characters', async () => { + const message = 'Short message'; + await adapter.sendTeamsMessage('http://example.com/webhook', message); + expect(fetch).toHaveBeenCalledWith( + expect.any(String), + expect.objectContaining({ + body: expect.stringContaining(message), + }), + ); + }); + + it('truncates and appends link for messages over 27k characters', async () => { + const longMessage = 'a'.repeat(27001); + const link = 'http://example.com/fullReport'; + await adapter.sendTeamsMessage('http://example.com/webhook', longMessage, link); + expect(fetch).toHaveBeenCalledWith( + expect.any(String), + expect.objectContaining({ + body: expect.stringContaining('... message truncated. ' + link), + }), + ); + }); + + it('handles failed send operation', async () => { + // @ts-expect-error types obviously don't account for the fact this is mocked + fetch.mockImplementationOnce(() => Promise.resolve({ ok: false, statusText: 'Bad Request' })); + + await expect( + adapter.sendTeamsMessage('http://example.com/webhook', 'Test message'), + ).rejects.toThrow('Failed to send Microsoft Teams message: Bad Request'); + }); + }); +}); diff --git a/packages/services/api/src/modules/alerts/providers/adapters/msteams.ts b/packages/services/api/src/modules/alerts/providers/adapters/msteams.ts new file mode 100644 index 000000000..8b986577b --- /dev/null +++ b/packages/services/api/src/modules/alerts/providers/adapters/msteams.ts @@ -0,0 +1,209 @@ +import { Inject, Injectable } from 'graphql-modules'; +import { CriticalityLevel } from '@graphql-inspector/core'; +import { SchemaChangeType } from '@hive/storage'; +import { Logger } from '../../../shared/providers/logger'; +import { WEB_APP_URL } from '../../../shared/providers/tokens'; +import { + ChannelConfirmationInput, + CommunicationAdapter, + createMDLink, + SchemaChangeNotificationInput, + slackCoderize, +} from './common'; + +@Injectable() +export class TeamsCommunicationAdapter implements CommunicationAdapter { + private logger: Logger; + + constructor( + logger: Logger, + @Inject(WEB_APP_URL) private appBaseUrl: string, + ) { + this.logger = logger.child({ service: 'TeamsCommunicationAdapter' }); + } + + async sendSchemaChangeNotification(input: SchemaChangeNotificationInput) { + this.logger.debug( + `Sending Schema Change Notifications over Microsoft Teams (organization=%s, project=%s, target=%s)`, + input.event.organization.id, + input.event.project.id, + input.event.target.id, + ); + const webhookUrl = input.channel.webhookEndpoint; + + if (!webhookUrl) { + this.logger.debug(`Microsoft Teams Integration is not available`); + return; + } + + try { + const totalChanges = input.event.changes.length + input.event.messages.length; + const projectLink = createMDLink({ + text: input.event.project.name, + url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}`, + }); + const targetLink = createMDLink({ + text: input.event.target.name, + url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}/${input.event.target.cleanId}`, + }); + const changeUrl = `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}/${input.event.target.cleanId}/history/${input.event.schema.id}`; + const viewLink = createMDLink({ + text: 'view details', + url: changeUrl, + }); + + const message = input.event.initial + ? `🐝 Hi, I received your *first* schema in project ${projectLink}, target ${targetLink} (${viewLink}):` + : `🐝 Hi, I found *${totalChanges} ${this.pluralize( + 'change', + totalChanges, + )}* in project ${projectLink}, target ${targetLink} (${viewLink}):`; + + const attachmentsText = input.event.initial + ? '' + : createAttachmentsText(input.event.changes, input.event.messages); + + await this.sendTeamsMessage( + webhookUrl, + `${message}\n\n${attachmentsText}`, + createMDLink({ + text: 'view full report', + url: changeUrl, + }), + ); + } catch (error) { + this.logger.error(`Failed to send Microsoft Teams notification`, error); + } + } + + async sendChannelConfirmation(input: ChannelConfirmationInput) { + this.logger.debug( + `Sending Channel Confirmation over Microsoft Teams (organization=%s, project=%s, channel=%s)`, + input.event.organization.id, + input.event.project.id, + ); + + const webhookUrl = input.channel.webhookEndpoint; + + if (!webhookUrl) { + this.logger.debug(`Microsoft Teams Integration is not available`); + return; + } + + const actionMessage = + input.event.kind === 'created' + ? `I will send here notifications` + : `I will no longer send here notifications`; + + try { + const projectLink = createMDLink({ + text: input.event.project.name, + url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}`, + }); + + const message = [ + `πŸ‘‹ Hi! I'm the notification 🐝.`, + `${actionMessage} about your ${projectLink} project.`, + ].join('\n'); + + await this.sendTeamsMessage(webhookUrl, message); + } catch (error) { + this.logger.error(`Failed to send Microsoft Teams notification`, error); + } + } + + private pluralize(word: string, num: number): string { + return word + (num > 1 ? 's' : ''); + } + + /** + * message gets truncated to max 27k characters-max payload size for Microsoft Teams is 28 KB + */ + async sendTeamsMessage(webhookUrl: string, message: string, fullReportMdLink?: string) { + if (message.length > 27000) { + message = message.slice(0, 27000) + `\n\n... message truncated. ${fullReportMdLink ?? ''}`; + } + + const payload = { + '@type': 'MessageCard', + '@context': 'http://schema.org/extensions', + summary: 'Notification', + themeColor: '0076D7', + sections: [ + { + activityTitle: 'Notification', + text: message, + markdown: true, + }, + ], + }; + + const response = await fetch(webhookUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error(`Failed to send Microsoft Teams message: ${response.statusText}`); + } + } +} + +function createAttachmentsText( + changes: readonly SchemaChangeType[], + messages: readonly string[], +): string { + const breakingChanges = changes.filter( + change => change.criticality === CriticalityLevel.Breaking, + ); + const safeChanges = changes.filter(change => change.criticality !== CriticalityLevel.Breaking); + + let text = ''; + + if (breakingChanges.length) { + text += renderChangeList({ + color: '#E74C3B', + title: 'Breaking changes', + changes: breakingChanges, + }); + } + + if (safeChanges.length) { + text += renderChangeList({ + color: '#23B99A', + title: 'Safe changes', + changes: safeChanges, + }); + } + + if (messages.length) { + text += `### Other changes\n${messages.map(message => slackCoderize(message)).join('\n')}\n`; + } + + return text; +} + +function renderChangeList({ + changes, + title, +}: { + color: string; + title: string; + changes: readonly SchemaChangeType[]; +}): string { + const text = changes + .map(change => { + let text = ` - ${change.message}`; + if (change.isSafeBasedOnUsage) { + text += ' (safe based on usage)'; + } + + return slackCoderize(text); + }) + .join('\n'); + + return `### ${title}\n${text}\n`; +} diff --git a/packages/services/api/src/modules/alerts/providers/adapters/slack.ts b/packages/services/api/src/modules/alerts/providers/adapters/slack.ts index bba0576eb..a48987d5e 100644 --- a/packages/services/api/src/modules/alerts/providers/adapters/slack.ts +++ b/packages/services/api/src/modules/alerts/providers/adapters/slack.ts @@ -7,6 +7,7 @@ import { WEB_APP_URL } from '../../../shared/providers/tokens'; import { ChannelConfirmationInput, CommunicationAdapter, + createMDLink, SchemaChangeNotificationInput, slackCoderize, } from './common'; @@ -43,15 +44,15 @@ export class SlackCommunicationAdapter implements CommunicationAdapter { const client = new WebClient(input.integrations.slack.token, {}); const totalChanges = input.event.changes.length + input.event.messages.length; - const projectLink = this.createLink({ + const projectLink = createMDLink({ text: input.event.project.name, url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}`, }); - const targetLink = this.createLink({ + const targetLink = createMDLink({ text: input.event.target.name, url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}/${input.event.target.cleanId}`, }); - const viewLink = this.createLink({ + const viewLink = createMDLink({ text: 'view details', url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}/${input.event.target.cleanId}/history/${input.event.schema.id}`, }); @@ -82,6 +83,9 @@ export class SlackCommunicationAdapter implements CommunicationAdapter { } } + /** + * triggered when a channel is created or deleted + */ async sendChannelConfirmation(input: ChannelConfirmationInput) { this.logger.debug( `Sending Channel Confirmation over Slack (organization=%s, project=%s, channel=%s)`, @@ -90,7 +94,7 @@ export class SlackCommunicationAdapter implements CommunicationAdapter { input.channel.slackChannel, ); - const token = input.integrations.slack.token; + const token = input.integrations?.slack.token; if (!token) { this.logger.debug(`Slack Integration is not available`); @@ -103,7 +107,7 @@ export class SlackCommunicationAdapter implements CommunicationAdapter { : `I will no longer send here notifications`; try { - const projectLink = this.createLink({ + const projectLink = createMDLink({ text: input.event.project.name, url: `${this.appBaseUrl}/${input.event.organization.cleanId}/${input.event.project.cleanId}`, }); diff --git a/packages/services/api/src/modules/alerts/providers/alerts-manager.ts b/packages/services/api/src/modules/alerts/providers/alerts-manager.ts index e8db14d4f..293463642 100644 --- a/packages/services/api/src/modules/alerts/providers/alerts-manager.ts +++ b/packages/services/api/src/modules/alerts/providers/alerts-manager.ts @@ -12,7 +12,8 @@ import { ProjectManager } from '../../project/providers/project-manager'; import { Logger } from '../../shared/providers/logger'; import type { ProjectSelector } from '../../shared/providers/storage'; import { Storage } from '../../shared/providers/storage'; -import { SchemaChangeNotificationInput } from './adapters/common'; +import { ChannelConfirmationInput, SchemaChangeNotificationInput } from './adapters/common'; +import { TeamsCommunicationAdapter } from './adapters/msteams'; import { SlackCommunicationAdapter } from './adapters/slack'; import { WebhookCommunicationAdapter } from './adapters/webhook'; @@ -29,6 +30,7 @@ export class AlertsManager { private slackIntegrationManager: SlackIntegrationManager, private slack: SlackCommunicationAdapter, private webhook: WebhookCommunicationAdapter, + private teamsWebhook: TeamsCommunicationAdapter, private organizationManager: OrganizationManager, private projectManager: ProjectManager, private storage: Storage, @@ -185,6 +187,7 @@ export class AlertsManager { channel: channels.find(channel => channel.id === alert.channelId)!, }; }); + console.log('pairs:', pairs); const slackToken = await this.slackIntegrationManager.getToken({ organization: event.organization.id, @@ -195,8 +198,9 @@ export class AlertsManager { const integrations: SchemaChangeNotificationInput['integrations'] = { slack: { - token: slackToken!, + token: slackToken, }, + // ms Teams is integrated via webhook. Webhook contains the token in itself, so we don't have any other token for it }; // Let's not leak any data :) @@ -237,6 +241,14 @@ export class AlertsManager { integrations, }); } + if (channel.type === 'MSTEAMS_WEBHOOK') { + return this.teamsWebhook.sendSchemaChangeNotification({ + event: safeEvent, + alert, + channel, + integrations, + }); + } return this.webhook.sendSchemaChangeNotification({ event: safeEvent, @@ -265,34 +277,42 @@ export class AlertsManager { }), ]); + const channelConfirmationContext: ChannelConfirmationInput = { + event: { + kind: input.kind, + organization: { + id: organization.id, + cleanId: organization.cleanId, + name: organization.name, + }, + project: { + id: project.id, + cleanId: project.cleanId, + name: project.name, + }, + }, + channel, + integrations: { + slack: { + token: null, + }, + }, + }; + if (channel.type === 'SLACK') { const slackToken = await this.slackIntegrationManager.getToken({ organization: organization.id, project: project.id, context: IntegrationsAccessContext.ChannelConfirmation, }); + if (!slackToken) { + throw new Error(`Slack token was not found for channel "${channel.id}"`); + } - await this.slack.sendChannelConfirmation({ - event: { - kind: input.kind, - organization: { - id: organization.id, - cleanId: organization.cleanId, - name: organization.name, - }, - project: { - id: project.id, - cleanId: project.cleanId, - name: project.name, - }, - }, - channel, - integrations: { - slack: { - token: slackToken!, - }, - }, - }); + channelConfirmationContext.integrations.slack.token = slackToken; + await this.slack.sendChannelConfirmation(channelConfirmationContext); + } else if (channel.type === 'MSTEAMS_WEBHOOK') { + await this.teamsWebhook.sendChannelConfirmation(channelConfirmationContext); } else { await this.webhook.sendChannelConfirmation(); } diff --git a/packages/services/api/src/modules/alerts/resolvers.ts b/packages/services/api/src/modules/alerts/resolvers.ts index 0def9690d..91e99392a 100644 --- a/packages/services/api/src/modules/alerts/resolvers.ts +++ b/packages/services/api/src/modules/alerts/resolvers.ts @@ -217,4 +217,12 @@ export const resolvers: AlertsModule.Resolvers = { return channel.webhookEndpoint!; }, }, + TeamsWebhookChannel: { + __isTypeOf(channel) { + return channel.type === 'MSTEAMS_WEBHOOK'; + }, + endpoint(channel) { + return channel.webhookEndpoint!; + }, + }, }; diff --git a/packages/services/storage/src/db/types.ts b/packages/services/storage/src/db/types.ts index 932160950..51675daf2 100644 --- a/packages/services/storage/src/db/types.ts +++ b/packages/services/storage/src/db/types.ts @@ -7,7 +7,7 @@ * */ -export type alert_channel_type = 'SLACK' | 'WEBHOOK'; +export type alert_channel_type = 'MSTEAMS_WEBHOOK' | 'SLACK' | 'WEBHOOK'; export type alert_type = 'SCHEMA_CHANGE_NOTIFICATIONS'; export type schema_policy_resource = 'ORGANIZATION' | 'PROJECT'; export type user_role = 'ADMIN' | 'MEMBER'; diff --git a/packages/web/app/src/components/project/alerts/channels-table.tsx b/packages/web/app/src/components/project/alerts/channels-table.tsx index 3853695cf..f1a040575 100644 --- a/packages/web/app/src/components/project/alerts/channels-table.tsx +++ b/packages/web/app/src/components/project/alerts/channels-table.tsx @@ -1,6 +1,6 @@ import { Checkbox, Table, Tag, TBody, Td, Tr } from '@/components/v2'; import { FragmentType, graphql, useFragment } from '@/gql'; -import { AlertChannelType } from '@/gql/graphql'; +import { AlertChannelType, ChannelsTable_AlertChannelFragmentFragment } from '@/gql/graphql'; export const ChannelsTable_AlertChannelFragment = graphql(` fragment ChannelsTable_AlertChannelFragment on AlertChannel { @@ -13,9 +13,18 @@ export const ChannelsTable_AlertChannelFragment = graphql(` ... on AlertWebhookChannel { endpoint } + ... on TeamsWebhookChannel { + endpoint + } } `); +const colorMap = { + [AlertChannelType.Slack]: 'green' as const, + [AlertChannelType.Webhook]: 'yellow' as const, + [AlertChannelType.MsteamsWebhook]: 'orange' as const, +}; + export function ChannelsTable(props: { channels: FragmentType[]; isChecked: (channelId: string) => boolean; @@ -23,6 +32,20 @@ export function ChannelsTable(props: { }) { const channels = useFragment(ChannelsTable_AlertChannelFragment, props.channels); + const renderChannelEndpoint = (channel: ChannelsTable_AlertChannelFragmentFragment) => { + if (channel.__typename === 'AlertSlackChannel') { + return channel.channel; + } + if ( + channel.__typename === 'AlertWebhookChannel' || + channel.__typename === 'TeamsWebhookChannel' + ) { + return channel.endpoint; + } + + return ''; + }; + return ( @@ -36,18 +59,12 @@ export function ChannelsTable(props: { checked={props.isChecked(channel.id)} /> - - + - ))} diff --git a/packages/web/app/src/components/project/alerts/create-channel.tsx b/packages/web/app/src/components/project/alerts/create-channel.tsx index 80b024e1d..2d8609eb0 100644 --- a/packages/web/app/src/components/project/alerts/create-channel.tsx +++ b/packages/web/app/src/components/project/alerts/create-channel.tsx @@ -61,8 +61,8 @@ export const CreateChannelModal = ({ ), endpoint: Yup.string() .url() - .when('type', ([type], schema) => - type === AlertChannelType.Webhook ? schema.required('Must enter endpoint') : schema, + .when('type', ([_type], schema) => + isWebhookLike ? schema.required('Must enter endpoint') : schema, ), }), async onSubmit(values) { @@ -73,8 +73,7 @@ export const CreateChannelModal = ({ name: values.name, type: values.type, slack: values.type === AlertChannelType.Slack ? { channel: values.slackChannel } : null, - webhook: - values.type === AlertChannelType.Webhook ? { endpoint: values.endpoint } : null, + webhook: isWebhookLike ? { endpoint: values.endpoint } : null, }, }); if (error) { @@ -88,6 +87,9 @@ export const CreateChannelModal = ({ } }, }); + const isWebhookLike = [AlertChannelType.Webhook, AlertChannelType.MsteamsWebhook].includes( + values.type, + ); return ( @@ -132,12 +134,13 @@ export const CreateChannelModal = ({ options={[ { value: AlertChannelType.Slack, name: 'Slack' }, { value: AlertChannelType.Webhook, name: 'Webhook' }, + { value: AlertChannelType.MsteamsWebhook, name: 'MS Teams Webhook' }, ]} /> {touched.type && errors.type &&
{errors.type}
} - {values.type === AlertChannelType.Webhook && ( + {isWebhookLike && (
)} -

Hive will send alerts to your endpoint.

+ {values.endpoint ? ( +

Hive will send alerts to your endpoint.

+ ) : ( + + Follow this guide to set up an incoming webhook connector in MS Teams + + )} )} @@ -205,7 +214,7 @@ export const CreateChannelModal = ({
{channel.name} - {channel.__typename === 'AlertSlackChannel' - ? channel.channel - : channel.__typename === 'AlertWebhookChannel' - ? channel.endpoint - : ''} + {channel.name} + {renderChannelEndpoint(channel)} - - {channel.type} - + + {channel.type}
+
{children}
); diff --git a/packages/web/app/src/components/v2/tag.tsx b/packages/web/app/src/components/v2/tag.tsx index c3baff9f3..f458d7b42 100644 --- a/packages/web/app/src/components/v2/tag.tsx +++ b/packages/web/app/src/components/v2/tag.tsx @@ -5,6 +5,7 @@ const colors = { green: 'bg-green-500/10 text-green-500', yellow: 'bg-yellow-500/10 text-yellow-500', gray: 'bg-gray-500/10 text-gray-500', + orange: 'bg-orange-500/10 text-orange-500', } as const; export function Tag({ @@ -12,13 +13,17 @@ export function Tag({ color = 'gray', className, }: { - color?: 'green' | 'yellow' | 'gray'; + color?: keyof typeof colors; className?: string; children: ReactNode; }): ReactElement { return ( {children} diff --git a/packages/web/docs/public/changelog/2024-06-14-ms-teams-webhooks-alerts/project-msteams-alert-full.png b/packages/web/docs/public/changelog/2024-06-14-ms-teams-webhooks-alerts/project-msteams-alert-full.png new file mode 100644 index 0000000000000000000000000000000000000000..4b30eb31b2987279b7a474cdd4dcb2caf7a61881 GIT binary patch literal 99992 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

LWD}ClrB9N%_a<&{J;g#X?DavG;XP)t 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 z = { link: 'https://twitter.com/aleksandrasays', github: 'beerose', }, + jiri: { + name: 'Jiri Spac', + link: 'https://twitter.com/capajj', + github: 'capaj', + }, }; diff --git a/packages/web/docs/src/pages/docs/management/projects.mdx b/packages/web/docs/src/pages/docs/management/projects.mdx index 182ee262d..002ffc2fb 100644 --- a/packages/web/docs/src/pages/docs/management/projects.mdx +++ b/packages/web/docs/src/pages/docs/management/projects.mdx @@ -5,6 +5,7 @@ import githubIntegrationImage from '../../../../public/docs/pages/management/org import slackIntegrationImage from '../../../../public/docs/pages/management/org-slack-integration.png' import projectGitLinkImage from '../../../../public/docs/pages/management/project-git-link.png' import projectHttpAlertImage from '../../../../public/docs/pages/management/project-http-alert.png' +import msteamsFormImage from '../../../../public/docs/pages/management/project-msteams-alert.png' import slackAlertFormImage from '../../../../public/docs/pages/management/project-slack-alert.png' # Project Management @@ -140,6 +141,28 @@ Hive project: invitation, our Slack app will be unable to post messages to the channel. +#### MS Teams Webhook + +You set up Hive MS Teams webhook to receive alerts and notifications from Hive, when an alert or a +notification is triggered. All you need to do is to provide a valid HTTP URL, and Hive will dispatch +a `POST` request to that URL, with a JSON payload acceptable by MS Teams. +[MS Teams Webhook JSON example](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using#example-of-connector-message) + +Typically the webhook URL looks like: + +```txt +https://USERNAME.webhook.office.com/webhookb2/XXXXX/IncomingWebhook/YYYY/ZZZZZ +``` + +You can find more information on how to set up a webhook in MS Teams in the +[official documentation - Create Incoming Webhooks](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet). + + + #### HTTP Webhook You can implement a custom HTTP webhook to receive alerts and notifications from Hive, when an alert diff --git a/packages/web/docs/src/pages/product-updates/2024-06-14-ms-teams-webhooks-alerts.mdx b/packages/web/docs/src/pages/product-updates/2024-06-14-ms-teams-webhooks-alerts.mdx new file mode 100644 index 000000000..1bd8fa659 --- /dev/null +++ b/packages/web/docs/src/pages/product-updates/2024-06-14-ms-teams-webhooks-alerts.mdx @@ -0,0 +1,28 @@ +--- +title: MS Teams Webhooks for Alerts in Hive +description: MS Teams webhooks to receive alerts and notifications from Hive. +date: 2024-06-14 +authors: [jiri] +--- + +We’re excited to announce a new feature that lets you configure MS Teams webhooks to receive alerts +and notifications from Hive. By connecting Hive with MS Teams, you can make your team always aware +of critical changes and developments. + +![MS Teams Webhook dialog](/changelog/2024-06-14-ms-teams-webhooks-alerts/project-msteams-alert-full.png) + +Here’s a simple guide to get you started: + +1. **Go to Project:** Navigate to your project's page. +1. **Access Alerts:** Click on the "Alerts" tab. +1. **Add a Channel:** In the Channels section, click on the "Add channel" button. +1. **Select type**: Choose "MS Teams Webhook" from the dropdown menu. +1. **Enter Webhook URL:** Paste your webhook URL in the "Endpoint" field. +1. **Save:** Click "Save" to confirm your settings. + +Once set up, you can create an alert that triggers whenever a schema change is detected upon +publishing. For more detailed instructions, check out our documentation +[here](/docs/management/projects#ms-teams-webhook). + +Setting it up ensures you stay updated, making your workflow smoother and more efficient, without +stepping out of MS Teams application. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbba0ff84..667530b75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -778,6 +778,9 @@ importers: tslib: specifier: 2.6.3 version: 2.6.3 + vitest: + specifier: 1.6.0 + version: 1.6.0(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1) zod: specifier: 3.23.8 version: 3.23.8 @@ -3628,12 +3631,6 @@ packages: resolution: {integrity: sha512-IPjmgSc4KpQRlO4qbEDnBEixvtb06WDmjKfi/7fkZaryh5HuOmTtixe1EupQI5XfXO8joc3d27uUZ0QdC++euA==} engines: {node: '>=18.0.0'} - '@esbuild/aix-ppc64@0.19.11': - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -3652,12 +3649,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.11': - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} @@ -3676,12 +3667,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.11': - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} @@ -3700,12 +3685,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.11': - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} @@ -3724,12 +3703,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.11': - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} @@ -3748,12 +3721,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.11': - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} @@ -3772,12 +3739,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.11': - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} @@ -3796,12 +3757,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.11': - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} @@ -3820,12 +3775,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.11': - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} @@ -3844,12 +3793,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.11': - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} @@ -3868,12 +3811,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.11': - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} @@ -3892,12 +3829,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.11': - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} @@ -3916,12 +3847,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.11': - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} @@ -3940,12 +3865,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.11': - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} @@ -3964,12 +3883,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.11': - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} @@ -3988,12 +3901,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.11': - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} @@ -4012,12 +3919,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.11': - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} @@ -4036,12 +3937,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.11': - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} @@ -4066,12 +3961,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.11': - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} @@ -4090,12 +3979,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.11': - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} @@ -4114,12 +3997,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.11': - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} @@ -4138,12 +4015,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.11': - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.20.2': resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} @@ -4162,12 +4033,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.11': - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.20.2': resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} @@ -4994,7 +4859,6 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -5002,7 +4866,6 @@ packages: '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - deprecated: Use @eslint/object-schema instead '@ianvs/prettier-plugin-sort-imports@4.2.1': resolution: {integrity: sha512-NKN1LVFWUDGDGr3vt+6Ey3qPeN/163uR1pOPAlkWpgvAqgxQ6kSdUf1F0it8aHUtKRUzEGcK38Wxd07O61d7+Q==} @@ -6900,11 +6763,6 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.6.1': - resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm64@4.17.2': resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] @@ -6915,11 +6773,6 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.6.1': - resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-darwin-arm64@4.17.2': resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] @@ -6930,11 +6783,6 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.6.1': - resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.17.2': resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] @@ -6945,11 +6793,6 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.6.1': - resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] @@ -6960,11 +6803,6 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.6.1': - resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.17.2': resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] @@ -6985,11 +6823,6 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.6.1': - resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.17.2': resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] @@ -7000,11 +6833,6 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.6.1': - resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] @@ -7045,11 +6873,6 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.6.1': - resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.17.2': resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] @@ -7060,11 +6883,6 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.6.1': - resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==} - cpu: [x64] - os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.17.2': resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] @@ -7075,11 +6893,6 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.6.1': - resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.17.2': resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] @@ -7090,11 +6903,6 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.6.1': - resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.17.2': resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] @@ -7105,11 +6913,6 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.6.1': - resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==} - cpu: [x64] - os: [win32] - '@rushstack/eslint-patch@1.6.1': resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} @@ -10491,11 +10294,6 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} @@ -15360,11 +15158,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.6.1: - resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rss@1.2.2: resolution: {integrity: sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==} @@ -16796,34 +16589,6 @@ packages: vite: optional: true - vite@5.0.5: - resolution: {integrity: sha512-OekeWqR9Ls56f3zd4CaxzbbS11gqYkEiBtnWFFgYR2WV8oPJRRKq0mpskYy/XaoCL3L7VINDhqqOMNDiYdGvGg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@5.3.3: resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -19935,9 +19700,6 @@ snapshots: dependencies: tslib: 2.6.3 - '@esbuild/aix-ppc64@0.19.11': - optional: true - '@esbuild/aix-ppc64@0.20.2': optional: true @@ -19947,9 +19709,6 @@ snapshots: '@esbuild/aix-ppc64@0.23.0': optional: true - '@esbuild/android-arm64@0.19.11': - optional: true - '@esbuild/android-arm64@0.20.2': optional: true @@ -19959,9 +19718,6 @@ snapshots: '@esbuild/android-arm64@0.23.0': optional: true - '@esbuild/android-arm@0.19.11': - optional: true - '@esbuild/android-arm@0.20.2': optional: true @@ -19971,9 +19727,6 @@ snapshots: '@esbuild/android-arm@0.23.0': optional: true - '@esbuild/android-x64@0.19.11': - optional: true - '@esbuild/android-x64@0.20.2': optional: true @@ -19983,9 +19736,6 @@ snapshots: '@esbuild/android-x64@0.23.0': optional: true - '@esbuild/darwin-arm64@0.19.11': - optional: true - '@esbuild/darwin-arm64@0.20.2': optional: true @@ -19995,9 +19745,6 @@ snapshots: '@esbuild/darwin-arm64@0.23.0': optional: true - '@esbuild/darwin-x64@0.19.11': - optional: true - '@esbuild/darwin-x64@0.20.2': optional: true @@ -20007,9 +19754,6 @@ snapshots: '@esbuild/darwin-x64@0.23.0': optional: true - '@esbuild/freebsd-arm64@0.19.11': - optional: true - '@esbuild/freebsd-arm64@0.20.2': optional: true @@ -20019,9 +19763,6 @@ snapshots: '@esbuild/freebsd-arm64@0.23.0': optional: true - '@esbuild/freebsd-x64@0.19.11': - optional: true - '@esbuild/freebsd-x64@0.20.2': optional: true @@ -20031,9 +19772,6 @@ snapshots: '@esbuild/freebsd-x64@0.23.0': optional: true - '@esbuild/linux-arm64@0.19.11': - optional: true - '@esbuild/linux-arm64@0.20.2': optional: true @@ -20043,9 +19781,6 @@ snapshots: '@esbuild/linux-arm64@0.23.0': optional: true - '@esbuild/linux-arm@0.19.11': - optional: true - '@esbuild/linux-arm@0.20.2': optional: true @@ -20055,9 +19790,6 @@ snapshots: '@esbuild/linux-arm@0.23.0': optional: true - '@esbuild/linux-ia32@0.19.11': - optional: true - '@esbuild/linux-ia32@0.20.2': optional: true @@ -20067,9 +19799,6 @@ snapshots: '@esbuild/linux-ia32@0.23.0': optional: true - '@esbuild/linux-loong64@0.19.11': - optional: true - '@esbuild/linux-loong64@0.20.2': optional: true @@ -20079,9 +19808,6 @@ snapshots: '@esbuild/linux-loong64@0.23.0': optional: true - '@esbuild/linux-mips64el@0.19.11': - optional: true - '@esbuild/linux-mips64el@0.20.2': optional: true @@ -20091,9 +19817,6 @@ snapshots: '@esbuild/linux-mips64el@0.23.0': optional: true - '@esbuild/linux-ppc64@0.19.11': - optional: true - '@esbuild/linux-ppc64@0.20.2': optional: true @@ -20103,9 +19826,6 @@ snapshots: '@esbuild/linux-ppc64@0.23.0': optional: true - '@esbuild/linux-riscv64@0.19.11': - optional: true - '@esbuild/linux-riscv64@0.20.2': optional: true @@ -20115,9 +19835,6 @@ snapshots: '@esbuild/linux-riscv64@0.23.0': optional: true - '@esbuild/linux-s390x@0.19.11': - optional: true - '@esbuild/linux-s390x@0.20.2': optional: true @@ -20127,9 +19844,6 @@ snapshots: '@esbuild/linux-s390x@0.23.0': optional: true - '@esbuild/linux-x64@0.19.11': - optional: true - '@esbuild/linux-x64@0.20.2': optional: true @@ -20139,9 +19853,6 @@ snapshots: '@esbuild/linux-x64@0.23.0': optional: true - '@esbuild/netbsd-x64@0.19.11': - optional: true - '@esbuild/netbsd-x64@0.20.2': optional: true @@ -20154,9 +19865,6 @@ snapshots: '@esbuild/openbsd-arm64@0.23.0': optional: true - '@esbuild/openbsd-x64@0.19.11': - optional: true - '@esbuild/openbsd-x64@0.20.2': optional: true @@ -20166,9 +19874,6 @@ snapshots: '@esbuild/openbsd-x64@0.23.0': optional: true - '@esbuild/sunos-x64@0.19.11': - optional: true - '@esbuild/sunos-x64@0.20.2': optional: true @@ -20178,9 +19883,6 @@ snapshots: '@esbuild/sunos-x64@0.23.0': optional: true - '@esbuild/win32-arm64@0.19.11': - optional: true - '@esbuild/win32-arm64@0.20.2': optional: true @@ -20190,9 +19892,6 @@ snapshots: '@esbuild/win32-arm64@0.23.0': optional: true - '@esbuild/win32-ia32@0.19.11': - optional: true - '@esbuild/win32-ia32@0.20.2': optional: true @@ -20202,9 +19901,6 @@ snapshots: '@esbuild/win32-ia32@0.23.0': optional: true - '@esbuild/win32-x64@0.19.11': - optional: true - '@esbuild/win32-x64@0.20.2': optional: true @@ -24110,45 +23806,30 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.18.0': optional: true - '@rollup/rollup-android-arm-eabi@4.6.1': - optional: true - '@rollup/rollup-android-arm64@4.17.2': optional: true '@rollup/rollup-android-arm64@4.18.0': optional: true - '@rollup/rollup-android-arm64@4.6.1': - optional: true - '@rollup/rollup-darwin-arm64@4.17.2': optional: true '@rollup/rollup-darwin-arm64@4.18.0': optional: true - '@rollup/rollup-darwin-arm64@4.6.1': - optional: true - '@rollup/rollup-darwin-x64@4.17.2': optional: true '@rollup/rollup-darwin-x64@4.18.0': optional: true - '@rollup/rollup-darwin-x64@4.6.1': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.18.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.6.1': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.17.2': optional: true @@ -24161,18 +23842,12 @@ snapshots: '@rollup/rollup-linux-arm64-gnu@4.18.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.6.1': - optional: true - '@rollup/rollup-linux-arm64-musl@4.17.2': optional: true '@rollup/rollup-linux-arm64-musl@4.18.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.6.1': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': optional: true @@ -24197,45 +23872,30 @@ snapshots: '@rollup/rollup-linux-x64-gnu@4.18.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.6.1': - optional: true - '@rollup/rollup-linux-x64-musl@4.17.2': optional: true '@rollup/rollup-linux-x64-musl@4.18.0': optional: true - '@rollup/rollup-linux-x64-musl@4.6.1': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.17.2': optional: true '@rollup/rollup-win32-arm64-msvc@4.18.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.6.1': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.17.2': optional: true '@rollup/rollup-win32-ia32-msvc@4.18.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.6.1': - optional: true - '@rollup/rollup-win32-x64-msvc@4.17.2': optional: true '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.6.1': - optional: true - '@rushstack/eslint-patch@1.6.1': {} '@sec-ant/readable-stream@0.4.1': {} @@ -28745,32 +28405,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild@0.19.11: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 - esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -35021,22 +34655,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 - rollup@4.6.1: - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.6.1 - '@rollup/rollup-android-arm64': 4.6.1 - '@rollup/rollup-darwin-arm64': 4.6.1 - '@rollup/rollup-darwin-x64': 4.6.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.6.1 - '@rollup/rollup-linux-arm64-gnu': 4.6.1 - '@rollup/rollup-linux-arm64-musl': 4.6.1 - '@rollup/rollup-linux-x64-gnu': 4.6.1 - '@rollup/rollup-linux-x64-musl': 4.6.1 - '@rollup/rollup-win32-arm64-msvc': 4.6.1 - '@rollup/rollup-win32-ia32-msvc': 4.6.1 - '@rollup/rollup-win32-x64-msvc': 4.6.1 - fsevents: 2.3.3 - rss@1.2.2: dependencies: mime-types: 2.1.13 @@ -36632,9 +36250,9 @@ snapshots: vite-node@1.6.0(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1): dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) pathe: 1.1.1 - picocolors: 1.0.0 + picocolors: 1.0.1 vite: 5.3.3(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1) transitivePeerDependencies: - '@types/node' @@ -36657,17 +36275,6 @@ snapshots: - supports-color - typescript - vite@5.0.5(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1): - dependencies: - esbuild: 0.19.11 - postcss: 8.4.39 - rollup: 4.6.1 - optionalDependencies: - '@types/node': 20.14.10 - fsevents: 2.3.3 - less: 4.2.0 - terser: 5.31.1 - vite@5.3.3(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1): dependencies: esbuild: 0.21.5 @@ -36688,17 +36295,17 @@ snapshots: '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.5(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.5 pathe: 1.1.1 - picocolors: 1.0.0 + picocolors: 1.0.1 std-env: 3.6.0 strip-literal: 2.0.0 tinybench: 2.5.1 tinypool: 0.8.3 - vite: 5.0.5(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1) + vite: 5.3.3(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1) vite-node: 1.6.0(@types/node@20.14.10)(less@4.2.0)(terser@5.31.1) why-is-node-running: 2.2.2 optionalDependencies: diff --git a/scripts/serializer.ts b/scripts/serializer.ts index 3cb1cc488..7c7978c2a 100644 --- a/scripts/serializer.ts +++ b/scripts/serializer.ts @@ -1,3 +1,4 @@ +import 'reflect-metadata'; import rawSnapshotSerializer from 'jest-snapshot-serializer-raw/always'; import { expect } from 'vitest'; import { normalizeCliOutput } from './serializers/cli-output'; diff --git a/vitest.config.ts b/vitest.config.ts index 238f340c0..2a1e099fb 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -9,7 +9,12 @@ export default defineConfig({ .pathname, }, globals: true, - exclude: [...defaultExclude, 'integration-tests', 'packages/migrations/test'], + exclude: [ + ...defaultExclude, + 'integration-tests', + 'packages/migrations/test', + 'docker/.hive-dev', + ], setupFiles: ['./scripts/serializer.ts'], }, });