From 9e6eec4128a4025ee659f6a914dc16e269c09a7b Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:46:08 +0000 Subject: [PATCH 01/38] Copy Deferred to server-services-core --- .../packages/lambdas-driver/package.json | 1 - .../src/kafka-service/checkpointManager.ts | 2 +- .../src/kafka-service/runner.ts | 2 +- .../packages/local-server/package.json | 1 - .../test/localDeltaConnectionServer.spec.ts | 2 +- .../packages/memory-orderer/src/remoteNode.ts | 2 +- .../routerlicious-base/src/alfred/runner.ts | 3 +- .../routerlicious-base/src/nexus/runner.ts | 3 +- .../routerlicious-base/src/riddler/runner.ts | 2 +- .../src/test/nexus/io.spec.ts | 2 +- .../packages/routerlicious/package.json | 1 - .../packages/services-client/package.json | 1 - .../packages/services-core/src/deferred.ts | 61 +++++++++++++++++++ .../packages/services-core/src/index.ts | 1 + .../services-core/src/pendingBoxcar.ts | 2 +- .../packages/services-core/src/queue.ts | 2 +- .../services-ordering-rdkafka/package.json | 1 - .../src/rdkafkaConsumer.ts | 2 +- .../src/rdkafkaProducer.ts | 2 +- .../services-shared/src/runnerUtils.ts | 3 +- .../services-shared/src/test/http.spec.ts | 2 +- .../packages/test-utils/src/testContext.ts | 2 +- .../packages/tinylicious/src/runner.ts | 5 +- server/routerlicious/pnpm-lock.yaml | 33 +++------- 24 files changed, 90 insertions(+), 48 deletions(-) create mode 100644 server/routerlicious/packages/services-core/src/deferred.ts diff --git a/server/routerlicious/packages/lambdas-driver/package.json b/server/routerlicious/packages/lambdas-driver/package.json index 5b0c46edc451..eba975439c30 100644 --- a/server/routerlicious/packages/lambdas-driver/package.json +++ b/server/routerlicious/packages/lambdas-driver/package.json @@ -52,7 +52,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts index 5f33658ea26d..fbc7da07e4ae 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts @@ -4,7 +4,7 @@ */ import assert from "assert"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IConsumer, IQueuedMessage } from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts index ac753138054d..ff8bde85e403 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts @@ -5,7 +5,7 @@ import { inspect } from "util"; import { serializeError } from "serialize-error"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { promiseTimeout } from "@fluidframework/server-services-client"; import { IConsumer, diff --git a/server/routerlicious/packages/local-server/package.json b/server/routerlicious/packages/local-server/package.json index 5ae0d528f1d4..6fe9a0b950d2 100644 --- a/server/routerlicious/packages/local-server/package.json +++ b/server/routerlicious/packages/local-server/package.json @@ -57,7 +57,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-memory-orderer": "workspace:~", diff --git a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts index ec82c91a8556..ee3d04e37f07 100644 --- a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts +++ b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts @@ -4,7 +4,7 @@ */ import { strict as assert } from "assert"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { ConnectionMode, IClient, diff --git a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts index d8a4bb1c9447..9b5e0b36a39d 100644 --- a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts +++ b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts @@ -5,9 +5,9 @@ import assert from "assert"; import { EventEmitter } from "events"; -import { Deferred } from "@fluidframework/common-utils"; import { IClient, IDocumentMessage } from "@fluidframework/protocol-definitions"; import { + Deferred, INode, IOrderer, IOrdererConnection, diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts index 52c0a83a6cd6..249f871248a2 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts @@ -4,8 +4,9 @@ */ import cluster from "cluster"; -import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils"; +import { TypedEventEmitter } from "@fluidframework/common-utils"; import { + Deferred, ICache, IClusterDrainingChecker, IDeltaService, diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts index 53d7664941cb..02e0dde7b30d 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts @@ -4,8 +4,9 @@ */ import cluster from "cluster"; -import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils"; +import { TypedEventEmitter } from "@fluidframework/common-utils"; import { + Deferred, ICache, IClientManager, IClusterDrainingChecker, diff --git a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts index ac5a7181495c..fc64ef3fd188 100644 --- a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts @@ -4,7 +4,7 @@ */ import cluster from "cluster"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IRunner, ISecretManager, diff --git a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts index 89cbbfffe79f..a8e5d0a7603e 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts @@ -4,7 +4,7 @@ */ import { strict as assert } from "assert"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IClientJoin, IConnect, diff --git a/server/routerlicious/packages/routerlicious/package.json b/server/routerlicious/packages/routerlicious/package.json index 5b1721091ac2..755c6a2f94c5 100644 --- a/server/routerlicious/packages/routerlicious/package.json +++ b/server/routerlicious/packages/routerlicious/package.json @@ -38,7 +38,6 @@ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-kafka-orderer": "workspace:~", diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index e77df8f2815a..0a924f90e444 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -59,7 +59,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", diff --git a/server/routerlicious/packages/services-core/src/deferred.ts b/server/routerlicious/packages/services-core/src/deferred.ts new file mode 100644 index 000000000000..7ede15d38e9a --- /dev/null +++ b/server/routerlicious/packages/services-core/src/deferred.ts @@ -0,0 +1,61 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * A deferred creates a promise and the ability to resolve or reject it + * @internal + */ +export class Deferred { + private readonly p: Promise; + private res: ((value: T | PromiseLike) => void) | undefined; + private rej: ((reason?: any) => void) | undefined; + private completed: boolean = false; + + constructor() { + this.p = new Promise((resolve, reject) => { + this.res = resolve; + this.rej = reject; + }); + } + /** + * Returns whether the underlying promise has been completed + */ + public get isCompleted(): boolean { + return this.completed; + } + + /** + * Retrieves the underlying promise for the deferred + * + * @returns the underlying promise + */ + public get promise(): Promise { + return this.p; + } + + /** + * Resolves the promise + * + * @param value - the value to resolve the promise with + */ + public resolve(value: T | PromiseLike): void { + if (this.res !== undefined) { + this.completed = true; + this.res(value); + } + } + + /** + * Rejects the promise + * + * @param value - the value to reject the promise with + */ + public reject(error: any): void { + if (this.rej !== undefined) { + this.completed = true; + this.rej(error); + } + } +} diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index c33f9d0f1fed..6a13770cb12e 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -33,6 +33,7 @@ export { IRetryable, isRetryEnabled, } from "./database"; +export { Deferred } from "./deferred"; export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts index eb0726bc36f5..bdefff64eb50 100644 --- a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts +++ b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "./deferred"; import { IPendingBoxcar } from "./queue"; // 1MB batch size / (16KB max message size + overhead) diff --git a/server/routerlicious/packages/services-core/src/queue.ts b/server/routerlicious/packages/services-core/src/queue.ts index bfa8fa2d0839..52176c20e8ab 100644 --- a/server/routerlicious/packages/services-core/src/queue.ts +++ b/server/routerlicious/packages/services-core/src/queue.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "./deferred"; import { ITicketedMessage } from "./messages"; /** diff --git a/server/routerlicious/packages/services-ordering-rdkafka/package.json b/server/routerlicious/packages/services-ordering-rdkafka/package.json index f06f49114163..190d917dbc93 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/package.json +++ b/server/routerlicious/packages/services-ordering-rdkafka/package.json @@ -28,7 +28,6 @@ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts index 6c204f3afd88..c2828b359c3c 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts @@ -5,7 +5,7 @@ import type * as kafkaTypes from "node-rdkafka"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IConsumer, IPartition, diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts index e002287cc8af..bcce819e8256 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts @@ -14,7 +14,7 @@ import { } from "@fluidframework/server-services-core"; import { NetworkError } from "@fluidframework/server-services-client"; import { Lumberjack, getLumberBaseProperties } from "@fluidframework/server-services-telemetry"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IKafkaBaseOptions, IKafkaEndpoints, RdkafkaBase } from "./rdkafkaBase"; diff --git a/server/routerlicious/packages/services-shared/src/runnerUtils.ts b/server/routerlicious/packages/services-shared/src/runnerUtils.ts index 2b4cff5d5cb3..428973a273e8 100644 --- a/server/routerlicious/packages/services-shared/src/runnerUtils.ts +++ b/server/routerlicious/packages/services-shared/src/runnerUtils.ts @@ -4,10 +4,9 @@ */ import { serializeError } from "serialize-error"; -import { IWebServer } from "@fluidframework/server-services-core"; +import { Deferred, IWebServer } from "@fluidframework/server-services-core"; import { Lumber, Lumberjack } from "@fluidframework/server-services-telemetry"; import { promiseTimeout } from "@fluidframework/server-services-client"; -import { Deferred } from "@fluidframework/common-utils"; import type { IRedisClientConnectionManager } from "@fluidframework/server-services-utils"; /** diff --git a/server/routerlicious/packages/services-shared/src/test/http.spec.ts b/server/routerlicious/packages/services-shared/src/test/http.spec.ts index dc30024ce403..0bed5336c3ab 100644 --- a/server/routerlicious/packages/services-shared/src/test/http.spec.ts +++ b/server/routerlicious/packages/services-shared/src/test/http.spec.ts @@ -5,7 +5,7 @@ import assert from "assert"; import { NetworkError } from "@fluidframework/server-services-client"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import type { Response, Request } from "express"; import { containsPathTraversal, diff --git a/server/routerlicious/packages/test-utils/src/testContext.ts b/server/routerlicious/packages/test-utils/src/testContext.ts index a852b2fd5d85..b9426533ab96 100644 --- a/server/routerlicious/packages/test-utils/src/testContext.ts +++ b/server/routerlicious/packages/test-utils/src/testContext.ts @@ -5,7 +5,7 @@ import { strict as assert } from "assert"; import { EventEmitter } from "events"; -import { Deferred } from "@fluidframework/common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { IContext, IQueuedMessage, diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index 3ba33b285e10..a56c40e7b5f2 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -4,6 +4,7 @@ */ import { + Deferred, IDocumentStorage, IOrdererManager, ITenantManager, @@ -13,8 +14,7 @@ import { DefaultMetricClient, IRunner, } from "@fluidframework/server-services-core"; -// eslint-disable-next-line import/no-deprecated -import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils"; +import { TypedEventEmitter } from "@fluidframework/common-utils"; import { Provider } from "nconf"; import * as winston from "winston"; import { @@ -28,7 +28,6 @@ import * as app from "./app"; export class TinyliciousRunner implements IRunner { private server?: IWebServer; - // eslint-disable-next-line import/no-deprecated private runningDeferred?: Deferred; constructor( diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 0aedc57f4601..80f4e61b4e10 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -301,9 +301,6 @@ importers: packages/lambdas-driver: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -386,9 +383,6 @@ importers: packages/local-server: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 @@ -677,9 +671,6 @@ importers: packages/routerlicious: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources @@ -1127,9 +1118,6 @@ importers: packages/services-client: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources @@ -1382,9 +1370,6 @@ importers: packages/services-ordering-rdkafka: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -9922,9 +9907,9 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) @@ -13617,13 +13602,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.55.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -13634,14 +13619,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) transitivePeerDependencies: - supports-color @@ -13651,13 +13636,13 @@ snapshots: eslint: 8.55.0 ignore: 5.3.0 - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 From 3d5e6483a82e597bcb42f3765f8a32c2384ff93d Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:54:35 +0000 Subject: [PATCH 02/38] Remove common-utils from server-services-core --- .../packages/services-core/package.json | 1 - .../packages/services-core/src/index.ts | 2 +- .../packages/services-core/src/lambdas.ts | 2 +- .../services-core/src/pendingBoxcar.ts | 2 +- .../packages/services-core/src/queue.ts | 2 +- .../services-core/src/runWithRetry.ts | 3 +- .../services-core/src/{ => utils}/deferred.ts | 0 .../packages/services-core/src/utils/delay.ts | 12 ++ .../packages/services-core/src/utils/heap.ts | 178 ++++++++++++++++++ .../packages/services-core/src/utils/index.ts | 4 + .../services-core/src/utils/safeParser.ts | 23 +++ server/routerlicious/pnpm-lock.yaml | 3 - 12 files changed, 223 insertions(+), 9 deletions(-) rename server/routerlicious/packages/services-core/src/{ => utils}/deferred.ts (100%) create mode 100644 server/routerlicious/packages/services-core/src/utils/delay.ts create mode 100644 server/routerlicious/packages/services-core/src/utils/heap.ts create mode 100644 server/routerlicious/packages/services-core/src/utils/index.ts create mode 100644 server/routerlicious/packages/services-core/src/utils/safeParser.ts diff --git a/server/routerlicious/packages/services-core/package.json b/server/routerlicious/packages/services-core/package.json index 437aa572969b..1b28d8b82278 100644 --- a/server/routerlicious/packages/services-core/package.json +++ b/server/routerlicious/packages/services-core/package.json @@ -32,7 +32,6 @@ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-services-client": "workspace:~", diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index 6a13770cb12e..e75e8d8a7027 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -33,7 +33,7 @@ export { IRetryable, isRetryEnabled, } from "./database"; -export { Deferred } from "./deferred"; +export { Deferred } from "./utils"; export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/lambdas.ts b/server/routerlicious/packages/services-core/src/lambdas.ts index d92276d8078c..53af94012245 100644 --- a/server/routerlicious/packages/services-core/src/lambdas.ts +++ b/server/routerlicious/packages/services-core/src/lambdas.ts @@ -5,7 +5,7 @@ import { EventEmitter } from "events"; import { Provider } from "nconf"; -import { safelyParseJSON } from "@fluidframework/common-utils"; +import { safelyParseJSON } from "./utils"; import { BoxcarType, IBoxcarMessage, IMessage } from "./messages"; import { IQueuedMessage } from "./queue"; diff --git a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts index bdefff64eb50..a6f760abbca2 100644 --- a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts +++ b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "./deferred"; +import { Deferred } from "./utils"; import { IPendingBoxcar } from "./queue"; // 1MB batch size / (16KB max message size + overhead) diff --git a/server/routerlicious/packages/services-core/src/queue.ts b/server/routerlicious/packages/services-core/src/queue.ts index 52176c20e8ab..66b9639d6a73 100644 --- a/server/routerlicious/packages/services-core/src/queue.ts +++ b/server/routerlicious/packages/services-core/src/queue.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "./deferred"; +import { Deferred } from "./utils"; import { ITicketedMessage } from "./messages"; /** diff --git a/server/routerlicious/packages/services-core/src/runWithRetry.ts b/server/routerlicious/packages/services-core/src/runWithRetry.ts index 65de2acff2d8..33f6b7d506a2 100644 --- a/server/routerlicious/packages/services-core/src/runWithRetry.ts +++ b/server/routerlicious/packages/services-core/src/runWithRetry.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { delay } from "@fluidframework/common-utils"; import { LogLevel, Lumber, @@ -12,6 +11,8 @@ import { } from "@fluidframework/server-services-telemetry"; import { isNetworkError, NetworkError } from "@fluidframework/server-services-client"; +import { delay } from "./utils"; + /** * Executes a given API while providing support to retry on failures, ignore failures, and taking action on error. * @param api - function to run and retry in case of error diff --git a/server/routerlicious/packages/services-core/src/deferred.ts b/server/routerlicious/packages/services-core/src/utils/deferred.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/deferred.ts rename to server/routerlicious/packages/services-core/src/utils/deferred.ts diff --git a/server/routerlicious/packages/services-core/src/utils/delay.ts b/server/routerlicious/packages/services-core/src/utils/delay.ts new file mode 100644 index 000000000000..7507801562cd --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/delay.ts @@ -0,0 +1,12 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Returns a promise that resolves after `timeMs`. + * @param timeMs - Time in milliseconds to wait. + * @internal + */ +export const delay = async (timeMs: number): Promise => + new Promise((resolve) => setTimeout(() => resolve(), timeMs)); diff --git a/server/routerlicious/packages/services-core/src/utils/heap.ts b/server/routerlicious/packages/services-core/src/utils/heap.ts new file mode 100644 index 000000000000..e9768298ad6a --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/heap.ts @@ -0,0 +1,178 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Interface for a comparer. + * @internal + */ +export interface IComparer { + /** + * The minimum value of type T. + */ + min: T; + + /** + * Compare the two value + * + * @returns 0 if the value is equal, negative number if a is smaller then b, positive number otherwise + */ + compare(a: T, b: T): number; +} + +/** + * A comparer for numbers. + * @internal + */ +export const NumberComparer: IComparer = { + /** + * The compare function for numbers. + * @returns The difference of the two numbers. + */ + compare: (a, b): number => a - b, + + /** + * The minimum value of a JavaScript number, which is `Number.MIN_VALUE`. + */ + min: Number.MIN_VALUE, +}; + +/** + * Interface to a node in {@link Heap}. + * @internal + */ +export interface IHeapNode { + value: T; + position: number; +} + +/** + * Ordered {@link https://en.wikipedia.org/wiki/Heap_(data_structure) | Heap} data structure implementation. + * @internal + */ +export class Heap { + private L: IHeapNode[]; + + /** + * Creates an instance of `Heap` with comparer. + * @param comp - A comparer that specify how elements are ordered. + */ + constructor(public comp: IComparer) { + this.L = [{ value: comp.min, position: 0 }]; + } + + /** + * Return the smallest element in the heap as determined by the order of the comparer + * + * @returns Heap node containing the smallest element + */ + public peek(): IHeapNode { + return this.L[1]; + } + + /** + * Get and remove the smallest element in the heap as determined by the order of the comparer + * + * @returns The smallest value in the heap + */ + public get(): T { + this.swap(1, this.count()); + const x = this.L.pop(); + this.fixdown(1); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return x!.value; + } + + /** + * Add a value to the heap + * + * @param x - value to add + * @returns The heap node that contains the value + */ + public add(x: T): IHeapNode { + const node = { value: x, position: this.L.length }; + this.L.push(node); + this.fixup(this.count()); + + return node; + } + + /** + * Allows for the Heap to be updated after a node's value changes. + */ + public update(node: IHeapNode): void { + const k = node.position; + if (this.isGreaterThanParent(k)) { + this.fixup(k); + } else { + this.fixdown(k); + } + } + + /** + * Removes the given node from the heap. + * + * @param node - The node to remove from the heap. + */ + public remove(node: IHeapNode): void { + // Move the node we want to remove to the end of the array + const position = node.position; + this.swap(node.position, this.L.length - 1); + this.L.splice(-1); + + // Update the swapped node assuming we didn't remove the end of the list + if (position !== this.L.length) { + this.update(this.L[position]); + } + } + + /** + * Get the number of elements in the Heap. + * + * @returns The number of elements in the Heap. + */ + public count(): number { + return this.L.length - 1; + } + + private fixup(pos: number): void { + let k = pos; + while (this.isGreaterThanParent(k)) { + // eslint-disable-next-line no-bitwise + const parent = k >> 1; + this.swap(k, parent); + k = parent; + } + } + + private isGreaterThanParent(k: number): boolean { + // eslint-disable-next-line no-bitwise + return k > 1 && this.comp.compare(this.L[k >> 1].value, this.L[k].value) > 0; + } + + private fixdown(pos: number): void { + let k = pos; + // eslint-disable-next-line no-bitwise + while (k << 1 <= this.count()) { + // eslint-disable-next-line no-bitwise + let j = k << 1; + if (j < this.count() && this.comp.compare(this.L[j].value, this.L[j + 1].value) > 0) { + j++; + } + if (this.comp.compare(this.L[k].value, this.L[j].value) <= 0) { + break; + } + this.swap(k, j); + k = j; + } + } + + private swap(k: number, j: number): void { + const tmp = this.L[k]; + this.L[k] = this.L[j]; + this.L[k].position = k; + this.L[j] = tmp; + this.L[j].position = j; + } +} diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts new file mode 100644 index 000000000000..26317b21c29a --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -0,0 +1,4 @@ +export { Deferred } from "./deferred"; +export { Heap, IComparer } from "./heap"; +export { delay } from "./delay"; +export { safelyParseJSON } from "./safeParser"; diff --git a/server/routerlicious/packages/services-core/src/utils/safeParser.ts b/server/routerlicious/packages/services-core/src/utils/safeParser.ts new file mode 100644 index 000000000000..e10a87dbe193 --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/safeParser.ts @@ -0,0 +1,23 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Wrapper for + * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse | JSON.parse}, + * which will return `undefined` in the case of an error, rather than throwing. + * + * @param json - The JSON string to parse + * @returns The result from `JSON.parse` if successful, otherwise `undefined`. + * @internal + */ +export function safelyParseJSON(json: string): any | undefined { + let parsed; + try { + parsed = JSON.parse(json); + } catch { + return undefined; + } + return parsed; +} diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 80f4e61b4e10..52ad1aba8bb8 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1215,9 +1215,6 @@ importers: packages/services-core: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From 0cc017988dca6c72338de135a0f981fce6e2c73f Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:15:27 +0000 Subject: [PATCH 03/38] Remove common-utils from server-lambdas --- .../packages/lambdas/package.json | 1 - .../lambdas/src/deli/clientSeqManager.ts | 3 +- .../packages/lambdas/src/deli/lambda.ts | 2 +- .../lambdas/src/deli/lambdaFactory.ts | 2 +- .../packages/lambdas/src/nexus/index.ts | 3 +- .../packages/lambdas/src/nexus/interfaces.ts | 2 +- .../packages/lambdas/src/nexus/trace.ts | 1 - .../lambdas/src/scribe/checkpointManager.ts | 2 +- .../lambdas/src/scribe/summaryReader.ts | 3 +- .../lambdas/src/scribe/summaryWriter.ts | 2 +- .../packages/services-core/src/index.ts | 2 +- .../services-core/src/utils/base64Encoding.ts | 41 ++ .../services-core/src/utils/buffer.ts | 71 +++ .../packages/services-core/src/utils/index.ts | 5 +- .../src/utils/typedEventEmitter.ts | 469 ++++++++++++++++++ server/routerlicious/pnpm-lock.yaml | 3 - 16 files changed, 595 insertions(+), 17 deletions(-) create mode 100644 server/routerlicious/packages/services-core/src/utils/base64Encoding.ts create mode 100644 server/routerlicious/packages/services-core/src/utils/buffer.ts create mode 100644 server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts diff --git a/server/routerlicious/packages/lambdas/package.json b/server/routerlicious/packages/lambdas/package.json index 6f6d0a546840..54bd7df3b948 100644 --- a/server/routerlicious/packages/lambdas/package.json +++ b/server/routerlicious/packages/lambdas/package.json @@ -52,7 +52,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", diff --git a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts index fbd777f6002b..4b1b15556d25 100644 --- a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts +++ b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts @@ -3,8 +3,7 @@ * Licensed under the MIT License. */ -import { Heap, IComparer, IHeapNode } from "@fluidframework/common-utils"; -import { IClientSequenceNumber } from "@fluidframework/server-services-core"; +import { Heap, IComparer, IHeapNode, IClientSequenceNumber } from "@fluidframework/server-services-core"; const SequenceNumberComparer: IComparer = { compare: (a, b) => a.referenceSequenceNumber - b.referenceSequenceNumber, diff --git a/server/routerlicious/packages/lambdas/src/deli/lambda.ts b/server/routerlicious/packages/lambdas/src/deli/lambda.ts index 8bfae3e983d0..018bf25f65b3 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambda.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambda.ts @@ -55,6 +55,7 @@ import { ISequencedSignalClient, IClientManager, ICheckpointService, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { CommonProperties, @@ -64,7 +65,6 @@ import { Lumberjack, } from "@fluidframework/server-services-telemetry"; import { DocumentContext } from "@fluidframework/server-lambdas-driver"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { IEvent } from "../events"; import { logCommonSessionEndMetrics, diff --git a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts index 5497c6ad4c4c..4916e3209d12 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts @@ -5,7 +5,6 @@ import { EventEmitter } from "events"; import { inspect } from "util"; -import { toUtf8 } from "@fluidframework/common-utils"; import { ICheckpointService, IClientManager, @@ -24,6 +23,7 @@ import { LambdaCloseType, MongoManager, requestWithRetry, + toUtf8, } from "@fluidframework/server-services-core"; import { defaultHash, IGitManager } from "@fluidframework/server-services-client"; import { diff --git a/server/routerlicious/packages/lambdas/src/nexus/index.ts b/server/routerlicious/packages/lambdas/src/nexus/index.ts index a8805b2834ed..b6a4e7ed2ded 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/index.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { IClient, IConnect, @@ -112,7 +111,7 @@ export function configureWebSocketServices( verifyMaxMessageSize?: boolean, socketTracker?: core.IWebSocketTracker, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: TypedEventEmitter, + collaborationSessionEventEmitter?: core.TypedEventEmitter, clusterDrainingChecker?: core.IClusterDrainingChecker, collaborationSessionTracker?: core.ICollaborationSessionTracker, ): void { diff --git a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts index 88641b7aae79..1771f5f41c31 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import type { TypedEventEmitter } from "@fluidframework/common-utils"; import type { IClient, IConnected } from "@fluidframework/protocol-definitions"; import type { IClientManager, @@ -17,6 +16,7 @@ import type { IThrottleAndUsageStorageManager, IThrottler, IWebSocketTracker, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { IEvent } from "../events"; import type { IRuntimeSignalEnvelope } from "../utils"; diff --git a/server/routerlicious/packages/lambdas/src/nexus/trace.ts b/server/routerlicious/packages/lambdas/src/nexus/trace.ts index f75c5e55ff57..76c6e3edd542 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/trace.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/trace.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { performance } from "@fluidframework/common-utils"; import type { IDocumentMessage } from "@fluidframework/protocol-definitions"; import { getRandomInt } from "@fluidframework/server-services-client"; import { DefaultServiceConfiguration } from "@fluidframework/server-services-core"; diff --git a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts index bf335e46c887..43df77bd3c23 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { delay } from "@fluidframework/common-utils"; import { ICollection, IContext, @@ -14,6 +13,7 @@ import { IDeltaService, IDocumentRepository, ICheckpointService, + delay, } from "@fluidframework/server-services-core"; import { getLumberBaseProperties, Lumberjack } from "@fluidframework/server-services-telemetry"; import { ICheckpointManager } from "./interfaces"; diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts index 9f5da673f6f1..425e9e2d8e5e 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { bufferToString, toUtf8 } from "@fluidframework/common-utils"; import { IDocumentAttributes, ISequencedDocumentMessage, @@ -18,6 +17,8 @@ import { IDeliState, requestWithRetry, shouldRetryNetworkError, + bufferToString, + toUtf8, } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts index 212a6aaae0ab..a0f7cf053a52 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { fromBase64ToUtf8 } from "@fluidframework/common-utils"; import { ICreateCommitParams, ICreateTreeEntry } from "@fluidframework/gitresources"; import { ISequencedDocumentMessage, @@ -36,6 +35,7 @@ import { ISequencedOperationMessage, requestWithRetry, shouldRetryNetworkError, + fromBase64ToUtf8 } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index e75e8d8a7027..ea39714ad54d 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -33,7 +33,7 @@ export { IRetryable, isRetryEnabled, } from "./database"; -export { Deferred } from "./utils"; +export * from "./utils"; // eslint-disable-line no-restricted-syntax export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts b/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts new file mode 100644 index 000000000000..858d56145ccf --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts @@ -0,0 +1,41 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { IsoBuffer } from "./buffer"; + +/** + * Converts the provided {@link https://en.wikipedia.org/wiki/Base64 | base64}-encoded string + * to {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}. + * @internal + */ +export const fromBase64ToUtf8 = (input: string): string => + IsoBuffer.from(input, "base64").toString("utf-8"); + +// /** +// * Converts the provided {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}-encoded string +// * to {@link https://en.wikipedia.org/wiki/Base64 | base64}. +// * @internal +// */ +// export const fromUtf8ToBase64 = (input: string): string => +// IsoBuffer.from(input, "utf8").toString("base64"); + +/** + * Convenience function to convert unknown encoding to utf8 that avoids + * buffer copies/encode ops when no conversion is needed. + * @param input - The source string to convert. + * @param encoding - The source string's encoding. + * @internal + */ +export const toUtf8 = (input: string, encoding: string): string => { + switch (encoding) { + case "utf8": + case "utf-8": { + return input; + } + default: { + return IsoBuffer.from(input, encoding).toString(); + } + } +}; diff --git a/server/routerlicious/packages/services-core/src/utils/buffer.ts b/server/routerlicious/packages/services-core/src/utils/buffer.ts new file mode 100644 index 000000000000..8c536decff92 --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/buffer.ts @@ -0,0 +1,71 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Declare the subset of Buffer functionality we want to make available instead of + * exposing the entirely of Node's typings. This should match the public interface + * of the browser implementation, so any changes made in one should be made in both. + * @internal + */ +export declare class Buffer extends Uint8Array { + toString(encoding?: string): string; + /** + * @param value - (string | ArrayBuffer). + * @param encodingOrOffset - (string | number). + * @param length - (number). + */ + static from(value, encodingOrOffset?, length?): IsoBuffer; + static isBuffer(obj: any): obj is Buffer; +} + +/** + * @internal + */ +export const IsoBuffer = Buffer; + +/** + * @internal + */ +export type IsoBuffer = Buffer; + +/** + * Converts a Uint8Array to a string of the provided encoding. + * @remarks Useful when the array might be an IsoBuffer. + * @param arr - The array to convert. + * @param encoding - Optional target encoding; only "utf8" and "base64" are + * supported, with "utf8" being default. + * @returns The converted string. + * @internal + */ +export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string { + // Make this check because Buffer.from(arr) will always do a buffer copy + return (Buffer.isBuffer(arr) ? arr : Buffer.from(arr)).toString(encoding); +} + +/** + * Convert base64 or utf8 string to array buffer. + * @param encoding - The input string's encoding. + * @internal + */ +export function stringToBuffer(input: string, encoding: string): ArrayBufferLike { + const iso = IsoBuffer.from(input, encoding); + // In a Node environment, IsoBuffer may be a Node.js Buffer. Node.js will + // pool multiple small Buffer instances into a single ArrayBuffer, in which + // case we need to slice the appropriate span of bytes. + return iso.byteLength === iso.buffer.byteLength + ? iso.buffer + : iso.buffer.slice(iso.byteOffset, iso.byteOffset + iso.byteLength); +} + +/** + * Convert binary blob to string format + * + * @param blob - The binary blob + * @param encoding - Output string's encoding + * @returns The blob in string format + * @internal + */ +export const bufferToString = (blob: ArrayBufferLike, encoding: string): string => + IsoBuffer.from(blob).toString(encoding); diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts index 26317b21c29a..cf920393a5c3 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -1,4 +1,7 @@ export { Deferred } from "./deferred"; -export { Heap, IComparer } from "./heap"; +export { Heap, IComparer, IHeapNode } from "./heap"; export { delay } from "./delay"; export { safelyParseJSON } from "./safeParser"; +export { TypedEventEmitter } from "./typedEventEmitter"; +export { toUtf8, fromBase64ToUtf8 } from "./base64Encoding"; +export { bufferToString } from "./buffer"; diff --git a/server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts b/server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts new file mode 100644 index 000000000000..92c71876f5b5 --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts @@ -0,0 +1,469 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { EventEmitter } from "events"; + +/** + * Base interface for event emitters. + * @internal + */ +export interface IEvent { + /** + * Base event emitter signature. + * + * @remarks The event emitter polyfill and the node event emitter have different event types: + * `string | symbol` vs. `string | number`. + * + * So for our typing we'll contrain to string, that way we work with both. + * + * @eventProperty + */ + + (event: string, listener: (...args: any[]) => void); +} + +/** + * Base interface for error event emitters. + * @internal + */ +export interface IErrorEvent extends IEvent { + /** + * Base error event emitter signature. + * + * @eventProperty + * + */ + + (event: "error", listener: (message: any) => void); +} + +/** + * Base interface for event providers. + * @internal + */ +export interface IEventProvider { + /** + * Registers a callback to be invoked when the corresponding event is triggered. + */ + readonly on: IEventTransformer; + + /** + * Registers a callback to be invoked the first time (after registration) the corresponding event is triggered. + */ + readonly once: IEventTransformer; + + /** + * Removes the corresponding event if it has been registered. + */ + readonly off: IEventTransformer; +} + +// These types handle replacing IEventThisPlaceHolder with `this`, so we can +// support polymorphic `this`. For instance if an event wanted to be: +// (event: "some-event", listener:(target: this)=>void) +// +// it should be written as +// (event: "some-event", listener:(target: IEventThisPlaceHolder)=>void) +// +// and IEventThisPlaceHolder will be replaced with this. +// This is all consumers of these types need to know. + +/** + * The placeholder type that should be used instead of `this` in events. + * @internal + */ +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type IEventThisPlaceHolder = { thisPlaceHolder: "thisPlaceHolder" }; + +/** + * Does the type replacement by changing types of {@link IEventThisPlaceHolder} to `TThis` + * @internal + */ + +export type ReplaceIEventThisPlaceHolder = L extends any[] + ? { [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K] } + : L; + +/** + * Transforms the event overload by replacing {@link IEventThisPlaceHolder} with `TThis` in the event listener + * arguments and having the overload return `TTHis` as well + * + * @deprecated Use {@link @fluidframework/core-interfaces#TransformedEvent} instead. + * @internal + * + * @privateremarks + * We need it here because TypedEventEmitter lives here, but otherwise should be removed in favor of the one in + * core-interfaces. + */ + +export type TransformedEvent = ( + event: E, + listener: (...args: ReplaceIEventThisPlaceHolder) => void, +) => TThis; + +/** + * This type is a conditional type for transforming all the overloads provided in `TEvent`. + * + * @remarks + * Due to limitations of the TypeScript typing system, we need to handle each number of overload individually. + * It currently supports the max of 15 event overloads which is more than we use anywhere. + * At more than 15 overloads we start to hit {@link https://github.com/microsoft/TypeScript/issues/37209 | TS2589}. + * If we need to move beyond 15 we should evaluate using a mapped type pattern like `{"event":(listenerArgs)=>void}` + * + * @deprecated Use {@link @fluidframework/core-interfaces#IEventTransformer} instead. + * @internal + * + * @privateremarks + * We need it here because TypedEventEmitter lives here, but otherwise should be removed in favor of the one in + * core-interfaces. + */ +export type IEventTransformer = TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: infer E13, listener: (...args: infer A13) => void); + (event: infer E14, listener: (...args: infer A14) => void); + (event: string, listener: (...args: any[]) => void); +} + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: infer E13, listener: (...args: infer A13) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent + : TransformedEvent; + +/** + * The event emitter polyfill and the node event emitter have different event types: + * string | symbol vs. string | number + * + * This type allow us to correctly handle either type + * @internal + */ +export type EventEmitterEventType = EventEmitter extends { on(event: infer E, listener: any) } + ? E + : never; + +/** + * @internal + */ +export type TypedEventTransform = + // Event emitter supports some special events for the emitter itself to use + // this exposes those events for the TypedEventEmitter. + // Since we know what the shape of these events are, we can describe them directly via a TransformedEvent + // which easier than trying to extend TEvent directly + TransformedEvent< + TThis, + "newListener" | "removeListener", + Parameters<(event: string, listener: (...args: any[]) => void) => void> + > & + // Expose all the events provides by TEvent + IEventTransformer & + // Add the default overload so this is covertable to EventEmitter regardless of environment + TransformedEvent; + +/** + * Event Emitter helper class the supports emitting typed events + * @internal + */ +export class TypedEventEmitter + extends EventEmitter + implements IEventProvider +{ + constructor() { + super(); + this.addListener = super.addListener.bind(this) as TypedEventTransform; + this.on = super.on.bind(this) as TypedEventTransform; + this.once = super.once.bind(this) as TypedEventTransform; + this.prependListener = super.prependListener.bind(this) as TypedEventTransform< + this, + TEvent + >; + this.prependOnceListener = super.prependOnceListener.bind(this) as TypedEventTransform< + this, + TEvent + >; + this.removeListener = super.removeListener.bind(this) as TypedEventTransform; + this.off = super.off.bind(this) as TypedEventTransform; + } + readonly addListener: TypedEventTransform; + readonly on: TypedEventTransform; + readonly once: TypedEventTransform; + readonly prependListener: TypedEventTransform; + readonly prependOnceListener: TypedEventTransform; + readonly removeListener: TypedEventTransform; + readonly off: TypedEventTransform; +} diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 52ad1aba8bb8..6353a2fb4b9b 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -153,9 +153,6 @@ importers: packages/lambdas: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From f6d3793440b1cdaf1879d6135e4425f937a1e7fa Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:17:26 +0000 Subject: [PATCH 04/38] Remove common-utils from server-memory-orderer --- server/routerlicious/packages/memory-orderer/package.json | 1 - .../packages/memory-orderer/src/localOrdererConnection.ts | 1 - .../packages/memory-orderer/src/localOrdererSetup.ts | 2 +- server/routerlicious/packages/memory-orderer/src/socket.ts | 2 +- server/routerlicious/packages/services-core/src/utils/index.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 3 --- 6 files changed, 3 insertions(+), 8 deletions(-) diff --git a/server/routerlicious/packages/memory-orderer/package.json b/server/routerlicious/packages/memory-orderer/package.json index 6a25802acb24..c6f7d2b06eb5 100644 --- a/server/routerlicious/packages/memory-orderer/package.json +++ b/server/routerlicious/packages/memory-orderer/package.json @@ -56,7 +56,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-lambdas": "workspace:~", diff --git a/server/routerlicious/packages/memory-orderer/src/localOrdererConnection.ts b/server/routerlicious/packages/memory-orderer/src/localOrdererConnection.ts index f82f42b8f22d..3ab001a642a7 100644 --- a/server/routerlicious/packages/memory-orderer/src/localOrdererConnection.ts +++ b/server/routerlicious/packages/memory-orderer/src/localOrdererConnection.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { performance } from "@fluidframework/common-utils"; import { IClient, IClientJoin, diff --git a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts index c0ea1c543f84..48ba1d67317c 100644 --- a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts +++ b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { fromBase64ToUtf8 } from "@fluidframework/common-utils"; import { IDocumentAttributes } from "@fluidframework/protocol-definitions"; import { IGitManager } from "@fluidframework/server-services-client"; import { @@ -17,6 +16,7 @@ import { IDocumentRepository, IDocumentStorage, ISequencedOperationMessage, + fromBase64ToUtf8 } from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/memory-orderer/src/socket.ts b/server/routerlicious/packages/memory-orderer/src/socket.ts index 39baf89f7d3c..50e1ba068648 100644 --- a/server/routerlicious/packages/memory-orderer/src/socket.ts +++ b/server/routerlicious/packages/memory-orderer/src/socket.ts @@ -5,7 +5,7 @@ import { EventEmitter } from "events"; import ws from "ws"; -import { IsoBuffer } from "@fluidframework/common-utils"; +import { IsoBuffer } from "@fluidframework/server-services-core"; import { debug } from "./debug"; export class Socket extends EventEmitter { diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts index cf920393a5c3..eaec57434d81 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -4,4 +4,4 @@ export { delay } from "./delay"; export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8 } from "./base64Encoding"; -export { bufferToString } from "./buffer"; +export { IsoBuffer, bufferToString } from "./buffer"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 6353a2fb4b9b..57730b687c24 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -492,9 +492,6 @@ importers: packages/memory-orderer: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/protocol-base': specifier: workspace:~ version: link:../protocol-base From ea50fd7635346c3758de12c21f9bd148fac9458e Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:21:18 +0000 Subject: [PATCH 05/38] Remove common-utils from server-routerlicious-base --- .../packages/routerlicious-base/package.json | 1 - .../packages/routerlicious-base/src/alfred/app.ts | 2 +- .../src/alfred/routes/api/api.ts | 5 ++--- .../src/alfred/routes/api/index.ts | 2 +- .../routerlicious-base/src/alfred/routes/index.ts | 2 +- .../routerlicious-base/src/alfred/runner.ts | 2 +- .../src/alfred/services/deltaService.ts | 2 +- .../routerlicious-base/src/nexus/runner.ts | 2 +- .../routerlicious-base/src/nexus/runnerFactory.ts | 5 ++--- .../routerlicious-base/src/test/alfred/api.spec.ts | 2 +- .../routerlicious-base/src/utils/sessionHelper.ts | 2 +- .../packages/routerlicious-base/src/utils/trace.ts | 2 -- .../services-core/src/utils/base64Encoding.ts | 14 +++++++------- .../packages/services-core/src/utils/index.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 3 --- 15 files changed, 20 insertions(+), 28 deletions(-) diff --git a/server/routerlicious/packages/routerlicious-base/package.json b/server/routerlicious/packages/routerlicious-base/package.json index 264e044d7a76..d9fdce15a281 100644 --- a/server/routerlicious/packages/routerlicious-base/package.json +++ b/server/routerlicious/packages/routerlicious-base/package.json @@ -51,7 +51,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-kafka-orderer": "workspace:~", diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts index f36f90d82a51..ca4373bd1664 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts @@ -17,8 +17,8 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter } from "@fluidframework/server-services-core"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { json, urlencoded } from "body-parser"; import compression from "compression"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts index 6cae8063de21..630b9573986b 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64, TypedEventEmitter } from "@fluidframework/common-utils"; import * as git from "@fluidframework/gitresources"; import { IClient, IClientJoin, ScopeType } from "@fluidframework/protocol-definitions"; import { @@ -52,7 +51,7 @@ export function create( tenantThrottlers: Map, jwtTokenCache?: core.ICache, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: TypedEventEmitter, + collaborationSessionEventEmitter?: core.TypedEventEmitter, fluidAccessTokenGenerator?: core.IFluidAccessTokenGenerator, ): Router { const router: Router = Router(); @@ -152,7 +151,7 @@ export function create( const blobData = request.body as IBlobData; // TODO: why is this contacting external blob storage? const externalHistorianUrl = config.get("worker:blobStorageUrl") as string; - const requestToken = fromUtf8ToBase64(tenantId); + const requestToken = core.fromUtf8ToBase64(tenantId); const uri = `/repos/${tenantId}/git/blobs?token=${requestToken}`; const requestBody: git.ICreateBlobParams = { content: blobData.content, diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts index db23bc9290ac..809133715685 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICache, IDeltaService, @@ -17,6 +16,7 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter } from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import cors from "cors"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts index 276f4aa0a701..b50f655f819f 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IDeltaService, @@ -18,6 +17,7 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts index 249f871248a2..a4b7570ff59e 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts @@ -4,7 +4,6 @@ */ import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { Deferred, ICache, @@ -22,6 +21,7 @@ import { IRevokedTokenChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts index 5036b7e67566..ef587bf6bb5a 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. */ -import { toUtf8 } from "@fluidframework/common-utils"; import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions"; import { ICollection, IDeltaService, ISequencedOperationMessage, ITenantManager, + toUtf8 } from "@fluidframework/server-services-core"; /** diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts index 02e0dde7b30d..e446b31ecbeb 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts @@ -4,7 +4,6 @@ */ import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { Deferred, ICache, @@ -23,6 +22,7 @@ import { IRevokedTokenChecker, ICollaborationSessionTracker, IReadinessCheck, + TypedEventEmitter } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts index d7b8088f2392..3d52220b1c3e 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts @@ -5,7 +5,6 @@ import * as os from "os"; import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { KafkaOrdererFactory } from "@fluidframework/server-kafka-orderer"; import { @@ -75,7 +74,7 @@ export class NexusResources implements core.IResources { public socketTracker?: core.IWebSocketTracker, public tokenRevocationManager?: core.ITokenRevocationManager, public revokedTokenChecker?: core.IRevokedTokenChecker, - public collaborationSessionEvents?: TypedEventEmitter, + public collaborationSessionEvents?: core.TypedEventEmitter, public serviceMessageResourceManager?: core.IServiceMessageResourceManager, public clusterDrainingChecker?: core.IClusterDrainingChecker, public collaborationSessionTracker?: core.ICollaborationSessionTracker, @@ -496,7 +495,7 @@ export class NexusResourcesFactory implements core.IResourcesFactory(); + const collaborationSessionEvents = new core.TypedEventEmitter(); // This wanst to create stuff const port = utils.normalizePort(process.env.PORT || "3000"); diff --git a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts index 27fba5bfc09a..bf37a9e06d77 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ScopeType } from "@fluidframework/protocol-definitions"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IAlfredTenant, NetworkError } from "@fluidframework/server-services-client"; @@ -11,6 +10,7 @@ import { IDocument, MongoDatabaseManager, MongoManager, + TypedEventEmitter } from "@fluidframework/server-services-core"; import { StartupCheck } from "@fluidframework/server-services-shared"; import { Lumberjack, TestEngine1 } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts index e0293e5c1220..872182b012ee 100644 --- a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts +++ b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts @@ -9,10 +9,10 @@ import { runWithRetry, IDocumentRepository, IClusterDrainingChecker, + delay } from "@fluidframework/server-services-core"; import { getLumberBaseProperties, Lumberjack } from "@fluidframework/server-services-telemetry"; import { StageTrace } from "./trace"; -import { delay } from "@fluidframework/common-utils"; const defaultSessionStickinessDurationMs = 60 * 60 * 1000; // 60 minutes diff --git a/server/routerlicious/packages/routerlicious-base/src/utils/trace.ts b/server/routerlicious/packages/routerlicious-base/src/utils/trace.ts index df4204f84ff5..7a01301929a8 100644 --- a/server/routerlicious/packages/routerlicious-base/src/utils/trace.ts +++ b/server/routerlicious/packages/routerlicious-base/src/utils/trace.ts @@ -3,8 +3,6 @@ * Licensed under the MIT License. */ -import { performance } from "@fluidframework/common-utils"; - interface IStageTrace { /** * Name of the Stage. diff --git a/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts b/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts index 858d56145ccf..04e89f782655 100644 --- a/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts +++ b/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts @@ -13,13 +13,13 @@ import { IsoBuffer } from "./buffer"; export const fromBase64ToUtf8 = (input: string): string => IsoBuffer.from(input, "base64").toString("utf-8"); -// /** -// * Converts the provided {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}-encoded string -// * to {@link https://en.wikipedia.org/wiki/Base64 | base64}. -// * @internal -// */ -// export const fromUtf8ToBase64 = (input: string): string => -// IsoBuffer.from(input, "utf8").toString("base64"); +/** + * Converts the provided {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}-encoded string + * to {@link https://en.wikipedia.org/wiki/Base64 | base64}. + * @internal + */ +export const fromUtf8ToBase64 = (input: string): string => + IsoBuffer.from(input, "utf8").toString("base64"); /** * Convenience function to convert unknown encoding to utf8 that avoids diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts index eaec57434d81..9b2667de5c7a 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -3,5 +3,5 @@ export { Heap, IComparer, IHeapNode } from "./heap"; export { delay } from "./delay"; export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; -export { toUtf8, fromBase64ToUtf8 } from "./base64Encoding"; +export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { IsoBuffer, bufferToString } from "./buffer"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 57730b687c24..f6fb9fae11bc 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -765,9 +765,6 @@ importers: packages/routerlicious-base: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From dac8602394bd7d3e61a0db79a35162ad048bdb5d Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:22:26 +0000 Subject: [PATCH 06/38] Remove common-utils from server-services --- server/routerlicious/packages/services/package.json | 1 - server/routerlicious/packages/services/src/deltaManager.ts | 3 +-- server/routerlicious/packages/services/src/tenant.ts | 3 +-- server/routerlicious/pnpm-lock.yaml | 3 --- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/server/routerlicious/packages/services/package.json b/server/routerlicious/packages/services/package.json index 8279093d30da..a4a948f5a5f1 100644 --- a/server/routerlicious/packages/services/package.json +++ b/server/routerlicious/packages/services/package.json @@ -51,7 +51,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/protocol-definitions": "^3.2.0", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", diff --git a/server/routerlicious/packages/services/src/deltaManager.ts b/server/routerlicious/packages/services/src/deltaManager.ts index ee0362ee58d1..facbc591c836 100644 --- a/server/routerlicious/packages/services/src/deltaManager.ts +++ b/server/routerlicious/packages/services/src/deltaManager.ts @@ -3,10 +3,9 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64 } from "@fluidframework/common-utils"; import { ISequencedDocumentMessage, ScopeType } from "@fluidframework/protocol-definitions"; import { BasicRestWrapper } from "@fluidframework/server-services-client"; -import { IDeltaService, type ITenantManager } from "@fluidframework/server-services-core"; +import { IDeltaService, type ITenantManager, fromUtf8ToBase64 } from "@fluidframework/server-services-core"; import { getGlobalTelemetryContext } from "@fluidframework/server-services-telemetry"; import { getRefreshTokenIfNeededCallback, TenantManager } from "./tenant"; import { logHttpMetrics } from "@fluidframework/server-services-utils"; diff --git a/server/routerlicious/packages/services/src/tenant.ts b/server/routerlicious/packages/services/src/tenant.ts index 2e22856aceba..fabb02688d8f 100644 --- a/server/routerlicious/packages/services/src/tenant.ts +++ b/server/routerlicious/packages/services/src/tenant.ts @@ -14,7 +14,6 @@ import { parseToken, } from "@fluidframework/server-services-client"; import * as core from "@fluidframework/server-services-core"; -import { fromUtf8ToBase64 } from "@fluidframework/common-utils"; import { extractTokenFromHeader, getValidAccessToken, @@ -161,7 +160,7 @@ export class TenantManager implements core.ITenantManager, core.ITenantConfigMan ); const defaultQueryString = { - token: fromUtf8ToBase64(`${tenantId}`), + token: core.fromUtf8ToBase64(`${tenantId}`), }; const getDefaultHeaders = () => { const credentials: ICredentials = { diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index f6fb9fae11bc..29e39da5fe72 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -967,9 +967,6 @@ importers: packages/services: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 From a0041bba60ab14cb3b497814deb31317fd05ea14 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:23:17 +0000 Subject: [PATCH 07/38] Remove common-utils from server-services-shared --- server/routerlicious/packages/services-shared/package.json | 1 - server/routerlicious/packages/services-shared/src/storage.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/server/routerlicious/packages/services-shared/package.json b/server/routerlicious/packages/services-shared/package.json index da19039eeb77..78c6995c56b4 100644 --- a/server/routerlicious/packages/services-shared/package.json +++ b/server/routerlicious/packages/services-shared/package.json @@ -52,7 +52,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", diff --git a/server/routerlicious/packages/services-shared/src/storage.ts b/server/routerlicious/packages/services-shared/src/storage.ts index 2c05da2c3473..a08ce2b0772d 100644 --- a/server/routerlicious/packages/services-shared/src/storage.ts +++ b/server/routerlicious/packages/services-shared/src/storage.ts @@ -30,9 +30,9 @@ import { IStorageNameAllocator, ITenantManager, SequencedOperationType, + toUtf8 } from "@fluidframework/server-services-core"; import * as winston from "winston"; -import { toUtf8 } from "@fluidframework/common-utils"; import { BaseTelemetryProperties, CommonProperties, diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 29e39da5fe72..7f498862bece 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1489,9 +1489,6 @@ importers: packages/services-shared: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From 8d42abcf046dc356cb144575e2cb0756e75005c1 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:24:03 +0000 Subject: [PATCH 08/38] Remove common-utils from server-services-telemetry --- server/routerlicious/packages/services-telemetry/package.json | 1 - server/routerlicious/packages/services-telemetry/src/lumber.ts | 1 - server/routerlicious/pnpm-lock.yaml | 3 --- 3 files changed, 5 deletions(-) diff --git a/server/routerlicious/packages/services-telemetry/package.json b/server/routerlicious/packages/services-telemetry/package.json index 34be53fa9061..e1fa8525b58f 100644 --- a/server/routerlicious/packages/services-telemetry/package.json +++ b/server/routerlicious/packages/services-telemetry/package.json @@ -52,7 +52,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "json-stringify-safe": "^5.0.1", "path-browserify": "^1.0.1", "serialize-error": "^8.1.0", diff --git a/server/routerlicious/packages/services-telemetry/src/lumber.ts b/server/routerlicious/packages/services-telemetry/src/lumber.ts index 74dc5b83d12f..d254727905c9 100644 --- a/server/routerlicious/packages/services-telemetry/src/lumber.ts +++ b/server/routerlicious/packages/services-telemetry/src/lumber.ts @@ -5,7 +5,6 @@ import safeStringify from "json-stringify-safe"; import { v4 as uuid } from "uuid"; -import { performance } from "@fluidframework/common-utils"; import { LumberEventName } from "./lumberEventNames"; import { LogLevel, diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 7f498862bece..e4ec8ef8c21d 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1634,9 +1634,6 @@ importers: packages/services-telemetry: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 json-stringify-safe: specifier: ^5.0.1 version: 5.0.1 From 11f914681f5baa48930f09526843bbcd26f9b408 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:28:18 +0000 Subject: [PATCH 09/38] Remove common-utils from tinylicious --- .../routerlicious/packages/services-core/src/utils/index.ts | 2 +- server/routerlicious/packages/tinylicious/package.json | 1 - server/routerlicious/packages/tinylicious/src/app.ts | 5 +---- server/routerlicious/packages/tinylicious/src/resources.ts | 4 +--- .../packages/tinylicious/src/resourcesFactory.ts | 4 +--- .../routerlicious/packages/tinylicious/src/routes/index.ts | 4 +--- .../packages/tinylicious/src/routes/ordering/index.ts | 5 +---- .../packages/tinylicious/src/routes/storage/git/blobs.ts | 4 +--- server/routerlicious/packages/tinylicious/src/runner.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 3 --- 10 files changed, 8 insertions(+), 26 deletions(-) diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts index 9b2667de5c7a..4c7b70336830 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -4,4 +4,4 @@ export { delay } from "./delay"; export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; -export { IsoBuffer, bufferToString } from "./buffer"; +export { IsoBuffer, bufferToString, Uint8ArrayToString } from "./buffer"; diff --git a/server/routerlicious/packages/tinylicious/package.json b/server/routerlicious/packages/tinylicious/package.json index 8119dd143a84..71da6cc2d640 100644 --- a/server/routerlicious/packages/tinylicious/package.json +++ b/server/routerlicious/packages/tinylicious/package.json @@ -36,7 +36,6 @@ "tsc": "tsc" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", diff --git a/server/routerlicious/packages/tinylicious/src/app.ts b/server/routerlicious/packages/tinylicious/src/app.ts index bac84b4e009e..b16c404dea38 100644 --- a/server/routerlicious/packages/tinylicious/src/app.ts +++ b/server/routerlicious/packages/tinylicious/src/app.ts @@ -3,10 +3,8 @@ * Licensed under the MIT License. */ -// eslint-disable-next-line import/no-deprecated -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; import { RestLessServer } from "@fluidframework/server-services-shared"; import { json, urlencoded } from "body-parser"; import compression from "compression"; @@ -33,7 +31,6 @@ export function create( config: Provider, storage: IDocumentStorage, mongoManager: MongoManager, - // eslint-disable-next-line import/no-deprecated collaborationSessionEventEmitter: TypedEventEmitter | undefined, ) { // Maximum REST request size diff --git a/server/routerlicious/packages/tinylicious/src/resources.ts b/server/routerlicious/packages/tinylicious/src/resources.ts index e52855092d43..d64d0c6b8ad6 100644 --- a/server/routerlicious/packages/tinylicious/src/resources.ts +++ b/server/routerlicious/packages/tinylicious/src/resources.ts @@ -6,7 +6,6 @@ // import * as services from "@fluidframework/server-services"; import * as core from "@fluidframework/server-services-core"; // eslint-disable-next-line import/no-deprecated -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { Provider } from "nconf"; @@ -19,8 +18,7 @@ export class TinyliciousResources implements core.IResources { public mongoManager: core.MongoManager, public port: any, public webServerFactory: core.IWebServerFactory, - // eslint-disable-next-line import/no-deprecated - public collaborationSessionEventEmitter?: TypedEventEmitter, + public collaborationSessionEventEmitter?: core.TypedEventEmitter, ) {} public async dispose(): Promise { diff --git a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts index b5ce6e82a41d..355a15555de1 100644 --- a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts +++ b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts @@ -3,8 +3,6 @@ * Licensed under the MIT License. */ -// eslint-disable-next-line import/no-deprecated -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { LocalOrdererManager } from "@fluidframework/server-local-server"; import { DocumentStorage } from "@fluidframework/server-services-shared"; @@ -14,6 +12,7 @@ import { MongoManager, IResourcesFactory, MongoDocumentRepository, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import * as utils from "@fluidframework/server-services-utils"; import { Provider } from "nconf"; @@ -98,7 +97,6 @@ export class TinyliciousResourcesFactory implements IResourcesFactory(); return new TinyliciousResources( diff --git a/server/routerlicious/packages/tinylicious/src/routes/index.ts b/server/routerlicious/packages/tinylicious/src/routes/index.ts index 3fd748bae784..6c4a920313bd 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/index.ts @@ -4,9 +4,8 @@ */ // eslint-disable-next-line import/no-deprecated -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as ordering from "./ordering"; @@ -21,7 +20,6 @@ export function create( config: Provider, mongoManager: MongoManager, documentStorage: IDocumentStorage, - // eslint-disable-next-line import/no-deprecated collaborationSessionEventEmitter?: TypedEventEmitter, ) { return { diff --git a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts index 4f77d567de16..cdeb263e7e14 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts @@ -3,15 +3,13 @@ * Licensed under the MIT License. */ -// eslint-disable-next-line import/no-deprecated -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, IRoom, IRuntimeSignalEnvelope, } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as deltas from "./deltas"; @@ -21,7 +19,6 @@ export function create( config: Provider, storage: IDocumentStorage, mongoManager: MongoManager, - // eslint-disable-next-line import/no-deprecated collaborationSessionEventEmitter?: TypedEventEmitter, ): Router { const router: Router = Router(); diff --git a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts index 05b2144902d1..51dd6823618c 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts @@ -5,8 +5,7 @@ import fs from "fs"; import { IBlob, ICreateBlobParams, ICreateBlobResponse } from "@fluidframework/gitresources"; -// eslint-disable-next-line import/no-deprecated -import { Uint8ArrayToString } from "@fluidframework/common-utils"; +import { Uint8ArrayToString } from "@fluidframework/server-services-core"; import { Router } from "express"; import * as git from "isomorphic-git"; import nconf from "nconf"; @@ -50,7 +49,6 @@ export async function getBlob( url: "", sha, size: buffer.length, - // eslint-disable-next-line import/no-deprecated content: Uint8ArrayToString(buffer, "base64"), encoding: "base64", }; diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index a56c40e7b5f2..010d610ed1bd 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -13,8 +13,8 @@ import { MongoManager, DefaultMetricClient, IRunner, + TypedEventEmitter, } from "@fluidframework/server-services-core"; -import { TypedEventEmitter } from "@fluidframework/common-utils"; import { Provider } from "nconf"; import * as winston from "winston"; import { diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index e4ec8ef8c21d..5c6d97cbd101 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1940,9 +1940,6 @@ importers: packages/tinylicious: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From 647b54e74e294fae5049a3632cfc67b18161ea34 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 01:34:04 +0000 Subject: [PATCH 10/38] Remove common-utils from server-test-utils --- .../packages/services-core/package.json | 3 +- .../services-core/src/utils/hashFile.ts | 60 +++++++++++++++++++ .../packages/services-core/src/utils/index.ts | 1 + .../packages/test-utils/package.json | 1 - .../src/test/testsForHistorian.spec.ts | 2 +- .../test-utils/src/testDocumentStorage.ts | 4 +- .../packages/test-utils/src/testHistorian.ts | 3 +- server/routerlicious/pnpm-lock.yaml | 6 +- 8 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 server/routerlicious/packages/services-core/src/utils/hashFile.ts diff --git a/server/routerlicious/packages/services-core/package.json b/server/routerlicious/packages/services-core/package.json index 1b28d8b82278..08f178d065fe 100644 --- a/server/routerlicious/packages/services-core/package.json +++ b/server/routerlicious/packages/services-core/package.json @@ -40,7 +40,8 @@ "@types/node": "^18.19.39", "debug": "^4.3.4", "events": "^3.1.0", - "nconf": "^0.12.0" + "nconf": "^0.12.0", + "sha.js": "^2.4.11" }, "devDependencies": { "@fluid-tools/build-cli": "0.52.0-315632", diff --git a/server/routerlicious/packages/services-core/src/utils/hashFile.ts b/server/routerlicious/packages/services-core/src/utils/hashFile.ts new file mode 100644 index 000000000000..157981e14f82 --- /dev/null +++ b/server/routerlicious/packages/services-core/src/utils/hashFile.ts @@ -0,0 +1,60 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +// eslint-disable-next-line import/no-internal-modules +import sha1 from "sha.js/sha1"; +// // eslint-disable-next-line import/no-internal-modules +// import sha256 from "sha.js/sha256"; + +import { IsoBuffer } from "./buffer"; + +// /** +// * Hash a file. Consistent within a session, but should not be persisted and +// * is not consistent with git. +// * If called under an insecure context for a browser, this will fallback to +// * using the node implementation. +// * +// * @param file - The contents of the file in a buffer. +// * @param algorithm - The hash algorithm to use, artificially constrained by what is used internally. +// * @param hashEncoding - The encoding of the returned hash, also artificially constrained. +// * @returns The hash of the content of the buffer. +// * +// * @deprecated Moved to the `@fluidframework-internal/client-utils` package. +// * @internal +// */ +// export async function hashFile( +// file: IsoBuffer, +// algorithm: "SHA-1" | "SHA-256" = "SHA-1", +// hashEncoding: "hex" | "base64" = "hex", +// ): Promise { +// let engine; +// // eslint-disable-next-line default-case +// switch (algorithm) { +// case "SHA-1": { +// engine = new sha1(); +// break; +// } +// case "SHA-256": { +// engine = new sha256(); +// break; +// } +// } +// return engine.update(file).digest(hashEncoding) as string; +// } + +/** + * Create a github hash (Github hashes the string with blob and size) + * Must be called under secure context for browsers + * + * @param file - The contents of the file in a buffer + * @returns The sha1 hash of the content of the buffer with the `blob` prefix and size + * @internal + */ +export async function gitHashFile(file: IsoBuffer): Promise { + const size = file.byteLength; + const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; + const engine = new sha1(); + return engine.update(filePrefix).update(file).digest("hex") as string; +} diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/services-core/src/utils/index.ts index 4c7b70336830..0d41d191481d 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/services-core/src/utils/index.ts @@ -5,3 +5,4 @@ export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { IsoBuffer, bufferToString, Uint8ArrayToString } from "./buffer"; +export { gitHashFile } from "./hashFile"; diff --git a/server/routerlicious/packages/test-utils/package.json b/server/routerlicious/packages/test-utils/package.json index 00cd8f4ad0b9..7d609ed55ab2 100644 --- a/server/routerlicious/packages/test-utils/package.json +++ b/server/routerlicious/packages/test-utils/package.json @@ -51,7 +51,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", diff --git a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts index fc8f4ed1ae1d..3ffc5b3e9371 100644 --- a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts +++ b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts @@ -7,7 +7,7 @@ import { strict as assert } from "assert"; import { TestHistorian } from "../testHistorian"; import { GitManager } from "@fluidframework/server-services-client"; import { ICreateBlobParams, ICreateCommitParams } from "@fluidframework/gitresources"; -import { fromUtf8ToBase64 } from "@fluidframework/common-utils"; +import { fromUtf8ToBase64 } from "@fluidframework/server-services-core"; describe("Test for Historian", () => { let gitManager: GitManager; diff --git a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts index 03d2f43921cc..36fada62e7e1 100644 --- a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts +++ b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts @@ -24,6 +24,9 @@ import { IDocumentStorage, IScribe, ITenantManager, + gitHashFile, + IsoBuffer, + Uint8ArrayToString, } from "@fluidframework/server-services-core"; import { ISummaryTree, @@ -35,7 +38,6 @@ import { FileMode, } from "@fluidframework/protocol-definitions"; import { IQuorumSnapshot, getGitMode, getGitType } from "@fluidframework/protocol-base"; -import { gitHashFile, IsoBuffer, Uint8ArrayToString } from "@fluidframework/common-utils"; // Forked from DocumentStorage to remove to server dependencies and enable testing of other data stores. /** diff --git a/server/routerlicious/packages/test-utils/src/testHistorian.ts b/server/routerlicious/packages/test-utils/src/testHistorian.ts index d19a0a196a02..158e6415aeb7 100644 --- a/server/routerlicious/packages/test-utils/src/testHistorian.ts +++ b/server/routerlicious/packages/test-utils/src/testHistorian.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { gitHashFile, IsoBuffer } from "@fluidframework/common-utils"; import { IAuthor, IBlob, @@ -31,7 +30,7 @@ import { IWriteSummaryResponse, NetworkError, } from "@fluidframework/server-services-client"; -import { ICollection, IDb } from "@fluidframework/server-services-core"; +import { ICollection, IDb, gitHashFile, IsoBuffer } from "@fluidframework/server-services-core"; import { v4 as uuid } from "uuid"; import { TestDb } from "./testCollection"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 5c6d97cbd101..2fbaf480cae1 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1230,6 +1230,9 @@ importers: nconf: specifier: ^0.12.0 version: 0.12.0 + sha.js: + specifier: ^2.4.11 + version: 2.4.11 devDependencies: '@fluid-tools/build-cli': specifier: 0.52.0-315632 @@ -1831,9 +1834,6 @@ importers: packages/test-utils: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources From a1c251c4b07c547cda3d6d01d10af23b785612fd Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:09:29 +0000 Subject: [PATCH 11/38] Move to new server-common-utils --- .../packages/common-utils/.eslintrc.cjs | 25 + .../packages/common-utils/.gitignore | 52 + .../packages/common-utils/.npmignore | 7 + .../packages/common-utils/CHANGELOG.md | 5 + .../packages/common-utils/LICENSE | 21 + .../packages/common-utils/README.md | 3 + .../packages/common-utils/package.json | 115 + .../packages/common-utils/src/assert.ts | 25 + .../src}/base64Encoding.ts | 0 .../src/utils => common-utils/src}/buffer.ts | 0 .../utils => common-utils/src}/deferred.ts | 0 .../src/utils => common-utils/src}/delay.ts | 0 .../utils => common-utils/src}/hashFile.ts | 0 .../src/utils => common-utils/src}/heap.ts | 0 .../src/utils => common-utils/src}/index.ts | 3 +- .../common-utils/src/packageVersion.ts | 9 + .../utils => common-utils/src}/safeParser.ts | 0 .../src/test/jest/gitHash.spec.ts | 215 + .../common-utils/src/test/jest/tsconfig.json | 14 + .../src/test/mocha/assert.spec.ts | 22 + .../common-utils/src/test/mocha/tsconfig.json | 15 + .../src/test/mocha/typedEventEmitter.spec.ts | 53 + .../common-utils/src/test/types/tsconfig.json | 14 + .../src}/typedEventEmitter.ts | 0 .../packages/common-utils/src/unreachable.ts | 26 + .../common-utils/tsconfig.esnext.json | 7 + .../packages/common-utils/tsconfig.json | 11 + .../packages/lambdas-driver/package.json | 1 + .../src/kafka-service/checkpointManager.ts | 2 +- .../src/kafka-service/runner.ts | 2 +- .../packages/lambdas/package.json | 1 + .../lambdas/src/deli/clientSeqManager.ts | 3 +- .../packages/lambdas/src/deli/lambda.ts | 2 +- .../lambdas/src/deli/lambdaFactory.ts | 2 +- .../packages/lambdas/src/nexus/index.ts | 3 +- .../packages/lambdas/src/nexus/interfaces.ts | 2 +- .../lambdas/src/scribe/checkpointManager.ts | 2 +- .../lambdas/src/scribe/summaryReader.ts | 3 +- .../lambdas/src/scribe/summaryWriter.ts | 2 +- .../packages/local-server/package.json | 1 + .../test/localDeltaConnectionServer.spec.ts | 2 +- .../packages/memory-orderer/package.json | 1 + .../memory-orderer/src/localOrdererSetup.ts | 2 +- .../packages/memory-orderer/src/remoteNode.ts | 2 +- .../packages/memory-orderer/src/socket.ts | 2 +- .../packages/routerlicious-base/package.json | 1 + .../routerlicious-base/src/alfred/app.ts | 2 +- .../src/alfred/routes/api/api.ts | 5 +- .../src/alfred/routes/api/index.ts | 2 +- .../src/alfred/routes/index.ts | 2 +- .../routerlicious-base/src/alfred/runner.ts | 3 +- .../src/alfred/services/deltaService.ts | 2 +- .../routerlicious-base/src/nexus/runner.ts | 3 +- .../src/nexus/runnerFactory.ts | 5 +- .../routerlicious-base/src/riddler/runner.ts | 2 +- .../src/test/alfred/api.spec.ts | 2 +- .../src/test/nexus/io.spec.ts | 2 +- .../src/utils/sessionHelper.ts | 2 +- .../packages/services-client/package.json | 2 + .../services-client/src/gitManager.ts | 2 +- .../packages/services-client/src/historian.ts | 2 +- .../services-client/src/storageUtils.ts | 6 +- .../src/summaryTreeUploadManager.ts | 12 +- .../src/test/historian.spec.ts | 2 +- .../src/test/storageUtils.spec.ts | 2 +- .../packages/services-core/package.json | 4 +- .../packages/services-core/src/index.ts | 1 - .../packages/services-core/src/lambdas.ts | 3 +- .../services-core/src/pendingBoxcar.ts | 3 +- .../packages/services-core/src/queue.ts | 3 +- .../services-core/src/runWithRetry.ts | 3 +- .../services-ordering-rdkafka/package.json | 1 + .../src/rdkafkaConsumer.ts | 2 +- .../src/rdkafkaProducer.ts | 2 +- .../packages/services-shared/package.json | 1 + .../services-shared/src/runnerUtils.ts | 3 +- .../packages/services-shared/src/storage.ts | 2 +- .../services-shared/src/test/http.spec.ts | 2 +- .../packages/services/package.json | 1 + .../packages/services/src/deltaManager.ts | 3 +- .../packages/services/src/tenant.ts | 3 +- .../packages/test-utils/package.json | 1 + .../src/test/testsForHistorian.spec.ts | 2 +- .../packages/test-utils/src/testContext.ts | 2 +- .../test-utils/src/testDocumentStorage.ts | 8 +- .../packages/test-utils/src/testHistorian.ts | 3 +- .../packages/tinylicious/package.json | 1 + .../packages/tinylicious/src/app.ts | 3 +- .../packages/tinylicious/src/resources.ts | 5 +- .../tinylicious/src/resourcesFactory.ts | 2 +- .../packages/tinylicious/src/routes/index.ts | 4 +- .../tinylicious/src/routes/ordering/index.ts | 3 +- .../src/routes/storage/git/blobs.ts | 2 +- .../packages/tinylicious/src/runner.ts | 3 +- server/routerlicious/pnpm-lock.yaml | 4207 ++++++++++++++++- 95 files changed, 4853 insertions(+), 168 deletions(-) create mode 100644 server/routerlicious/packages/common-utils/.eslintrc.cjs create mode 100644 server/routerlicious/packages/common-utils/.gitignore create mode 100644 server/routerlicious/packages/common-utils/.npmignore create mode 100644 server/routerlicious/packages/common-utils/CHANGELOG.md create mode 100644 server/routerlicious/packages/common-utils/LICENSE create mode 100644 server/routerlicious/packages/common-utils/README.md create mode 100644 server/routerlicious/packages/common-utils/package.json create mode 100644 server/routerlicious/packages/common-utils/src/assert.ts rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/base64Encoding.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/buffer.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/deferred.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/delay.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/hashFile.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/heap.ts (100%) rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/index.ts (71%) create mode 100644 server/routerlicious/packages/common-utils/src/packageVersion.ts rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/safeParser.ts (100%) create mode 100644 server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts create mode 100644 server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json create mode 100644 server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts create mode 100644 server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json create mode 100644 server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts create mode 100644 server/routerlicious/packages/common-utils/src/test/types/tsconfig.json rename server/routerlicious/packages/{services-core/src/utils => common-utils/src}/typedEventEmitter.ts (100%) create mode 100644 server/routerlicious/packages/common-utils/src/unreachable.ts create mode 100644 server/routerlicious/packages/common-utils/tsconfig.esnext.json create mode 100644 server/routerlicious/packages/common-utils/tsconfig.json diff --git a/server/routerlicious/packages/common-utils/.eslintrc.cjs b/server/routerlicious/packages/common-utils/.eslintrc.cjs new file mode 100644 index 000000000000..ee788a651853 --- /dev/null +++ b/server/routerlicious/packages/common-utils/.eslintrc.cjs @@ -0,0 +1,25 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + extends: [ + require.resolve("@fluidframework/eslint-config-fluid/minimal-deprecated"), + "prettier", + ], + parserOptions: { + project: ["./tsconfig.json", "./src/test/tsconfig.json"], + }, + rules: { + "import/no-nodejs-modules": "off", + "promise/catch-or-return": ["error", { allowFinally: true }], + + // TODO: enable strict null checks in tsconfig and remove these overrides + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/strict-boolean-expressions": "off", + + // TODO: remove usages of deprecated APIs and remove this override + "import/no-deprecated": "warn", + }, +}; diff --git a/server/routerlicious/packages/common-utils/.gitignore b/server/routerlicious/packages/common-utils/.gitignore new file mode 100644 index 000000000000..ee26a5e7bdbf --- /dev/null +++ b/server/routerlicious/packages/common-utils/.gitignore @@ -0,0 +1,52 @@ +# Compiled TypeScript and CSS +dist +lib + +# Babel +public/scripts/es5 + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt +.cache-loader + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- +node_modules + +# Typings +typings + +# Debug log from npm +npm-debug.log + +# Code coverage +nyc +.nyc_output/ + +# Chart dependencies +**/charts/*.tgz + +# Generated modules +intel_modules/ +temp_modules/ diff --git a/server/routerlicious/packages/common-utils/.npmignore b/server/routerlicious/packages/common-utils/.npmignore new file mode 100644 index 000000000000..f518002fc4dd --- /dev/null +++ b/server/routerlicious/packages/common-utils/.npmignore @@ -0,0 +1,7 @@ +nyc +*.log +**/*.tsbuildinfo +src/test +dist/test +lib/test +**/_api-extractor-temp/** diff --git a/server/routerlicious/packages/common-utils/CHANGELOG.md b/server/routerlicious/packages/common-utils/CHANGELOG.md new file mode 100644 index 000000000000..ca70647d2524 --- /dev/null +++ b/server/routerlicious/packages/common-utils/CHANGELOG.md @@ -0,0 +1,5 @@ +# @fluidframework/server-common-utils + +## 6.0.0 + +Initial version diff --git a/server/routerlicious/packages/common-utils/LICENSE b/server/routerlicious/packages/common-utils/LICENSE new file mode 100644 index 000000000000..60af0a6a40e9 --- /dev/null +++ b/server/routerlicious/packages/common-utils/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation and contributors. All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/server/routerlicious/packages/common-utils/README.md b/server/routerlicious/packages/common-utils/README.md new file mode 100644 index 000000000000..731c47a1d222 --- /dev/null +++ b/server/routerlicious/packages/common-utils/README.md @@ -0,0 +1,3 @@ +# @fluidframework/server-common-utils + +Non-Fluid-specific utilities that can be reused across server code. diff --git a/server/routerlicious/packages/common-utils/package.json b/server/routerlicious/packages/common-utils/package.json new file mode 100644 index 000000000000..14e4001b1642 --- /dev/null +++ b/server/routerlicious/packages/common-utils/package.json @@ -0,0 +1,115 @@ +{ + "name": "@fluidframework/server-common-utils", + "version": "6.0.0", + "description": "Common utilities for Fluid server code", + "homepage": "https://fluidframework.com", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/FluidFramework.git", + "directory": "server/routerlicious/packages/common-utils" + }, + "license": "MIT", + "author": "Microsoft and contributors", + "sideEffects": false, + "main": "dist/index.js", + "module": "lib/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "npm run build:compile && concurrently npm:lint npm:build:docs", + "build:commonjs": "npm run tsc && npm run typetests:gen && npm run build:test", + "build:compile": "concurrently npm:build:commonjs npm:build:esnext", + "build:docs": "api-extractor run --local --typescript-compiler-folder ./node_modules/typescript && copyfiles -u 1 \"./_api-extractor-temp/doc-models/*\" ../../../_api-extractor-temp/", + "build:esnext": "tsc --project ./tsconfig.esnext.json", + "build:genver": "gen-version", + "build:test": "concurrently npm:build:test:mocha npm:build:test:jest npm:build:test:types", + "build:test:jest": "tsc --project ./src/test/jest/tsconfig.json", + "build:test:mocha": "tsc --project ./src/test/mocha/tsconfig.json", + "build:test:types": "tsc --project ./src/test/types/tsconfig.json", + "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc", + "eslint": "eslint --format stylish src", + "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout", + "format": "npm run prettier:fix", + "lint": "npm run prettier && npm run eslint", + "lint:fix": "npm run prettier:fix && npm run eslint:fix", + "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", + "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", + "test": "npm run test:mocha && npm run test:jest", + "test:coverage": "c8 npm run test:report", + "test:jest": "jest --ci", + "test:jest:report": "npm run test:jest -- --coverage", + "test:mocha": "mocha --unhandled-rejections=strict --recursive \"dist/test/mocha/**/*.spec.*js\"", + "test:mocha:multireport": "cross-env FLUID_TEST_MULTIREPORT=1 npm run test:mocha", + "test:mocha:report": "npm run test:mocha -- -- --reporter xunit --reporter-option output=nyc/mocha-junit-report.xml", + "test:report": "npm run test:mocha:report && npm run test:jest:report", + "tsc": "tsc", + "typetests:gen": "flub generate typetests --dir . -v", + "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" + }, + "dependencies": { + "@types/events": "^3.0.0", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "events": "^3.1.0", + "lodash": "^4.17.21", + "sha.js": "^2.4.11" + }, + "devDependencies": { + "@fluid-tools/build-cli": "^0.49.0", + "@fluidframework/build-common": "^2.0.3", + "@fluidframework/build-tools": "^0.49.0", + "@fluidframework/eslint-config-fluid": "^5.5.1", + "@microsoft/api-extractor": "^7.45.1", + "@types/base64-js": "^1.3.0", + "@types/benchmark": "^2.1.0", + "@types/jest": "29.5.3", + "@types/jest-environment-puppeteer": "2.2.0", + "@types/mocha": "^10.0.10", + "@types/node": "^18.19.39", + "@types/sinon": "^17.0.3", + "benchmark": "^2.1.4", + "c8": "^8.0.1", + "concurrently": "^8.2.1", + "copyfiles": "^2.4.1", + "cross-env": "^7.0.3", + "eslint": "~8.55.0", + "eslint-config-prettier": "~9.0.0", + "jest": "^29.6.2", + "jest-junit": "^10.0.0", + "jest-puppeteer": "^10.1.3", + "mocha": "^10.2.0", + "mocha-multi-reporters": "^1.5.1", + "moment": "^2.21.0", + "prettier": "~3.0.3", + "puppeteer": "^23.6.0", + "rewire": "^5.0.0", + "rimraf": "^4.4.1", + "sinon": "^18.0.1", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", + "typescript": "~5.4.5" + }, + "fluidBuild": { + "tasks": { + "eslint": [ + "tsc", + "build:test:mocha", + "build:test:jest", + "build:test:types" + ], + "build:test:jest": [ + "tsc" + ], + "build:test:mocha": [ + "tsc" + ], + "build:test:types": [ + "tsc" + ] + } + }, + "typeValidation": { + "disabled": true, + "broken": {}, + "entrypoint": "public" + } +} diff --git a/server/routerlicious/packages/common-utils/src/assert.ts b/server/routerlicious/packages/common-utils/src/assert.ts new file mode 100644 index 000000000000..1f4501be53ee --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/assert.ts @@ -0,0 +1,25 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * A browser friendly assert library. + * Use this instead of the 'assert' package, which has a big impact on bundle sizes. + * @param condition - The condition that should be true, if the condition is false an error will be thrown. + * Only use this API when `false` indicates a logic error in the problem and thus a bug that should be fixed. + * @param message - The message to include in the error when the condition does not hold. + * A number should not be specified manually: use a string. + * Before a release, policy-check should be run, which will convert any asserts still using strings to + * use numbered error codes instead. + * + * @deprecated Moved to the `@fluidframework/core-utils` package. + * @internal + */ +export function assert(condition: boolean, message: string | number): asserts condition { + if (!condition) { + throw new Error( + typeof message === "number" ? `0x${message.toString(16).padStart(3, "0")}` : message, + ); + } +} diff --git a/server/routerlicious/packages/services-core/src/utils/base64Encoding.ts b/server/routerlicious/packages/common-utils/src/base64Encoding.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/base64Encoding.ts rename to server/routerlicious/packages/common-utils/src/base64Encoding.ts diff --git a/server/routerlicious/packages/services-core/src/utils/buffer.ts b/server/routerlicious/packages/common-utils/src/buffer.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/buffer.ts rename to server/routerlicious/packages/common-utils/src/buffer.ts diff --git a/server/routerlicious/packages/services-core/src/utils/deferred.ts b/server/routerlicious/packages/common-utils/src/deferred.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/deferred.ts rename to server/routerlicious/packages/common-utils/src/deferred.ts diff --git a/server/routerlicious/packages/services-core/src/utils/delay.ts b/server/routerlicious/packages/common-utils/src/delay.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/delay.ts rename to server/routerlicious/packages/common-utils/src/delay.ts diff --git a/server/routerlicious/packages/services-core/src/utils/hashFile.ts b/server/routerlicious/packages/common-utils/src/hashFile.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/hashFile.ts rename to server/routerlicious/packages/common-utils/src/hashFile.ts diff --git a/server/routerlicious/packages/services-core/src/utils/heap.ts b/server/routerlicious/packages/common-utils/src/heap.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/heap.ts rename to server/routerlicious/packages/common-utils/src/heap.ts diff --git a/server/routerlicious/packages/services-core/src/utils/index.ts b/server/routerlicious/packages/common-utils/src/index.ts similarity index 71% rename from server/routerlicious/packages/services-core/src/utils/index.ts rename to server/routerlicious/packages/common-utils/src/index.ts index 0d41d191481d..a17f85f15b5c 100644 --- a/server/routerlicious/packages/services-core/src/utils/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -4,5 +4,6 @@ export { delay } from "./delay"; export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; -export { IsoBuffer, bufferToString, Uint8ArrayToString } from "./buffer"; +export { IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; export { gitHashFile } from "./hashFile"; +export { unreachableCase } from "./unreachable"; diff --git a/server/routerlicious/packages/common-utils/src/packageVersion.ts b/server/routerlicious/packages/common-utils/src/packageVersion.ts new file mode 100644 index 000000000000..6ecdaac5065d --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/packageVersion.ts @@ -0,0 +1,9 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + * + * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY + */ + +export const pkgName = "@fluidframework/server-common-utils"; +export const pkgVersion = "6.0.0"; diff --git a/server/routerlicious/packages/services-core/src/utils/safeParser.ts b/server/routerlicious/packages/common-utils/src/safeParser.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/safeParser.ts rename to server/routerlicious/packages/common-utils/src/safeParser.ts diff --git a/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts b/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts new file mode 100644 index 000000000000..3509290191d9 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts @@ -0,0 +1,215 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import fs from "fs"; +import http from "http"; +import { AddressInfo } from "net"; +import path from "path"; + +import rewire from "rewire"; + +import * as HashNode from "../../hashFile"; + +// Use rewire to access private functions +const HashBrowser = rewire("../../hashFileBrowser"); + +async function getFileContents(p: string): Promise { + return new Promise((resolve, reject) => { + fs.readFile(p, (error, data) => { + if (error) { + reject(error); + } + resolve(data); + }); + }); +} + +const dataDir = "../../../src/test/jest"; + +async function evaluateBrowserHash( + page, + file: Buffer, + algorithm: "SHA-1" | "SHA-256" = "SHA-1", + hashEncoding: "hex" | "base64" = "hex", +): Promise { + // convert the file to a string to pass into page.evaluate because + // Buffer/Uint8Array are not directly jsonable + const fileCharCodeString = Array.prototype.map + .call(file, (byte) => { + return String.fromCharCode(byte); + }) + .join(""); + + // puppeteer has issues with calling crypto through page.exposeFunction but not directly, + // so pull in the function as a string and eval it directly instead + // there are also issues around nested function calls when using page.exposeFunction, so + // do only the crypto.subtle part in page.evaluate and do the other half outside + const browserHashFn = HashBrowser.__get__("digestBuffer").toString(); + const hashCharCodeString = await (page.evaluate( + async (fn, f, alg) => { + // convert back into Uint8Array + const fileCharCodes = Array.prototype.map.call([...f], (char) => { + return char.charCodeAt(0) as number; + }) as number[]; + const fileUint8 = Uint8Array.from(fileCharCodes); + + // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func + const hashFn = new Function(`"use strict"; return ( ${fn} );`); + const pageHashArray = await (hashFn()(fileUint8, alg) as Promise); + + // Similarly, return the hash array as a string instead of a Uint8Array + return Array.prototype.map + .call(pageHashArray, (byte) => { + return String.fromCharCode(byte); + }) + .join(""); + }, + browserHashFn, + fileCharCodeString, + algorithm, + ) as Promise); + + // reconstruct the Uint8Array from the string + const charCodes = Array.prototype.map.call([...hashCharCodeString], (char) => { + return char.charCodeAt(0) as number; + }) as number[]; + const hashArray = Uint8Array.from(charCodes); + return HashBrowser.__get__("encodeDigest")(hashArray, hashEncoding) as string; +} + +/** + * Same as evaluateBrowserHash above except prepends the + * `blob ${size.toString()}${String.fromCharCode(0)}` prefix for git + * */ +async function evaluateBrowserGitHash(page, file: Buffer): Promise { + // Add the prefix for git hashing + const size = file.byteLength; + const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; + const prefixBuffer = Buffer.from(filePrefix, "utf-8"); + const hashBuffer = Buffer.concat([prefixBuffer, file], prefixBuffer.length + file.length); + return evaluateBrowserHash(page, hashBuffer); +} + +describe("Common-Utils", () => { + let xmlFile: Buffer; + let svgFile: Buffer; + let pdfFile: Buffer; + let gifFile: Buffer; + + let server: http.Server; + + beforeAll(async () => { + // crypto is only available in secure contexts (https pages) or localhost, + // so start a basic server to make this available + server = http.createServer((req, res) => { + res.statusCode = 200; + res.setHeader("Content-Type", "text/plain"); + res.end("basic test server"); + }); + + await new Promise((resolve) => { + server.listen(0, "localhost"); + server.on("listening", () => { + resolve(); + }); + server.on("error", (err) => { + throw err; + }); + }); + + // Since we're listening on an http port, address() will return an AddressInfo and not just a string + const port: number = (server.address() as AddressInfo).port; + + // Navigate to the local test server so crypto is available + await page.goto(`http://localhost:${port}`, { waitUntil: "load", timeout: 0 }); + + xmlFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/book.xml`)); + svgFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/bindy.svg`)); + pdfFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/aka.pdf`)); + gifFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/grid.gif`)); + }); + + afterAll(async () => { + await new Promise((resolve) => { + server.close(resolve); + // Puppeteer may have lingering connections which prevents the server from closing otherwise. + server.closeAllConnections(); + }); + }); + + // Expected hashes are from git hash-object file... + // Make sure the hash is of the file and not of an LFS stub + describe("gitHashFile", () => { + test("XML should Hash", async () => { + const expectedHash = "64056b04956fb446b4014cb8d159d2e2494ed0fc"; + const hashNode = await HashNode.gitHashFile(xmlFile); + const hashBrowser = await evaluateBrowserGitHash(page, xmlFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("SVG should Hash", async () => { + const expectedHash = "c741e46ae4a5f1ca19debf0ac609aabc5fe94add"; + const hashNode = await HashNode.gitHashFile(svgFile); + const hashBrowser = await evaluateBrowserGitHash(page, svgFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("AKA PDF should Hash", async () => { + const expectedHash = "f3423703f542852aa7f3d1a13e73f0de0d8c9c0f"; + const hashNode = await HashNode.gitHashFile(pdfFile); + const hashBrowser = await evaluateBrowserGitHash(page, pdfFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("Grid GIF should Hash", async () => { + const expectedHash = "a7d63376bbcb05d0a6fa749594048c8ce6be23fb"; + const hashNode = await HashNode.gitHashFile(gifFile); + const hashBrowser = await evaluateBrowserGitHash(page, gifFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("Hash is consistent", async () => { + const hash1Node = await HashNode.gitHashFile(svgFile); + const hash2Node = await HashNode.gitHashFile(svgFile); + expect(hash1Node).toEqual(hash2Node); + + const hash1Browser = await evaluateBrowserGitHash(page, svgFile); + const hash2Browser = await evaluateBrowserGitHash(page, svgFile); + expect(hash1Browser).toEqual(hash2Browser); + }); + }); + + // describe("hashFile", () => { + // test("SHA256 hashes match", async () => { + // const expectedHash = "9b8abd0b90324ffce0b6a9630e5c4301972c364ed9aeb7e7329e424a4ae8a630"; + // const hashNode = await HashNode.hashFile(svgFile, "SHA-256"); + // const hashBrowser = await evaluateBrowserHash(page, svgFile, "SHA-256"); + // expect(hashNode).toEqual(expectedHash); + // expect(hashBrowser).toEqual(expectedHash); + // }); + + // test("base64 encoded hashes match", async () => { + // const expectedHash1 = "4/nXhjtBQhhvXTNNSNq/cJgb4sQ="; + // const hashNode1 = await HashNode.hashFile(xmlFile, "SHA-1", "base64"); + // const hashBrowser1 = await evaluateBrowserHash(page, xmlFile, "SHA-1", "base64"); + // expect(hashNode1).toEqual(expectedHash1); + // expect(hashBrowser1).toEqual(expectedHash1); + + // const expectedHash256 = "QPQh34aj1TNmyo34aPDA0vMIU7r5QC/6KNgIzlLYiFY="; + // const hashNode256 = await HashNode.hashFile(pdfFile, "SHA-256", "base64"); + // const hashBrowser256 = await evaluateBrowserHash(page, pdfFile, "SHA-256", "base64"); + // expect(hashNode256).toEqual(expectedHash256); + // expect(hashBrowser256).toEqual(expectedHash256); + // }); + // }); +}); diff --git a/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json new file mode 100644 index 000000000000..53e4ebcede51 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "../../../dist/test/jest", + "types": ["jest", "jest-environment-puppeteer", "node", "puppeteer"], + }, + "include": ["./**/*"], + "references": [ + { + "path": "../../..", + }, + ], +} diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts b/server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts new file mode 100644 index 000000000000..2b632d406524 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts @@ -0,0 +1,22 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { strict } from "assert"; + +import { assert } from "../../assert"; + +describe("Assert", () => { + it("Validate Shortcode Format", async () => { + // short codes should be hex, and at least 3 chars + for (const shortCode of ["0x000", "0x03a", "0x200", "0x4321"]) { + try { + assert(false, Number.parseInt(shortCode, 16)); + } catch (error: any) { + strict(error instanceof Error, "not an error"); + strict.strictEqual(error.message, shortCode, "incorrect short code format"); + } + } + }); +}); diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json new file mode 100644 index 000000000000..db956b71efd0 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "rootDir": "./", + "outDir": "../../../dist/test/mocha", + "types": ["node", "mocha"], + }, + "include": ["./**/*"], + "references": [ + { + "path": "../../..", + }, + ], +} diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts b/server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts new file mode 100644 index 000000000000..41673cdcf481 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts @@ -0,0 +1,53 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { strict as assert } from "assert"; + +import { TypedEventEmitter } from "../.."; +import { IErrorEvent } from "../../typedEventEmitter"; + +describe("TypedEventEmitter", () => { + it("Validate Function proxies", () => { + const tee = new TypedEventEmitter(); + let once = 0; + + tee.once("error", () => once++); + assert.equal(tee.listenerCount("error"), 1); + + let on = 0; + tee.on("error", () => on++); + assert.equal(tee.listenerCount("error"), 2); + + for (let i = 0; i < 5; i++) { + tee.emit("error", "message"); + } + + assert.equal(once, 1); + assert.equal(on, 5); + }); + + it("Validate new and remove Listener", () => { + const tee = new TypedEventEmitter(); + let newListenerCalls = 0; + let removeListenerCalls = 0; + const errListener = (): void => {}; + tee.on("removeListener", (event, listener) => { + assert.equal(event, "error"); + assert.equal(listener, errListener); + removeListenerCalls++; + }); + tee.on("newListener", (event, listener) => { + assert.equal(event, "error"); + assert.equal(listener, errListener); + newListenerCalls++; + }); + + tee.on("error", errListener); + tee.removeListener("error", errListener); + + assert.equal(newListenerCalls, 1); + assert.equal(removeListenerCalls, 1); + }); +}); diff --git a/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json new file mode 100644 index 000000000000..9ea9798bcd75 --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "rootDir": "./", + "outDir": "../../../dist/test/types", + }, + "include": ["./**/*"], + "references": [ + { + "path": "../../..", + }, + ], +} diff --git a/server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts b/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts similarity index 100% rename from server/routerlicious/packages/services-core/src/utils/typedEventEmitter.ts rename to server/routerlicious/packages/common-utils/src/typedEventEmitter.ts diff --git a/server/routerlicious/packages/common-utils/src/unreachable.ts b/server/routerlicious/packages/common-utils/src/unreachable.ts new file mode 100644 index 000000000000..de98d370e4ed --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/unreachable.ts @@ -0,0 +1,26 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * This function can be used to assert at compile time that a given value has type never. + * One common usage is in the default case of a switch block, + * to ensure that all cases are explicitly handled. + * + * Example: + * ```typescript + * const bool: true | false = ...; + * switch(bool) { + * case true: {...} + * case false: {...} + * default: unreachableCase(bool); + * } + * ``` + * + * @deprecated Moved to the `@fluidframework/core-utils` package. + * @internal + */ +export function unreachableCase(_: never, message = "Unreachable Case"): never { + throw new Error(message); +} diff --git a/server/routerlicious/packages/common-utils/tsconfig.esnext.json b/server/routerlicious/packages/common-utils/tsconfig.esnext.json new file mode 100644 index 000000000000..1ea62d46b20b --- /dev/null +++ b/server/routerlicious/packages/common-utils/tsconfig.esnext.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "module": "esnext", + }, +} diff --git a/server/routerlicious/packages/common-utils/tsconfig.json b/server/routerlicious/packages/common-utils/tsconfig.json new file mode 100644 index 000000000000..9e92087afa65 --- /dev/null +++ b/server/routerlicious/packages/common-utils/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "outDir": "./dist", + "baseUrl": ".", + }, + "include": ["src/**/*"], + "exclude": ["src/test/**/*"], +} diff --git a/server/routerlicious/packages/lambdas-driver/package.json b/server/routerlicious/packages/lambdas-driver/package.json index eba975439c30..c719c6e6aefc 100644 --- a/server/routerlicious/packages/lambdas-driver/package.json +++ b/server/routerlicious/packages/lambdas-driver/package.json @@ -52,6 +52,7 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts index fbc7da07e4ae..dc8c346eedb0 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts @@ -4,7 +4,7 @@ */ import assert from "assert"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { IConsumer, IQueuedMessage } from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts index ff8bde85e403..a5fde8ecf071 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts @@ -5,7 +5,7 @@ import { inspect } from "util"; import { serializeError } from "serialize-error"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { promiseTimeout } from "@fluidframework/server-services-client"; import { IConsumer, diff --git a/server/routerlicious/packages/lambdas/package.json b/server/routerlicious/packages/lambdas/package.json index 54bd7df3b948..70e92389fbd6 100644 --- a/server/routerlicious/packages/lambdas/package.json +++ b/server/routerlicious/packages/lambdas/package.json @@ -55,6 +55,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas-driver": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", diff --git a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts index 4b1b15556d25..c1c5ae298f3b 100644 --- a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts +++ b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. */ -import { Heap, IComparer, IHeapNode, IClientSequenceNumber } from "@fluidframework/server-services-core"; +import { Heap, IComparer, IHeapNode } from "@fluidframework/server-common-utils"; +import { IClientSequenceNumber } from "@fluidframework/server-services-core"; const SequenceNumberComparer: IComparer = { compare: (a, b) => a.referenceSequenceNumber - b.referenceSequenceNumber, diff --git a/server/routerlicious/packages/lambdas/src/deli/lambda.ts b/server/routerlicious/packages/lambdas/src/deli/lambda.ts index 018bf25f65b3..090b7e87dc6a 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambda.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambda.ts @@ -19,6 +19,7 @@ import { ISummaryContent, IDocumentMessage, } from "@fluidframework/protocol-definitions"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { canSummarize, defaultHash, @@ -55,7 +56,6 @@ import { ISequencedSignalClient, IClientManager, ICheckpointService, - TypedEventEmitter, } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts index 4916e3209d12..f3c89617c6e6 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts @@ -5,6 +5,7 @@ import { EventEmitter } from "events"; import { inspect } from "util"; +import { toUtf8 } from "@fluidframework/server-common-utils"; import { ICheckpointService, IClientManager, @@ -23,7 +24,6 @@ import { LambdaCloseType, MongoManager, requestWithRetry, - toUtf8, } from "@fluidframework/server-services-core"; import { defaultHash, IGitManager } from "@fluidframework/server-services-client"; import { diff --git a/server/routerlicious/packages/lambdas/src/nexus/index.ts b/server/routerlicious/packages/lambdas/src/nexus/index.ts index b6a4e7ed2ded..4234d2d947bb 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/index.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/index.ts @@ -11,6 +11,7 @@ import { ISignalMessage, NackErrorType, } from "@fluidframework/protocol-definitions"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { isNetworkError, NetworkError } from "@fluidframework/server-services-client"; import { v4 as uuid } from "uuid"; import * as core from "@fluidframework/server-services-core"; @@ -111,7 +112,7 @@ export function configureWebSocketServices( verifyMaxMessageSize?: boolean, socketTracker?: core.IWebSocketTracker, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: core.TypedEventEmitter, + collaborationSessionEventEmitter?: TypedEventEmitter, clusterDrainingChecker?: core.IClusterDrainingChecker, collaborationSessionTracker?: core.ICollaborationSessionTracker, ): void { diff --git a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts index 1771f5f41c31..0dd2f0f03d2b 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts @@ -4,6 +4,7 @@ */ import type { IClient, IConnected } from "@fluidframework/protocol-definitions"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import type { IClientManager, IClusterDrainingChecker, @@ -16,7 +17,6 @@ import type { IThrottleAndUsageStorageManager, IThrottler, IWebSocketTracker, - TypedEventEmitter, } from "@fluidframework/server-services-core"; import { IEvent } from "../events"; import type { IRuntimeSignalEnvelope } from "../utils"; diff --git a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts index 43df77bd3c23..d2554371f6a0 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. */ +import { delay, } from "@fluidframework/server-common-utils"; import { ICollection, IContext, @@ -13,7 +14,6 @@ import { IDeltaService, IDocumentRepository, ICheckpointService, - delay, } from "@fluidframework/server-services-core"; import { getLumberBaseProperties, Lumberjack } from "@fluidframework/server-services-telemetry"; import { ICheckpointManager } from "./interfaces"; diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts index 425e9e2d8e5e..3080b8a12f7e 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts @@ -7,6 +7,7 @@ import { IDocumentAttributes, ISequencedDocumentMessage, } from "@fluidframework/protocol-definitions"; +import { bufferToString, toUtf8, } from "@fluidframework/server-common-utils"; import { convertWholeFlatSummaryToSnapshotTreeAndBlobs, IGitManager, @@ -17,8 +18,6 @@ import { IDeliState, requestWithRetry, shouldRetryNetworkError, - bufferToString, - toUtf8, } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts index a0f7cf053a52..26fd47974252 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts @@ -14,6 +14,7 @@ import { SummaryObject, SummaryType, } from "@fluidframework/protocol-definitions"; +import { fromBase64ToUtf8 } from "@fluidframework/server-common-utils"; import { buildTreePath, IGitManager, @@ -35,7 +36,6 @@ import { ISequencedOperationMessage, requestWithRetry, shouldRetryNetworkError, - fromBase64ToUtf8 } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/local-server/package.json b/server/routerlicious/packages/local-server/package.json index 6fe9a0b950d2..6eb04fdde253 100644 --- a/server/routerlicious/packages/local-server/package.json +++ b/server/routerlicious/packages/local-server/package.json @@ -58,6 +58,7 @@ }, "dependencies": { "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-memory-orderer": "workspace:~", "@fluidframework/server-services-client": "workspace:~", diff --git a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts index ee3d04e37f07..3fac035d46cc 100644 --- a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts +++ b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts @@ -4,7 +4,7 @@ */ import { strict as assert } from "assert"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { ConnectionMode, IClient, diff --git a/server/routerlicious/packages/memory-orderer/package.json b/server/routerlicious/packages/memory-orderer/package.json index c6f7d2b06eb5..7fb1ee3afb8c 100644 --- a/server/routerlicious/packages/memory-orderer/package.json +++ b/server/routerlicious/packages/memory-orderer/package.json @@ -58,6 +58,7 @@ "dependencies": { "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", diff --git a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts index 48ba1d67317c..855513c4aec4 100644 --- a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts +++ b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts @@ -4,6 +4,7 @@ */ import { IDocumentAttributes } from "@fluidframework/protocol-definitions"; +import { fromBase64ToUtf8 } from "@fluidframework/server-common-utils"; import { IGitManager } from "@fluidframework/server-services-client"; import { CheckpointService, @@ -16,7 +17,6 @@ import { IDocumentRepository, IDocumentStorage, ISequencedOperationMessage, - fromBase64ToUtf8 } from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts index 9b5e0b36a39d..37208fe50071 100644 --- a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts +++ b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts @@ -6,8 +6,8 @@ import assert from "assert"; import { EventEmitter } from "events"; import { IClient, IDocumentMessage } from "@fluidframework/protocol-definitions"; +import { Deferred } from "@fluidframework/server-common-utils"; import { - Deferred, INode, IOrderer, IOrdererConnection, diff --git a/server/routerlicious/packages/memory-orderer/src/socket.ts b/server/routerlicious/packages/memory-orderer/src/socket.ts index 50e1ba068648..74777f6051c0 100644 --- a/server/routerlicious/packages/memory-orderer/src/socket.ts +++ b/server/routerlicious/packages/memory-orderer/src/socket.ts @@ -5,7 +5,7 @@ import { EventEmitter } from "events"; import ws from "ws"; -import { IsoBuffer } from "@fluidframework/server-services-core"; +import { IsoBuffer } from "@fluidframework/server-common-utils"; import { debug } from "./debug"; export class Socket extends EventEmitter { diff --git a/server/routerlicious/packages/routerlicious-base/package.json b/server/routerlicious/packages/routerlicious-base/package.json index d9fdce15a281..a6086be4f254 100644 --- a/server/routerlicious/packages/routerlicious-base/package.json +++ b/server/routerlicious/packages/routerlicious-base/package.json @@ -53,6 +53,7 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-kafka-orderer": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-lambdas-driver": "workspace:~", diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts index ca4373bd1664..2136df059216 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts @@ -4,6 +4,7 @@ */ import { isIPv4, isIPv6 } from "net"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { IDeltaService, IDocumentStorage, @@ -17,7 +18,6 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { json, urlencoded } from "body-parser"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts index 630b9573986b..c646f2a16ee6 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts @@ -5,6 +5,7 @@ import * as git from "@fluidframework/gitresources"; import { IClient, IClientJoin, ScopeType } from "@fluidframework/protocol-definitions"; +import { TypedEventEmitter, fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, @@ -51,7 +52,7 @@ export function create( tenantThrottlers: Map, jwtTokenCache?: core.ICache, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: core.TypedEventEmitter, + collaborationSessionEventEmitter?: TypedEventEmitter, fluidAccessTokenGenerator?: core.IFluidAccessTokenGenerator, ): Router { const router: Router = Router(); @@ -151,7 +152,7 @@ export function create( const blobData = request.body as IBlobData; // TODO: why is this contacting external blob storage? const externalHistorianUrl = config.get("worker:blobStorageUrl") as string; - const requestToken = core.fromUtf8ToBase64(tenantId); + const requestToken = fromUtf8ToBase64(tenantId); const uri = `/repos/${tenantId}/git/blobs?token=${requestToken}`; const requestBody: git.ICreateBlobParams = { content: blobData.content, diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts index 809133715685..60c0f20a90fd 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. */ +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICache, IDeltaService, @@ -16,7 +17,6 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import cors from "cors"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts index b50f655f819f..90bcf736dfdd 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. */ +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IDeltaService, @@ -17,7 +18,6 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts index a4b7570ff59e..46a932022013 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts @@ -4,8 +4,8 @@ */ import cluster from "cluster"; +import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; import { - Deferred, ICache, IClusterDrainingChecker, IDeltaService, @@ -21,7 +21,6 @@ import { IRevokedTokenChecker, IFluidAccessTokenGenerator, IReadinessCheck, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts index ef587bf6bb5a..adace502d99a 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts @@ -4,12 +4,12 @@ */ import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions"; +import { toUtf8 } from "@fluidframework/server-common-utils"; import { ICollection, IDeltaService, ISequencedOperationMessage, ITenantManager, - toUtf8 } from "@fluidframework/server-services-core"; /** diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts index e446b31ecbeb..8dfcd26d2d1a 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts @@ -4,8 +4,8 @@ */ import cluster from "cluster"; +import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; import { - Deferred, ICache, IClientManager, IClusterDrainingChecker, @@ -22,7 +22,6 @@ import { IRevokedTokenChecker, ICollaborationSessionTracker, IReadinessCheck, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts index 3d52220b1c3e..3cd84bcb8b84 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts @@ -5,6 +5,7 @@ import * as os from "os"; import cluster from "cluster"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { KafkaOrdererFactory } from "@fluidframework/server-kafka-orderer"; import { @@ -74,7 +75,7 @@ export class NexusResources implements core.IResources { public socketTracker?: core.IWebSocketTracker, public tokenRevocationManager?: core.ITokenRevocationManager, public revokedTokenChecker?: core.IRevokedTokenChecker, - public collaborationSessionEvents?: core.TypedEventEmitter, + public collaborationSessionEvents?: TypedEventEmitter, public serviceMessageResourceManager?: core.IServiceMessageResourceManager, public clusterDrainingChecker?: core.IClusterDrainingChecker, public collaborationSessionTracker?: core.ICollaborationSessionTracker, @@ -495,7 +496,7 @@ export class NexusResourcesFactory implements core.IResourcesFactory(); + const collaborationSessionEvents = new TypedEventEmitter(); // This wanst to create stuff const port = utils.normalizePort(process.env.PORT || "3000"); diff --git a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts index fc64ef3fd188..89c4fb7ad038 100644 --- a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts @@ -4,7 +4,7 @@ */ import cluster from "cluster"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { IRunner, ISecretManager, diff --git a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts index bf37a9e06d77..dfbd2c468a9a 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts @@ -4,13 +4,13 @@ */ import { ScopeType } from "@fluidframework/protocol-definitions"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IAlfredTenant, NetworkError } from "@fluidframework/server-services-client"; import { IDocument, MongoDatabaseManager, MongoManager, - TypedEventEmitter } from "@fluidframework/server-services-core"; import { StartupCheck } from "@fluidframework/server-services-shared"; import { Lumberjack, TestEngine1 } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts index a8e5d0a7603e..c63954ceee4e 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts @@ -4,7 +4,6 @@ */ import { strict as assert } from "assert"; -import { Deferred } from "@fluidframework/server-services-core"; import { IClientJoin, IConnect, @@ -20,6 +19,7 @@ import { IDocumentMessage, type ISentSignalMessage, } from "@fluidframework/protocol-definitions"; +import { Deferred } from "@fluidframework/server-common-utils"; import { KafkaOrdererFactory } from "@fluidframework/server-kafka-orderer"; import { LocalWebSocket, LocalWebSocketServer } from "@fluidframework/server-local-server"; import { configureWebSocketServices } from "@fluidframework/server-lambdas"; diff --git a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts index 872182b012ee..175de535412d 100644 --- a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts +++ b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. */ +import { delay } from "@fluidframework/server-common-utils"; import { ISession, isNetworkError, NetworkError } from "@fluidframework/server-services-client"; import { IDocument, runWithRetry, IDocumentRepository, IClusterDrainingChecker, - delay } from "@fluidframework/server-services-core"; import { getLumberBaseProperties, Lumberjack } from "@fluidframework/server-services-telemetry"; import { StageTrace } from "./trace"; diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index 0a924f90e444..9219d146657a 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -62,6 +62,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "assert": "^2.0.0", "axios": "^1.7.7", "crc-32": "1.2.0", "debug": "^4.3.4", @@ -76,6 +77,7 @@ "@fluidframework/build-common": "^2.0.3", "@fluidframework/build-tools": "0.52.0-315632", "@fluidframework/eslint-config-fluid": "^5.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client-previous": "npm:@fluidframework/server-services-client@5.0.0", "@microsoft/api-extractor": "^7.45.1", "@types/debug": "^4.1.5", diff --git a/server/routerlicious/packages/services-client/src/gitManager.ts b/server/routerlicious/packages/services-client/src/gitManager.ts index c638b88e2496..e3a8dbc0fd28 100644 --- a/server/routerlicious/packages/services-client/src/gitManager.ts +++ b/server/routerlicious/packages/services-client/src/gitManager.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { assert } from "@fluidframework/common-utils"; +import assert from "assert"; import * as resources from "@fluidframework/gitresources"; import { buildGitTreeHierarchy } from "@fluidframework/protocol-base"; import * as api from "@fluidframework/protocol-definitions"; diff --git a/server/routerlicious/packages/services-client/src/historian.ts b/server/routerlicious/packages/services-client/src/historian.ts index 5eae1ec8795e..bf405626ab25 100644 --- a/server/routerlicious/packages/services-client/src/historian.ts +++ b/server/routerlicious/packages/services-client/src/historian.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64 } from "@fluidframework/common-utils"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import * as git from "@fluidframework/gitresources"; import { RestWrapper, BasicRestWrapper } from "./restWrapper"; import { IHistorian } from "./storage"; diff --git a/server/routerlicious/packages/services-client/src/storageUtils.ts b/server/routerlicious/packages/services-client/src/storageUtils.ts index e9a9e5fe5b8f..532fdfea6691 100644 --- a/server/routerlicious/packages/services-client/src/storageUtils.ts +++ b/server/routerlicious/packages/services-client/src/storageUtils.ts @@ -4,13 +4,13 @@ */ import { - assert, stringToBuffer, Uint8ArrayToString, unreachableCase, -} from "@fluidframework/common-utils"; +} from "@fluidframework/server-common-utils"; import { getGitType } from "@fluidframework/protocol-base"; import { ISnapshotTree, SummaryObject, SummaryType } from "@fluidframework/protocol-definitions"; +import assert from "assert"; import { ISummaryTree, IWholeSummaryTree, @@ -124,7 +124,7 @@ export function convertSummaryTreeToWholeSummaryTree( if (value) { assert( id === undefined, - 0x0ad /* "Snapshot entry has both a tree value and a referenced id!" */, + "Snapshot entry has both a tree value and a referenced id!" /* 0x0ad */, ); entry = { value, diff --git a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts index f49852f56fd2..cd71bd093f0c 100644 --- a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts +++ b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts @@ -4,12 +4,11 @@ */ import { - assert, gitHashFile, IsoBuffer, Uint8ArrayToString, unreachableCase, -} from "@fluidframework/common-utils"; +} from "@fluidframework/server-common-utils"; import { ICreateTreeEntry } from "@fluidframework/gitresources"; import { getGitMode, getGitType } from "@fluidframework/protocol-base"; import { @@ -19,6 +18,7 @@ import { SummaryObject, SummaryType, } from "@fluidframework/protocol-definitions"; +import assert from "assert"; import { ISummaryUploadManager, IGitManager } from "./storage"; import { IWholeSummaryPayloadType } from "./storageContracts"; @@ -116,7 +116,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { if (!this.blobsShaCache.has(hash)) { this.blobsShaCache.set(hash, ""); const blob = await this.manager.createBlob(parsedContent, encoding); - assert(hash === blob.sha, 0x0b6 /* "Blob.sha and hash do not match!!" */); + assert(hash === blob.sha, "Blob.sha and hash do not match!!" /* 0x0b6 */); } return hash; } @@ -144,7 +144,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { /** Previous snapshot, subtree relative to this path part */ previousSnapshot: ISnapshotTreeEx, ): string { - assert(path.length > 0, 0x0b3 /* "Expected at least 1 path part" */); + assert(path.length > 0, "Expected at least 1 path part" /* 0x0b3 */); const key = path[0]; if (path.length === 1) { switch (handleType) { @@ -152,7 +152,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { const tryId = previousSnapshot.blobs[key]; assert( !!tryId, - 0x0b4 /* "Parent summary does not have blob handle for specified path." */, + "Parent summary does not have blob handle for specified path." /* 0x0b4 */, ); return tryId; } @@ -160,7 +160,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { const tryId = previousSnapshot.trees[key]?.id; assert( !!tryId, - 0x0b5 /* "Parent summary does not have tree handle for specified path." */, + "Parent summary does not have tree handle for specified path." /* 0x0b5 */, ); return tryId; } diff --git a/server/routerlicious/packages/services-client/src/test/historian.spec.ts b/server/routerlicious/packages/services-client/src/test/historian.spec.ts index 5a149a7a6e9f..413ed877cf0e 100644 --- a/server/routerlicious/packages/services-client/src/test/historian.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/historian.spec.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64 } from "@fluidframework/common-utils"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import * as git from "@fluidframework/gitresources"; import assert from "assert"; import Axios, { AxiosRequestConfig } from "axios"; diff --git a/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts b/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts index 0b8365df616c..336c89f6346e 100644 --- a/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts @@ -4,7 +4,7 @@ */ import assert from "assert"; -import { fromUtf8ToBase64, stringToBuffer } from "@fluidframework/common-utils"; +import { fromUtf8ToBase64, stringToBuffer } from "@fluidframework/server-common-utils"; import { buildTreePath, convertSummaryTreeToWholeSummaryTree, diff --git a/server/routerlicious/packages/services-core/package.json b/server/routerlicious/packages/services-core/package.json index 08f178d065fe..6b68eb99d433 100644 --- a/server/routerlicious/packages/services-core/package.json +++ b/server/routerlicious/packages/services-core/package.json @@ -34,14 +34,14 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", "@types/nconf": "^0.10.2", "@types/node": "^18.19.39", "debug": "^4.3.4", "events": "^3.1.0", - "nconf": "^0.12.0", - "sha.js": "^2.4.11" + "nconf": "^0.12.0" }, "devDependencies": { "@fluid-tools/build-cli": "0.52.0-315632", diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index ea39714ad54d..c33f9d0f1fed 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -33,7 +33,6 @@ export { IRetryable, isRetryEnabled, } from "./database"; -export * from "./utils"; // eslint-disable-line no-restricted-syntax export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/lambdas.ts b/server/routerlicious/packages/services-core/src/lambdas.ts index 53af94012245..ba54cc0039fe 100644 --- a/server/routerlicious/packages/services-core/src/lambdas.ts +++ b/server/routerlicious/packages/services-core/src/lambdas.ts @@ -5,7 +5,8 @@ import { EventEmitter } from "events"; import { Provider } from "nconf"; -import { safelyParseJSON } from "./utils"; +import { safelyParseJSON } from "@fluidframework/server-common-utils"; + import { BoxcarType, IBoxcarMessage, IMessage } from "./messages"; import { IQueuedMessage } from "./queue"; diff --git a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts index a6f760abbca2..277e19f8525e 100644 --- a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts +++ b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. */ -import { Deferred } from "./utils"; +import { Deferred } from "@fluidframework/server-common-utils"; + import { IPendingBoxcar } from "./queue"; // 1MB batch size / (16KB max message size + overhead) diff --git a/server/routerlicious/packages/services-core/src/queue.ts b/server/routerlicious/packages/services-core/src/queue.ts index 66b9639d6a73..8564c6812a3d 100644 --- a/server/routerlicious/packages/services-core/src/queue.ts +++ b/server/routerlicious/packages/services-core/src/queue.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. */ -import { Deferred } from "./utils"; +import { Deferred } from "@fluidframework/server-common-utils"; + import { ITicketedMessage } from "./messages"; /** diff --git a/server/routerlicious/packages/services-core/src/runWithRetry.ts b/server/routerlicious/packages/services-core/src/runWithRetry.ts index 33f6b7d506a2..23db6f57bdcc 100644 --- a/server/routerlicious/packages/services-core/src/runWithRetry.ts +++ b/server/routerlicious/packages/services-core/src/runWithRetry.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. */ +import { delay } from "@fluidframework/server-common-utils"; import { LogLevel, Lumber, @@ -11,8 +12,6 @@ import { } from "@fluidframework/server-services-telemetry"; import { isNetworkError, NetworkError } from "@fluidframework/server-services-client"; -import { delay } from "./utils"; - /** * Executes a given API while providing support to retry on failures, ignore failures, and taking action on error. * @param api - function to run and retry in case of error diff --git a/server/routerlicious/packages/services-ordering-rdkafka/package.json b/server/routerlicious/packages/services-ordering-rdkafka/package.json index 190d917dbc93..54849c4bf902 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/package.json +++ b/server/routerlicious/packages/services-ordering-rdkafka/package.json @@ -28,6 +28,7 @@ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, "dependencies": { + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts index c2828b359c3c..17c62a6ebdc8 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts @@ -5,7 +5,7 @@ import type * as kafkaTypes from "node-rdkafka"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { IConsumer, IPartition, diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts index bcce819e8256..780288bda6e2 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts @@ -4,6 +4,7 @@ */ import type * as kafkaTypes from "node-rdkafka"; +import { Deferred } from "@fluidframework/server-common-utils"; import { BoxcarType, IBoxcarMessage, @@ -14,7 +15,6 @@ import { } from "@fluidframework/server-services-core"; import { NetworkError } from "@fluidframework/server-services-client"; import { Lumberjack, getLumberBaseProperties } from "@fluidframework/server-services-telemetry"; -import { Deferred } from "@fluidframework/server-services-core"; import { IKafkaBaseOptions, IKafkaEndpoints, RdkafkaBase } from "./rdkafkaBase"; diff --git a/server/routerlicious/packages/services-shared/package.json b/server/routerlicious/packages/services-shared/package.json index 78c6995c56b4..496ad360ebe7 100644 --- a/server/routerlicious/packages/services-shared/package.json +++ b/server/routerlicious/packages/services-shared/package.json @@ -55,6 +55,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/services-shared/src/runnerUtils.ts b/server/routerlicious/packages/services-shared/src/runnerUtils.ts index 428973a273e8..1ab015dcf6fb 100644 --- a/server/routerlicious/packages/services-shared/src/runnerUtils.ts +++ b/server/routerlicious/packages/services-shared/src/runnerUtils.ts @@ -4,7 +4,8 @@ */ import { serializeError } from "serialize-error"; -import { Deferred, IWebServer } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; +import { IWebServer } from "@fluidframework/server-services-core"; import { Lumber, Lumberjack } from "@fluidframework/server-services-telemetry"; import { promiseTimeout } from "@fluidframework/server-services-client"; import type { IRedisClientConnectionManager } from "@fluidframework/server-services-utils"; diff --git a/server/routerlicious/packages/services-shared/src/storage.ts b/server/routerlicious/packages/services-shared/src/storage.ts index a08ce2b0772d..63d773996366 100644 --- a/server/routerlicious/packages/services-shared/src/storage.ts +++ b/server/routerlicious/packages/services-shared/src/storage.ts @@ -11,6 +11,7 @@ import { ISummaryTree, SummaryType, } from "@fluidframework/protocol-definitions"; +import { toUtf8 } from "@fluidframework/server-common-utils"; import { IGitCache, SummaryTreeUploadManager, @@ -30,7 +31,6 @@ import { IStorageNameAllocator, ITenantManager, SequencedOperationType, - toUtf8 } from "@fluidframework/server-services-core"; import * as winston from "winston"; import { diff --git a/server/routerlicious/packages/services-shared/src/test/http.spec.ts b/server/routerlicious/packages/services-shared/src/test/http.spec.ts index 0bed5336c3ab..d371d66207d4 100644 --- a/server/routerlicious/packages/services-shared/src/test/http.spec.ts +++ b/server/routerlicious/packages/services-shared/src/test/http.spec.ts @@ -4,8 +4,8 @@ */ import assert from "assert"; +import { Deferred } from "@fluidframework/server-common-utils"; import { NetworkError } from "@fluidframework/server-services-client"; -import { Deferred } from "@fluidframework/server-services-core"; import type { Response, Request } from "express"; import { containsPathTraversal, diff --git a/server/routerlicious/packages/services/package.json b/server/routerlicious/packages/services/package.json index a4a948f5a5f1..2861670958ac 100644 --- a/server/routerlicious/packages/services/package.json +++ b/server/routerlicious/packages/services/package.json @@ -52,6 +52,7 @@ }, "dependencies": { "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-ordering-kafkanode": "workspace:~", diff --git a/server/routerlicious/packages/services/src/deltaManager.ts b/server/routerlicious/packages/services/src/deltaManager.ts index facbc591c836..d6e79a4a674b 100644 --- a/server/routerlicious/packages/services/src/deltaManager.ts +++ b/server/routerlicious/packages/services/src/deltaManager.ts @@ -4,8 +4,9 @@ */ import { ISequencedDocumentMessage, ScopeType } from "@fluidframework/protocol-definitions"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { BasicRestWrapper } from "@fluidframework/server-services-client"; -import { IDeltaService, type ITenantManager, fromUtf8ToBase64 } from "@fluidframework/server-services-core"; +import { IDeltaService, type ITenantManager } from "@fluidframework/server-services-core"; import { getGlobalTelemetryContext } from "@fluidframework/server-services-telemetry"; import { getRefreshTokenIfNeededCallback, TenantManager } from "./tenant"; import { logHttpMetrics } from "@fluidframework/server-services-utils"; diff --git a/server/routerlicious/packages/services/src/tenant.ts b/server/routerlicious/packages/services/src/tenant.ts index fabb02688d8f..aeb3a8370502 100644 --- a/server/routerlicious/packages/services/src/tenant.ts +++ b/server/routerlicious/packages/services/src/tenant.ts @@ -4,6 +4,7 @@ */ import { ScopeType, type IUser } from "@fluidframework/protocol-definitions"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { GitManager, Historian, @@ -160,7 +161,7 @@ export class TenantManager implements core.ITenantManager, core.ITenantConfigMan ); const defaultQueryString = { - token: core.fromUtf8ToBase64(`${tenantId}`), + token: fromUtf8ToBase64(`${tenantId}`), }; const getDefaultHeaders = () => { const credentials: ICredentials = { diff --git a/server/routerlicious/packages/test-utils/package.json b/server/routerlicious/packages/test-utils/package.json index 7d609ed55ab2..a0c9cbf5fbdf 100644 --- a/server/routerlicious/packages/test-utils/package.json +++ b/server/routerlicious/packages/test-utils/package.json @@ -54,6 +54,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts index 3ffc5b3e9371..a858c86813ce 100644 --- a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts +++ b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts @@ -7,7 +7,7 @@ import { strict as assert } from "assert"; import { TestHistorian } from "../testHistorian"; import { GitManager } from "@fluidframework/server-services-client"; import { ICreateBlobParams, ICreateCommitParams } from "@fluidframework/gitresources"; -import { fromUtf8ToBase64 } from "@fluidframework/server-services-core"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; describe("Test for Historian", () => { let gitManager: GitManager; diff --git a/server/routerlicious/packages/test-utils/src/testContext.ts b/server/routerlicious/packages/test-utils/src/testContext.ts index b9426533ab96..b43984e135ed 100644 --- a/server/routerlicious/packages/test-utils/src/testContext.ts +++ b/server/routerlicious/packages/test-utils/src/testContext.ts @@ -5,7 +5,7 @@ import { strict as assert } from "assert"; import { EventEmitter } from "events"; -import { Deferred } from "@fluidframework/server-services-core"; +import { Deferred } from "@fluidframework/server-common-utils"; import { IContext, IQueuedMessage, diff --git a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts index 36fada62e7e1..9be00ae1ef31 100644 --- a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts +++ b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts @@ -9,6 +9,11 @@ import { ICreateCommitParams, ICreateTreeEntry, } from "@fluidframework/gitresources"; +import { + gitHashFile, + IsoBuffer, + Uint8ArrayToString, +} from "@fluidframework/server-common-utils"; import { IGitCache, IGitManager, @@ -24,9 +29,6 @@ import { IDocumentStorage, IScribe, ITenantManager, - gitHashFile, - IsoBuffer, - Uint8ArrayToString, } from "@fluidframework/server-services-core"; import { ISummaryTree, diff --git a/server/routerlicious/packages/test-utils/src/testHistorian.ts b/server/routerlicious/packages/test-utils/src/testHistorian.ts index 158e6415aeb7..49b517a96a58 100644 --- a/server/routerlicious/packages/test-utils/src/testHistorian.ts +++ b/server/routerlicious/packages/test-utils/src/testHistorian.ts @@ -23,6 +23,7 @@ import { ITree, ITreeEntry, } from "@fluidframework/gitresources"; +import { gitHashFile, IsoBuffer } from "@fluidframework/server-common-utils"; import { IHistorian, IWholeFlatSummary, @@ -30,7 +31,7 @@ import { IWriteSummaryResponse, NetworkError, } from "@fluidframework/server-services-client"; -import { ICollection, IDb, gitHashFile, IsoBuffer } from "@fluidframework/server-services-core"; +import { ICollection, IDb } from "@fluidframework/server-services-core"; import { v4 as uuid } from "uuid"; import { TestDb } from "./testCollection"; diff --git a/server/routerlicious/packages/tinylicious/package.json b/server/routerlicious/packages/tinylicious/package.json index 71da6cc2d640..724d4cf0a020 100644 --- a/server/routerlicious/packages/tinylicious/package.json +++ b/server/routerlicious/packages/tinylicious/package.json @@ -39,6 +39,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-local-server": "workspace:~", "@fluidframework/server-memory-orderer": "workspace:~", diff --git a/server/routerlicious/packages/tinylicious/src/app.ts b/server/routerlicious/packages/tinylicious/src/app.ts index b16c404dea38..14cda273ce12 100644 --- a/server/routerlicious/packages/tinylicious/src/app.ts +++ b/server/routerlicious/packages/tinylicious/src/app.ts @@ -4,7 +4,8 @@ */ import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; +import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; import { RestLessServer } from "@fluidframework/server-services-shared"; import { json, urlencoded } from "body-parser"; import compression from "compression"; diff --git a/server/routerlicious/packages/tinylicious/src/resources.ts b/server/routerlicious/packages/tinylicious/src/resources.ts index d64d0c6b8ad6..5f16f4dd90f7 100644 --- a/server/routerlicious/packages/tinylicious/src/resources.ts +++ b/server/routerlicious/packages/tinylicious/src/resources.ts @@ -3,9 +3,8 @@ * Licensed under the MIT License. */ -// import * as services from "@fluidframework/server-services"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import * as core from "@fluidframework/server-services-core"; -// eslint-disable-next-line import/no-deprecated import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { Provider } from "nconf"; @@ -18,7 +17,7 @@ export class TinyliciousResources implements core.IResources { public mongoManager: core.MongoManager, public port: any, public webServerFactory: core.IWebServerFactory, - public collaborationSessionEventEmitter?: core.TypedEventEmitter, + public collaborationSessionEventEmitter?: TypedEventEmitter, ) {} public async dispose(): Promise { diff --git a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts index 355a15555de1..5ea4c0536c8c 100644 --- a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts +++ b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. */ +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { LocalOrdererManager } from "@fluidframework/server-local-server"; import { DocumentStorage } from "@fluidframework/server-services-shared"; @@ -12,7 +13,6 @@ import { MongoManager, IResourcesFactory, MongoDocumentRepository, - TypedEventEmitter, } from "@fluidframework/server-services-core"; import * as utils from "@fluidframework/server-services-utils"; import { Provider } from "nconf"; diff --git a/server/routerlicious/packages/tinylicious/src/routes/index.ts b/server/routerlicious/packages/tinylicious/src/routes/index.ts index 6c4a920313bd..f165fef1fb4d 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/index.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. */ -// eslint-disable-next-line import/no-deprecated +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; +import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as ordering from "./ordering"; diff --git a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts index cdeb263e7e14..1e86425b4575 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts @@ -3,13 +3,14 @@ * Licensed under the MIT License. */ +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, IRoom, IRuntimeSignalEnvelope, } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager, TypedEventEmitter } from "@fluidframework/server-services-core"; +import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as deltas from "./deltas"; diff --git a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts index 51dd6823618c..66841c05b504 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts @@ -5,7 +5,7 @@ import fs from "fs"; import { IBlob, ICreateBlobParams, ICreateBlobResponse } from "@fluidframework/gitresources"; -import { Uint8ArrayToString } from "@fluidframework/server-services-core"; +import { Uint8ArrayToString } from "@fluidframework/server-common-utils"; import { Router } from "express"; import * as git from "isomorphic-git"; import nconf from "nconf"; diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index 010d610ed1bd..05d1fca2224b 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. */ +import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; import { - Deferred, IDocumentStorage, IOrdererManager, ITenantManager, @@ -13,7 +13,6 @@ import { MongoManager, DefaultMetricClient, IRunner, - TypedEventEmitter, } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 2fbaf480cae1..635b4d568bc1 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -69,6 +69,127 @@ importers: specifier: ~5.1.6 version: 5.1.6 + packages/common-utils: + dependencies: + '@types/events': + specifier: ^3.0.0 + version: 3.0.3 + base64-js: + specifier: ^1.5.1 + version: 1.5.1 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + events: + specifier: ^3.1.0 + version: 3.3.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + sha.js: + specifier: ^2.4.11 + version: 2.4.11 + devDependencies: + '@fluid-tools/build-cli': + specifier: ^0.49.0 + version: 0.49.0(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.4.5) + '@fluidframework/build-common': + specifier: ^2.0.3 + version: 2.0.3 + '@fluidframework/build-tools': + specifier: ^0.49.0 + version: 0.49.0(@types/node@18.19.39) + '@fluidframework/eslint-config-fluid': + specifier: ^5.5.1 + version: 5.7.3(eslint@8.55.0)(typescript@5.4.5) + '@microsoft/api-extractor': + specifier: ^7.45.1 + version: 7.49.1(@types/node@18.19.39) + '@types/base64-js': + specifier: ^1.3.0 + version: 1.3.2 + '@types/benchmark': + specifier: ^2.1.0 + version: 2.1.5 + '@types/jest': + specifier: 29.5.3 + version: 29.5.3 + '@types/jest-environment-puppeteer': + specifier: 2.2.0 + version: 2.2.0(typescript@5.4.5) + '@types/mocha': + specifier: ^10.0.10 + version: 10.0.10 + '@types/node': + specifier: ^18.19.39 + version: 18.19.39 + '@types/sinon': + specifier: ^17.0.3 + version: 17.0.3 + benchmark: + specifier: ^2.1.4 + version: 2.1.4 + c8: + specifier: ^8.0.1 + version: 8.0.1 + concurrently: + specifier: ^8.2.1 + version: 8.2.1 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + eslint: + specifier: ~8.55.0 + version: 8.55.0 + eslint-config-prettier: + specifier: ~9.0.0 + version: 9.0.0(eslint@8.55.0) + jest: + specifier: ^29.6.2 + version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-junit: + specifier: ^10.0.0 + version: 10.0.0 + jest-puppeteer: + specifier: ^10.1.3 + version: 10.1.4(puppeteer@23.11.1(typescript@5.4.5))(typescript@5.4.5) + mocha: + specifier: ^10.2.0 + version: 10.2.0 + mocha-multi-reporters: + specifier: ^1.5.1 + version: 1.5.1(mocha@10.2.0) + moment: + specifier: ^2.21.0 + version: 2.29.4 + prettier: + specifier: ~3.0.3 + version: 3.0.3 + puppeteer: + specifier: ^23.6.0 + version: 23.11.1(typescript@5.4.5) + rewire: + specifier: ^5.0.0 + version: 5.0.0 + rimraf: + specifier: ^4.4.1 + version: 4.4.1 + sinon: + specifier: ^18.0.1 + version: 18.0.1 + ts-jest: + specifier: ^29.1.1 + version: 29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@18.19.39)(typescript@5.4.5) + typescript: + specifier: ~5.4.5 + version: 5.4.5 + packages/gitresources: devDependencies: '@fluid-tools/build-cli': @@ -162,6 +283,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-lambdas-driver': specifier: workspace:~ version: link:../lambdas-driver @@ -298,6 +422,9 @@ importers: packages/lambdas-driver: dependencies: + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -383,6 +510,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -498,6 +628,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -771,6 +904,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-kafka-orderer': specifier: workspace:~ version: link:../kafka-orderer @@ -970,6 +1106,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1115,6 +1254,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + assert: + specifier: ^2.0.0 + version: 2.1.0 axios: specifier: ^1.7.7 version: 1.7.7(debug@4.3.4) @@ -1152,6 +1294,9 @@ importers: '@fluidframework/eslint-config-fluid': specifier: ^5.2.0 version: 5.2.0(eslint@8.55.0)(typescript@5.1.6) + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client-previous': specifier: npm:@fluidframework/server-services-client@5.0.0 version: '@fluidframework/server-services-client@5.0.0' @@ -1209,6 +1354,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1230,9 +1378,6 @@ importers: nconf: specifier: ^0.12.0 version: 0.12.0 - sha.js: - specifier: ^2.4.11 - version: 2.4.11 devDependencies: '@fluid-tools/build-cli': specifier: 0.52.0-315632 @@ -1358,6 +1503,9 @@ importers: packages/services-ordering-rdkafka: dependencies: + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1501,6 +1649,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1843,6 +1994,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1949,6 +2103,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -2142,6 +2299,10 @@ packages: resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} engines: {node: '>=14.13.1'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} @@ -2279,18 +2440,176 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.23.6': resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2357,6 +2676,10 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -2389,6 +2712,9 @@ packages: '@fluid-internal/eslint-plugin-fluid@0.1.1': resolution: {integrity: sha512-7CNeAjn81BPvq/BKc1nQo/6HUZXg4KUAglFuCX6HFCnpGPrDLdm7cdkrGyA1tExB1EGnCAPFzVNbSqSYcwJnag==} + '@fluid-internal/eslint-plugin-fluid@0.1.5': + resolution: {integrity: sha512-p0nVeMiEfLL2deQJQaRUxid08jgV5wEkh9h9WXNosR1BRq9nFCjD8nZpC1K+YhjwQZEvgGDE+s+28VR2lAg61Q==} + '@fluid-internal/mocha-test-setup@2.0.5': resolution: {integrity: sha512-oSPv7nJKbyhMBWzSIRsu1h1WXXOaT2/cwD5qSeKsUZTIUVXsd5FdIUOdV/vc7hAEoJI/JLXZeauVrJHe/qlv6g==} @@ -2398,11 +2724,21 @@ packages: '@fluid-private/changelog-generator-wrapper@file:../../packages/tools/changelog-generator-wrapper': resolution: {directory: ../../packages/tools/changelog-generator-wrapper, type: directory} + '@fluid-tools/build-cli@0.49.0': + resolution: {integrity: sha512-V9h8OCJDvSz8m4zmeCO6y8DJi972BSFp3YO6S/R1v7J/CpaG5A6v1Di0Kp5+JYf+sQ2ILoBaEvdjCp3ii+eYTw==} + engines: {node: '>=18.17.1'} + hasBin: true + '@fluid-tools/build-cli@0.52.0-315632': resolution: {integrity: sha512-mCnlGVEhssycNqW6N0xFjcbGjHsNG2aj+9gPtBdd4L0tWLMJyLag7SRfORdvcAuSUhvhiYbEdSGhwvRzkBl/Rw==} engines: {node: '>=18.17.1'} hasBin: true + '@fluid-tools/version-tools@0.49.0': + resolution: {integrity: sha512-3BI1rmCBx7ZZGhuchtwCNgL6XSRMRtDtflvi2ks7dKE04T8WoKxUwi3+YNVlXf5XlcSLtwprbRjnraIA2rjgAQ==} + engines: {node: '>=18.17.1'} + hasBin: true + '@fluid-tools/version-tools@0.52.0-315632': resolution: {integrity: sha512-GLglzryXTGCiBtxBnXOJcloepJhDFtujzkSqXgOMIHTMU8w+8P5qiLNDOa0N1kQHlb6Wt47sCoHG6Cz+bBQ7+Q==} engines: {node: '>=18.17.1'} @@ -2412,11 +2748,19 @@ packages: resolution: {integrity: sha512-1LU/2uyCeMxf63z5rhFOFEBvFyBogZ7ZXwzXLxyBhSgq/fGiq8PLjBW7uX++r0LcVCdaWyopf7w060eJpANYdg==} hasBin: true + '@fluidframework/build-tools@0.49.0': + resolution: {integrity: sha512-hz5xf320HfbnpziCOw1I+BqbYktaJbtX5nuSsjSSvJJTzm/RPM+kvRgp02isG8kF1WKhMsMwueHwcNek+sHOxQ==} + engines: {node: '>=18.17.1'} + hasBin: true + '@fluidframework/build-tools@0.52.0-315632': resolution: {integrity: sha512-L0mwaMA12xppnng21dp64nCJ6As06XOWsbG+pSi3T1n8RCharRkgUVNH7fGW+OeIUnBDGgqCp/k+I/AKnQfaww==} engines: {node: '>=18.17.1'} hasBin: true + '@fluidframework/bundle-size-tools@0.49.0': + resolution: {integrity: sha512-SUrWc931wwOkwIERX282SmHUVjXz0mRhlYIoY68DkYVZ3XuUrKaVvHbJB6a3ek+TIX33zg90HKFNkp9K56m0SQ==} + '@fluidframework/bundle-size-tools@0.52.0-315632': resolution: {integrity: sha512-QHxAJDXqtngI3d1Qfxp+xNvPw2nIwEcT74yLYpNXTYOEyChffHtI6KZ/LpSjiogTeB0YnwR9egK4X2A/57esBQ==} @@ -2435,6 +2779,9 @@ packages: '@fluidframework/eslint-config-fluid@5.2.0': resolution: {integrity: sha512-FGAt7QIm//36j+ZiiIAj1+LZ6NYP2UJLwE5NT70ztgjl90jaCEWZUgoGUgPUWB9CpTmVZYo1+dGWOSsMLHidJA==} + '@fluidframework/eslint-config-fluid@5.7.3': + resolution: {integrity: sha512-/+6JDYTM4k4F7wHDMCIxXwmf9oWP9OmUyYJSPtWd0VQhdRomfdClicdajHIHQd9RWbo2SdZSXEsllKRT6s/9+Q==} + '@fluidframework/gitresources@5.0.0': resolution: {integrity: sha512-nfam1KT+EUqFCENHcxrU9VwUfbhUC83UcLuOsdLpn9I7VuClL+w8KMWosoYauZraO9gDhTo2kCErjgQji5GzGA==} @@ -2495,10 +2842,23 @@ packages: '@fluidframework/server-test-utils@5.0.0': resolution: {integrity: sha512-FOZ1Faw6x8VALUZh/nY6zKCfpgbPK/ylpKf/uQ2oOV9sxGNQfo5NXyHlQP1b78wfx2OYyHY5njtvYl7i9tz/zg==} + '@gitbeaker/core@35.8.1': + resolution: {integrity: sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==} + engines: {node: '>=14.2.0'} + '@gitbeaker/core@38.12.1': resolution: {integrity: sha512-8XMVcBIdVAAoxn7JtqmZ2Ee8f+AZLcCPmqEmPFOXY2jPS84y/DERISg/+sbhhb18iRy+ZsZhpWgQ/r3CkYNJOQ==} engines: {node: '>=18.0.0'} + '@gitbeaker/node@35.8.1': + resolution: {integrity: sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==} + engines: {node: '>=14.2.0'} + deprecated: Please use its successor @gitbeaker/rest + + '@gitbeaker/requester-utils@35.8.1': + resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} + engines: {node: '>=14.2.0'} + '@gitbeaker/requester-utils@38.12.1': resolution: {integrity: sha512-Rc/DgngS0YPN+AY1s9UnexKSy4Lh0bkQVAq9p7PRbRpXb33SlTeCg8eg/8+A/mrMcHgYmP0XhH8lkizyA5tBUQ==} engines: {node: '>=18.0.0'} @@ -2507,6 +2867,12 @@ packages: resolution: {integrity: sha512-9KMSDtJ/sIov+5pcH+CAfiJXSiuYgN0KLKQFg0HHWR2DwcjGYkcbmhoZcWsaOWOqq4kihN1l7wX91UoRxxKKTQ==} engines: {node: '>=18.0.0'} + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2632,14 +2998,92 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@24.9.0': + resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} + engines: {node: '>= 6'} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.3': resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -2648,6 +3092,10 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.3': resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} @@ -2657,6 +3105,12 @@ packages: '@jridgewell/trace-mapping@0.3.20': resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -2729,6 +3183,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + '@npmcli/fs@3.1.0': resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2785,6 +3243,10 @@ packages: '@octokit/auth-token@2.5.0': resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + '@octokit/auth-token@3.0.4': + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} + engines: {node: '>= 14'} + '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -2796,6 +3258,10 @@ packages: '@octokit/core@3.6.0': resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + '@octokit/core@4.2.4': + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} + engines: {node: '>= 14'} + '@octokit/core@5.2.0': resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} @@ -2811,6 +3277,10 @@ packages: '@octokit/endpoint@6.0.12': resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + '@octokit/endpoint@7.0.6': + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} + engines: {node: '>= 14'} + '@octokit/endpoint@9.0.5': resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} @@ -2818,6 +3288,10 @@ packages: '@octokit/graphql@4.8.0': resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + '@octokit/graphql@5.0.6': + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} + engines: {node: '>= 14'} + '@octokit/graphql@7.1.0': resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} @@ -2829,6 +3303,9 @@ packages: '@octokit/openapi-types@12.11.0': resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + '@octokit/openapi-types@18.1.1': + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + '@octokit/openapi-types@23.0.1': resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} @@ -2868,6 +3345,10 @@ packages: '@octokit/request-error@2.1.0': resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + '@octokit/request-error@3.0.3': + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + '@octokit/request-error@5.1.0': resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} @@ -2879,6 +3360,10 @@ packages: '@octokit/request@5.6.3': resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + '@octokit/request@6.2.8': + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} + engines: {node: '>= 14'} + '@octokit/request@8.4.0': resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} @@ -2900,6 +3385,9 @@ packages: '@octokit/types@6.41.0': resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + '@octokit/types@9.3.2': + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2930,6 +3418,11 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + engines: {node: '>=18'} + hasBin: true + '@rushstack/eslint-patch@1.4.0': resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==} @@ -2951,6 +3444,14 @@ packages: '@types/node': optional: true + '@rushstack/node-core-library@3.66.1': + resolution: {integrity: sha512-ker69cVKAoar7MMtDFZC4CzcDxjwqIhFzqEnYI5NRN/8M3om6saWCVx/A7vL2t/jFCJsnzQplRDqA7c78pytng==} + peerDependencies: + '@types/node': ^18.19.39 + peerDependenciesMeta: + '@types/node': + optional: true + '@rushstack/node-core-library@5.10.2': resolution: {integrity: sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==} peerDependencies: @@ -3001,6 +3502,15 @@ packages: '@rushstack/ts-command-line@4.23.3': resolution: {integrity: sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==} + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sigstore/protobuf-specs@0.1.0': resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3009,6 +3519,17 @@ packages: resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/is@0.14.0': + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + '@sindresorhus/is@5.4.1': resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} engines: {node: '>=14.16'} @@ -3016,6 +3537,9 @@ packages: '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@11.2.2': resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} @@ -3191,6 +3715,14 @@ packages: '@socket.io/sticky@1.0.4': resolution: {integrity: sha512-VuauT5CJLvzYtKIgouFSQ8rUaygseR+zRutnwh6ZA2QYcXx+8g52EoJ8V2SLxfo+Tfs3ELUDy08oEXxlWNrxaw==} + '@szmarczak/http-timer@1.1.2': + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -3208,9 +3740,21 @@ packages: '@ts-morph/common@0.23.0': resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} - '@tufjs/canonical-json@1.0.0': - resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tufjs/canonical-json@1.0.0': + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} '@tufjs/models@1.0.4': resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} @@ -3228,6 +3772,24 @@ packages: '@types/async@3.2.20': resolution: {integrity: sha512-6jSBQQugzyX1aWto0CbvOnmxrU9tMoXfA9gc4IrLEtvr3dTwSg5GLGoWiZnGLI6UG/kqpB3JOQKQrqnhUWGKQA==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/base64-js@1.3.2': + resolution: {integrity: sha512-Q2Xn2/vQHRGLRXhQ5+BSLwhHkR3JVflxVKywH0Q6fVoAiUE8fFYL2pE5/l2ZiOiBDfA8qUqRnSxln4G/NFz1Sg==} + + '@types/benchmark@2.1.5': + resolution: {integrity: sha512-cKio2eFB3v7qmKcvIHLUMw/dIx/8bhWPuzpzRT4unCPRTD8VdA9Zb0afxpcxOqR4PixRS7yT42FqGS8BYL8g1w==} + '@types/bluebird@3.5.38': resolution: {integrity: sha512-yR/Kxc0dd4FfwtEoLZMoqJbM/VE/W7hXn/MIjb+axcwag0iFmSPK7OBUZq1YWLynJUoWQkfUrI7T0HDqGApNSg==} @@ -3237,6 +3799,9 @@ packages: '@types/bytes@3.1.1': resolution: {integrity: sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/compression@0.0.33': resolution: {integrity: sha512-mCDw1g4Y7UEEkYYu/0qd07JuTD7DT2KGI9fGvaStsNc8T8+RKFUZJHAfGizvymm3OkLo9Hrpf+pRAc6804+mdA==} @@ -3303,6 +3868,9 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/http-cache-semantics@4.0.1': resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -3312,6 +3880,21 @@ packages: '@types/istanbul-lib-coverage@2.0.4': resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@1.1.2': + resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest-environment-puppeteer@2.2.0': + resolution: {integrity: sha512-4XWMEDqFIocwxMerq5/0fghlUhvHTb3BtK9LUAmEX194R2ui34mX09EEpJavLRAzcjvfMklWfp3lm4CJYlBF1g==} + + '@types/jest@29.5.3': + resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3324,6 +3907,9 @@ packages: '@types/jsrsasign@10.5.12': resolution: {integrity: sha512-sOA+eVnHU+FziThpMhuqs/tjFKe5gHVJKIS7g1BzhXP+e2FS8OvtzM0K3IzFxVksDOr98Gz5FJiZVxZ9uFoHhw==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/lodash@4.14.195': resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} @@ -3393,6 +3979,10 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/puppeteer@7.0.4': + resolution: {integrity: sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==} + deprecated: This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed. + '@types/qs@6.9.7': resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -3402,6 +3992,9 @@ packages: '@types/react@18.3.18': resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/rimraf@3.0.2': resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} @@ -3429,6 +4022,9 @@ packages: '@types/split@0.3.28': resolution: {integrity: sha512-t6JWsgzXTobVH6dgfYGedS8Y0ZRc20jtzHCWYx+Q/w9WfpwUkPY8FTa+5y8KPztQne3NmI4+/s0zbCMMkuk1tQ==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/string-hash@1.1.1': resolution: {integrity: sha512-ijt3zdHi2DmZxQpQTmozXszzDo78V4R3EdvX0jFMfnMH2ZzQSmCbaWOMPGXFUYSzSIdStv78HDjg32m5dxc+tA==} @@ -3462,6 +4058,18 @@ packages: '@types/ws@6.0.4': resolution: {integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@13.0.12': + resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@6.7.5': resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3479,6 +4087,16 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@6.7.5': resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3493,6 +4111,10 @@ packages: resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.7.5': resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3511,6 +4133,10 @@ packages: resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@6.7.5': resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3524,6 +4150,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/typescript-estree@6.7.5': resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3549,6 +4184,10 @@ packages: resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.7.5': resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3698,6 +4337,15 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} @@ -3720,6 +4368,10 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + agentkeepalive@4.3.0: resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} engines: {node: '>= 8.0.0'} @@ -3791,6 +4443,10 @@ packages: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3807,6 +4463,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3895,6 +4555,10 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -3942,15 +4606,71 @@ packages: axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + axios@1.8.1: + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + azure-devops-node-api@11.2.0: resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.0.1: + resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} + engines: {bare: '>=1.7.0'} + + bare-os@3.5.1: + resolution: {integrity: sha512-LvfVNDcWLw2AnIw5f2mWUgumW3I3N/WYGiWeimhQC1Ybt71n2FjlS9GJKeCnFeg1MKZHxzIFmpFnBXDI+sBeFg==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3972,6 +4692,9 @@ packages: before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + benchmark@2.1.4: + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -3996,6 +4719,9 @@ packages: bl@2.2.1: resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blessed@0.1.81: resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} engines: {node: '>= 0.8.0'} @@ -4041,6 +4767,13 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bson@4.7.2: resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} engines: {node: '>=6.9.0'} @@ -4109,6 +4842,10 @@ packages: resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -4117,6 +4854,14 @@ packages: resolution: {integrity: sha512-kn0t0oJnlFo1Nzl/AYQzS/oByMtmaqLasFUa7MUMsiTrIHy8TxSkx2KzWCybE3Nuz1F4sJRGnLAfUGsPe47viQ==} engines: {node: '>=14.16'} + cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -4131,6 +4876,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -4188,6 +4937,10 @@ packages: peerDependencies: '@changesets/cli': ^2.0.0 + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -4215,6 +4968,11 @@ packages: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} + chromium-bidi@0.11.0: + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} + peerDependencies: + devtools-protocol: '*' + ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} @@ -4222,6 +4980,9 @@ packages: circular_buffer_js@1.10.0: resolution: {integrity: sha512-HXSDm8gm3nPog7Sh7kln9yb9dVFYan4nVwF4qOqOkR8YpAN6yJupyccXl9OcuTJfPqie0uRJdjHs44H1oCgBOQ==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + classic-level@1.3.0: resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} engines: {node: '>=12'} @@ -4245,6 +5006,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4265,6 +5030,10 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -4280,10 +5049,21 @@ packages: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} @@ -4298,6 +5078,9 @@ packages: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4343,6 +5126,10 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@2.15.1: resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} @@ -4403,6 +5190,9 @@ packages: convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-to-spaces@2.0.1: resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4448,11 +5238,28 @@ packages: typescript: optional: true + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + crc-32@1.2.0: resolution: {integrity: sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==} engines: {node: '>=0.8'} hasBin: true + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + croner@4.1.97: resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} @@ -4464,6 +5271,10 @@ packages: cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4478,11 +5289,24 @@ packages: culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} + cwd@0.10.0: + resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} + engines: {node: '>=0.8'} + + danger@11.3.1: + resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} + engines: {node: '>=14.13.1'} + hasBin: true + danger@12.3.3: resolution: {integrity: sha512-nZKzpgXN21rr4dwa6bFhM7G2JEa79dZRJiT3RVRSyi4yk1/hgZ2f8HDGoa7tMladTmu8WjJFyE3LpBIihh+aDw==} engines: {node: '>=18'} hasBin: true + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-uri-to-buffer@6.0.1: resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} @@ -4538,6 +5362,10 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + decompress-response@3.3.0: resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} engines: {node: '>=4'} @@ -4566,6 +5394,14 @@ packages: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} engines: {node: '>=4'} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4573,6 +5409,16 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4589,6 +5435,10 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -4655,6 +5505,13 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devtools-protocol@0.0.1367902: + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff3@0.0.3: resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} @@ -4695,6 +5552,9 @@ packages: double-ended-queue@2.1.0-0: resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} + duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -4715,9 +5575,16 @@ packages: electron-to-chromium@1.5.84: resolution: {integrity: sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==} + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4852,6 +5719,9 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-config-biome@1.9.4: + resolution: {integrity: sha512-4HX+rfUk1R2rPwN3hcxPxq5sLDLGb/xtu48AggTtxCVoRoD18kjwOwHA1c7gYsbRrEQso+9mlRSS9+G7OfDqFg==} + eslint-config-prettier@9.0.0: resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true @@ -4868,6 +5738,40 @@ packages: eslint: '*' eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-module-utils@2.8.0: resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} @@ -4919,6 +5823,12 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react@7.33.2: resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} @@ -4956,15 +5866,33 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-utils@1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + + eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@8.55.0: resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true + espree@6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5022,14 +5950,30 @@ packages: resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} engines: {node: '>=0.8'} + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + expand-tilde@1.2.2: + resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} + engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} + expect-puppeteer@10.1.4: + resolution: {integrity: sha512-zNVzk/+TkPS/CuTlGSK7SjXuUpQiakXtUJhbTRrcPHop4jCWydPx9RlvHhQELzZYgXlLhIP+hvBzUNiN8WNAow==} + engines: {node: '>=16'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} @@ -5051,6 +5995,11 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + extrareqp2@1.0.0: resolution: {integrity: sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==} @@ -5060,6 +6009,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -5094,6 +6046,9 @@ packages: fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fclone@1.0.11: resolution: {integrity: sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==} @@ -5119,9 +6074,21 @@ packages: fengari@0.1.4: resolution: {integrity: sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==} + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5148,10 +6115,26 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + filter-obj@1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + finalhandler@1.3.1: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + find-file-up@0.1.3: + resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==} + engines: {node: '>=0.10.0'} + + find-pkg@0.1.2: + resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} + engines: {node: '>=0.10.0'} + + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} + hasBin: true + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5167,6 +6150,10 @@ packages: find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + flat-cache@2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5175,6 +6162,9 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatted@2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} @@ -5213,6 +6203,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + formidable@1.2.6: resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' @@ -5271,6 +6265,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -5283,6 +6280,10 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5315,6 +6316,14 @@ packages: resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} engines: {node: '>=0.10.0'} + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -5327,6 +6336,9 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.7.2: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} @@ -5400,6 +6412,22 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} + global-modules@0.2.3: + resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} + engines: {node: '>=0.10.0'} + + global-prefix@0.1.5: + resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} + engines: {node: '>=0.10.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} @@ -5419,6 +6447,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -5427,6 +6459,10 @@ packages: resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} engines: {node: '>=16'} + got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -5532,6 +6568,14 @@ packages: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + http2-wrapper@2.2.0: resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} engines: {node: '>=10.19.0'} @@ -5544,6 +6588,10 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} @@ -5577,6 +6625,10 @@ packages: resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -5643,6 +6695,14 @@ packages: react-devtools-core: optional: true + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + int64-buffer@0.1.10: resolution: {integrity: sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==} @@ -5714,6 +6774,9 @@ packages: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} + is-bun-module@1.3.0: + resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -5749,6 +6812,10 @@ packages: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5761,6 +6828,10 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -5778,6 +6849,10 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} @@ -5891,6 +6966,10 @@ packages: is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-windows@0.2.0: + resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} + engines: {node: '>=0.10.0'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -5932,10 +7011,22 @@ packages: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + istanbul-reports@3.1.6: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} @@ -5952,13 +7043,171 @@ packages: engines: {node: '>=10'} hasBin: true + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': ^18.19.39 + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-dev-server@10.1.4: + resolution: {integrity: sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==} + engines: {node: '>=16'} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-puppeteer@10.1.4: + resolution: {integrity: sha512-cx2jzf1qZb6/vdmLbRccF0k/zSsoWlrXi8bg10GzrODxiwsRomVDszTfoOCRsQ+C1sbJ+ubI1PlryIvvYjITrA==} + engines: {node: '>=16'} + + jest-get-type@24.9.0: + resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} + engines: {node: '>= 6'} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-junit@10.0.0: + resolution: {integrity: sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==} + engines: {node: '>=8.0.0'} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-puppeteer@10.1.4: + resolution: {integrity: sha512-I9bADDn9EzpaL9QgzEtyJhd29PBv45rZJFPROUC2KWZHUs+5OGjzBOZKBzmqECdGv2GV/JL+NMdjqRJde2A36Q==} + engines: {node: '>=16'} + peerDependencies: + puppeteer: '>=19' + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@24.9.0: + resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==} + engines: {node: '>= 6'} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-git@0.7.8: resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} @@ -5993,6 +7242,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -6058,6 +7310,10 @@ packages: resolution: {integrity: sha512-YpW2Y5Wlln8GqULzGE40B05oiiZKeIhzZLR2eymRg8cVoGan+jMQ/cRuVa1AxP3J72olx6/4RwRsEchDw0HPbw==} engines: {node: '>=10.0.0'} + jssm@5.98.2: + resolution: {integrity: sha512-O2xBFBzZjLIN+wA5IA85XIaEan7wjvM2qegwVrVQPClbH/IEhI1GLkLEEfk+TPeHeW8pGOlrd84MnmTcDyxSIQ==} + engines: {node: '>=10.0.0'} + jsx-ast-utils@3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} @@ -6082,6 +7338,9 @@ packages: resolution: {integrity: sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug==} engines: {node: '>=8.5.1'} + keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + keyv@4.5.2: resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} @@ -6104,6 +7363,10 @@ packages: resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} engines: {node: '>=18'} + latest-version@5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -6146,10 +7409,21 @@ packages: resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} engines: {node: '>=12'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + li@1.3.0: + resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -6256,6 +7530,10 @@ packages: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + long@1.1.2: resolution: {integrity: sha512-pjR3OP1X2VVQhCQlrq3s8UxugQsuoucwMOn9Yj/kN/61HMc+lDFJS5bvpNEHneZ9NVaSm8gNWxZvtGS7lqHb3Q==} engines: {node: '>=0.6'} @@ -6282,6 +7560,14 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6293,6 +7579,9 @@ packages: lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -6319,6 +7608,9 @@ packages: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -6490,6 +7782,11 @@ packages: engines: {node: '>=4'} hasBin: true + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6532,6 +7829,10 @@ packages: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -6589,6 +7890,9 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -6723,6 +8027,9 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nise@6.1.1: resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==} @@ -6742,6 +8049,10 @@ packages: node-cleanup@2.1.2: resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -6751,6 +8062,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true @@ -6760,6 +8075,9 @@ packages: engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-rdkafka@3.0.1: resolution: {integrity: sha512-USTFu7ylRj+fEiGz0hA92GWSqmX/hu/xSTqtgmInPPmh5zKhjauTciRjDEG3yK5m6yChwyHKQTIgmr56DfhiaQ==} engines: {node: '>=16'} @@ -6796,6 +8114,14 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -6938,10 +8264,18 @@ packages: optional@0.1.4: resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + os-homedir@1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} @@ -6956,6 +8290,14 @@ packages: override-require@1.1.1: resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} + p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -7004,6 +8346,10 @@ packages: resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} engines: {node: '>= 14'} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + pac-resolver@7.0.1: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} @@ -7012,6 +8358,10 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} + package-json@6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} @@ -7105,6 +8455,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -7175,10 +8529,17 @@ packages: pinpoint@1.1.0: resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -7215,10 +8576,18 @@ packages: engines: {node: '>=6'} hasBin: true + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -7234,6 +8603,14 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@24.9.0: + resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} + engines: {node: '>= 6'} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + prettyjson@1.2.5: resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} hasBin: true @@ -7295,6 +8672,10 @@ packages: resolution: {integrity: sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==} engines: {node: '>= 14'} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -7331,6 +8712,9 @@ packages: pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -7339,10 +8723,26 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} + puppeteer-core@23.11.1: + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} + engines: {node: '>=18'} + + puppeteer@23.11.1: + resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==} + engines: {node: '>=18'} + hasBin: true + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} + query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -7374,6 +8774,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-reconciler@0.29.2: resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} engines: {node: '>=0.10.0'} @@ -7470,6 +8873,14 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regexpp@2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} + engines: {node: '>=6.5.0'} + + registry-auth-token@4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -7478,6 +8889,10 @@ packages: resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} engines: {node: '>=14'} + registry-url@5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + registry-url@6.0.1: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} @@ -7538,6 +8953,10 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} + resolve-dir@0.1.1: + resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7568,10 +8987,20 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true + responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7591,6 +9020,14 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rewire@5.0.0: + resolution: {integrity: sha512-1zfitNyp9RH5UDyGGLe9/1N0bMlPQ0WrX0Tmg11kMHBpqwPJI4gfPpP7YngFyLbFmhXh19SToAG0sKKEFcOIJA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -7606,6 +9043,10 @@ packages: engines: {node: '>=14'} hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} @@ -7619,6 +9060,10 @@ packages: run-series@1.1.9: resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -7704,6 +9149,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -7823,6 +9273,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -7867,6 +9321,10 @@ packages: resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} engines: {node: '>= 14'} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + socks@2.8.3: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} @@ -7896,6 +9354,9 @@ packages: peerDependencies: webpack: ^5.72.1 + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -7917,6 +9378,10 @@ packages: resolution: {integrity: sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw==} engines: {node: '>=14'} + spawnd@10.1.4: + resolution: {integrity: sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==} + engines: {node: '>=16'} + spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -7932,6 +9397,10 @@ packages: spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} @@ -7965,6 +9434,13 @@ packages: stream-to-pull-stream@1.7.3: resolution: {integrity: sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg==} + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + strict-uri-encode@2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -7972,10 +9448,18 @@ packages: string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} + string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -8014,6 +9498,10 @@ packages: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -8030,6 +9518,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} @@ -8094,6 +9586,10 @@ packages: os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true + table@5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} @@ -8105,10 +9601,16 @@ packages: tar-fs@1.16.3: resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==} + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + tar-stream@1.6.2: resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} engines: {node: '>= 0.8.0'} + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -8146,6 +9648,9 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -8172,9 +9677,16 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -8220,6 +9732,30 @@ packages: resolution: {integrity: sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==} engines: {node: '>=14.13.1'} + ts-jest@29.2.6: + resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + ts-loader@9.5.1: resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} @@ -8233,6 +9769,20 @@ packages: ts-morph@22.0.0: resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': ^18.19.39 + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + ts-node@8.10.2: resolution: {integrity: sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==} engines: {node: '>=6.0.0'} @@ -8273,6 +9823,10 @@ packages: tx2@1.0.5: resolution: {integrity: sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==} + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -8332,6 +9886,9 @@ packages: typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typed-rest-client@1.8.9: resolution: {integrity: sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==} @@ -8470,6 +10027,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -8496,6 +10057,12 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} @@ -8529,10 +10096,25 @@ packages: resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} engines: {node: '>=4.0'} + wait-on@8.0.2: + resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} + engines: {node: '>=12.0.0'} + hasBin: true + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -8654,6 +10236,10 @@ packages: resolution: {integrity: sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==} engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -8682,6 +10268,14 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + write@1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -8706,6 +10300,18 @@ packages: utf-8-validate: optional: true + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xcase@2.0.1: resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} @@ -8717,6 +10323,9 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -8732,6 +10341,9 @@ packages: yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -8791,6 +10403,9 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zookeeper@5.6.0: resolution: {integrity: sha512-MNgvcBSdmMMeh77ubcE/lu42BvvFxYlFiJNftc/X9I+tCSJL+jofLize9hNBeJCkSA5NXSn+cz1JB0S/T526Jg==} engines: {node: '>=14.15.4'} @@ -8815,6 +10430,11 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@andrewbranch/untar.js@1.0.3': {} '@aws-crypto/ie11-detection@3.0.0': @@ -9262,21 +10882,206 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/highlight@7.23.4': + '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 + '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/runtime@7.23.6': - dependencies: - regenerator-runtime: 0.14.0 - - '@bcoe/v8-coverage@0.2.3': {} + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@changesets/apply-release-plan@7.0.5': + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/highlight@7.23.4': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.23.6': + dependencies: + regenerator-runtime: 0.14.0 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@changesets/apply-release-plan@7.0.5': dependencies: '@changesets/config': 3.0.3 '@changesets/get-version-range-type': 0.4.0 @@ -9424,6 +11229,10 @@ snapshots: '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -9471,6 +11280,16 @@ snapshots: - supports-color - typescript + '@fluid-internal/eslint-plugin-fluid@0.1.5(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.55.0)(typescript@5.4.5) + ts-morph: 22.0.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@fluid-internal/mocha-test-setup@2.0.5': dependencies: '@fluid-internal/test-driver-definitions': 2.0.5 @@ -9492,6 +11311,84 @@ snapshots: transitivePeerDependencies: - supports-color + '@fluid-tools/build-cli@0.49.0(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.4.5)': + dependencies: + '@andrewbranch/untar.js': 1.0.3 + '@fluid-tools/version-tools': 0.49.0(@types/node@18.19.39) + '@fluidframework/build-tools': 0.49.0(@types/node@18.19.39) + '@fluidframework/bundle-size-tools': 0.49.0 + '@microsoft/api-extractor': 7.49.1(@types/node@18.19.39) + '@oclif/core': 4.2.4 + '@oclif/plugin-autocomplete': 3.2.18 + '@oclif/plugin-commands': 4.1.17 + '@oclif/plugin-help': 6.2.22 + '@oclif/plugin-not-found': 3.2.37(@types/node@18.19.39) + '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/rest': 21.1.0 + '@rushstack/node-core-library': 3.66.1(@types/node@18.19.39) + async: 3.2.6 + azure-devops-node-api: 11.2.0 + chalk: 5.3.0 + change-case: 3.1.0 + cosmiconfig: 8.3.6(typescript@5.4.5) + danger: 11.3.1(encoding@0.1.13) + date-fns: 2.30.0 + debug: 4.4.0(supports-color@8.1.1) + execa: 5.1.1 + fflate: 0.8.2 + fs-extra: 11.3.0 + github-slugger: 2.0.0 + globby: 11.1.0 + gray-matter: 4.0.3 + human-id: 4.1.1 + inquirer: 8.2.6 + issue-parser: 7.0.1 + json5: 2.2.3 + jssm: 5.98.2 + jszip: 3.10.1 + latest-version: 5.1.0 + mdast: 3.0.0 + mdast-util-heading-range: 4.0.0 + mdast-util-to-string: 4.0.0 + minimatch: 7.4.6 + node-fetch: 3.3.2 + npm-check-updates: 16.14.20 + oclif: 4.17.17(@types/node@18.19.39) + prettier: 3.2.5 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + remark: 15.0.1 + remark-gfm: 4.0.0 + remark-github: 12.0.0 + remark-github-beta-blockquote-admonitions: 3.1.1 + remark-toc: 9.0.0 + replace-in-file: 7.2.0 + resolve.exports: 2.0.2 + semver: 7.6.3 + semver-utils: 1.1.4 + simple-git: 3.27.0 + sort-json: 2.0.1 + sort-package-json: 1.57.0 + strip-ansi: 6.0.1 + table: 6.9.0 + ts-morph: 22.0.0 + type-fest: 2.19.0 + unist-util-visit: 5.0.0 + xml2js: 0.5.0 + transitivePeerDependencies: + - '@swc/core' + - '@types/node' + - bluebird + - bufferutil + - encoding + - esbuild + - react-devtools-core + - supports-color + - typescript + - uglify-js + - utf-8-validate + - webpack-cli + '@fluid-tools/build-cli@0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)': dependencies: '@andrewbranch/untar.js': 1.0.3 @@ -9723,6 +11620,23 @@ snapshots: - utf-8-validate - webpack-cli + '@fluid-tools/version-tools@0.49.0(@types/node@18.19.39)': + dependencies: + '@oclif/core': 4.2.4 + '@oclif/plugin-autocomplete': 3.2.18 + '@oclif/plugin-commands': 4.1.17 + '@oclif/plugin-help': 6.2.22 + '@oclif/plugin-not-found': 3.2.37(@types/node@18.19.39) + chalk: 2.4.2 + semver: 7.6.3 + table: 6.9.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - react-devtools-core + - supports-color + - utf-8-validate + '@fluid-tools/version-tools@0.52.0-315632(@types/node@18.19.39)': dependencies: '@oclif/core': 4.2.4 @@ -9757,6 +11671,41 @@ snapshots: '@fluidframework/build-common@2.0.3': {} + '@fluidframework/build-tools@0.49.0(@types/node@18.19.39)': + dependencies: + '@fluid-tools/version-tools': 0.49.0(@types/node@18.19.39) + '@manypkg/get-packages': 2.2.2 + async: 3.2.6 + chalk: 2.4.2 + cosmiconfig: 8.3.6(typescript@5.4.5) + date-fns: 2.30.0 + debug: 4.4.0(supports-color@8.1.1) + detect-indent: 6.1.0 + find-up: 7.0.0 + fs-extra: 11.3.0 + glob: 7.2.3 + globby: 11.1.0 + ignore: 5.3.2 + json5: 2.2.3 + lodash: 4.17.21 + lodash.isequal: 4.5.0 + multimatch: 5.0.0 + picomatch: 2.3.1 + rimraf: 4.4.1 + semver: 7.6.3 + sort-package-json: 1.57.0 + ts-deepmerge: 7.0.2 + ts-morph: 22.0.0 + type-fest: 2.19.0 + typescript: 5.4.5 + yaml: 2.7.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - react-devtools-core + - supports-color + - utf-8-validate + '@fluidframework/build-tools@0.52.0-315632(@types/node@18.19.39)': dependencies: '@fluid-tools/version-tools': 0.52.0-315632(@types/node@18.19.39) @@ -9827,6 +11776,20 @@ snapshots: - supports-color - utf-8-validate + '@fluidframework/bundle-size-tools@0.49.0': + dependencies: + azure-devops-node-api: 11.2.0 + jszip: 3.10.1 + msgpack-lite: 0.1.26 + pako: 2.1.0 + typescript: 5.4.5 + webpack: 5.97.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + '@fluidframework/bundle-size-tools@0.52.0-315632': dependencies: azure-devops-node-api: 11.2.0 @@ -9883,9 +11846,9 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) @@ -9900,6 +11863,35 @@ snapshots: - supports-color - typescript + '@fluidframework/eslint-config-fluid@5.7.3(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@fluid-internal/eslint-plugin-fluid': 0.1.5(eslint@8.55.0)(typescript@5.4.5) + '@microsoft/tsdoc': 0.14.2 + '@rushstack/eslint-patch': 1.4.0 + '@rushstack/eslint-plugin': 0.13.1(eslint@8.55.0)(typescript@5.4.5) + '@rushstack/eslint-plugin-security': 0.7.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + eslint-config-biome: 1.9.4 + eslint-config-prettier: 9.0.0(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) + eslint-plugin-promise: 6.1.1(eslint@8.55.0) + eslint-plugin-react: 7.33.2(eslint@8.55.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.55.0) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.55.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0) + transitivePeerDependencies: + - eslint + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + '@fluidframework/gitresources@5.0.0': {} '@fluidframework/protocol-base@5.0.0': @@ -10255,12 +12247,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@gitbeaker/core@35.8.1': + dependencies: + '@gitbeaker/requester-utils': 35.8.1 + form-data: 4.0.0 + li: 1.3.0 + mime: 3.0.0 + query-string: 7.1.3 + xcase: 2.0.1 + '@gitbeaker/core@38.12.1': dependencies: '@gitbeaker/requester-utils': 38.12.1 qs: 6.11.2 xcase: 2.0.1 + '@gitbeaker/node@35.8.1': + dependencies: + '@gitbeaker/core': 35.8.1 + '@gitbeaker/requester-utils': 35.8.1 + delay: 5.0.0 + got: 11.8.6 + xcase: 2.0.1 + + '@gitbeaker/requester-utils@35.8.1': + dependencies: + form-data: 4.0.0 + qs: 6.11.2 + xcase: 2.0.1 + '@gitbeaker/requester-utils@38.12.1': dependencies: qs: 6.11.2 @@ -10271,6 +12286,12 @@ snapshots: '@gitbeaker/core': 38.12.1 '@gitbeaker/requester-utils': 38.12.1 + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -10547,18 +12568,202 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@istanbuljs/schema@0.1.3': {} - - '@jridgewell/gen-mapping@0.3.3': + '@istanbuljs/load-nyc-config@1.1.0': dependencies: - '@jridgewell/set-array': 1.1.2 + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 18.19.39 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + '@types/node': 18.19.39 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@24.9.0': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 1.1.2 + '@types/yargs': 13.0.12 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.4 + '@types/node': 18.19.39 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.1': {} '@jridgewell/set-array@1.1.2': {} + '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.3': dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -10571,6 +12776,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@kwsites/file-exists@1.1.1': dependencies: debug: 4.4.0(supports-color@8.1.1) @@ -10769,9 +12984,11 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 + '@nolyfill/is-core-module@1.0.39': {} + '@npmcli/fs@3.1.0': dependencies: - semver: 7.6.3 + semver: 7.7.1 '@npmcli/git@4.1.0': dependencies: @@ -10902,6 +13119,8 @@ snapshots: dependencies: '@octokit/types': 6.41.0 + '@octokit/auth-token@3.0.4': {} + '@octokit/auth-token@4.0.0': {} '@octokit/auth-token@5.1.1': {} @@ -10918,6 +13137,18 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/core@4.2.4(encoding@0.1.13)': + dependencies: + '@octokit/auth-token': 3.0.4 + '@octokit/graphql': 5.0.6(encoding@0.1.13) + '@octokit/request': 6.2.8(encoding@0.1.13) + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + '@octokit/core@5.2.0': dependencies: '@octokit/auth-token': 4.0.0 @@ -10949,6 +13180,12 @@ snapshots: is-plain-object: 5.0.0 universal-user-agent: 6.0.1 + '@octokit/endpoint@7.0.6': + dependencies: + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + '@octokit/endpoint@9.0.5': dependencies: '@octokit/types': 13.7.0 @@ -10962,6 +13199,14 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/graphql@5.0.6(encoding@0.1.13)': + dependencies: + '@octokit/request': 6.2.8(encoding@0.1.13) + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 @@ -10976,6 +13221,8 @@ snapshots: '@octokit/openapi-types@12.11.0': {} + '@octokit/openapi-types@18.1.1': {} + '@octokit/openapi-types@23.0.1': {} '@octokit/plugin-paginate-rest@11.4.0(@octokit/core@6.1.3)': @@ -11013,6 +13260,12 @@ snapshots: deprecation: 2.3.1 once: 1.4.0 + '@octokit/request-error@3.0.3': + dependencies: + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + once: 1.4.0 + '@octokit/request-error@5.1.0': dependencies: '@octokit/types': 13.7.0 @@ -11034,6 +13287,17 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/request@6.2.8(encoding@0.1.13)': + dependencies: + '@octokit/endpoint': 7.0.6 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + node-fetch: 2.7.0(encoding@0.1.13) + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + '@octokit/request@8.4.0': dependencies: '@octokit/endpoint': 9.0.5 @@ -11073,12 +13337,16 @@ snapshots: dependencies: '@octokit/openapi-types': 12.11.0 + '@octokit/types@9.3.2': + dependencies: + '@octokit/openapi-types': 18.1.1 + '@pkgjs/parseargs@0.11.0': optional: true '@pm2/agent@2.0.4': dependencies: - async: 3.2.5 + async: 3.2.6 chalk: 3.0.0 dayjs: 1.8.36 debug: 4.3.4(supports-color@8.1.1) @@ -11139,6 +13407,20 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + '@puppeteer/browsers@2.6.1': + dependencies: + debug: 4.4.0(supports-color@8.1.1) + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.6.3 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + '@rushstack/eslint-patch@1.4.0': {} '@rushstack/eslint-plugin-security@0.7.1(eslint@8.55.0)(typescript@5.1.6)': @@ -11150,6 +13432,15 @@ snapshots: - supports-color - typescript + '@rushstack/eslint-plugin-security@0.7.1(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@rushstack/tree-pattern': 0.3.1 + '@typescript-eslint/experimental-utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + '@rushstack/eslint-plugin@0.13.1(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@rushstack/tree-pattern': 0.3.1 @@ -11159,6 +13450,15 @@ snapshots: - supports-color - typescript + '@rushstack/eslint-plugin@0.13.1(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@rushstack/tree-pattern': 0.3.1 + '@typescript-eslint/experimental-utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + '@rushstack/node-core-library@3.59.4(@types/node@22.10.7)': dependencies: colors: 1.2.5 @@ -11171,6 +13471,18 @@ snapshots: optionalDependencies: '@types/node': 22.10.7 + '@rushstack/node-core-library@3.66.1(@types/node@18.19.39)': + dependencies: + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 + optionalDependencies: + '@types/node': 18.19.39 + '@rushstack/node-core-library@5.10.2(@types/node@18.19.39)': dependencies: ajv: 8.13.0 @@ -11306,6 +13618,14 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@sigstore/protobuf-specs@0.1.0': {} '@sigstore/tuf@1.0.0': @@ -11316,12 +13636,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/is@0.14.0': {} + + '@sindresorhus/is@4.6.0': {} + '@sindresorhus/is@5.4.1': {} '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers@11.2.2': dependencies: '@sinonjs/commons': 3.0.1 @@ -11636,6 +13966,14 @@ snapshots: '@socket.io/sticky@1.0.4': {} + '@szmarczak/http-timer@1.1.2': + dependencies: + defer-to-connect: 1.1.3 + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -11658,6 +13996,14 @@ snapshots: mkdirp: 3.0.1 path-browserify: 1.0.1 + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + '@tufjs/canonical-json@1.0.0': {} '@tufjs/models@1.0.4': @@ -11676,6 +14022,31 @@ snapshots: '@types/async@3.2.20': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.9 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.9 + + '@types/base64-js@1.3.2': {} + + '@types/benchmark@2.1.5': {} + '@types/bluebird@3.5.38': {} '@types/body-parser@1.19.2': @@ -11685,6 +14056,13 @@ snapshots: '@types/bytes@3.1.1': {} + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.1 + '@types/keyv': 3.1.4 + '@types/node': 18.19.39 + '@types/responselike': 1.0.3 + '@types/compression@0.0.33': dependencies: '@types/express': 4.17.21 @@ -11766,6 +14144,10 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 18.19.39 + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 18.19.39 + '@types/http-cache-semantics@4.0.1': {} '@types/ioredis-mock@8.2.5': @@ -11777,6 +14159,34 @@ snapshots: '@types/istanbul-lib-coverage@2.0.4': {} + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + + '@types/istanbul-reports@1.1.2': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-report': 3.0.3 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest-environment-puppeteer@2.2.0(typescript@5.4.5)': + dependencies: + '@types/puppeteer': 7.0.4(typescript@5.4.5) + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@types/jest@29.5.3': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + '@types/json-schema@7.0.15': {} '@types/json-stringify-safe@5.0.0': {} @@ -11787,6 +14197,10 @@ snapshots: '@types/jsrsasign@10.5.12': {} + '@types/keyv@3.1.4': + dependencies: + '@types/node': 18.19.39 + '@types/lodash@4.14.195': {} '@types/lodash@4.14.199': {} @@ -11845,6 +14259,16 @@ snapshots: '@types/prop-types@15.7.14': {} + '@types/puppeteer@7.0.4(typescript@5.4.5)': + dependencies: + puppeteer: 23.11.1(typescript@5.4.5) + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + '@types/qs@6.9.7': {} '@types/range-parser@1.2.4': {} @@ -11854,6 +14278,10 @@ snapshots: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/responselike@1.0.3': + dependencies: + '@types/node': 18.19.39 + '@types/rimraf@3.0.2': dependencies: '@types/glob': 7.2.0 @@ -11885,6 +14313,8 @@ snapshots: dependencies: '@types/node': 18.19.39 + '@types/stack-utils@2.0.3': {} + '@types/string-hash@1.1.1': {} '@types/superagent@4.1.18': @@ -11917,6 +14347,21 @@ snapshots: dependencies: '@types/node': 18.19.39 + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@13.0.12': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 18.19.39 + optional: true + '@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@eslint-community/regexpp': 4.10.0 @@ -11937,13 +14382,54 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@5.59.11(eslint@8.55.0)(typescript@5.1.6)': + '@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/utils': 5.59.11(eslint@8.55.0)(typescript@5.1.6) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.7.5 + '@typescript-eslint/type-utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.7.5 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/experimental-utils@5.59.11(eslint@8.55.0)(typescript@5.1.6)': + dependencies: + '@typescript-eslint/utils': 5.59.11(eslint@8.55.0)(typescript@5.1.6) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/experimental-utils@5.59.11(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) + eslint: 8.55.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.55.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color '@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6)': dependencies: @@ -11958,11 +14444,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 6.7.5 + '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.7.5 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.55.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 '@typescript-eslint/visitor-keys': 5.59.11 + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager@6.7.5': dependencies: '@typescript-eslint/types': 6.7.5 @@ -11980,8 +14484,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@6.7.5(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) + '@typescript-eslint/utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + debug: 4.4.0(supports-color@8.1.1) + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@5.59.11': {} + '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/types@6.7.5': {} '@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.6)': @@ -11991,13 +14509,42 @@ snapshots: debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.3 + semver: 7.7.1 tsutils: 3.21.0(typescript@5.1.6) optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@5.59.11(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 + debug: 4.4.0(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.1 + tsutils: 3.21.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@6.7.5(typescript@5.1.6)': dependencies: '@typescript-eslint/types': 6.7.5 @@ -12012,6 +14559,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@6.7.5(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/visitor-keys': 6.7.5 + debug: 4.4.0(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.0 + ts-api-utils: 1.0.3(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.59.11(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -12022,7 +14583,22 @@ snapshots: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) eslint: 8.55.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@5.59.11(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.4.5) + eslint: 8.55.0 + eslint-scope: 5.1.1 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -12041,11 +14617,30 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@6.7.5(eslint@8.55.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.7.5 + '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) + eslint: 8.55.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@6.7.5': dependencies: '@typescript-eslint/types': 6.7.5 @@ -12245,10 +14840,20 @@ snapshots: dependencies: acorn: 8.11.2 + acorn-jsx@5.3.2(acorn@7.4.1): + dependencies: + acorn: 7.4.1 + acorn-jsx@5.3.2(acorn@8.11.2): dependencies: acorn: 8.11.2 + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@7.4.1: {} + acorn@8.11.2: {} acorn@8.14.0: {} @@ -12267,6 +14872,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.3: {} + agentkeepalive@4.3.0: dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -12347,6 +14954,8 @@ snapshots: ansi-regex@2.1.1: optional: true + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -12359,6 +14968,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} ansis@3.9.0: {} @@ -12462,6 +15073,8 @@ snapshots: dependencies: tslib: 2.6.2 + astral-regex@1.0.0: {} + astral-regex@2.0.0: {} async-lock@1.4.0: {} @@ -12510,15 +15123,107 @@ snapshots: transitivePeerDependencies: - debug + axios@1.8.1: + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + azure-devops-node-api@11.2.0: dependencies: tunnel: 0.0.6 typed-rest-client: 1.8.9 + b4a@1.6.7: {} + + babel-jest@29.7.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) + + babel-preset-jest@29.6.3(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + bail@2.0.2: {} balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + + bare-fs@4.0.1: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + transitivePeerDependencies: + - bare-buffer + optional: true + + bare-os@3.5.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.5.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 + optional: true + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -12533,6 +15238,11 @@ snapshots: before-after-hook@3.0.2: {} + benchmark@2.1.4: + dependencies: + lodash: 4.17.21 + platform: 1.3.6 + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -12564,6 +15274,12 @@ snapshots: readable-stream: 2.3.8 safe-buffer: 5.2.1 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blessed@0.1.81: {} bodec@0.1.0: {} @@ -12635,6 +15351,14 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + bson@4.7.2: dependencies: buffer: 5.7.1 @@ -12676,7 +15400,7 @@ snapshots: builtins@5.0.1: dependencies: - semver: 7.6.3 + semver: 7.7.1 bytes@3.0.0: {} @@ -12721,6 +15445,8 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 + cacheable-lookup@5.0.4: {} + cacheable-lookup@7.0.0: {} cacheable-request@10.2.11: @@ -12733,6 +15459,26 @@ snapshots: normalize-url: 8.0.0 responselike: 3.0.0 + cacheable-request@6.1.0: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.2 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -12753,6 +15499,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 + camelcase@5.3.1: {} + camelcase@6.3.0: {} camelcase@7.0.1: {} @@ -12839,6 +15587,8 @@ snapshots: transitivePeerDependencies: - supports-color + char-regex@1.0.2: {} + character-entities@2.0.2: {} chardet@0.7.0: {} @@ -12866,10 +15616,18 @@ snapshots: chrome-trace-event@1.0.3: {} + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): + dependencies: + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 + ci-info@3.8.0: {} circular_buffer_js@1.10.0: {} + cjs-module-lexer@1.4.3: {} + classic-level@1.3.0: dependencies: abstract-level: 1.0.3 @@ -12892,6 +15650,10 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -12913,6 +15675,8 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 + cli-width@3.0.0: {} + cli-width@4.1.0: {} cliui@7.0.4: @@ -12933,8 +15697,16 @@ snapshots: kind-of: 6.0.3 shallow-clone: 3.0.1 + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clone@1.0.4: {} + cluster-key-slot@1.1.2: {} + co@4.6.0: {} + code-block-writer@12.0.0: {} code-block-writer@13.0.1: {} @@ -12946,6 +15718,8 @@ snapshots: code-point-at@1.1.0: optional: true + collect-v8-coverage@1.0.2: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -12987,6 +15761,8 @@ snapshots: commander@10.0.1: {} + commander@12.1.0: {} + commander@2.15.1: {} commander@2.20.3: {} @@ -13061,6 +15837,8 @@ snapshots: convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + convert-to-spaces@2.0.1: {} cookie-parser@1.4.7: @@ -13113,11 +15891,37 @@ snapshots: optionalDependencies: typescript: 5.4.5 + cosmiconfig@9.0.0(typescript@5.4.5): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.4.5 + crc-32@1.2.0: dependencies: exit-on-epipe: 1.0.1 printj: 1.1.2 + create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + croner@4.1.97: {} cross-env@7.0.3: @@ -13130,6 +15934,14 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13144,9 +15956,15 @@ snapshots: culvert@0.1.2: {} - danger@12.3.3(encoding@0.1.13): + cwd@0.10.0: dependencies: - '@gitbeaker/rest': 38.12.1 + find-pkg: 0.1.2 + fs-exists-sync: 0.1.0 + + danger@11.3.1(encoding@0.1.13): + dependencies: + '@gitbeaker/core': 35.8.1 + '@gitbeaker/node': 35.8.1 '@octokit/rest': 18.12.0(encoding@0.1.13) async-retry: 1.2.3 chalk: 2.4.2 @@ -13187,34 +16005,79 @@ snapshots: - encoding - supports-color - data-uri-to-buffer@6.0.1: {} - - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.23.6 - - dayjs@1.11.10: {} - - dayjs@1.8.36: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4(supports-color@8.1.1): - dependencies: - ms: 2.1.2 - optionalDependencies: - supports-color: 8.1.1 - - debug@4.4.0(supports-color@8.1.1): + danger@12.3.3(encoding@0.1.13): dependencies: - ms: 2.1.3 - optionalDependencies: + '@gitbeaker/rest': 38.12.1 + '@octokit/rest': 18.12.0(encoding@0.1.13) + async-retry: 1.2.3 + chalk: 2.4.2 + commander: 2.20.3 + core-js: 3.34.0 + debug: 4.4.0(supports-color@8.1.1) + fast-json-patch: 3.1.1 + get-stdin: 6.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + hyperlinker: 1.0.0 + json5: 2.2.3 + jsonpointer: 5.0.1 + jsonwebtoken: 9.0.2 + lodash.find: 4.6.0 + lodash.includes: 4.3.0 + lodash.isobject: 3.0.2 + lodash.keys: 4.2.0 + lodash.mapvalues: 4.6.0 + lodash.memoize: 4.1.2 + memfs-or-file-map-to-github-branch: 1.2.1(encoding@0.1.13) + micromatch: 4.0.8 + node-cleanup: 2.1.2 + node-fetch: 2.7.0(encoding@0.1.13) + override-require: 1.1.1 + p-limit: 2.3.0 + parse-diff: 0.7.1 + parse-git-config: 2.0.3 + parse-github-url: 1.0.2 + parse-link-header: 2.0.0 + pinpoint: 1.1.0 + prettyjson: 1.2.5 + readline-sync: 1.4.10 + regenerator-runtime: 0.13.11 + require-from-string: 2.0.2 + supports-hyperlinks: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.1: {} + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.23.6 + + dayjs@1.11.10: {} + + dayjs@1.8.36: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.4(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.4.0(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: supports-color: 8.1.1 decamelize@4.0.0: {} @@ -13223,10 +16086,11 @@ snapshots: dependencies: character-entities: 2.0.2 + decode-uri-component@0.2.2: {} + decompress-response@3.3.0: dependencies: mimic-response: 1.0.1 - optional: true decompress-response@6.0.0: dependencies: @@ -13270,10 +16134,20 @@ snapshots: pify: 2.3.0 strip-dirs: 2.1.0 + dedent@1.5.3: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@1.1.3: {} + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -13294,6 +16168,8 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + delay@5.0.0: {} + delayed-stream@1.0.0: {} delegates@1.0.0: {} @@ -13336,6 +16212,10 @@ snapshots: dependencies: dequal: 2.0.3 + devtools-protocol@0.0.1367902: {} + + diff-sequences@29.6.3: {} + diff3@0.0.3: {} diff@4.0.2: {} @@ -13371,6 +16251,8 @@ snapshots: double-ended-queue@2.1.0-0: {} + duplexer3@0.1.5: {} + eastasianwidth@0.2.0: {} ecdsa-sig-formatter@1.0.11: @@ -13387,8 +16269,12 @@ snapshots: electron-to-chromium@1.5.84: {} + emittery@0.13.1: {} + emoji-regex@10.4.0: {} + emoji-regex@7.0.3: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -13566,6 +16452,8 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-config-biome@1.9.4: {} + eslint-config-prettier@9.0.0(eslint@8.55.0): dependencies: eslint: 8.55.0 @@ -13578,13 +16466,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.55.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -13595,14 +16483,54 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0(supports-color@8.1.1) + enhanced-resolve: 5.17.1 + eslint: 8.55.0 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + fast-glob: 3.3.2 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 + is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) + eslint: 8.55.0 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) transitivePeerDependencies: - supports-color @@ -13612,17 +16540,34 @@ snapshots: eslint: 8.55.0 ignore: 5.3.0 - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) - get-tsconfig: 4.7.2 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + get-tsconfig: 4.10.0 is-glob: 4.0.3 minimatch: 3.1.2 - semver: 7.6.3 + semver: 7.7.1 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + dependencies: + debug: 4.4.0(supports-color@8.1.1) + doctrine: 3.0.0 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + get-tsconfig: 4.10.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + semver: 7.7.1 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-typescript @@ -13652,6 +16597,10 @@ snapshots: dependencies: eslint: 8.55.0 + eslint-plugin-react-hooks@4.6.2(eslint@8.55.0): + dependencies: + eslint: 8.55.0 + eslint-plugin-react@7.33.2(eslint@8.55.0): dependencies: array-includes: 3.1.6 @@ -13703,6 +16652,13 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) + eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0): + dependencies: + eslint: 8.55.0 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5) + eslint-rule-composer@0.3.0: {} eslint-scope@5.1.1: @@ -13715,8 +16671,56 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-utils@1.4.3: + dependencies: + eslint-visitor-keys: 1.3.0 + + eslint-visitor-keys@1.3.0: {} + eslint-visitor-keys@3.4.3: {} + eslint@6.8.0: + dependencies: + '@babel/code-frame': 7.23.5 + ajv: 6.12.6 + chalk: 2.4.2 + cross-spawn: 6.0.6 + debug: 4.4.0(supports-color@8.1.1) + doctrine: 3.0.0 + eslint-scope: 5.1.1 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.5.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + inquirer: 7.3.3 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.3.0 + lodash: 4.17.21 + minimatch: 3.1.2 + mkdirp: 0.5.6 + natural-compare: 1.4.0 + optionator: 0.8.3 + progress: 2.0.3 + regexpp: 2.0.1 + semver: 6.3.1 + strip-ansi: 5.2.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + eslint@8.55.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -13760,6 +16764,12 @@ snapshots: transitivePeerDependencies: - supports-color + espree@6.2.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + espree@9.6.1: dependencies: acorn: 8.11.2 @@ -13808,13 +16818,29 @@ snapshots: exit-on-epipe@1.0.1: {} + exit@0.1.2: {} + expand-template@2.0.3: optional: true + expand-tilde@1.2.2: + dependencies: + os-homedir: 1.0.2 + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 + expect-puppeteer@10.1.4: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + exponential-backoff@3.1.1: {} express@4.21.2: @@ -13867,6 +16893,16 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + extract-zip@2.0.1: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + extrareqp2@1.0.0(debug@4.3.4): dependencies: follow-redirects: 1.15.6(debug@4.3.4) @@ -13877,6 +16913,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -13910,6 +16948,10 @@ snapshots: dependencies: reusify: 1.0.4 + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + fclone@1.0.11: {} fd-slicer@1.1.0: @@ -13932,8 +16974,21 @@ snapshots: sprintf-js: 1.1.3 tmp: 0.0.33 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@5.0.1: + dependencies: + flat-cache: 2.0.1 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.0.4 @@ -13954,6 +17009,8 @@ snapshots: dependencies: to-regex-range: 5.0.1 + filter-obj@1.1.0: {} + finalhandler@1.3.1: dependencies: debug: 2.6.9 @@ -13966,6 +17023,21 @@ snapshots: transitivePeerDependencies: - supports-color + find-file-up@0.1.3: + dependencies: + fs-exists-sync: 0.1.0 + resolve-dir: 0.1.1 + + find-pkg@0.1.2: + dependencies: + find-file-up: 0.1.3 + + find-process@1.4.10: + dependencies: + chalk: 4.1.2 + commander: 12.1.0 + loglevel: 1.9.2 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -13986,6 +17058,12 @@ snapshots: dependencies: micromatch: 4.0.8 + flat-cache@2.0.1: + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + flat-cache@3.0.4: dependencies: flatted: 3.2.7 @@ -13993,6 +17071,8 @@ snapshots: flat@5.0.2: {} + flatted@2.0.2: {} + flatted@3.2.7: {} fn.name@1.1.0: {} @@ -14029,6 +17109,10 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + formidable@1.2.6: {} forwarded@0.2.0: {} @@ -14081,6 +17165,8 @@ snapshots: es-abstract: 1.22.4 functions-have-names: 1.2.3 + functional-red-black-tree@1.0.1: {} + functions-have-names@1.2.3: {} gauge@2.7.4: @@ -14106,6 +17192,8 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} @@ -14131,6 +17219,14 @@ snapshots: object-assign: 4.1.1 pinkie-promise: 2.0.1 + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + get-stream@6.0.1: {} get-stream@7.0.0: {} @@ -14141,6 +17237,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + get-tsconfig@4.7.2: dependencies: resolve-pkg-maps: 1.0.0 @@ -14177,7 +17277,7 @@ snapshots: gitlog@4.0.8: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) tslib: 2.6.2 transitivePeerDependencies: - supports-color @@ -14196,7 +17296,7 @@ snapshots: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 6.0.2 path-scurry: 1.11.1 @@ -14237,6 +17337,24 @@ snapshots: dependencies: ini: 2.0.0 + global-modules@0.2.3: + dependencies: + global-prefix: 0.1.5 + is-windows: 0.2.0 + + global-prefix@0.1.5: + dependencies: + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 0.2.0 + which: 1.3.1 + + globals@11.12.0: {} + + globals@12.4.0: + dependencies: + type-fest: 0.8.1 + globals@13.20.0: dependencies: type-fest: 0.20.2 @@ -14269,6 +17387,20 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + got@12.6.1: dependencies: '@sindresorhus/is': 5.4.1 @@ -14297,6 +17429,22 @@ snapshots: p-cancelable: 3.0.0 responselike: 3.0.0 + got@9.6.0: + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} @@ -14406,6 +17554,18 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + http2-wrapper@2.2.0: dependencies: quick-lru: 5.1.1 @@ -14425,6 +17585,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + human-id@1.0.2: {} human-id@4.1.1: {} @@ -14451,6 +17618,8 @@ snapshots: dependencies: minimatch: 9.0.5 + ignore@4.0.6: {} + ignore@5.3.0: {} ignore@5.3.2: {} @@ -14521,6 +17690,40 @@ snapshots: - bufferutil - utf-8-validate + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + int64-buffer@0.1.10: {} internal-slot@1.0.7: @@ -14601,6 +17804,10 @@ snapshots: dependencies: builtin-modules: 3.3.0 + is-bun-module@1.3.0: + dependencies: + semver: 7.6.3 + is-callable@1.2.7: {} is-ci@3.0.1: @@ -14630,6 +17837,8 @@ snapshots: number-is-nan: 1.0.1 optional: true + is-fullwidth-code-point@2.0.0: {} + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -14638,6 +17847,8 @@ snapshots: dependencies: get-east-asian-width: 1.3.0 + is-generator-fn@2.1.0: {} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 @@ -14653,6 +17864,8 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 + is-interactive@1.0.0: {} + is-lambda@1.0.1: {} is-lower-case@1.1.3: @@ -14744,6 +17957,8 @@ snapshots: call-bind: 1.0.7 get-intrinsic: 1.2.4 + is-windows@0.2.0: {} + is-windows@1.0.2: {} is-wsl@2.2.0: @@ -14786,12 +18001,40 @@ snapshots: istanbul-lib-coverage@3.2.0: {} + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 4.0.0 supports-color: 7.2.0 + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 @@ -14818,14 +18061,382 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + dependencies: + '@babel/core': 7.26.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.9) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 18.19.39 + ts-node: 10.9.2(@types/node@18.19.39)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-dev-server@10.1.4: + dependencies: + chalk: 4.1.2 + cwd: 0.10.0 + find-process: 1.4.10 + prompts: 2.4.2 + spawnd: 10.1.4 + tree-kill: 1.2.2 + wait-on: 8.0.2 + transitivePeerDependencies: + - debug + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-environment-puppeteer@10.1.4(typescript@5.4.5): + dependencies: + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.4.5) + deepmerge: 4.3.1 + jest-dev-server: 10.1.4 + jest-environment-node: 29.7.0 + transitivePeerDependencies: + - debug + - typescript + + jest-get-type@24.9.0: {} + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 18.19.39 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-junit@10.0.0: + dependencies: + jest-validate: 24.9.0 + mkdirp: 0.5.6 + strip-ansi: 5.2.0 + uuid: 3.4.0 + xml: 1.0.1 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-puppeteer@10.1.4(puppeteer@23.11.1(typescript@5.4.5))(typescript@5.4.5): + dependencies: + expect-puppeteer: 10.1.4 + jest-environment-puppeteer: 10.1.4(typescript@5.4.5) + puppeteer: 23.11.1(typescript@5.4.5) + transitivePeerDependencies: + - debug + - typescript + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.26.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + '@babel/types': 7.26.9 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@24.9.0: + dependencies: + '@jest/types': 24.9.0 + camelcase: 5.3.1 + chalk: 2.4.2 + jest-get-type: 24.9.0 + leven: 3.1.0 + pretty-format: 24.9.0 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + jest-worker@27.5.1: dependencies: '@types/node': 18.19.39 merge-stream: 2.0.0 supports-color: 8.1.1 + jest-worker@29.7.0: + dependencies: + '@types/node': 18.19.39 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jju@1.4.0: {} + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + js-git@0.7.8: dependencies: bodec: 0.1.0 @@ -14857,6 +18468,8 @@ snapshots: jsesc@3.0.2: {} + json-buffer@3.0.0: {} + json-buffer@3.0.1: {} json-parse-better-errors@1.0.2: {} @@ -14913,7 +18526,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.0 + semver: 7.6.3 jsrsasign@11.0.0: {} @@ -14923,6 +18536,12 @@ snapshots: circular_buffer_js: 1.10.0 reduce-to-639-1: 1.1.0 + jssm@5.98.2: + dependencies: + better_git_changelog: 1.6.2 + circular_buffer_js: 1.10.0 + reduce-to-639-1: 1.1.0 + jsx-ast-utils@3.3.3: dependencies: array-includes: 3.1.6 @@ -14970,6 +18589,10 @@ snapshots: transitivePeerDependencies: - supports-color + keyv@3.1.0: + dependencies: + json-buffer: 3.0.0 + keyv@4.5.2: dependencies: json-buffer: 3.0.1 @@ -14984,6 +18607,10 @@ snapshots: ky@1.7.4: {} + latest-version@5.1.0: + dependencies: + package-json: 6.5.0 + latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -15037,11 +18664,20 @@ snapshots: browser-level: 1.0.1 classic-level: 1.3.0 + leven@3.1.0: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + li@1.3.0: {} + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -15133,6 +18769,8 @@ snapshots: safe-stable-stringify: 2.4.3 triple-beam: 1.4.1 + loglevel@1.9.2: {} + long@1.1.2: {} longest-streak@3.1.0: {} @@ -15155,6 +18793,10 @@ snapshots: dependencies: tslib: 2.6.2 + lowercase-keys@1.0.1: {} + + lowercase-keys@2.0.0: {} + lowercase-keys@3.0.0: {} lru-cache@10.4.0: {} @@ -15164,6 +18806,10 @@ snapshots: pseudomap: 1.0.2 yallist: 2.1.2 + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -15178,7 +18824,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 make-error@1.3.6: {} @@ -15202,6 +18848,10 @@ snapshots: transitivePeerDependencies: - supports-color + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + markdown-table@3.0.4: {} mdast-util-find-and-replace@3.0.2: @@ -15548,10 +19198,11 @@ snapshots: mime@1.6.0: {} + mime@3.0.0: {} + mimic-fn@2.1.0: {} - mimic-response@1.0.1: - optional: true + mimic-response@1.0.1: {} mimic-response@3.1.0: {} @@ -15583,6 +19234,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -15641,10 +19296,11 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + mitt@3.0.1: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - optional: true mkdirp@1.0.4: {} @@ -15769,7 +19425,7 @@ snapshots: nconf@0.12.1: dependencies: - async: 3.2.5 + async: 3.2.6 ini: 2.0.0 secure-keys: 1.0.0 yargs: 16.2.0 @@ -15790,6 +19446,8 @@ snapshots: netmask@2.0.2: {} + nice-try@1.0.5: {} + nise@6.1.1: dependencies: '@sinonjs/commons': 3.0.1 @@ -15823,12 +19481,20 @@ snapshots: node-cleanup@2.1.2: {} + node-domexception@1.0.0: {} + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: encoding: 0.1.13 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-gyp-build@4.6.0: {} node-gyp@9.4.0: @@ -15841,12 +19507,14 @@ snapshots: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - supports-color + node-int64@0.4.0: {} + node-rdkafka@3.0.1: dependencies: bindings: 1.5.0 @@ -15879,7 +19547,7 @@ snapshots: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.13.1 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.2: @@ -15890,6 +19558,10 @@ snapshots: normalize-path@3.0.0: {} + normalize-url@4.5.1: {} + + normalize-url@6.1.0: {} + normalize-url@8.0.0: {} notepack.io@2.1.3: {} @@ -15943,7 +19615,7 @@ snapshots: npm-install-checks@6.1.1: dependencies: - semver: 7.6.3 + semver: 7.7.1 npm-normalize-package-bin@3.0.1: {} @@ -16135,6 +19807,15 @@ snapshots: optional@0.1.4: {} + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -16144,8 +19825,19 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - os-homedir@1.0.2: - optional: true + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-homedir@1.0.2: {} os-tmpdir@1.0.2: {} @@ -16153,6 +19845,10 @@ snapshots: override-require@1.1.1: {} + p-cancelable@1.1.0: {} + + p-cancelable@2.1.1: {} + p-cancelable@3.0.0: {} p-filter@2.1.0: @@ -16204,6 +19900,19 @@ snapshots: transitivePeerDependencies: - supports-color + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + get-uri: 6.0.2 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 @@ -16216,12 +19925,19 @@ snapshots: registry-url: 6.0.1 semver: 7.6.3 + package-json@6.5.0: + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.2 + registry-url: 5.1.0 + semver: 6.3.1 + package-json@8.1.1: dependencies: got: 12.6.1 - registry-auth-token: 5.0.2 + registry-auth-token: 5.0.3 registry-url: 6.0.1 - semver: 7.6.3 + semver: 7.7.1 package-manager-detector@0.2.0: {} @@ -16327,6 +20043,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -16375,15 +20093,19 @@ snapshots: pinpoint@1.1.0: {} + pirates@4.0.6: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 + platform@1.3.6: {} + pluralize@8.0.0: {} pm2-axon-rpc@0.7.1: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -16391,7 +20113,7 @@ snapshots: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -16407,8 +20129,8 @@ snapshots: pm2-sysmonit@1.2.8: dependencies: - async: 3.2.5 - debug: 4.3.4(supports-color@8.1.1) + async: 3.2.6 + debug: 4.4.0(supports-color@8.1.1) pidusage: 2.0.21 systeminformation: 5.21.24 tx2: 1.0.5 @@ -16476,14 +20198,31 @@ snapshots: which-pm-runs: 1.1.0 optional: true + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} + prepend-http@2.0.0: {} + prettier@2.8.8: {} prettier@3.0.3: {} prettier@3.2.5: {} + pretty-format@24.9.0: + dependencies: + '@jest/types': 24.9.0 + ansi-regex: 4.1.1 + ansi-styles: 3.2.1 + react-is: 16.13.1 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + prettyjson@1.2.5: dependencies: colors: 1.4.0 @@ -16546,6 +20285,19 @@ snapshots: transitivePeerDependencies: - supports-color + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + proxy-from-env@1.1.0: {} prr@1.0.1: {} @@ -16591,16 +20343,59 @@ snapshots: once: 1.4.0 optional: true + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} pupa@3.1.0: dependencies: escape-goat: 4.0.0 + puppeteer-core@23.11.1: + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.4.0(supports-color@8.1.1) + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.0 + ws: 8.18.1 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + puppeteer@23.11.1(typescript@5.4.5): + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + cosmiconfig: 9.0.0(typescript@5.4.5) + devtools-protocol: 0.0.1367902 + puppeteer-core: 23.11.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + pure-rand@6.1.0: {} + qs@6.11.2: dependencies: side-channel: 1.0.4 + query-string@7.1.3: + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -16638,6 +20433,8 @@ snapshots: react-is@16.13.1: {} + react-is@18.3.1: {} + react-reconciler@0.29.2(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -16761,6 +20558,12 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regexpp@2.0.1: {} + + registry-auth-token@4.2.2: + dependencies: + rc: 1.2.8 + registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -16769,6 +20572,10 @@ snapshots: dependencies: '@pnpm/npm-conf': 2.2.2 + registry-url@5.1.0: + dependencies: + rc: 1.2.8 + registry-url@6.0.1: dependencies: rc: 1.2.8 @@ -16858,6 +20665,11 @@ snapshots: dependencies: resolve-from: 5.0.0 + resolve-dir@0.1.1: + dependencies: + expand-tilde: 1.2.2 + global-modules: 0.2.3 + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -16889,10 +20701,23 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@1.0.2: + dependencies: + lowercase-keys: 1.0.1 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -16906,6 +20731,16 @@ snapshots: reusify@1.0.4: {} + rewire@5.0.0: + dependencies: + eslint: 6.8.0 + transitivePeerDependencies: + - supports-color + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -16918,6 +20753,8 @@ snapshots: dependencies: glob: 10.3.10 + run-async@2.4.1: {} + run-parallel-limit@1.1.0: dependencies: queue-microtask: 1.2.3 @@ -16930,6 +20767,10 @@ snapshots: run-series@1.1.9: {} + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + rxjs@7.8.1: dependencies: tslib: 2.6.2 @@ -17006,6 +20847,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -17170,6 +21013,12 @@ snapshots: slash@3.0.0: {} + slice-ansi@2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -17250,6 +21099,14 @@ snapshots: transitivePeerDependencies: - supports-color + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + socks@2.8.3: dependencies: ip-address: 9.0.5 @@ -17291,6 +21148,11 @@ snapshots: source-map-js: 1.2.0 webpack: 5.94.0(webpack-cli@5.1.4) + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -17311,6 +21173,11 @@ snapshots: dependencies: cross-spawn: 7.0.6 + spawnd@10.1.4: + dependencies: + signal-exit: 4.1.0 + tree-kill: 1.2.2 + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -17330,6 +21197,8 @@ snapshots: spdx-license-ids@3.0.13: {} + split-on-first@1.1.0: {} + split@1.0.1: dependencies: through: 2.3.8 @@ -17359,10 +21228,24 @@ snapshots: looper: 3.0.0 pull-stream: 3.7.0 + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + strict-uri-encode@2.0.0: {} + string-argv@0.3.2: {} string-hash@1.1.3: {} + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + string-width@1.0.2: dependencies: code-point-at: 1.1.0 @@ -17370,6 +21253,12 @@ snapshots: strip-ansi: 3.0.1 optional: true + string-width@3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -17432,6 +21321,10 @@ snapshots: ansi-regex: 2.1.1 optional: true + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -17444,6 +21337,8 @@ snapshots: strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + strip-dirs@2.1.0: dependencies: is-natural-number: 4.0.1 @@ -17512,6 +21407,13 @@ snapshots: systeminformation@5.21.24: optional: true + table@5.4.6: + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + table@6.9.0: dependencies: ajv: 8.13.0 @@ -17530,6 +21432,16 @@ snapshots: tar-stream: 1.6.2 optional: true + tar-fs@3.0.8: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.0.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + tar-stream@1.6.2: dependencies: bl: 1.2.3 @@ -17540,6 +21452,12 @@ snapshots: to-buffer: 1.1.1 xtend: 4.0.2 + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -17593,6 +21511,10 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-hex@1.0.0: {} text-table@0.2.0: {} @@ -17620,8 +21542,12 @@ snapshots: dependencies: os-tmpdir: 1.0.2 + tmpl@1.0.5: {} + to-buffer@1.1.1: {} + to-readable-stream@1.0.0: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -17652,8 +21578,31 @@ snapshots: dependencies: typescript: 5.1.6 + ts-api-utils@1.0.3(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + ts-deepmerge@7.0.2: {} + ts-jest@29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + typescript: 5.4.5 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.9) + ts-loader@9.5.1(typescript@5.1.6)(webpack@5.94.0): dependencies: chalk: 4.1.2 @@ -17674,6 +21623,24 @@ snapshots: '@ts-morph/common': 0.23.0 code-block-writer: 13.0.1 + ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.39 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + ts-node@8.10.2(typescript@5.1.6): dependencies: arg: 4.1.3 @@ -17694,6 +21661,11 @@ snapshots: tslib: 1.14.1 typescript: 5.1.6 + tsutils@3.21.0(typescript@5.4.5): + dependencies: + tslib: 1.14.1 + typescript: 5.4.5 + tuf-js@1.1.7: dependencies: '@tufjs/models': 1.0.4 @@ -17715,6 +21687,10 @@ snapshots: json-stringify-safe: 5.0.1 optional: true + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -17771,6 +21747,8 @@ snapshots: for-each: 0.3.3 is-typed-array: 1.1.13 + typed-query-selector@2.12.0: {} + typed-rest-client@1.8.9: dependencies: qs: 6.11.2 @@ -17919,6 +21897,10 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse-lax@3.0.0: + dependencies: + prepend-http: 2.0.0 + url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -17942,6 +21924,10 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} + + v8-compile-cache@2.4.0: {} + v8-to-istanbul@9.1.0: dependencies: '@jridgewell/trace-mapping': 0.3.20 @@ -17980,11 +21966,31 @@ snapshots: ini: 1.3.8 js-git: 0.7.8 + wait-on@8.0.2: + dependencies: + axios: 1.8.1 + joi: 17.13.3 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} webidl-conversions@7.0.0: {} @@ -18214,6 +22220,8 @@ snapshots: triple-beam: 1.3.0 winston-transport: 4.5.0 + word-wrap@1.2.5: {} + wordwrap@1.0.0: {} workerpool@6.2.1: {} @@ -18251,10 +22259,21 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write@1.0.3: + dependencies: + mkdirp: 0.5.6 + ws@7.5.10: {} ws@8.17.1: {} + ws@8.18.1: {} + xcase@2.0.1: {} xdg-basedir@5.1.0: {} @@ -18264,6 +22283,8 @@ snapshots: sax: 1.3.0 xmlbuilder: 11.0.1 + xml@1.0.1: {} + xmlbuilder@11.0.1: {} xtend@4.0.2: {} @@ -18272,6 +22293,8 @@ snapshots: yallist@2.1.2: {} + yallist@3.1.1: {} + yallist@4.0.0: {} yaml@2.7.0: {} @@ -18332,6 +22355,8 @@ snapshots: optionalDependencies: commander: 9.5.0 + zod@3.23.8: {} + zookeeper@5.6.0: dependencies: async: 3.2.4 From fb6d9f29f2bb6cc2fb92426a619a208bc479ceca Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:12:16 +0000 Subject: [PATCH 12/38] Move protocol-base to server-common-utils --- server/routerlicious/packages/protocol-base/package.json | 2 +- .../routerlicious/packages/protocol-base/src/gitHelper.ts | 2 +- server/routerlicious/packages/protocol-base/src/quorum.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/routerlicious/packages/protocol-base/package.json b/server/routerlicious/packages/protocol-base/package.json index 967f278da68c..9bf36c97901f 100644 --- a/server/routerlicious/packages/protocol-base/package.json +++ b/server/routerlicious/packages/protocol-base/package.json @@ -59,7 +59,7 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/common-utils": "^3.1.0", + "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", "events_pkg": "npm:events@^3.1.0" diff --git a/server/routerlicious/packages/protocol-base/src/gitHelper.ts b/server/routerlicious/packages/protocol-base/src/gitHelper.ts index eb1713e47ecf..47083d81bf0a 100644 --- a/server/routerlicious/packages/protocol-base/src/gitHelper.ts +++ b/server/routerlicious/packages/protocol-base/src/gitHelper.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { unreachableCase } from "@fluidframework/common-utils"; +import { unreachableCase } from "@fluidframework/server-common-utils"; import * as git from "@fluidframework/gitresources"; import { FileMode, diff --git a/server/routerlicious/packages/protocol-base/src/quorum.ts b/server/routerlicious/packages/protocol-base/src/quorum.ts index 1b7692f31d9e..d0b3b63e8aed 100644 --- a/server/routerlicious/packages/protocol-base/src/quorum.ts +++ b/server/routerlicious/packages/protocol-base/src/quorum.ts @@ -6,7 +6,7 @@ import events_pkg from "events_pkg"; const { EventEmitter } = events_pkg; -import { TypedEventEmitter } from "@fluidframework/common-utils"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICommittedProposal, IQuorum, diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 635b4d568bc1..88ad268b433c 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -731,15 +731,15 @@ importers: packages/protocol-base: dependencies: - '@fluidframework/common-utils': - specifier: ^3.1.0 - version: 3.1.0 '@fluidframework/gitresources': specifier: workspace:~ version: link:../gitresources '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils events_pkg: specifier: npm:events@^3.1.0 version: events@3.3.0 From c9bf24a4ef2449028e6c75af29ed67b859eb67fb Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:32:52 +0000 Subject: [PATCH 13/38] Move some things to the single packages that use them --- .../packages/common-utils/src/index.ts | 2 -- .../lambdas/src/deli/clientSeqManager.ts | 2 +- .../src => lambdas/src/deli}/heap.ts | 20 ------------------- .../packages/services-core/src/lambdas.ts | 2 +- .../src/safeParser.ts | 1 - 5 files changed, 2 insertions(+), 25 deletions(-) rename server/routerlicious/packages/{common-utils/src => lambdas/src/deli}/heap.ts (90%) rename server/routerlicious/packages/{common-utils => services-core}/src/safeParser.ts (97%) diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index a17f85f15b5c..b81b780e4b5d 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -1,7 +1,5 @@ export { Deferred } from "./deferred"; -export { Heap, IComparer, IHeapNode } from "./heap"; export { delay } from "./delay"; -export { safelyParseJSON } from "./safeParser"; export { TypedEventEmitter } from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; diff --git a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts index c1c5ae298f3b..0c6e883f760c 100644 --- a/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts +++ b/server/routerlicious/packages/lambdas/src/deli/clientSeqManager.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Heap, IComparer, IHeapNode } from "@fluidframework/server-common-utils"; +import { Heap, IComparer, IHeapNode } from "./heap"; import { IClientSequenceNumber } from "@fluidframework/server-services-core"; const SequenceNumberComparer: IComparer = { diff --git a/server/routerlicious/packages/common-utils/src/heap.ts b/server/routerlicious/packages/lambdas/src/deli/heap.ts similarity index 90% rename from server/routerlicious/packages/common-utils/src/heap.ts rename to server/routerlicious/packages/lambdas/src/deli/heap.ts index e9768298ad6a..b6d3909b8870 100644 --- a/server/routerlicious/packages/common-utils/src/heap.ts +++ b/server/routerlicious/packages/lambdas/src/deli/heap.ts @@ -5,7 +5,6 @@ /** * Interface for a comparer. - * @internal */ export interface IComparer { /** @@ -21,26 +20,8 @@ export interface IComparer { compare(a: T, b: T): number; } -/** - * A comparer for numbers. - * @internal - */ -export const NumberComparer: IComparer = { - /** - * The compare function for numbers. - * @returns The difference of the two numbers. - */ - compare: (a, b): number => a - b, - - /** - * The minimum value of a JavaScript number, which is `Number.MIN_VALUE`. - */ - min: Number.MIN_VALUE, -}; - /** * Interface to a node in {@link Heap}. - * @internal */ export interface IHeapNode { value: T; @@ -49,7 +30,6 @@ export interface IHeapNode { /** * Ordered {@link https://en.wikipedia.org/wiki/Heap_(data_structure) | Heap} data structure implementation. - * @internal */ export class Heap { private L: IHeapNode[]; diff --git a/server/routerlicious/packages/services-core/src/lambdas.ts b/server/routerlicious/packages/services-core/src/lambdas.ts index ba54cc0039fe..6b300c19bdb2 100644 --- a/server/routerlicious/packages/services-core/src/lambdas.ts +++ b/server/routerlicious/packages/services-core/src/lambdas.ts @@ -5,9 +5,9 @@ import { EventEmitter } from "events"; import { Provider } from "nconf"; -import { safelyParseJSON } from "@fluidframework/server-common-utils"; import { BoxcarType, IBoxcarMessage, IMessage } from "./messages"; +import { safelyParseJSON } from "./safeParser"; import { IQueuedMessage } from "./queue"; /** diff --git a/server/routerlicious/packages/common-utils/src/safeParser.ts b/server/routerlicious/packages/services-core/src/safeParser.ts similarity index 97% rename from server/routerlicious/packages/common-utils/src/safeParser.ts rename to server/routerlicious/packages/services-core/src/safeParser.ts index e10a87dbe193..f64ebbaca656 100644 --- a/server/routerlicious/packages/common-utils/src/safeParser.ts +++ b/server/routerlicious/packages/services-core/src/safeParser.ts @@ -10,7 +10,6 @@ * * @param json - The JSON string to parse * @returns The result from `JSON.parse` if successful, otherwise `undefined`. - * @internal */ export function safelyParseJSON(json: string): any | undefined { let parsed; From 3fbb74b03f732dca0a9f27f6b377d801329ac241 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:33:03 +0000 Subject: [PATCH 14/38] Remove commented code --- .../packages/common-utils/src/hashFile.ts | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/server/routerlicious/packages/common-utils/src/hashFile.ts b/server/routerlicious/packages/common-utils/src/hashFile.ts index 157981e14f82..a90a38980bcf 100644 --- a/server/routerlicious/packages/common-utils/src/hashFile.ts +++ b/server/routerlicious/packages/common-utils/src/hashFile.ts @@ -5,45 +5,9 @@ // eslint-disable-next-line import/no-internal-modules import sha1 from "sha.js/sha1"; -// // eslint-disable-next-line import/no-internal-modules -// import sha256 from "sha.js/sha256"; import { IsoBuffer } from "./buffer"; -// /** -// * Hash a file. Consistent within a session, but should not be persisted and -// * is not consistent with git. -// * If called under an insecure context for a browser, this will fallback to -// * using the node implementation. -// * -// * @param file - The contents of the file in a buffer. -// * @param algorithm - The hash algorithm to use, artificially constrained by what is used internally. -// * @param hashEncoding - The encoding of the returned hash, also artificially constrained. -// * @returns The hash of the content of the buffer. -// * -// * @deprecated Moved to the `@fluidframework-internal/client-utils` package. -// * @internal -// */ -// export async function hashFile( -// file: IsoBuffer, -// algorithm: "SHA-1" | "SHA-256" = "SHA-1", -// hashEncoding: "hex" | "base64" = "hex", -// ): Promise { -// let engine; -// // eslint-disable-next-line default-case -// switch (algorithm) { -// case "SHA-1": { -// engine = new sha1(); -// break; -// } -// case "SHA-256": { -// engine = new sha256(); -// break; -// } -// } -// return engine.update(file).digest(hashEncoding) as string; -// } - /** * Create a github hash (Github hashes the string with blob and size) * Must be called under secure context for browsers From 800b0e01225f45aff5b834e5d77600d183888c51 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:33:22 +0000 Subject: [PATCH 15/38] Remove some deprecated tags --- .../packages/common-utils/src/typedEventEmitter.ts | 11 ----------- .../packages/common-utils/src/unreachable.ts | 2 -- 2 files changed, 13 deletions(-) diff --git a/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts b/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts index 92c71876f5b5..abd1481cebb7 100644 --- a/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts +++ b/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts @@ -89,13 +89,7 @@ export type ReplaceIEventThisPlaceHolder = L extends any /** * Transforms the event overload by replacing {@link IEventThisPlaceHolder} with `TThis` in the event listener * arguments and having the overload return `TTHis` as well - * - * @deprecated Use {@link @fluidframework/core-interfaces#TransformedEvent} instead. * @internal - * - * @privateremarks - * We need it here because TypedEventEmitter lives here, but otherwise should be removed in favor of the one in - * core-interfaces. */ export type TransformedEvent = ( @@ -112,12 +106,7 @@ export type TransformedEvent = ( * At more than 15 overloads we start to hit {@link https://github.com/microsoft/TypeScript/issues/37209 | TS2589}. * If we need to move beyond 15 we should evaluate using a mapped type pattern like `{"event":(listenerArgs)=>void}` * - * @deprecated Use {@link @fluidframework/core-interfaces#IEventTransformer} instead. * @internal - * - * @privateremarks - * We need it here because TypedEventEmitter lives here, but otherwise should be removed in favor of the one in - * core-interfaces. */ export type IEventTransformer = TEvent extends { (event: infer E0, listener: (...args: infer A0) => void); diff --git a/server/routerlicious/packages/common-utils/src/unreachable.ts b/server/routerlicious/packages/common-utils/src/unreachable.ts index de98d370e4ed..01774dfbda98 100644 --- a/server/routerlicious/packages/common-utils/src/unreachable.ts +++ b/server/routerlicious/packages/common-utils/src/unreachable.ts @@ -17,8 +17,6 @@ * default: unreachableCase(bool); * } * ``` - * - * @deprecated Moved to the `@fluidframework/core-utils` package. * @internal */ export function unreachableCase(_: never, message = "Unreachable Case"): never { From cc345b68edead9ca8dc89d55eb09b1295f6e6d60 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:47:50 +0000 Subject: [PATCH 16/38] Formatting --- .../packages/lambdas/src/scribe/checkpointManager.ts | 2 +- .../routerlicious/packages/lambdas/src/scribe/summaryReader.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts index d2554371f6a0..f4c6c5113e61 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { delay, } from "@fluidframework/server-common-utils"; +import { delay } from "@fluidframework/server-common-utils"; import { ICollection, IContext, diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts index 3080b8a12f7e..7e115359bbe3 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts @@ -7,7 +7,7 @@ import { IDocumentAttributes, ISequencedDocumentMessage, } from "@fluidframework/protocol-definitions"; -import { bufferToString, toUtf8, } from "@fluidframework/server-common-utils"; +import { bufferToString, toUtf8 } from "@fluidframework/server-common-utils"; import { convertWholeFlatSummaryToSnapshotTreeAndBlobs, IGitManager, From b3ee1693b26c2a41dfbffa4ea328d98dd8671356 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:48:12 +0000 Subject: [PATCH 17/38] Use assert from server-common-utils --- server/routerlicious/packages/common-utils/src/assert.ts | 2 -- server/routerlicious/packages/common-utils/src/index.ts | 1 + .../routerlicious/packages/services-client/package.json | 3 +-- .../packages/services-client/src/gitManager.ts | 2 +- .../packages/services-client/src/storageUtils.ts | 2 +- .../services-client/src/summaryTreeUploadManager.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 9 +++------ 7 files changed, 8 insertions(+), 13 deletions(-) diff --git a/server/routerlicious/packages/common-utils/src/assert.ts b/server/routerlicious/packages/common-utils/src/assert.ts index 1f4501be53ee..434aad275c4d 100644 --- a/server/routerlicious/packages/common-utils/src/assert.ts +++ b/server/routerlicious/packages/common-utils/src/assert.ts @@ -12,8 +12,6 @@ * A number should not be specified manually: use a string. * Before a release, policy-check should be run, which will convert any asserts still using strings to * use numbered error codes instead. - * - * @deprecated Moved to the `@fluidframework/core-utils` package. * @internal */ export function assert(condition: boolean, message: string | number): asserts condition { diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index b81b780e4b5d..de1c901f544e 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -5,3 +5,4 @@ export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; export { gitHashFile } from "./hashFile"; export { unreachableCase } from "./unreachable"; +export { assert } from "./assert"; diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index 9219d146657a..ff32d03d9ac6 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -62,7 +62,7 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "assert": "^2.0.0", + "@fluidframework/server-common-utils": "workspace:~", "axios": "^1.7.7", "crc-32": "1.2.0", "debug": "^4.3.4", @@ -77,7 +77,6 @@ "@fluidframework/build-common": "^2.0.3", "@fluidframework/build-tools": "0.52.0-315632", "@fluidframework/eslint-config-fluid": "^5.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client-previous": "npm:@fluidframework/server-services-client@5.0.0", "@microsoft/api-extractor": "^7.45.1", "@types/debug": "^4.1.5", diff --git a/server/routerlicious/packages/services-client/src/gitManager.ts b/server/routerlicious/packages/services-client/src/gitManager.ts index e3a8dbc0fd28..7058d6de0033 100644 --- a/server/routerlicious/packages/services-client/src/gitManager.ts +++ b/server/routerlicious/packages/services-client/src/gitManager.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. */ -import assert from "assert"; import * as resources from "@fluidframework/gitresources"; import { buildGitTreeHierarchy } from "@fluidframework/protocol-base"; import * as api from "@fluidframework/protocol-definitions"; +import { assert } from "@fluidframework/server-common-utils"; import { debug } from "./debug"; import { ICreateRefParamsExternal, diff --git a/server/routerlicious/packages/services-client/src/storageUtils.ts b/server/routerlicious/packages/services-client/src/storageUtils.ts index 532fdfea6691..48890741a01a 100644 --- a/server/routerlicious/packages/services-client/src/storageUtils.ts +++ b/server/routerlicious/packages/services-client/src/storageUtils.ts @@ -4,13 +4,13 @@ */ import { + assert, stringToBuffer, Uint8ArrayToString, unreachableCase, } from "@fluidframework/server-common-utils"; import { getGitType } from "@fluidframework/protocol-base"; import { ISnapshotTree, SummaryObject, SummaryType } from "@fluidframework/protocol-definitions"; -import assert from "assert"; import { ISummaryTree, IWholeSummaryTree, diff --git a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts index cd71bd093f0c..dcc7b1bb0213 100644 --- a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts +++ b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts @@ -4,6 +4,7 @@ */ import { + assert, gitHashFile, IsoBuffer, Uint8ArrayToString, @@ -18,7 +19,6 @@ import { SummaryObject, SummaryType, } from "@fluidframework/protocol-definitions"; -import assert from "assert"; import { ISummaryUploadManager, IGitManager } from "./storage"; import { IWholeSummaryPayloadType } from "./storageContracts"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 88ad268b433c..705a4cdd98dc 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1254,9 +1254,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - assert: - specifier: ^2.0.0 - version: 2.1.0 + '@fluidframework/server-common-utils': + specifier: workspace:~ + version: link:../common-utils axios: specifier: ^1.7.7 version: 1.7.7(debug@4.3.4) @@ -1294,9 +1294,6 @@ importers: '@fluidframework/eslint-config-fluid': specifier: ^5.2.0 version: 5.2.0(eslint@8.55.0)(typescript@5.1.6) - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client-previous': specifier: npm:@fluidframework/server-services-client@5.0.0 version: '@fluidframework/server-services-client@5.0.0' From 7c8334153aa9a19ba60aa7f950284af6ec846523 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:48:33 +0000 Subject: [PATCH 18/38] Formatting --- .../packages/test-utils/src/testDocumentStorage.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts index 9be00ae1ef31..98460c608923 100644 --- a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts +++ b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts @@ -9,11 +9,7 @@ import { ICreateCommitParams, ICreateTreeEntry, } from "@fluidframework/gitresources"; -import { - gitHashFile, - IsoBuffer, - Uint8ArrayToString, -} from "@fluidframework/server-common-utils"; +import { gitHashFile, IsoBuffer, Uint8ArrayToString } from "@fluidframework/server-common-utils"; import { IGitCache, IGitManager, From a883e057ea6a09627943121d88e36738aa36694a Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:49:11 +0000 Subject: [PATCH 19/38] Remove more unneded lint disable comments --- server/routerlicious/packages/tinylicious/src/runner.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index 05d1fca2224b..9e982b9ec01b 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -37,7 +37,6 @@ export class TinyliciousRunner implements IRunner { private readonly tenantManager: ITenantManager, private readonly storage: IDocumentStorage, private readonly mongoManager: MongoManager, - // eslint-disable-next-line import/no-deprecated private readonly collaborationSessionEventEmitter?: TypedEventEmitter, ) {} @@ -45,7 +44,6 @@ export class TinyliciousRunner implements IRunner { const version = process.env.npm_package_version; winston.info(`Starting tinylicious@${version}`); - // eslint-disable-next-line import/no-deprecated this.runningDeferred = new Deferred(); // Make sure provided port is unoccupied From 01001de480ff6807dca3dcf0a6c04660a8b1456b Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:50:59 +0000 Subject: [PATCH 20/38] Fix docs --- server/routerlicious/packages/common-utils/src/assert.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/routerlicious/packages/common-utils/src/assert.ts b/server/routerlicious/packages/common-utils/src/assert.ts index 434aad275c4d..e1aa6b37e70b 100644 --- a/server/routerlicious/packages/common-utils/src/assert.ts +++ b/server/routerlicious/packages/common-utils/src/assert.ts @@ -4,10 +4,9 @@ */ /** - * A browser friendly assert library. - * Use this instead of the 'assert' package, which has a big impact on bundle sizes. - * @param condition - The condition that should be true, if the condition is false an error will be thrown. - * Only use this API when `false` indicates a logic error in the problem and thus a bug that should be fixed. + * Asserts that a condition is true. + * @param condition - The condition that should be true. If the condition is false an error will be thrown. + * Only use this API when `false` indicates a logic error in the program and thus a bug that should be fixed. * @param message - The message to include in the error when the condition does not hold. * A number should not be specified manually: use a string. * Before a release, policy-check should be run, which will convert any asserts still using strings to From abc1360e994bb1c82fa23bfb2ef157a0b4f06140 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 18:53:33 +0000 Subject: [PATCH 21/38] Undo assert changes --- .../packages/services-client/src/storageUtils.ts | 2 +- .../services-client/src/summaryTreeUploadManager.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/routerlicious/packages/services-client/src/storageUtils.ts b/server/routerlicious/packages/services-client/src/storageUtils.ts index 48890741a01a..526bf1bf76b5 100644 --- a/server/routerlicious/packages/services-client/src/storageUtils.ts +++ b/server/routerlicious/packages/services-client/src/storageUtils.ts @@ -124,7 +124,7 @@ export function convertSummaryTreeToWholeSummaryTree( if (value) { assert( id === undefined, - "Snapshot entry has both a tree value and a referenced id!" /* 0x0ad */, + 0x0ad /* "Snapshot entry has both a tree value and a referenced id!" */, ); entry = { value, diff --git a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts index dcc7b1bb0213..26697b578ef4 100644 --- a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts +++ b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts @@ -116,7 +116,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { if (!this.blobsShaCache.has(hash)) { this.blobsShaCache.set(hash, ""); const blob = await this.manager.createBlob(parsedContent, encoding); - assert(hash === blob.sha, "Blob.sha and hash do not match!!" /* 0x0b6 */); + assert(hash === blob.sha, 0x0b6 /* "Blob.sha and hash do not match!!" */); } return hash; } @@ -144,7 +144,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { /** Previous snapshot, subtree relative to this path part */ previousSnapshot: ISnapshotTreeEx, ): string { - assert(path.length > 0, "Expected at least 1 path part" /* 0x0b3 */); + assert(path.length > 0, 0x0b3 /* "Expected at least 1 path part" */); const key = path[0]; if (path.length === 1) { switch (handleType) { @@ -152,7 +152,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { const tryId = previousSnapshot.blobs[key]; assert( !!tryId, - "Parent summary does not have blob handle for specified path." /* 0x0b4 */, + 0x0b4 /* "Parent summary does not have blob handle for specified path." */, ); return tryId; } @@ -160,7 +160,7 @@ export class SummaryTreeUploadManager implements ISummaryUploadManager { const tryId = previousSnapshot.trees[key]?.id; assert( !!tryId, - "Parent summary does not have tree handle for specified path." /* 0x0b5 */, + 0x0b5 /* "Parent summary does not have tree handle for specified path." */, ); return tryId; } From 545804d964268042fc9e30b2fbd041cd4ff6564b Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:34:48 +0000 Subject: [PATCH 22/38] Cleanup and fix build of server-common-utils --- layerInfo.json | 2 +- server/routerlicious/Dockerfile | 1 + server/routerlicious/feeds/internal-build.txt | 3 +- server/routerlicious/feeds/internal-test.txt | 3 +- server/routerlicious/feeds/public.txt | 3 +- .../packages/common-utils/.eslintrc.cjs | 31 +- .../common-utils/api-extractor-lint.json | 4 + .../packages/common-utils/api-extractor.json | 4 + .../api-report/server-common-utils.api.md | 272 ++++ .../common-utils/jest-puppeteer.config.cjs | 13 + .../packages/common-utils/jest.config.cjs | 20 + .../packages/common-utils/package.json | 48 +- .../packages/common-utils/src/index.ts | 19 +- .../src/test/jest/gitHash.spec.ts | 26 +- .../api-report/protocol-base.api.md | 2 +- .../packages/protocol-base/package.json | 2 +- server/routerlicious/pnpm-lock.yaml | 1433 +---------------- 17 files changed, 475 insertions(+), 1411 deletions(-) create mode 100644 server/routerlicious/packages/common-utils/api-extractor-lint.json create mode 100644 server/routerlicious/packages/common-utils/api-extractor.json create mode 100644 server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md create mode 100644 server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs create mode 100644 server/routerlicious/packages/common-utils/jest.config.cjs diff --git a/layerInfo.json b/layerInfo.json index 0db9fc1396f0..a0a5afbbe878 100644 --- a/layerInfo.json +++ b/layerInfo.json @@ -30,7 +30,7 @@ "Utils": { "layers": { "Common-Utils": { - "packages": ["@fluidframework/common-utils"], + "packages": ["@fluidframework/common-utils", "@fluidframework/server-common-utils"], "deps": ["Common-Definitions"] }, "Core-Utils": { diff --git a/server/routerlicious/Dockerfile b/server/routerlicious/Dockerfile index ad9af5375ce4..54538196507b 100644 --- a/server/routerlicious/Dockerfile +++ b/server/routerlicious/Dockerfile @@ -57,6 +57,7 @@ COPY lerna.json ./ COPY scripts/*.* ./scripts/ COPY patches/*.* ./patches/ +COPY packages/common-utils/package*.json packages/common-utils/ COPY packages/gitresources/package*.json packages/gitresources/ COPY packages/kafka-orderer/package*.json packages/kafka-orderer/ COPY packages/lambdas-driver/package*.json packages/lambdas-driver/ diff --git a/server/routerlicious/feeds/internal-build.txt b/server/routerlicious/feeds/internal-build.txt index a8e4f2b9104e..cea8d9ea88c7 100644 --- a/server/routerlicious/feeds/internal-build.txt +++ b/server/routerlicious/feeds/internal-build.txt @@ -17,4 +17,5 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources \ No newline at end of file +@fluidframework/gitresources +@fluidframework/server-common-utils \ No newline at end of file diff --git a/server/routerlicious/feeds/internal-test.txt b/server/routerlicious/feeds/internal-test.txt index a8e4f2b9104e..cea8d9ea88c7 100644 --- a/server/routerlicious/feeds/internal-test.txt +++ b/server/routerlicious/feeds/internal-test.txt @@ -17,4 +17,5 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources \ No newline at end of file +@fluidframework/gitresources +@fluidframework/server-common-utils \ No newline at end of file diff --git a/server/routerlicious/feeds/public.txt b/server/routerlicious/feeds/public.txt index a8e4f2b9104e..cea8d9ea88c7 100644 --- a/server/routerlicious/feeds/public.txt +++ b/server/routerlicious/feeds/public.txt @@ -17,4 +17,5 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources \ No newline at end of file +@fluidframework/gitresources +@fluidframework/server-common-utils \ No newline at end of file diff --git a/server/routerlicious/packages/common-utils/.eslintrc.cjs b/server/routerlicious/packages/common-utils/.eslintrc.cjs index ee788a651853..a4cbed9906e8 100644 --- a/server/routerlicious/packages/common-utils/.eslintrc.cjs +++ b/server/routerlicious/packages/common-utils/.eslintrc.cjs @@ -4,22 +4,29 @@ */ module.exports = { - extends: [ - require.resolve("@fluidframework/eslint-config-fluid/minimal-deprecated"), - "prettier", - ], + extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], parserOptions: { - project: ["./tsconfig.json", "./src/test/tsconfig.json"], + project: [ + "./tsconfig.json", + "./src/test/mocha/tsconfig.json", + "./src/test/jest/tsconfig.json", + "./src/test/types/tsconfig.json", + ], }, rules: { + // The whole server release group is intended to run in NodeJS; this is fine "import/no-nodejs-modules": "off", - "promise/catch-or-return": ["error", { allowFinally: true }], - // TODO: enable strict null checks in tsconfig and remove these overrides - "@typescript-eslint/prefer-nullish-coalescing": "off", - "@typescript-eslint/strict-boolean-expressions": "off", - - // TODO: remove usages of deprecated APIs and remove this override - "import/no-deprecated": "warn", + // This package has been deprecated. The following rules have a significant number of violations + // that will not be fixed here. + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "unicorn/text-encoding-identifier-case": "off", + "unicorn/prefer-node-protocol": "off", + "unicorn/prefer-code-point": "off", }, }; diff --git a/server/routerlicious/packages/common-utils/api-extractor-lint.json b/server/routerlicious/packages/common-utils/api-extractor-lint.json new file mode 100644 index 000000000000..0f9ae261139c --- /dev/null +++ b/server/routerlicious/packages/common-utils/api-extractor-lint.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../api-extractor-lint-base.json" +} diff --git a/server/routerlicious/packages/common-utils/api-extractor.json b/server/routerlicious/packages/common-utils/api-extractor.json new file mode 100644 index 000000000000..a2b0a68fb307 --- /dev/null +++ b/server/routerlicious/packages/common-utils/api-extractor.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../api-extractor-build-base.json" +} diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md new file mode 100644 index 000000000000..83af67330009 --- /dev/null +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -0,0 +1,272 @@ +## API Report File for "@fluidframework/server-common-utils" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { EventEmitter } from 'events'; + +// @internal +export function assert(condition: boolean, message: string | number): asserts condition; + +// @internal +export class Buffer extends Uint8Array { + // (undocumented) + static from(value: any, encodingOrOffset?: any, length?: any): IsoBuffer; + // (undocumented) + static isBuffer(obj: any): obj is Buffer; + // (undocumented) + toString(encoding?: string): string; +} + +// @internal +export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; + +// @internal +export class Deferred { + constructor(); + get isCompleted(): boolean; + get promise(): Promise; + reject(error: any): void; + resolve(value: T | PromiseLike): void; +} + +// @internal +export const delay: (timeMs: number) => Promise; + +// @internal +export type EventEmitterEventType = EventEmitter extends { + on(event: infer E, listener: any): any; +} ? E : never; + +// @internal +export const fromBase64ToUtf8: (input: string) => string; + +// @internal +export const fromUtf8ToBase64: (input: string) => string; + +// @internal +export function gitHashFile(file: IsoBuffer): Promise; + +// @internal +export interface IEvent { + // @eventProperty + (event: string, listener: (...args: any[]) => void): any; +} + +// @internal +export interface IEventProvider { + readonly off: IEventTransformer; + readonly on: IEventTransformer; + readonly once: IEventTransformer; +} + +// @internal +export type IEventThisPlaceHolder = { + thisPlaceHolder: "thisPlaceHolder"; +}; + +// @internal +export type IEventTransformer = TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: infer E13, listener: (...args: infer A13) => void): any; + (event: infer E14, listener: (...args: infer A14) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: infer E13, listener: (...args: infer A13) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent : TransformedEvent; + +// @internal (undocumented) +export const IsoBuffer: typeof Buffer; + +// @internal (undocumented) +export type IsoBuffer = Buffer; + +// @internal +export type ReplaceIEventThisPlaceHolder = L extends any[] ? { + [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K]; +} : L; + +// @internal +export function stringToBuffer(input: string, encoding: string): ArrayBufferLike; + +// @internal +export const toUtf8: (input: string, encoding: string) => string; + +// @internal +export type TransformedEvent = (event: E, listener: (...args: ReplaceIEventThisPlaceHolder) => void) => TThis; + +// @internal +export class TypedEventEmitter extends EventEmitter implements IEventProvider { + constructor(); + // (undocumented) + readonly addListener: TypedEventTransform; + // (undocumented) + readonly off: TypedEventTransform; + // (undocumented) + readonly on: TypedEventTransform; + // (undocumented) + readonly once: TypedEventTransform; + // (undocumented) + readonly prependListener: TypedEventTransform; + // (undocumented) + readonly prependOnceListener: TypedEventTransform; + // (undocumented) + readonly removeListener: TypedEventTransform; +} + +// @internal (undocumented) +export type TypedEventTransform = TransformedEvent void) => void>> & IEventTransformer & TransformedEvent; + +// @internal +export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string; + +// @internal +export function unreachableCase(_: never, message?: string): never; + +// (No @packageDocumentation comment for this package) + +``` diff --git a/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs b/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs new file mode 100644 index 000000000000..d3d15152b332 --- /dev/null +++ b/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs @@ -0,0 +1,13 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + launch: { + args: ["--no-sandbox", "--disable-setuid-sandbox"], // https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#setting-up-chrome-linux-sandbox + dumpio: true, // output browser console to cmd line + // slowMo: 500, // slows down process for easier viewing + // headless: false, // run in the browser + }, +}; diff --git a/server/routerlicious/packages/common-utils/jest.config.cjs b/server/routerlicious/packages/common-utils/jest.config.cjs new file mode 100644 index 000000000000..5c79d7095fdf --- /dev/null +++ b/server/routerlicious/packages/common-utils/jest.config.cjs @@ -0,0 +1,20 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + preset: "jest-puppeteer", + testMatch: ["**/dist/test/jest/?(*.)+(spec|test).js"], + testPathIgnorePatterns: ["/node_modules/"], + reporters: [ + "default", + [ + "jest-junit", + { + outputDirectory: "nyc", + outputName: "jest-junit-report.xml", + }, + ], + ], +}; diff --git a/server/routerlicious/packages/common-utils/package.json b/server/routerlicious/packages/common-utils/package.json index 14e4001b1642..304daf46fc59 100644 --- a/server/routerlicious/packages/common-utils/package.json +++ b/server/routerlicious/packages/common-utils/package.json @@ -25,11 +25,12 @@ "build:test:jest": "tsc --project ./src/test/jest/tsconfig.json", "build:test:mocha": "tsc --project ./src/test/mocha/tsconfig.json", "build:test:types": "tsc --project ./src/test/types/tsconfig.json", - "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc", + "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json", + "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc _api-extractor-temp", "eslint": "eslint --format stylish src", "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout", "format": "npm run prettier:fix", - "lint": "npm run prettier && npm run eslint", + "lint": "npm run prettier && npm run check:release-tags && npm run eslint", "lint:fix": "npm run prettier:fix && npm run eslint:fix", "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", @@ -45,48 +46,55 @@ "typetests:gen": "flub generate typetests --dir . -v", "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, + "c8": { + "all": true, + "cache-dir": "nyc/.cache", + "exclude": [ + "src/test/**/*.*ts", + "dist/test/**/*.*js" + ], + "exclude-after-remap": false, + "include": [ + "src/**/*.*ts", + "dist/**/*.*js" + ], + "report-dir": "nyc/report", + "reporter": [ + "cobertura", + "html", + "text" + ], + "temp-directory": "nyc/.nyc_output" + }, "dependencies": { "@types/events": "^3.0.0", - "base64-js": "^1.5.1", - "buffer": "^6.0.3", "events": "^3.1.0", - "lodash": "^4.17.21", "sha.js": "^2.4.11" }, "devDependencies": { - "@fluid-tools/build-cli": "^0.49.0", + "@fluid-tools/build-cli": "0.52.0-315632", "@fluidframework/build-common": "^2.0.3", - "@fluidframework/build-tools": "^0.49.0", - "@fluidframework/eslint-config-fluid": "^5.5.1", + "@fluidframework/build-tools": "0.52.0-315632", + "@fluidframework/eslint-config-fluid": "^5.2.0", "@microsoft/api-extractor": "^7.45.1", - "@types/base64-js": "^1.3.0", - "@types/benchmark": "^2.1.0", "@types/jest": "29.5.3", "@types/jest-environment-puppeteer": "2.2.0", "@types/mocha": "^10.0.10", "@types/node": "^18.19.39", - "@types/sinon": "^17.0.3", - "benchmark": "^2.1.4", "c8": "^8.0.1", "concurrently": "^8.2.1", "copyfiles": "^2.4.1", "cross-env": "^7.0.3", "eslint": "~8.55.0", - "eslint-config-prettier": "~9.0.0", "jest": "^29.6.2", "jest-junit": "^10.0.0", "jest-puppeteer": "^10.1.3", "mocha": "^10.2.0", - "mocha-multi-reporters": "^1.5.1", - "moment": "^2.21.0", "prettier": "~3.0.3", "puppeteer": "^23.6.0", "rewire": "^5.0.0", - "rimraf": "^4.4.1", - "sinon": "^18.0.1", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "typescript": "~5.4.5" + "rimraf": "^4.4.0", + "typescript": "~5.1.6" }, "fluidBuild": { "tasks": { diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index de1c901f544e..fd9a4342ef6f 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -1,8 +1,23 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + export { Deferred } from "./deferred"; export { delay } from "./delay"; -export { TypedEventEmitter } from "./typedEventEmitter"; +export { + TypedEventEmitter, + TypedEventTransform, + IEvent, + IEventProvider, + IEventTransformer, + TransformedEvent, + EventEmitterEventType, + IEventThisPlaceHolder, + ReplaceIEventThisPlaceHolder, +} from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; -export { IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; +export { Buffer, IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; export { gitHashFile } from "./hashFile"; export { unreachableCase } from "./unreachable"; export { assert } from "./assert"; diff --git a/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts b/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts index 3509290191d9..15320d11974e 100644 --- a/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts +++ b/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts @@ -125,10 +125,12 @@ describe("Common-Utils", () => { // Navigate to the local test server so crypto is available await page.goto(`http://localhost:${port}`, { waitUntil: "load", timeout: 0 }); + /* eslint-disable unicorn/prefer-module */ xmlFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/book.xml`)); svgFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/bindy.svg`)); pdfFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/aka.pdf`)); gifFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/grid.gif`)); + /* eslint-enable unicorn/prefer-module */ }); afterAll(async () => { @@ -188,28 +190,4 @@ describe("Common-Utils", () => { expect(hash1Browser).toEqual(hash2Browser); }); }); - - // describe("hashFile", () => { - // test("SHA256 hashes match", async () => { - // const expectedHash = "9b8abd0b90324ffce0b6a9630e5c4301972c364ed9aeb7e7329e424a4ae8a630"; - // const hashNode = await HashNode.hashFile(svgFile, "SHA-256"); - // const hashBrowser = await evaluateBrowserHash(page, svgFile, "SHA-256"); - // expect(hashNode).toEqual(expectedHash); - // expect(hashBrowser).toEqual(expectedHash); - // }); - - // test("base64 encoded hashes match", async () => { - // const expectedHash1 = "4/nXhjtBQhhvXTNNSNq/cJgb4sQ="; - // const hashNode1 = await HashNode.hashFile(xmlFile, "SHA-1", "base64"); - // const hashBrowser1 = await evaluateBrowserHash(page, xmlFile, "SHA-1", "base64"); - // expect(hashNode1).toEqual(expectedHash1); - // expect(hashBrowser1).toEqual(expectedHash1); - - // const expectedHash256 = "QPQh34aj1TNmyo34aPDA0vMIU7r5QC/6KNgIzlLYiFY="; - // const hashNode256 = await HashNode.hashFile(pdfFile, "SHA-256", "base64"); - // const hashBrowser256 = await evaluateBrowserHash(page, pdfFile, "SHA-256", "base64"); - // expect(hashNode256).toEqual(expectedHash256); - // expect(hashBrowser256).toEqual(expectedHash256); - // }); - // }); }); diff --git a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md index e7ad0b4ee9cf..846751303dbd 100644 --- a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md +++ b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md @@ -16,7 +16,7 @@ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions' import { ISequencedProposal } from '@fluidframework/protocol-definitions'; import { ISnapshotTreeEx } from '@fluidframework/protocol-definitions'; import { SummaryObject } from '@fluidframework/protocol-definitions'; -import { TypedEventEmitter } from '@fluidframework/common-utils'; +import { TypedEventEmitter } from '@fluidframework/server-common-utils'; // @internal export function buildGitTreeHierarchy(flatTree: git.ITree, blobsShaToPathCache?: Map, removeAppTreePrefix?: boolean): ISnapshotTreeEx; diff --git a/server/routerlicious/packages/protocol-base/package.json b/server/routerlicious/packages/protocol-base/package.json index 9bf36c97901f..e99672cef6b9 100644 --- a/server/routerlicious/packages/protocol-base/package.json +++ b/server/routerlicious/packages/protocol-base/package.json @@ -59,9 +59,9 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", + "@fluidframework/server-common-utils": "workspace:~", "events_pkg": "npm:events@^3.1.0" }, "devDependencies": { diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 705a4cdd98dc..808144f300c1 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -74,61 +74,40 @@ importers: '@types/events': specifier: ^3.0.0 version: 3.0.3 - base64-js: - specifier: ^1.5.1 - version: 1.5.1 - buffer: - specifier: ^6.0.3 - version: 6.0.3 events: specifier: ^3.1.0 version: 3.3.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 sha.js: specifier: ^2.4.11 version: 2.4.11 devDependencies: '@fluid-tools/build-cli': - specifier: ^0.49.0 - version: 0.49.0(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.4.5) + specifier: 0.52.0-315632 + version: 0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6) '@fluidframework/build-common': specifier: ^2.0.3 version: 2.0.3 '@fluidframework/build-tools': - specifier: ^0.49.0 - version: 0.49.0(@types/node@18.19.39) + specifier: 0.52.0-315632 + version: 0.52.0-315632(@types/node@18.19.39) '@fluidframework/eslint-config-fluid': - specifier: ^5.5.1 - version: 5.7.3(eslint@8.55.0)(typescript@5.4.5) + specifier: ^5.2.0 + version: 5.2.0(eslint@8.55.0)(typescript@5.1.6) '@microsoft/api-extractor': specifier: ^7.45.1 version: 7.49.1(@types/node@18.19.39) - '@types/base64-js': - specifier: ^1.3.0 - version: 1.3.2 - '@types/benchmark': - specifier: ^2.1.0 - version: 2.1.5 '@types/jest': specifier: 29.5.3 version: 29.5.3 '@types/jest-environment-puppeteer': specifier: 2.2.0 - version: 2.2.0(typescript@5.4.5) + version: 2.2.0(typescript@5.1.6) '@types/mocha': specifier: ^10.0.10 version: 10.0.10 '@types/node': specifier: ^18.19.39 version: 18.19.39 - '@types/sinon': - specifier: ^17.0.3 - version: 17.0.3 - benchmark: - specifier: ^2.1.4 - version: 2.1.4 c8: specifier: ^8.0.1 version: 8.0.1 @@ -144,51 +123,33 @@ importers: eslint: specifier: ~8.55.0 version: 8.55.0 - eslint-config-prettier: - specifier: ~9.0.0 - version: 9.0.0(eslint@8.55.0) jest: specifier: ^29.6.2 - version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) jest-junit: specifier: ^10.0.0 version: 10.0.0 jest-puppeteer: specifier: ^10.1.3 - version: 10.1.4(puppeteer@23.11.1(typescript@5.4.5))(typescript@5.4.5) + version: 10.1.4(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6) mocha: specifier: ^10.2.0 version: 10.2.0 - mocha-multi-reporters: - specifier: ^1.5.1 - version: 1.5.1(mocha@10.2.0) - moment: - specifier: ^2.21.0 - version: 2.29.4 prettier: specifier: ~3.0.3 version: 3.0.3 puppeteer: specifier: ^23.6.0 - version: 23.11.1(typescript@5.4.5) + version: 23.11.1(typescript@5.1.6) rewire: specifier: ^5.0.0 version: 5.0.0 rimraf: - specifier: ^4.4.1 + specifier: ^4.4.0 version: 4.4.1 - sinon: - specifier: ^18.0.1 - version: 18.0.1 - ts-jest: - specifier: ^29.1.1 - version: 29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5) - ts-node: - specifier: ^10.9.1 - version: 10.9.2(@types/node@18.19.39)(typescript@5.4.5) typescript: - specifier: ~5.4.5 - version: 5.4.5 + specifier: ~5.1.6 + version: 5.1.6 packages/gitresources: devDependencies: @@ -2709,9 +2670,6 @@ packages: '@fluid-internal/eslint-plugin-fluid@0.1.1': resolution: {integrity: sha512-7CNeAjn81BPvq/BKc1nQo/6HUZXg4KUAglFuCX6HFCnpGPrDLdm7cdkrGyA1tExB1EGnCAPFzVNbSqSYcwJnag==} - '@fluid-internal/eslint-plugin-fluid@0.1.5': - resolution: {integrity: sha512-p0nVeMiEfLL2deQJQaRUxid08jgV5wEkh9h9WXNosR1BRq9nFCjD8nZpC1K+YhjwQZEvgGDE+s+28VR2lAg61Q==} - '@fluid-internal/mocha-test-setup@2.0.5': resolution: {integrity: sha512-oSPv7nJKbyhMBWzSIRsu1h1WXXOaT2/cwD5qSeKsUZTIUVXsd5FdIUOdV/vc7hAEoJI/JLXZeauVrJHe/qlv6g==} @@ -2721,21 +2679,11 @@ packages: '@fluid-private/changelog-generator-wrapper@file:../../packages/tools/changelog-generator-wrapper': resolution: {directory: ../../packages/tools/changelog-generator-wrapper, type: directory} - '@fluid-tools/build-cli@0.49.0': - resolution: {integrity: sha512-V9h8OCJDvSz8m4zmeCO6y8DJi972BSFp3YO6S/R1v7J/CpaG5A6v1Di0Kp5+JYf+sQ2ILoBaEvdjCp3ii+eYTw==} - engines: {node: '>=18.17.1'} - hasBin: true - '@fluid-tools/build-cli@0.52.0-315632': resolution: {integrity: sha512-mCnlGVEhssycNqW6N0xFjcbGjHsNG2aj+9gPtBdd4L0tWLMJyLag7SRfORdvcAuSUhvhiYbEdSGhwvRzkBl/Rw==} engines: {node: '>=18.17.1'} hasBin: true - '@fluid-tools/version-tools@0.49.0': - resolution: {integrity: sha512-3BI1rmCBx7ZZGhuchtwCNgL6XSRMRtDtflvi2ks7dKE04T8WoKxUwi3+YNVlXf5XlcSLtwprbRjnraIA2rjgAQ==} - engines: {node: '>=18.17.1'} - hasBin: true - '@fluid-tools/version-tools@0.52.0-315632': resolution: {integrity: sha512-GLglzryXTGCiBtxBnXOJcloepJhDFtujzkSqXgOMIHTMU8w+8P5qiLNDOa0N1kQHlb6Wt47sCoHG6Cz+bBQ7+Q==} engines: {node: '>=18.17.1'} @@ -2745,19 +2693,11 @@ packages: resolution: {integrity: sha512-1LU/2uyCeMxf63z5rhFOFEBvFyBogZ7ZXwzXLxyBhSgq/fGiq8PLjBW7uX++r0LcVCdaWyopf7w060eJpANYdg==} hasBin: true - '@fluidframework/build-tools@0.49.0': - resolution: {integrity: sha512-hz5xf320HfbnpziCOw1I+BqbYktaJbtX5nuSsjSSvJJTzm/RPM+kvRgp02isG8kF1WKhMsMwueHwcNek+sHOxQ==} - engines: {node: '>=18.17.1'} - hasBin: true - '@fluidframework/build-tools@0.52.0-315632': resolution: {integrity: sha512-L0mwaMA12xppnng21dp64nCJ6As06XOWsbG+pSi3T1n8RCharRkgUVNH7fGW+OeIUnBDGgqCp/k+I/AKnQfaww==} engines: {node: '>=18.17.1'} hasBin: true - '@fluidframework/bundle-size-tools@0.49.0': - resolution: {integrity: sha512-SUrWc931wwOkwIERX282SmHUVjXz0mRhlYIoY68DkYVZ3XuUrKaVvHbJB6a3ek+TIX33zg90HKFNkp9K56m0SQ==} - '@fluidframework/bundle-size-tools@0.52.0-315632': resolution: {integrity: sha512-QHxAJDXqtngI3d1Qfxp+xNvPw2nIwEcT74yLYpNXTYOEyChffHtI6KZ/LpSjiogTeB0YnwR9egK4X2A/57esBQ==} @@ -2776,9 +2716,6 @@ packages: '@fluidframework/eslint-config-fluid@5.2.0': resolution: {integrity: sha512-FGAt7QIm//36j+ZiiIAj1+LZ6NYP2UJLwE5NT70ztgjl90jaCEWZUgoGUgPUWB9CpTmVZYo1+dGWOSsMLHidJA==} - '@fluidframework/eslint-config-fluid@5.7.3': - resolution: {integrity: sha512-/+6JDYTM4k4F7wHDMCIxXwmf9oWP9OmUyYJSPtWd0VQhdRomfdClicdajHIHQd9RWbo2SdZSXEsllKRT6s/9+Q==} - '@fluidframework/gitresources@5.0.0': resolution: {integrity: sha512-nfam1KT+EUqFCENHcxrU9VwUfbhUC83UcLuOsdLpn9I7VuClL+w8KMWosoYauZraO9gDhTo2kCErjgQji5GzGA==} @@ -2839,23 +2776,10 @@ packages: '@fluidframework/server-test-utils@5.0.0': resolution: {integrity: sha512-FOZ1Faw6x8VALUZh/nY6zKCfpgbPK/ylpKf/uQ2oOV9sxGNQfo5NXyHlQP1b78wfx2OYyHY5njtvYl7i9tz/zg==} - '@gitbeaker/core@35.8.1': - resolution: {integrity: sha512-KBrDykVKSmU9Q9Gly8KeHOgdc0lZSa435srECxuO0FGqqBcUQ82hPqUc13YFkkdOI9T1JRA3qSFajg8ds0mZKA==} - engines: {node: '>=14.2.0'} - '@gitbeaker/core@38.12.1': resolution: {integrity: sha512-8XMVcBIdVAAoxn7JtqmZ2Ee8f+AZLcCPmqEmPFOXY2jPS84y/DERISg/+sbhhb18iRy+ZsZhpWgQ/r3CkYNJOQ==} engines: {node: '>=18.0.0'} - '@gitbeaker/node@35.8.1': - resolution: {integrity: sha512-g6rX853y61qNhzq9cWtxIEoe2KDeFBtXAeWMGWJnc3nz3WRump2pIICvJqw/yobLZqmTNt+ea6w3/n92Mnbn3g==} - engines: {node: '>=14.2.0'} - deprecated: Please use its successor @gitbeaker/rest - - '@gitbeaker/requester-utils@35.8.1': - resolution: {integrity: sha512-MFzdH+Z6eJaCZA5ruWsyvm6SXRyrQHjYVR6aY8POFraIy7ceIHOprWCs1R+0ydDZ8KtBnd8OTHjlJ0sLtSFJCg==} - engines: {node: '>=14.2.0'} - '@gitbeaker/requester-utils@38.12.1': resolution: {integrity: sha512-Rc/DgngS0YPN+AY1s9UnexKSy4Lh0bkQVAq9p7PRbRpXb33SlTeCg8eg/8+A/mrMcHgYmP0XhH8lkizyA5tBUQ==} engines: {node: '>=18.0.0'} @@ -3180,10 +3104,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - '@npmcli/fs@3.1.0': resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3240,10 +3160,6 @@ packages: '@octokit/auth-token@2.5.0': resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} - '@octokit/auth-token@3.0.4': - resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} - engines: {node: '>= 14'} - '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -3255,10 +3171,6 @@ packages: '@octokit/core@3.6.0': resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} - '@octokit/core@4.2.4': - resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} - engines: {node: '>= 14'} - '@octokit/core@5.2.0': resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} @@ -3274,10 +3186,6 @@ packages: '@octokit/endpoint@6.0.12': resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} - '@octokit/endpoint@7.0.6': - resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} - engines: {node: '>= 14'} - '@octokit/endpoint@9.0.5': resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} @@ -3285,10 +3193,6 @@ packages: '@octokit/graphql@4.8.0': resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} - '@octokit/graphql@5.0.6': - resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} - engines: {node: '>= 14'} - '@octokit/graphql@7.1.0': resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} @@ -3300,9 +3204,6 @@ packages: '@octokit/openapi-types@12.11.0': resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - '@octokit/openapi-types@18.1.1': - resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} - '@octokit/openapi-types@23.0.1': resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} @@ -3342,10 +3243,6 @@ packages: '@octokit/request-error@2.1.0': resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} - '@octokit/request-error@3.0.3': - resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} - engines: {node: '>= 14'} - '@octokit/request-error@5.1.0': resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} @@ -3357,10 +3254,6 @@ packages: '@octokit/request@5.6.3': resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} - '@octokit/request@6.2.8': - resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} - engines: {node: '>= 14'} - '@octokit/request@8.4.0': resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} @@ -3382,9 +3275,6 @@ packages: '@octokit/types@6.41.0': resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} - '@octokit/types@9.3.2': - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -3441,14 +3331,6 @@ packages: '@types/node': optional: true - '@rushstack/node-core-library@3.66.1': - resolution: {integrity: sha512-ker69cVKAoar7MMtDFZC4CzcDxjwqIhFzqEnYI5NRN/8M3om6saWCVx/A7vL2t/jFCJsnzQplRDqA7c78pytng==} - peerDependencies: - '@types/node': ^18.19.39 - peerDependenciesMeta: - '@types/node': - optional: true - '@rushstack/node-core-library@5.10.2': resolution: {integrity: sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==} peerDependencies: @@ -3519,14 +3401,6 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@0.14.0': - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - '@sindresorhus/is@5.4.1': resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} engines: {node: '>=14.16'} @@ -3712,14 +3586,6 @@ packages: '@socket.io/sticky@1.0.4': resolution: {integrity: sha512-VuauT5CJLvzYtKIgouFSQ8rUaygseR+zRutnwh6ZA2QYcXx+8g52EoJ8V2SLxfo+Tfs3ELUDy08oEXxlWNrxaw==} - '@szmarczak/http-timer@1.1.2': - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -3781,12 +3647,6 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/base64-js@1.3.2': - resolution: {integrity: sha512-Q2Xn2/vQHRGLRXhQ5+BSLwhHkR3JVflxVKywH0Q6fVoAiUE8fFYL2pE5/l2ZiOiBDfA8qUqRnSxln4G/NFz1Sg==} - - '@types/benchmark@2.1.5': - resolution: {integrity: sha512-cKio2eFB3v7qmKcvIHLUMw/dIx/8bhWPuzpzRT4unCPRTD8VdA9Zb0afxpcxOqR4PixRS7yT42FqGS8BYL8g1w==} - '@types/bluebird@3.5.38': resolution: {integrity: sha512-yR/Kxc0dd4FfwtEoLZMoqJbM/VE/W7hXn/MIjb+axcwag0iFmSPK7OBUZq1YWLynJUoWQkfUrI7T0HDqGApNSg==} @@ -3796,9 +3656,6 @@ packages: '@types/bytes@3.1.1': resolution: {integrity: sha512-lOGyCnw+2JVPKU3wIV0srU0NyALwTBJlVSx5DfMQOFuuohA8y9S8orImpuIQikZ0uIQ8gehrRjxgQC1rLRi11w==} - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/compression@0.0.33': resolution: {integrity: sha512-mCDw1g4Y7UEEkYYu/0qd07JuTD7DT2KGI9fGvaStsNc8T8+RKFUZJHAfGizvymm3OkLo9Hrpf+pRAc6804+mdA==} @@ -3904,9 +3761,6 @@ packages: '@types/jsrsasign@10.5.12': resolution: {integrity: sha512-sOA+eVnHU+FziThpMhuqs/tjFKe5gHVJKIS7g1BzhXP+e2FS8OvtzM0K3IzFxVksDOr98Gz5FJiZVxZ9uFoHhw==} - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/lodash@4.14.195': resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} @@ -3989,9 +3843,6 @@ packages: '@types/react@18.3.18': resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - '@types/rimraf@3.0.2': resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} @@ -4084,16 +3935,6 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/parser@6.7.5': resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4108,10 +3949,6 @@ packages: resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@6.7.5': resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4130,10 +3967,6 @@ packages: resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@6.7.5': resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4147,15 +3980,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@6.7.5': resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4181,10 +4005,6 @@ packages: resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@6.7.5': resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4689,9 +4509,6 @@ packages: before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - benchmark@2.1.4: - resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} - better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -4716,9 +4533,6 @@ packages: bl@2.2.1: resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blessed@0.1.81: resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} engines: {node: '>= 0.8.0'} @@ -4764,10 +4578,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4839,10 +4649,6 @@ packages: resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -4851,14 +4657,6 @@ packages: resolution: {integrity: sha512-kn0t0oJnlFo1Nzl/AYQzS/oByMtmaqLasFUa7MUMsiTrIHy8TxSkx2KzWCybE3Nuz1F4sJRGnLAfUGsPe47viQ==} engines: {node: '>=14.16'} - cacheable-request@6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -5046,13 +4844,6 @@ packages: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} @@ -5290,20 +5081,11 @@ packages: resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} engines: {node: '>=0.8'} - danger@11.3.1: - resolution: {integrity: sha512-+slkGnbf0czY7g4LSuYpYkKJgFrb9YIXFJvV5JAuLLF39CXLlUw0iebgeL3ASK1t6RDb8xe+Rk2F5ilh2Hdv2w==} - engines: {node: '>=14.13.1'} - hasBin: true - danger@12.3.3: resolution: {integrity: sha512-nZKzpgXN21rr4dwa6bFhM7G2JEa79dZRJiT3RVRSyi4yk1/hgZ2f8HDGoa7tMladTmu8WjJFyE3LpBIihh+aDw==} engines: {node: '>=18'} hasBin: true - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-uri-to-buffer@6.0.1: resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} @@ -5359,10 +5141,6 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - decompress-response@3.3.0: resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} engines: {node: '>=4'} @@ -5410,12 +5188,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -5432,10 +5204,6 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - delay@5.0.0: - resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} - engines: {node: '>=10'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -5549,9 +5317,6 @@ packages: double-ended-queue@2.1.0-0: resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} - duplexer3@0.1.5: - resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -5716,9 +5481,6 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-biome@1.9.4: - resolution: {integrity: sha512-4HX+rfUk1R2rPwN3hcxPxq5sLDLGb/xtu48AggTtxCVoRoD18kjwOwHA1c7gYsbRrEQso+9mlRSS9+G7OfDqFg==} - eslint-config-prettier@9.0.0: resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true @@ -5735,19 +5497,6 @@ packages: eslint: '*' eslint-plugin-import: '*' - eslint-import-resolver-typescript@3.6.3: - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - eslint-module-utils@2.12.0: resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} @@ -5820,12 +5569,6 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.33.2: resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} @@ -6071,10 +5814,6 @@ packages: fengari@0.1.4: resolution: {integrity: sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==} - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -6112,10 +5851,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} - engines: {node: '>=0.10.0'} - finalhandler@1.3.1: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} @@ -6200,10 +5935,6 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - formidable@1.2.6: resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' @@ -6313,10 +6044,6 @@ packages: resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} engines: {node: '>=0.10.0'} - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -6444,10 +6171,6 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -6456,10 +6179,6 @@ packages: resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} engines: {node: '>=16'} - got@9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -6569,10 +6288,6 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - http2-wrapper@2.2.0: resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} engines: {node: '>=10.19.0'} @@ -6696,10 +6411,6 @@ packages: resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} engines: {node: '>=8.0.0'} - inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - int64-buffer@0.1.10: resolution: {integrity: sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==} @@ -6771,9 +6482,6 @@ packages: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} - is-bun-module@1.3.0: - resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -6846,10 +6554,6 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} @@ -7239,9 +6943,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.0: - resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -7307,10 +7008,6 @@ packages: resolution: {integrity: sha512-YpW2Y5Wlln8GqULzGE40B05oiiZKeIhzZLR2eymRg8cVoGan+jMQ/cRuVa1AxP3J72olx6/4RwRsEchDw0HPbw==} engines: {node: '>=10.0.0'} - jssm@5.98.2: - resolution: {integrity: sha512-O2xBFBzZjLIN+wA5IA85XIaEan7wjvM2qegwVrVQPClbH/IEhI1GLkLEEfk+TPeHeW8pGOlrd84MnmTcDyxSIQ==} - engines: {node: '>=10.0.0'} - jsx-ast-utils@3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} @@ -7335,9 +7032,6 @@ packages: resolution: {integrity: sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug==} engines: {node: '>=8.5.1'} - keyv@3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - keyv@4.5.2: resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} @@ -7360,10 +7054,6 @@ packages: resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} engines: {node: '>=18'} - latest-version@5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} - latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -7418,9 +7108,6 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - li@1.3.0: - resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==} - lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -7557,14 +7244,6 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7779,11 +7458,6 @@ packages: engines: {node: '>=4'} hasBin: true - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -7826,10 +7500,6 @@ packages: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -8046,10 +7716,6 @@ packages: node-cleanup@2.1.2: resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -8059,10 +7725,6 @@ packages: encoding: optional: true - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true @@ -8111,14 +7773,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} @@ -8269,10 +7923,6 @@ packages: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - os-homedir@1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} @@ -8287,14 +7937,6 @@ packages: override-require@1.1.1: resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} - p-cancelable@1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -8355,10 +7997,6 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} - package-json@6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} - package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} @@ -8534,9 +8172,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - platform@1.3.6: - resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -8581,10 +8216,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prepend-http@2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} - engines: {node: '>=4'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -8736,10 +8367,6 @@ packages: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} - query-string@7.1.3: - resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} - engines: {node: '>=6'} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -8874,10 +8501,6 @@ packages: resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} engines: {node: '>=6.5.0'} - registry-auth-token@4.2.2: - resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} - engines: {node: '>=6.0.0'} - registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -8886,10 +8509,6 @@ packages: resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} engines: {node: '>=14'} - registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - registry-url@6.0.1: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} @@ -8984,12 +8603,6 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true - responselike@1.0.2: - resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -9394,10 +9007,6 @@ packages: spdx-license-ids@3.0.13: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} - engines: {node: '>=6'} - split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} @@ -9434,10 +9043,6 @@ packages: streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} - strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} - engines: {node: '>=4'} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -9680,10 +9285,6 @@ packages: to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} - to-readable-stream@1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -9729,30 +9330,6 @@ packages: resolution: {integrity: sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==} engines: {node: '>=14.13.1'} - ts-jest@29.2.6: - resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - ts-loader@9.5.1: resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} @@ -10024,10 +9601,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse-lax@3.0.0: - resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} - engines: {node: '>=4'} - url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -10105,13 +9678,6 @@ packages: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -11229,6 +10795,7 @@ snapshots: '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + optional: true '@dabh/diagnostics@2.0.3': dependencies: @@ -11277,16 +10844,6 @@ snapshots: - supports-color - typescript - '@fluid-internal/eslint-plugin-fluid@0.1.5(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.55.0)(typescript@5.4.5) - ts-morph: 22.0.0 - transitivePeerDependencies: - - eslint - - supports-color - - typescript - '@fluid-internal/mocha-test-setup@2.0.5': dependencies: '@fluid-internal/test-driver-definitions': 2.0.5 @@ -11308,27 +10865,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@fluid-tools/build-cli@0.49.0(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.4.5)': + '@fluid-tools/build-cli@0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)': dependencies: '@andrewbranch/untar.js': 1.0.3 - '@fluid-tools/version-tools': 0.49.0(@types/node@18.19.39) - '@fluidframework/build-tools': 0.49.0(@types/node@18.19.39) - '@fluidframework/bundle-size-tools': 0.49.0 + '@fluid-tools/version-tools': 0.52.0-315632(@types/node@18.19.39) + '@fluidframework/build-tools': 0.52.0-315632(@types/node@18.19.39) + '@fluidframework/bundle-size-tools': 0.52.0-315632 + '@inquirer/prompts': 7.2.3(@types/node@18.19.39) '@microsoft/api-extractor': 7.49.1(@types/node@18.19.39) '@oclif/core': 4.2.4 '@oclif/plugin-autocomplete': 3.2.18 '@oclif/plugin-commands': 4.1.17 '@oclif/plugin-help': 6.2.22 '@oclif/plugin-not-found': 3.2.37(@types/node@18.19.39) - '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/core': 5.2.0 '@octokit/rest': 21.1.0 - '@rushstack/node-core-library': 3.66.1(@types/node@18.19.39) + '@rushstack/node-core-library': 5.10.2(@types/node@18.19.39) async: 3.2.6 azure-devops-node-api: 11.2.0 - chalk: 5.3.0 change-case: 3.1.0 - cosmiconfig: 8.3.6(typescript@5.4.5) - danger: 11.3.1(encoding@0.1.13) + cosmiconfig: 8.3.6(typescript@5.1.6) + danger: 12.3.3(encoding@0.1.13) date-fns: 2.30.0 debug: 4.4.0(supports-color@8.1.1) execa: 5.1.1 @@ -11338,19 +10895,18 @@ snapshots: globby: 11.1.0 gray-matter: 4.0.3 human-id: 4.1.1 - inquirer: 8.2.6 issue-parser: 7.0.1 json5: 2.2.3 - jssm: 5.98.2 + jssm: 5.104.1 jszip: 3.10.1 - latest-version: 5.1.0 + latest-version: 9.0.0 mdast: 3.0.0 mdast-util-heading-range: 4.0.0 mdast-util-to-string: 4.0.0 minimatch: 7.4.6 - node-fetch: 3.3.2 npm-check-updates: 16.14.20 oclif: 4.17.17(@types/node@18.19.39) + picocolors: 1.1.1 prettier: 3.2.5 prompts: 2.4.2 read-pkg-up: 7.0.1 @@ -11386,12 +10942,12 @@ snapshots: - utf-8-validate - webpack-cli - '@fluid-tools/build-cli@0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)': + '@fluid-tools/build-cli@0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)(webpack-cli@5.1.4)': dependencies: '@andrewbranch/untar.js': 1.0.3 '@fluid-tools/version-tools': 0.52.0-315632(@types/node@18.19.39) '@fluidframework/build-tools': 0.52.0-315632(@types/node@18.19.39) - '@fluidframework/bundle-size-tools': 0.52.0-315632 + '@fluidframework/bundle-size-tools': 0.52.0-315632(webpack-cli@5.1.4) '@inquirer/prompts': 7.2.3(@types/node@18.19.39) '@microsoft/api-extractor': 7.49.1(@types/node@18.19.39) '@oclif/core': 4.2.4 @@ -11463,84 +11019,7 @@ snapshots: - utf-8-validate - webpack-cli - '@fluid-tools/build-cli@0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)(webpack-cli@5.1.4)': - dependencies: - '@andrewbranch/untar.js': 1.0.3 - '@fluid-tools/version-tools': 0.52.0-315632(@types/node@18.19.39) - '@fluidframework/build-tools': 0.52.0-315632(@types/node@18.19.39) - '@fluidframework/bundle-size-tools': 0.52.0-315632(webpack-cli@5.1.4) - '@inquirer/prompts': 7.2.3(@types/node@18.19.39) - '@microsoft/api-extractor': 7.49.1(@types/node@18.19.39) - '@oclif/core': 4.2.4 - '@oclif/plugin-autocomplete': 3.2.18 - '@oclif/plugin-commands': 4.1.17 - '@oclif/plugin-help': 6.2.22 - '@oclif/plugin-not-found': 3.2.37(@types/node@18.19.39) - '@octokit/core': 5.2.0 - '@octokit/rest': 21.1.0 - '@rushstack/node-core-library': 5.10.2(@types/node@18.19.39) - async: 3.2.6 - azure-devops-node-api: 11.2.0 - change-case: 3.1.0 - cosmiconfig: 8.3.6(typescript@5.1.6) - danger: 12.3.3(encoding@0.1.13) - date-fns: 2.30.0 - debug: 4.4.0(supports-color@8.1.1) - execa: 5.1.1 - fflate: 0.8.2 - fs-extra: 11.3.0 - github-slugger: 2.0.0 - globby: 11.1.0 - gray-matter: 4.0.3 - human-id: 4.1.1 - issue-parser: 7.0.1 - json5: 2.2.3 - jssm: 5.104.1 - jszip: 3.10.1 - latest-version: 9.0.0 - mdast: 3.0.0 - mdast-util-heading-range: 4.0.0 - mdast-util-to-string: 4.0.0 - minimatch: 7.4.6 - npm-check-updates: 16.14.20 - oclif: 4.17.17(@types/node@18.19.39) - picocolors: 1.1.1 - prettier: 3.2.5 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - remark: 15.0.1 - remark-gfm: 4.0.0 - remark-github: 12.0.0 - remark-github-beta-blockquote-admonitions: 3.1.1 - remark-toc: 9.0.0 - replace-in-file: 7.2.0 - resolve.exports: 2.0.2 - semver: 7.6.3 - semver-utils: 1.1.4 - simple-git: 3.27.0 - sort-json: 2.0.1 - sort-package-json: 1.57.0 - strip-ansi: 6.0.1 - table: 6.9.0 - ts-morph: 22.0.0 - type-fest: 2.19.0 - unist-util-visit: 5.0.0 - xml2js: 0.5.0 - transitivePeerDependencies: - - '@swc/core' - - '@types/node' - - bluebird - - bufferutil - - encoding - - esbuild - - react-devtools-core - - supports-color - - typescript - - uglify-js - - utf-8-validate - - webpack-cli - - '@fluid-tools/build-cli@0.52.0-315632(@types/node@22.10.7)(encoding@0.1.13)(typescript@5.1.6)': + '@fluid-tools/build-cli@0.52.0-315632(@types/node@22.10.7)(encoding@0.1.13)(typescript@5.1.6)': dependencies: '@andrewbranch/untar.js': 1.0.3 '@fluid-tools/version-tools': 0.52.0-315632(@types/node@22.10.7) @@ -11617,23 +11096,6 @@ snapshots: - utf-8-validate - webpack-cli - '@fluid-tools/version-tools@0.49.0(@types/node@18.19.39)': - dependencies: - '@oclif/core': 4.2.4 - '@oclif/plugin-autocomplete': 3.2.18 - '@oclif/plugin-commands': 4.1.17 - '@oclif/plugin-help': 6.2.22 - '@oclif/plugin-not-found': 3.2.37(@types/node@18.19.39) - chalk: 2.4.2 - semver: 7.6.3 - table: 6.9.0 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - react-devtools-core - - supports-color - - utf-8-validate - '@fluid-tools/version-tools@0.52.0-315632(@types/node@18.19.39)': dependencies: '@oclif/core': 4.2.4 @@ -11668,41 +11130,6 @@ snapshots: '@fluidframework/build-common@2.0.3': {} - '@fluidframework/build-tools@0.49.0(@types/node@18.19.39)': - dependencies: - '@fluid-tools/version-tools': 0.49.0(@types/node@18.19.39) - '@manypkg/get-packages': 2.2.2 - async: 3.2.6 - chalk: 2.4.2 - cosmiconfig: 8.3.6(typescript@5.4.5) - date-fns: 2.30.0 - debug: 4.4.0(supports-color@8.1.1) - detect-indent: 6.1.0 - find-up: 7.0.0 - fs-extra: 11.3.0 - glob: 7.2.3 - globby: 11.1.0 - ignore: 5.3.2 - json5: 2.2.3 - lodash: 4.17.21 - lodash.isequal: 4.5.0 - multimatch: 5.0.0 - picomatch: 2.3.1 - rimraf: 4.4.1 - semver: 7.6.3 - sort-package-json: 1.57.0 - ts-deepmerge: 7.0.2 - ts-morph: 22.0.0 - type-fest: 2.19.0 - typescript: 5.4.5 - yaml: 2.7.0 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - react-devtools-core - - supports-color - - utf-8-validate - '@fluidframework/build-tools@0.52.0-315632(@types/node@18.19.39)': dependencies: '@fluid-tools/version-tools': 0.52.0-315632(@types/node@18.19.39) @@ -11773,20 +11200,6 @@ snapshots: - supports-color - utf-8-validate - '@fluidframework/bundle-size-tools@0.49.0': - dependencies: - azure-devops-node-api: 11.2.0 - jszip: 3.10.1 - msgpack-lite: 0.1.26 - pako: 2.1.0 - typescript: 5.4.5 - webpack: 5.97.1 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - '@fluidframework/bundle-size-tools@0.52.0-315632': dependencies: azure-devops-node-api: 11.2.0 @@ -11843,9 +11256,9 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) @@ -11860,35 +11273,6 @@ snapshots: - supports-color - typescript - '@fluidframework/eslint-config-fluid@5.7.3(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@fluid-internal/eslint-plugin-fluid': 0.1.5(eslint@8.55.0)(typescript@5.4.5) - '@microsoft/tsdoc': 0.14.2 - '@rushstack/eslint-patch': 1.4.0 - '@rushstack/eslint-plugin': 0.13.1(eslint@8.55.0)(typescript@5.4.5) - '@rushstack/eslint-plugin-security': 0.7.1(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - eslint-config-biome: 1.9.4 - eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) - eslint-plugin-promise: 6.1.1(eslint@8.55.0) - eslint-plugin-react: 7.33.2(eslint@8.55.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.55.0) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.55.0) - eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0) - transitivePeerDependencies: - - eslint - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - typescript - '@fluidframework/gitresources@5.0.0': {} '@fluidframework/protocol-base@5.0.0': @@ -12244,35 +11628,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@gitbeaker/core@35.8.1': - dependencies: - '@gitbeaker/requester-utils': 35.8.1 - form-data: 4.0.0 - li: 1.3.0 - mime: 3.0.0 - query-string: 7.1.3 - xcase: 2.0.1 - '@gitbeaker/core@38.12.1': dependencies: '@gitbeaker/requester-utils': 38.12.1 qs: 6.11.2 xcase: 2.0.1 - '@gitbeaker/node@35.8.1': - dependencies: - '@gitbeaker/core': 35.8.1 - '@gitbeaker/requester-utils': 35.8.1 - delay: 5.0.0 - got: 11.8.6 - xcase: 2.0.1 - - '@gitbeaker/requester-utils@35.8.1': - dependencies: - form-data: 4.0.0 - qs: 6.11.2 - xcase: 2.0.1 - '@gitbeaker/requester-utils@38.12.1': dependencies: qs: 6.11.2 @@ -12584,7 +11945,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -12598,7 +11959,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -12782,6 +12143,7 @@ snapshots: dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + optional: true '@kwsites/file-exists@1.1.1': dependencies: @@ -12981,8 +12343,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@nolyfill/is-core-module@1.0.39': {} - '@npmcli/fs@3.1.0': dependencies: semver: 7.7.1 @@ -13116,8 +12476,6 @@ snapshots: dependencies: '@octokit/types': 6.41.0 - '@octokit/auth-token@3.0.4': {} - '@octokit/auth-token@4.0.0': {} '@octokit/auth-token@5.1.1': {} @@ -13134,18 +12492,6 @@ snapshots: transitivePeerDependencies: - encoding - '@octokit/core@4.2.4(encoding@0.1.13)': - dependencies: - '@octokit/auth-token': 3.0.4 - '@octokit/graphql': 5.0.6(encoding@0.1.13) - '@octokit/request': 6.2.8(encoding@0.1.13) - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - '@octokit/core@5.2.0': dependencies: '@octokit/auth-token': 4.0.0 @@ -13177,12 +12523,6 @@ snapshots: is-plain-object: 5.0.0 universal-user-agent: 6.0.1 - '@octokit/endpoint@7.0.6': - dependencies: - '@octokit/types': 9.3.2 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.1 - '@octokit/endpoint@9.0.5': dependencies: '@octokit/types': 13.7.0 @@ -13196,14 +12536,6 @@ snapshots: transitivePeerDependencies: - encoding - '@octokit/graphql@5.0.6(encoding@0.1.13)': - dependencies: - '@octokit/request': 6.2.8(encoding@0.1.13) - '@octokit/types': 9.3.2 - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 @@ -13218,8 +12550,6 @@ snapshots: '@octokit/openapi-types@12.11.0': {} - '@octokit/openapi-types@18.1.1': {} - '@octokit/openapi-types@23.0.1': {} '@octokit/plugin-paginate-rest@11.4.0(@octokit/core@6.1.3)': @@ -13257,12 +12587,6 @@ snapshots: deprecation: 2.3.1 once: 1.4.0 - '@octokit/request-error@3.0.3': - dependencies: - '@octokit/types': 9.3.2 - deprecation: 2.3.1 - once: 1.4.0 - '@octokit/request-error@5.1.0': dependencies: '@octokit/types': 13.7.0 @@ -13284,17 +12608,6 @@ snapshots: transitivePeerDependencies: - encoding - '@octokit/request@6.2.8(encoding@0.1.13)': - dependencies: - '@octokit/endpoint': 7.0.6 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 - is-plain-object: 5.0.0 - node-fetch: 2.7.0(encoding@0.1.13) - universal-user-agent: 6.0.1 - transitivePeerDependencies: - - encoding - '@octokit/request@8.4.0': dependencies: '@octokit/endpoint': 9.0.5 @@ -13334,10 +12647,6 @@ snapshots: dependencies: '@octokit/openapi-types': 12.11.0 - '@octokit/types@9.3.2': - dependencies: - '@octokit/openapi-types': 18.1.1 - '@pkgjs/parseargs@0.11.0': optional: true @@ -13429,15 +12738,6 @@ snapshots: - supports-color - typescript - '@rushstack/eslint-plugin-security@0.7.1(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@rushstack/tree-pattern': 0.3.1 - '@typescript-eslint/experimental-utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) - eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript - '@rushstack/eslint-plugin@0.13.1(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@rushstack/tree-pattern': 0.3.1 @@ -13447,15 +12747,6 @@ snapshots: - supports-color - typescript - '@rushstack/eslint-plugin@0.13.1(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@rushstack/tree-pattern': 0.3.1 - '@typescript-eslint/experimental-utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) - eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript - '@rushstack/node-core-library@3.59.4(@types/node@22.10.7)': dependencies: colors: 1.2.5 @@ -13468,18 +12759,6 @@ snapshots: optionalDependencies: '@types/node': 22.10.7 - '@rushstack/node-core-library@3.66.1(@types/node@18.19.39)': - dependencies: - colors: 1.2.5 - fs-extra: 7.0.1 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.8 - semver: 7.5.4 - z-schema: 5.0.5 - optionalDependencies: - '@types/node': 18.19.39 - '@rushstack/node-core-library@5.10.2(@types/node@18.19.39)': dependencies: ajv: 8.13.0 @@ -13635,10 +12914,6 @@ snapshots: '@sinclair/typebox@0.27.8': {} - '@sindresorhus/is@0.14.0': {} - - '@sindresorhus/is@4.6.0': {} - '@sindresorhus/is@5.4.1': {} '@sinonjs/commons@3.0.1': @@ -13963,14 +13238,6 @@ snapshots: '@socket.io/sticky@1.0.4': {} - '@szmarczak/http-timer@1.1.2': - dependencies: - defer-to-connect: 1.1.3 - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -13993,13 +13260,17 @@ snapshots: mkdirp: 3.0.1 path-browserify: 1.0.1 - '@tsconfig/node10@1.0.11': {} + '@tsconfig/node10@1.0.11': + optional: true - '@tsconfig/node12@1.0.11': {} + '@tsconfig/node12@1.0.11': + optional: true - '@tsconfig/node14@1.0.3': {} + '@tsconfig/node14@1.0.3': + optional: true - '@tsconfig/node16@1.0.4': {} + '@tsconfig/node16@1.0.4': + optional: true '@tufjs/canonical-json@1.0.0': {} @@ -14040,10 +13311,6 @@ snapshots: dependencies: '@babel/types': 7.26.9 - '@types/base64-js@1.3.2': {} - - '@types/benchmark@2.1.5': {} - '@types/bluebird@3.5.38': {} '@types/body-parser@1.19.2': @@ -14053,13 +13320,6 @@ snapshots: '@types/bytes@3.1.1': {} - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.1 - '@types/keyv': 3.1.4 - '@types/node': 18.19.39 - '@types/responselike': 1.0.3 - '@types/compression@0.0.33': dependencies: '@types/express': 4.17.21 @@ -14169,9 +13429,9 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest-environment-puppeteer@2.2.0(typescript@5.4.5)': + '@types/jest-environment-puppeteer@2.2.0(typescript@5.1.6)': dependencies: - '@types/puppeteer': 7.0.4(typescript@5.4.5) + '@types/puppeteer': 7.0.4(typescript@5.1.6) transitivePeerDependencies: - bare-buffer - bufferutil @@ -14194,10 +13454,6 @@ snapshots: '@types/jsrsasign@10.5.12': {} - '@types/keyv@3.1.4': - dependencies: - '@types/node': 18.19.39 - '@types/lodash@4.14.195': {} '@types/lodash@4.14.199': {} @@ -14256,9 +13512,9 @@ snapshots: '@types/prop-types@15.7.14': {} - '@types/puppeteer@7.0.4(typescript@5.4.5)': + '@types/puppeteer@7.0.4(typescript@5.1.6)': dependencies: - puppeteer: 23.11.1(typescript@5.4.5) + puppeteer: 23.11.1(typescript@5.1.6) transitivePeerDependencies: - bare-buffer - bufferutil @@ -14275,10 +13531,6 @@ snapshots: '@types/prop-types': 15.7.14 csstype: 3.1.3 - '@types/responselike@1.0.3': - dependencies: - '@types/node': 18.19.39 - '@types/rimraf@3.0.2': dependencies: '@types/glob': 7.2.0 @@ -14379,26 +13631,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/type-utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.55.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/experimental-utils@5.59.11(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/utils': 5.59.11(eslint@8.55.0)(typescript@5.1.6) @@ -14407,27 +13639,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/experimental-utils@5.59.11(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/utils': 5.59.11(eslint@8.55.0)(typescript@5.4.5) - eslint: 8.55.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0(supports-color@8.1.1) - eslint: 8.55.0 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/scope-manager': 6.7.5 @@ -14441,29 +13652,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.55.0 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 '@typescript-eslint/visitor-keys': 5.59.11 - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@6.7.5': dependencies: '@typescript-eslint/types': 6.7.5 @@ -14481,22 +13674,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@6.7.5(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) - '@typescript-eslint/utils': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - debug: 4.4.0(supports-color@8.1.1) - eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/types@5.59.11': {} - '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@6.7.5': {} '@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.6)': @@ -14513,35 +13692,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@5.59.11(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 5.59.11 - '@typescript-eslint/visitor-keys': 5.59.11 - debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.1 - tsutils: 3.21.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.0.3(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@6.7.5(typescript@5.1.6)': dependencies: '@typescript-eslint/types': 6.7.5 @@ -14556,20 +13706,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.7.5(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.4.0(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@5.59.11(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -14585,21 +13721,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@5.59.11(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.59.11 - '@typescript-eslint/types': 5.59.11 - '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.4.5) - eslint: 8.55.0 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - '@typescript-eslint/utils@6.7.5(eslint@8.55.0)(typescript@5.1.6)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -14614,30 +13735,11 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@6.7.5(eslint@8.55.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.4.5) - eslint: 8.55.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - '@typescript-eslint/visitor-keys@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@6.7.5': dependencies: '@typescript-eslint/types': 6.7.5 @@ -14848,6 +13950,7 @@ snapshots: acorn-walk@8.3.4: dependencies: acorn: 8.14.0 + optional: true acorn@7.4.1: {} @@ -15235,11 +14338,6 @@ snapshots: before-after-hook@3.0.2: {} - benchmark@2.1.4: - dependencies: - lodash: 4.17.21 - platform: 1.3.6 - better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -15271,12 +14369,6 @@ snapshots: readable-stream: 2.3.8 safe-buffer: 5.2.1 - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - blessed@0.1.81: {} bodec@0.1.0: {} @@ -15348,10 +14440,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -15442,8 +14530,6 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 - cacheable-lookup@5.0.4: {} - cacheable-lookup@7.0.0: {} cacheable-request@10.2.11: @@ -15456,26 +14542,6 @@ snapshots: normalize-url: 8.0.0 responselike: 3.0.0 - cacheable-request@6.1.0: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.2 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -15694,12 +14760,6 @@ snapshots: kind-of: 6.0.3 shallow-clone: 3.0.1 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - cluster-key-slot@1.1.2: {} co@4.6.0: {} @@ -15888,27 +14948,27 @@ snapshots: optionalDependencies: typescript: 5.4.5 - cosmiconfig@9.0.0(typescript@5.4.5): + cosmiconfig@9.0.0(typescript@5.1.6): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.1.6 crc-32@1.2.0: dependencies: exit-on-epipe: 1.0.1 printj: 1.1.2 - create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -15917,7 +14977,8 @@ snapshots: - supports-color - ts-node - create-require@1.1.1: {} + create-require@1.1.1: + optional: true croner@4.1.97: {} @@ -15958,50 +15019,6 @@ snapshots: find-pkg: 0.1.2 fs-exists-sync: 0.1.0 - danger@11.3.1(encoding@0.1.13): - dependencies: - '@gitbeaker/core': 35.8.1 - '@gitbeaker/node': 35.8.1 - '@octokit/rest': 18.12.0(encoding@0.1.13) - async-retry: 1.2.3 - chalk: 2.4.2 - commander: 2.20.3 - core-js: 3.34.0 - debug: 4.4.0(supports-color@8.1.1) - fast-json-patch: 3.1.1 - get-stdin: 6.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - hyperlinker: 1.0.0 - json5: 2.2.3 - jsonpointer: 5.0.1 - jsonwebtoken: 9.0.2 - lodash.find: 4.6.0 - lodash.includes: 4.3.0 - lodash.isobject: 3.0.2 - lodash.keys: 4.2.0 - lodash.mapvalues: 4.6.0 - lodash.memoize: 4.1.2 - memfs-or-file-map-to-github-branch: 1.2.1(encoding@0.1.13) - micromatch: 4.0.8 - node-cleanup: 2.1.2 - node-fetch: 2.7.0(encoding@0.1.13) - override-require: 1.1.1 - p-limit: 2.3.0 - parse-diff: 0.7.1 - parse-git-config: 2.0.3 - parse-github-url: 1.0.2 - parse-link-header: 2.0.0 - pinpoint: 1.1.0 - prettyjson: 1.2.5 - readline-sync: 1.4.10 - regenerator-runtime: 0.13.11 - require-from-string: 2.0.2 - supports-hyperlinks: 1.0.1 - transitivePeerDependencies: - - encoding - - supports-color - danger@12.3.3(encoding@0.1.13): dependencies: '@gitbeaker/rest': 38.12.1 @@ -16045,8 +15062,6 @@ snapshots: - encoding - supports-color - data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.1: {} date-fns@2.30.0: @@ -16083,11 +15098,10 @@ snapshots: dependencies: character-entities: 2.0.2 - decode-uri-component@0.2.2: {} - decompress-response@3.3.0: dependencies: mimic-response: 1.0.1 + optional: true decompress-response@6.0.0: dependencies: @@ -16139,12 +15153,6 @@ snapshots: deepmerge@4.3.1: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@1.1.3: {} - defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -16165,8 +15173,6 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - delay@5.0.0: {} - delayed-stream@1.0.0: {} delegates@1.0.0: {} @@ -16248,8 +15254,6 @@ snapshots: double-ended-queue@2.1.0-0: {} - duplexer3@0.1.5: {} - eastasianwidth@0.2.0: {} ecdsa-sig-formatter@1.0.11: @@ -16449,8 +15453,6 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-biome@1.9.4: {} - eslint-config-prettier@9.0.0(eslint@8.55.0): dependencies: eslint: 8.55.0 @@ -16463,13 +15465,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.55.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -16480,54 +15482,24 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.0(supports-color@8.1.1) - enhanced-resolve: 5.17.1 - eslint: 8.55.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - fast-glob: 3.3.2 - get-tsconfig: 4.10.0 - is-bun-module: 1.3.0 - is-glob: 4.0.3 - optionalDependencies: - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.4.5) - eslint: 8.55.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) transitivePeerDependencies: - supports-color @@ -16537,30 +15509,13 @@ snapshots: eslint: 8.55.0 ignore: 5.3.0 - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): - dependencies: - debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 - eslint: 8.55.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - get-tsconfig: 4.10.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - semver: 7.7.1 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) get-tsconfig: 4.10.0 is-glob: 4.0.3 minimatch: 3.1.2 @@ -16594,10 +15549,6 @@ snapshots: dependencies: eslint: 8.55.0 - eslint-plugin-react-hooks@4.6.2(eslint@8.55.0): - dependencies: - eslint: 8.55.0 - eslint-plugin-react@7.33.2(eslint@8.55.0): dependencies: array-includes: 3.1.6 @@ -16649,13 +15600,6 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) - eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0): - dependencies: - eslint: 8.55.0 - eslint-rule-composer: 0.3.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.4.5))(eslint@8.55.0)(typescript@5.4.5) - eslint-rule-composer@0.3.0: {} eslint-scope@5.1.1: @@ -16971,11 +15915,6 @@ snapshots: sprintf-js: 1.1.3 tmp: 0.0.33 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - fflate@0.8.2: {} figures@3.2.0: @@ -17006,8 +15945,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - filter-obj@1.1.0: {} - finalhandler@1.3.1: dependencies: debug: 2.6.9 @@ -17106,10 +16043,6 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - formidable@1.2.6: {} forwarded@0.2.0: {} @@ -17216,10 +16149,6 @@ snapshots: object-assign: 4.1.1 pinkie-promise: 2.0.1 - get-stream@4.1.0: - dependencies: - pump: 3.0.2 - get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -17384,20 +16313,6 @@ snapshots: dependencies: get-intrinsic: 1.2.4 - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - got@12.6.1: dependencies: '@sindresorhus/is': 5.4.1 @@ -17426,22 +16341,6 @@ snapshots: p-cancelable: 3.0.0 responselike: 3.0.0 - got@9.6.0: - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.3 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.5 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 - graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} @@ -17558,11 +16457,6 @@ snapshots: transitivePeerDependencies: - supports-color - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - http2-wrapper@2.2.0: dependencies: quick-lru: 5.1.1 @@ -17703,24 +16597,6 @@ snapshots: strip-ansi: 6.0.1 through: 2.3.8 - inquirer@8.2.6: - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 6.2.0 - int64-buffer@0.1.10: {} internal-slot@1.0.7: @@ -17801,10 +16677,6 @@ snapshots: dependencies: builtin-modules: 3.3.0 - is-bun-module@1.3.0: - dependencies: - semver: 7.6.3 - is-callable@1.2.7: {} is-ci@3.0.1: @@ -17861,8 +16733,6 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 - is-interactive@1.0.0: {} - is-lambda@1.0.1: {} is-lower-case@1.1.3: @@ -18090,16 +16960,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -18109,7 +16979,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): dependencies: '@babel/core': 7.26.9 '@jest/test-sequencer': 29.7.0 @@ -18135,7 +17005,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 18.19.39 - ts-node: 10.9.2(@types/node@18.19.39)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.19.39)(typescript@5.1.6) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -18180,10 +17050,10 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-environment-puppeteer@10.1.4(typescript@5.4.5): + jest-environment-puppeteer@10.1.4(typescript@5.1.6): dependencies: chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig: 8.3.6(typescript@5.1.6) deepmerge: 4.3.1 jest-dev-server: 10.1.4 jest-environment-node: 29.7.0 @@ -18253,11 +17123,11 @@ snapshots: optionalDependencies: jest-resolve: 29.7.0 - jest-puppeteer@10.1.4(puppeteer@23.11.1(typescript@5.4.5))(typescript@5.4.5): + jest-puppeteer@10.1.4(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6): dependencies: expect-puppeteer: 10.1.4 - jest-environment-puppeteer: 10.1.4(typescript@5.4.5) - puppeteer: 23.11.1(typescript@5.4.5) + jest-environment-puppeteer: 10.1.4(typescript@5.1.6) + puppeteer: 23.11.1(typescript@5.1.6) transitivePeerDependencies: - debug - typescript @@ -18412,12 +17282,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)): + jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -18465,8 +17335,6 @@ snapshots: jsesc@3.0.2: {} - json-buffer@3.0.0: {} - json-buffer@3.0.1: {} json-parse-better-errors@1.0.2: {} @@ -18533,12 +17401,6 @@ snapshots: circular_buffer_js: 1.10.0 reduce-to-639-1: 1.1.0 - jssm@5.98.2: - dependencies: - better_git_changelog: 1.6.2 - circular_buffer_js: 1.10.0 - reduce-to-639-1: 1.1.0 - jsx-ast-utils@3.3.3: dependencies: array-includes: 3.1.6 @@ -18586,10 +17448,6 @@ snapshots: transitivePeerDependencies: - supports-color - keyv@3.1.0: - dependencies: - json-buffer: 3.0.0 - keyv@4.5.2: dependencies: json-buffer: 3.0.1 @@ -18604,10 +17462,6 @@ snapshots: ky@1.7.4: {} - latest-version@5.1.0: - dependencies: - package-json: 6.5.0 - latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -18673,8 +17527,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - li@1.3.0: {} - lie@3.3.0: dependencies: immediate: 3.0.6 @@ -18790,10 +17642,6 @@ snapshots: dependencies: tslib: 2.6.2 - lowercase-keys@1.0.1: {} - - lowercase-keys@2.0.0: {} - lowercase-keys@3.0.0: {} lru-cache@10.4.0: {} @@ -19195,11 +18043,10 @@ snapshots: mime@1.6.0: {} - mime@3.0.0: {} - mimic-fn@2.1.0: {} - mimic-response@1.0.1: {} + mimic-response@1.0.1: + optional: true mimic-response@3.1.0: {} @@ -19231,10 +18078,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -19478,20 +18321,12 @@ snapshots: node-cleanup@2.1.2: {} - node-domexception@1.0.0: {} - node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: encoding: 0.1.13 - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-gyp-build@4.6.0: {} node-gyp@9.4.0: @@ -19555,10 +18390,6 @@ snapshots: normalize-path@3.0.0: {} - normalize-url@4.5.1: {} - - normalize-url@6.1.0: {} - normalize-url@8.0.0: {} notepack.io@2.1.3: {} @@ -19822,18 +18653,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - os-homedir@1.0.2: {} os-tmpdir@1.0.2: {} @@ -19842,10 +18661,6 @@ snapshots: override-require@1.1.1: {} - p-cancelable@1.1.0: {} - - p-cancelable@2.1.1: {} - p-cancelable@3.0.0: {} p-filter@2.1.0: @@ -19922,13 +18737,6 @@ snapshots: registry-url: 6.0.1 semver: 7.6.3 - package-json@6.5.0: - dependencies: - got: 9.6.0 - registry-auth-token: 4.2.2 - registry-url: 5.1.0 - semver: 6.3.1 - package-json@8.1.1: dependencies: got: 12.6.1 @@ -20096,8 +18904,6 @@ snapshots: dependencies: find-up: 4.1.0 - platform@1.3.6: {} - pluralize@8.0.0: {} pm2-axon-rpc@0.7.1: @@ -20199,8 +19005,6 @@ snapshots: prelude-ls@1.2.1: {} - prepend-http@2.0.0: {} - prettier@2.8.8: {} prettier@3.0.3: {} @@ -20365,11 +19169,11 @@ snapshots: - supports-color - utf-8-validate - puppeteer@23.11.1(typescript@5.4.5): + puppeteer@23.11.1(typescript@5.1.6): dependencies: '@puppeteer/browsers': 2.6.1 chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) - cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.1.6) devtools-protocol: 0.0.1367902 puppeteer-core: 23.11.1 typed-query-selector: 2.12.0 @@ -20386,13 +19190,6 @@ snapshots: dependencies: side-channel: 1.0.4 - query-string@7.1.3: - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -20557,10 +19354,6 @@ snapshots: regexpp@2.0.1: {} - registry-auth-token@4.2.2: - dependencies: - rc: 1.2.8 - registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -20569,10 +19362,6 @@ snapshots: dependencies: '@pnpm/npm-conf': 2.2.2 - registry-url@5.1.0: - dependencies: - rc: 1.2.8 - registry-url@6.0.1: dependencies: rc: 1.2.8 @@ -20698,14 +19487,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@1.0.2: - dependencies: - lowercase-keys: 1.0.1 - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 @@ -21194,8 +19975,6 @@ snapshots: spdx-license-ids@3.0.13: {} - split-on-first@1.1.0: {} - split@1.0.1: dependencies: through: 2.3.8 @@ -21232,8 +20011,6 @@ snapshots: optionalDependencies: bare-events: 2.5.4 - strict-uri-encode@2.0.0: {} - string-argv@0.3.2: {} string-hash@1.1.3: {} @@ -21543,8 +20320,6 @@ snapshots: to-buffer@1.1.1: {} - to-readable-stream@1.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -21575,31 +20350,8 @@ snapshots: dependencies: typescript: 5.1.6 - ts-api-utils@1.0.3(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - ts-deepmerge@7.0.2: {} - ts-jest@29.2.6(@babel/core@7.26.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.9))(jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)))(typescript@5.4.5): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.1 - typescript: 5.4.5 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.26.9 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.9) - ts-loader@9.5.1(typescript@5.1.6)(webpack@5.94.0): dependencies: chalk: 4.1.2 @@ -21620,7 +20372,7 @@ snapshots: '@ts-morph/common': 0.23.0 code-block-writer: 13.0.1 - ts-node@10.9.2(@types/node@18.19.39)(typescript@5.4.5): + ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -21634,9 +20386,10 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.1.6 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optional: true ts-node@8.10.2(typescript@5.1.6): dependencies: @@ -21658,11 +20411,6 @@ snapshots: tslib: 1.14.1 typescript: 5.1.6 - tsutils@3.21.0(typescript@5.4.5): - dependencies: - tslib: 1.14.1 - typescript: 5.4.5 - tuf-js@1.1.7: dependencies: '@tufjs/models': 1.0.4 @@ -21894,10 +20642,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-parse-lax@3.0.0: - dependencies: - prepend-http: 2.0.0 - url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -21921,7 +20665,8 @@ snapshots: uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: {} + v8-compile-cache-lib@3.0.1: + optional: true v8-compile-cache@2.4.0: {} @@ -21982,12 +20727,6 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - web-streams-polyfill@3.3.3: {} - webidl-conversions@3.0.1: {} webidl-conversions@7.0.0: {} From 5ae6f21ac161b764a2b572feb20120932e1e4180 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:52:36 +0000 Subject: [PATCH 23/38] Cleanup tests; remove jest --- .../packages/common-utils/.eslintrc.cjs | 7 +- .../common-utils/jest-puppeteer.config.cjs | 13 - .../packages/common-utils/jest.config.cjs | 20 - .../packages/common-utils/package.json | 40 +- .../src/test/{mocha => }/assert.spec.ts | 2 +- .../common-utils/src/test/assets/aka.pdf | Bin 0 -> 14010 bytes .../common-utils/src/test/assets/bindy.svg | 2032 ++++++++++++++ .../common-utils/src/test/assets/book.xml | 119 + .../common-utils/src/test/assets/grid.gif | Bin 0 -> 9137 bytes .../common-utils/src/test/gitHash.spec.ts | 77 + .../src/test/jest/gitHash.spec.ts | 193 -- .../common-utils/src/test/jest/tsconfig.json | 14 - .../src/test/{mocha => }/tsconfig.json | 7 +- .../{mocha => }/typedEventEmitter.spec.ts | 4 +- .../common-utils/src/test/types/tsconfig.json | 14 - server/routerlicious/pnpm-lock.yaml | 2465 +---------------- 16 files changed, 2330 insertions(+), 2677 deletions(-) delete mode 100644 server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs delete mode 100644 server/routerlicious/packages/common-utils/jest.config.cjs rename server/routerlicious/packages/common-utils/src/test/{mocha => }/assert.spec.ts (93%) create mode 100644 server/routerlicious/packages/common-utils/src/test/assets/aka.pdf create mode 100644 server/routerlicious/packages/common-utils/src/test/assets/bindy.svg create mode 100644 server/routerlicious/packages/common-utils/src/test/assets/book.xml create mode 100644 server/routerlicious/packages/common-utils/src/test/assets/grid.gif create mode 100644 server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts delete mode 100644 server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts delete mode 100644 server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json rename server/routerlicious/packages/common-utils/src/test/{mocha => }/tsconfig.json (66%) rename server/routerlicious/packages/common-utils/src/test/{mocha => }/typedEventEmitter.spec.ts (92%) delete mode 100644 server/routerlicious/packages/common-utils/src/test/types/tsconfig.json diff --git a/server/routerlicious/packages/common-utils/.eslintrc.cjs b/server/routerlicious/packages/common-utils/.eslintrc.cjs index a4cbed9906e8..c0b2fad09b18 100644 --- a/server/routerlicious/packages/common-utils/.eslintrc.cjs +++ b/server/routerlicious/packages/common-utils/.eslintrc.cjs @@ -6,12 +6,7 @@ module.exports = { extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], parserOptions: { - project: [ - "./tsconfig.json", - "./src/test/mocha/tsconfig.json", - "./src/test/jest/tsconfig.json", - "./src/test/types/tsconfig.json", - ], + project: ["./tsconfig.json", "./src/test/tsconfig.json"], }, rules: { // The whole server release group is intended to run in NodeJS; this is fine diff --git a/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs b/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs deleted file mode 100644 index d3d15152b332..000000000000 --- a/server/routerlicious/packages/common-utils/jest-puppeteer.config.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -module.exports = { - launch: { - args: ["--no-sandbox", "--disable-setuid-sandbox"], // https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#setting-up-chrome-linux-sandbox - dumpio: true, // output browser console to cmd line - // slowMo: 500, // slows down process for easier viewing - // headless: false, // run in the browser - }, -}; diff --git a/server/routerlicious/packages/common-utils/jest.config.cjs b/server/routerlicious/packages/common-utils/jest.config.cjs deleted file mode 100644 index 5c79d7095fdf..000000000000 --- a/server/routerlicious/packages/common-utils/jest.config.cjs +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -module.exports = { - preset: "jest-puppeteer", - testMatch: ["**/dist/test/jest/?(*.)+(spec|test).js"], - testPathIgnorePatterns: ["/node_modules/"], - reporters: [ - "default", - [ - "jest-junit", - { - outputDirectory: "nyc", - outputName: "jest-junit-report.xml", - }, - ], - ], -}; diff --git a/server/routerlicious/packages/common-utils/package.json b/server/routerlicious/packages/common-utils/package.json index 304daf46fc59..3c114762e0c9 100644 --- a/server/routerlicious/packages/common-utils/package.json +++ b/server/routerlicious/packages/common-utils/package.json @@ -21,10 +21,7 @@ "build:docs": "api-extractor run --local --typescript-compiler-folder ./node_modules/typescript && copyfiles -u 1 \"./_api-extractor-temp/doc-models/*\" ../../../_api-extractor-temp/", "build:esnext": "tsc --project ./tsconfig.esnext.json", "build:genver": "gen-version", - "build:test": "concurrently npm:build:test:mocha npm:build:test:jest npm:build:test:types", - "build:test:jest": "tsc --project ./src/test/jest/tsconfig.json", - "build:test:mocha": "tsc --project ./src/test/mocha/tsconfig.json", - "build:test:types": "tsc --project ./src/test/types/tsconfig.json", + "build:test": "tsc --project ./src/test/tsconfig.json", "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json", "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc _api-extractor-temp", "eslint": "eslint --format stylish src", @@ -34,14 +31,10 @@ "lint:fix": "npm run prettier:fix && npm run eslint:fix", "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", - "test": "npm run test:mocha && npm run test:jest", + "test": "npm run test:mocha", "test:coverage": "c8 npm run test:report", - "test:jest": "jest --ci", - "test:jest:report": "npm run test:jest -- --coverage", - "test:mocha": "mocha --unhandled-rejections=strict --recursive \"dist/test/mocha/**/*.spec.*js\"", - "test:mocha:multireport": "cross-env FLUID_TEST_MULTIREPORT=1 npm run test:mocha", - "test:mocha:report": "npm run test:mocha -- -- --reporter xunit --reporter-option output=nyc/mocha-junit-report.xml", - "test:report": "npm run test:mocha:report && npm run test:jest:report", + "test:mocha": "mocha --unhandled-rejections=strict --recursive \"dist/test/**/*.spec.*js\"", + "test:report": "npm run test:mocha -- -- --reporter xunit --reporter-option output=nyc/mocha-junit-report.xml", "tsc": "tsc", "typetests:gen": "flub generate typetests --dir . -v", "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" @@ -77,8 +70,6 @@ "@fluidframework/build-tools": "0.52.0-315632", "@fluidframework/eslint-config-fluid": "^5.2.0", "@microsoft/api-extractor": "^7.45.1", - "@types/jest": "29.5.3", - "@types/jest-environment-puppeteer": "2.2.0", "@types/mocha": "^10.0.10", "@types/node": "^18.19.39", "c8": "^8.0.1", @@ -86,35 +77,12 @@ "copyfiles": "^2.4.1", "cross-env": "^7.0.3", "eslint": "~8.55.0", - "jest": "^29.6.2", - "jest-junit": "^10.0.0", - "jest-puppeteer": "^10.1.3", "mocha": "^10.2.0", "prettier": "~3.0.3", "puppeteer": "^23.6.0", - "rewire": "^5.0.0", "rimraf": "^4.4.0", "typescript": "~5.1.6" }, - "fluidBuild": { - "tasks": { - "eslint": [ - "tsc", - "build:test:mocha", - "build:test:jest", - "build:test:types" - ], - "build:test:jest": [ - "tsc" - ], - "build:test:mocha": [ - "tsc" - ], - "build:test:types": [ - "tsc" - ] - } - }, "typeValidation": { "disabled": true, "broken": {}, diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts b/server/routerlicious/packages/common-utils/src/test/assert.spec.ts similarity index 93% rename from server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts rename to server/routerlicious/packages/common-utils/src/test/assert.spec.ts index 2b632d406524..12140b3bce1d 100644 --- a/server/routerlicious/packages/common-utils/src/test/mocha/assert.spec.ts +++ b/server/routerlicious/packages/common-utils/src/test/assert.spec.ts @@ -5,7 +5,7 @@ import { strict } from "assert"; -import { assert } from "../../assert"; +import { assert } from "../assert"; describe("Assert", () => { it("Validate Shortcode Format", async () => { diff --git a/server/routerlicious/packages/common-utils/src/test/assets/aka.pdf b/server/routerlicious/packages/common-utils/src/test/assets/aka.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f3423703f542852aa7f3d1a13e73f0de0d8c9c0f GIT binary patch literal 14010 zcma*O1yt1A`aTZQ-5?^$uO0tiSOz$5SA>}lhU_;!YP+Q`~ixmw!*BqXpsJl$;|&#--wQq$Y&qLF>j_OSL@7iGM$u02t%sPwi) z^b{Jno~U%~n`_yVtW6?b>G0&}hP4T^kq!Kk$4|SZ_Qk`O=`@}2ehv&0pr1NmZ2=9h z)xN?@DX9%PC}9f9>1xkiHI1dHqvjpHt<-)XA!&1GsL#7JYS+YAiKTH8h-(U>XnVWT ze)B9FM;-ksXKf(%@JVz^;(bD;8T^OaJ+_UD^`AB%e*H52m%YEfd4&ajRsQ*r#tB_lq^e#W-=T$w%^;{95?7(Tk>+G^sBAB^i>@{Ys7sGqzI{XO_M`rHhh+8pY*+& z=KFWU=}r6Vp1CF3Af0>h_b+bsj#>7{bEM*O440hut9ZJ|kuI2w-aKmPPSrzde1`sH zW2H*t5P)=ohSa$D_LMft*$g_cipz=5a&9Nh{EI|`Qky~o-rXW_WSNm z`|6}xj|9FKKele@a7O7jRM*E=4%^Js?iR@XW*J59J0v;IzP_ z2?4pGECP@sLKF#6(onb+A2>Wgt(TIRMZ%WiokjKzcXUIV41MtlRXt454c!FwX)m4| z4sM9T6YQuy6(I6rr~_u$5g}QDR7E0r5kaQ(G$FMSrk{+IrZ6eWpiE36A@s@hCzi5@ z?BNypGMeINjGk2On5N-3c^IDn{OI?{fe}O*4<;aZvq;S$b9JILm})cVkb&qbgHwS{0Nt|MfxA8&=_*te5? zk@PT(pwHvTGJw7tJD4Vzb}4~wsE0KX%LvsejDS83z~s!NOGt&eg?S%A1mo8VEz|I1 zh$8eGFtKEN_j*>UQ;CK}J(*M~iitv-i7m4+R9DH7!IVXurHej!M8sOb{h{F#GmRRi zT!1+<0aQ{mVd9ZWa#;nb zmM<-{EMqLgR|N*Om^-1N&=z8i@+UiWUzm&OsiY^0{l2s|sx^wt+sp$WDF_waP9*OP zp3!Z0onhH9+Zb;=-k{l_+GrTnMu!0{u0Yz9#c|1T9dQY#{F`m#YvW%9YaPsfcCw{j zv%9bdq%x%1rXr^%RH*8?PLWP!S3IlGm;^eqI6@rf9B-$%E91vY$9;0fv(5Q`uHQxP z*0smHXuWYf@81>QO{U7C>ZYQk(xXb}9}=L*LW+Q{1CA8xca!f8S^+A!K`G6SY& z9>8^NnHyrk`PDVwOSwKv6fIPWS6h`e7}yo6H;j>(Lb;8Fq*_c`bbO>WRCo+{%xkp{ z^Ch%$t8(z?D91IchOv@`&8F&dt|jlD z?}4IOrgaPC9qJw97x)(pw=B237~;{s(OvkLv!33MJ0b$7i1xNuTE~v#)-YK8S>H`4 zl`dr)jvsQrD&eH~$RJYUS2OeV=6 zNZ-kLM~Yzy;F^-%cs%6hrs^xFO^_SykA$Rw>{f8M=m zqx{2oO`>_9;d6FcYPv^Dgg;|QVC5UCHD~5+J{zbr$sN(R(5)ekt@vZpE1SC{)bxn@ zh|jX=1Ew)nN;OJkN^1`^q?(q!>dj9=*UM89QwrHY<)6zxIz%*HHBLw~LtfQ!n1aMv zyLkHf3xP82qYhICdL#u;J}0R@_As>V$awuj^;|KI=?!zZAx?v1{i2?<&41zV%u5#`O8Nu+x5OkZEaXHutG!*|d5Ceo}DK((!b^ zTOVTl+=9R%!8)OludKdHxzgBTLD zq%@tu?=Ll-s->O{LcXn3^^flr?6&vV1)B%UepftB8dr!^C?19-cuk2;&IpwWr3k{} zp+oQ1o)5d;FQ3c!lT_|#f(qNNP=)Ei$E(9vbcZ>(Vsn140xNb{?{hDjKN-C;%Afu= z9n)MS=-{vFzqAuFk^N}w5trnfp8;oa7nxZNqjoCeNn>Ph-+*&{f=;A|B9CKZD56E4 zdP=l6u7Am{sjFH15Sm_VcHHJ({8kil}^*!o7ewwx;C(V36$YH1H z@LAW6Tf=?YTJ`I0w7{(!(_5a!i}t{c*FUqVQDV_=4!FDhf0}(0-w9m2|BO*iU?vHF zA$)ItZ?(Txz>2NGo>L)NeLr_ zu0plKc-(c|!i#rjgGV3Y(kIp;d)R(7U#5Pp%nkCn?Xt5R88~wKyq77dyja!^zL~yw zwq?D&KH=kVSW^0Gv9eq8BJ@80*6M6HX=h*KN+UHlUeYH3>+Zyt<(ci~(q+Wy?SIqm z-!$|$*+!7!zxe7eX8Q|6kYFVl8EJ@zjWysmht&p{{?+Ce`~Hj4{!Pw3{=ewC#4@tcbC=y+Lr z{tg&)-Mwu7Slurx{-~5SFjO&+;*fzjJ6O6q{K4L3Z9J^p9o#%!-LZN9j4O0q^;{f& z$6LIA1`_fP?jD{p_7Haf2*KG^A%7P55jH(_u=ce7Z55v&fL{m<;1>|U<`dvUgd1Q0 z2+Rur2@3*1{9u3pQ0PBx{vV+q@Bh!(&ot?yV?U5E;_$^Q@senZIfrEQxcnm2fNcV= zTcqYj{4gW(diSHRKGRA%+YtPvgV+268O1M%yArARA zPVLfcDmZv7Px3|4uv3cnRmjNVSNRTJCdxgt-J>9WLgTN2%&7PWV>o11jGv3WYEn1oPnAx9VkW!1K?QORz z@ZOZ0z)0eDjV7q7d3NN$5WUmQ?Y)Le&5J4*vnl++LPy*jv4y?)!gFoH9f|B!ZT30M zGpS<8IB};ED27=X-PVHL)(*{?!0H`|uAFK=(;cvcTJneB+Q-tg`I3NsD4z0`g2ciP z1|e57>VvD5^>VW{yC|&3R7s(<+oe4llcI{yoOCjC(fp|CUXP9Ttx2--Y7=}3L9@a~LLYlNQ zp;q<@6ADSImSu^_{A_M{T)}F{Y>z_SJM|>CIic`C-8v;h!RrUI6_kGhR5s5A_k+FV zP^|@aM9i_l@gdDP4Qd(HFlQp$2H=~BxyPyrK5VsvW>*utw|&2Gs_j8jO?7HU=0E<0Q9D0^&qsVUdt-(m=>DNeD}%GOl58 zk`l8F5y&PsNFiem1}84j&&Y&LVuEBcc3`?VI?SrYKr&bgjt)zld4@Km1Pi2>!3I+$ zw}k?kVWc=9tqd#}DVEM-xG!V~3#6aH3nRr$=26W7w!y9hA?aF zH8K{N3{Qv{tTj@Jgheld2-X^*M8sm4!2}_WR3aQ=Q|$ykhYet_5e{+3sbxHbRKW}) zcyX+VhaSgCJ?sLCKpJ885n4Ef#PY;Za`F63a0iGw)@dP764OIF<0s~67jOydv>LdC zdFl%J!3>{)1u(>De*3-*l>9t1fc-{giIkZ$5bTo7R|}IyHv4kZz(wYA7~EAT?y0RFE3-O?F5SBRmymLJ!}7nXtgkAlzh|#1I(F zgcB|Y+b7zThHw*Z20*-VJaT|r*b^LZZiqK_gG|PEm@|oOCD1rxjuXxT5yYNggrh^I zaT?S!nqZzd4e}XNuqxsbm5fwa6`^e#FdN26QX-S#4VjN{AS;o}u!Uqr7_!5OAykou zoNxvRIW`F~%VRhg#!1KmPz?v3MrN|AW&=GUGa2EW5XZ<&Hr03_C?bWrRkkpi`69WJ(kxqwim`H=0P*zb#6(rc_d}mSxUr z)G3cIN-c^k$}EbpW*Z^iolz_vWQtWJhejxdF>NJs0m3vbfH^06lcte@qedq=zTitggFG6f}huat?gbY!U*z}5Uo>RLMrP&!3*?Sb>h14)P3eU3U;@~3GGM+)1hXvq}I+eXbVHk*0Sc0he{?$e#z^2 z*xl+UR3nv4wVKK4O0Tt!n4uI(W&ppOth>;4Ft&us3GT=QlSa~Aj*)~?F{|QhC{2F* zuo7+Iav@VfA`J^zmQRt3Kzj!QjaI}@#FZshe*P&*5yqe>8KZgv7(rp`VQkASN?7k! zd{A@qr7LBF7J9GiBQ#>l($Ocn-(mr!rijkRgF>qv%i6UvAz74qQJoL_-@Okr-G1j?9 z&%N_JX-C?K?2w8VUy=w>J3Ji#BiAQeV|Xp8-!~^Y#|wY`WR2ssq*@qyQdrXG%jC*+p-5k> zV_!!4DNP6T5l?J=g;k$|8g}9y3~kDoCA9LF1DDdHjPIrr`G_Tz*hU%^ITtAub;|jf zS26SXGp)4;`YyGwl%5apJ}QnOQXu4`Up2sFD`=O79up~Whpm-u%)Sh#o6UF`Zk~v( zcv9|9+a=8%lK_op8OgUURFsEWCtJ(W1f=mPb*6yA-Ai=%2yC7w7isnALW!8Tp`_6D zmt92QWQGgo#DSNAY)qj8O2it(3dAapXeRsArKpu~V^RmCxjs&Qk(FYM36<3-C`>bQ zEYHu&l9gjf0{%>_9{dP?=H!)I-_#Zy@e}zi>QAYC|AB6lr7+jt9-^NVS5#i+`FG4$ z4+8Mj0Y50ONWF6N?lg{guQ0Cs;e3}%mLdyup*>+eAp}IC`1hbIq|SsB|4%-BqRSe~ z&-Rorji=uoNJ=j?dbcgr*>;#?)b{l_p0}AJ^MqTK1!KLVsIL6R(<@2v6XR;DisRe3 zQF=%2JMZ?~W^ND3$nGA6Zq`1MUP({VafRNsW!?`)mxXCw2MU~f3(;KE-=cc~!Y{A- zm+2=TJy}4qB>F^PeU#@Hdy9Oke|ZT1x^Vf%r}Y*tx^Nll-zRP%*-HJ*X3S#=s|)4Z zYl#-A%gm?ku8}=xKWyDd?p%}hVcM&OEwmRXTNmf(-e}&a-WT67Gkg>`AJsf+5^esz z{q^_&Ke%eFQM^u|uG-bfLd8PI!egnV7cv!DCF2zutZZRruJL4oWT_!v;r@`eyjG!N zKWXSpk$u|g@c68Zi~7OdgT32nwAuD{udcmyudI=i_O(4-=WJ^#8WEAYu~dD$b60b_ zrl+-dRal;v)mT*r24n`I$lN?;uD zL5aN~N0%P#>jm5QjR`QEDT`Cj-cWoTA6W$4b} zR46-*7&U}$g)+bS6d6t#ngmSOl^ELadE^tg^97i`FS4sWJg@zYt%An5UYA$M&?vc+ zj{h zuR1_=^=|seHuu)0v|<;h)RSIEg%)dxevaM|<%TBl?SbRD)#!|}5sT8(I&|~zd7&RG zQ}MiFt#=r}P7=WvGdw9?6eFB z!19fJqqcPa9`j?FZy$Ivv!$X{#QoiBm!|C`O6%5YNWH4ra6unYs;?lq)0e%{ecd=Ip!*f>(!j3inB$~>{jr#AD#&9oWA~@~ zTa-KDozy_;w5rQKmm{{G$B{*}W&n#_hBO%y`8=H@JV| zI2Qdxv${(qc$W)_Mg0(^yS3H zGzoTlO@J71^oA!~8CZ_JxWGrc;q01N>`%atQGztFOG3*nurqL3LWwnTS;DaLFiFFX zEodI%423*MBsh7(eH8i`fD!kAQA+UrgUntWz9%9_NJ5Gz4-plXB^E@S%A zh@sP>C4}@Z6Fx-6=tKOUxFO+&U~XgZ`4WmD1z{Xu1TIUs@w8&>WB7!3^ky&PyNR~q z?W44W8TWo%W;rr;V{An>A*ex_33KY5T4q0@c4KaRV1mz$;@?-iOiYMQ5gyx1>qg%i z(v*6xyw(35eJj*Mif0zhJM58#=q!437?%ZT7F95ewhp-pW3Sif6W(;llm*%L1CBoI zIvUR~n>>`paKTU5Mo&QY4^;YyKVg!G%URH4h602!IFXP)A#H~H<>AB8JbF1bacsk= zfGDaMQ+e3BVc63b96hQ(=c6fZnh1`bN=OVXrDgkB4Pm@#^u+qHtQ3r6Ra#5+14Faw zb+yHwAx{vuwf~&nKBj+qQ{94_P+j1@i#Jd59LYYxes#l(dr5M2*UvSUPrO(CMn-08Rcy6oW$G8l zNv`n2Ck|{zD<=h4xklBH1!p|tVZl1uW+KUjqrF0Avle}}%R05IIe2qjwKMhCF>l#i zA-1INWpfp>LWQ=hUn5h&>Di^i`J{6n$LuI9rY`DYX9o@5nRA;4l;~xc!ng-T%!jz` zde$#<^gPfy!c0ek!cSKmz41EIOcPF5TlPzG<^}!6xR*2aZ{DG}_JeZu4qT#HeJWR@hh4!F-nrU77#+zAkxjGXtt84x9YkNp z5Be6n6VBh=9-k)D9h6-lUx?alSWk~LIEOsyRhEF`*Gn<~kem{K=`=iki!19PH)ahU zz;94+ixL}qy{df56ePROJMdbzP=l?y?2hSH++W#Y&?$GI?VPhlbG(6KHg@0Uf?s(! zWot|GMP%2InVqYWe(TdY$>V@mT?O|q2kZFms`nvPLu$@gK|drV8rk3@7kGh^jSk!X z=eX1K0?T;o_Xfo%``Q6~?`}%d)4pAa&i2&#dRuH8pIdI1=^WaNYAi{dMFy`#QaBs* zxIDYenyPHquQ6C`t19fOw%LIW4aSm3g@s04pYHB$j%A8hdfR@C+nLf!CEKw1@x?)> zR5eFeTkN^CmQ;}0LD_zls%w-e+ajdJ@FPp1RPBW0q;GJJ@kX`F$@@9AdX}%ER`Rqw z{%?rvY02%O;+T553-T97K_AORDvRm3M1!WkXmH)z87X^@lL|8P%;;>Kzvt0=As+q( zb_2LuRCayOn5%i`Jm^%P8b%g*=6QCc%j~89!n%A!hxw`NKJHTiz0D2fdt05zmV$+p z^ba>`wg#ZLVxwOdc;d5I*yIH&9JPC1QC8jA*m&vddAu=sN>^3kSzH>O@~~3VeWV@R zuy*}~Go9DgJEm0f(*Ej;l&F)#iQ#}UA+`6c&<3PbU z!r}Csv0?X-yxgWdz~wYX`96fJ2J@8SO1i!xW`>4LU<|2thfKh(UC58OL2t35WczSv zjH#_@;apKlm@y2!v&9ApiFoX!m$O-QajSba4Gv>Dw3`-9{hNtQ{)Zb zig}J`yrZh3$B$9sY;O;T%U3;!vTc=96~=^+x5* z`84IaRh>&5rn*aq>D*a8K;QRc8CwNW7P67!S#L&V?la49XitEfPYc*-H>4H^`fabPkv4FAziCLNI9Xd#Z^U;j8{*-!Cj@C$ zr5h!@Y8K2J8gs%2eN#MIp&L>qxMBL_`sD^MsBo#Ez5-Yrpv3T!M&7t^0G$)6=YGz} z`Wgumz`Wpk)`8EK`PkE7S5Ad?Pwv7VM7H)ZiW#QzB@_ejnGur{7vJFF3CFm-))-xD z1e4b)O@DmJ=)}-?&-eT>H=UQ};sy`K^zM}F*RzMLQ+=r9s~X<3xcav_U!BhR*$rp$zJG&iob^qj0|LctEjmn;JHM3ix#aqYFL&sJ{nvW=eC ztVHPETowQ>qt+7>dhFf6bV2tV;Oor)d;HJ5|NNnj9gG1qNkI%Y-Hs4n)2WDsQ z0CFaeR|nk`Ruqa_EY_>dbejbIfP2CUn^rs%A7KOIGP3i}Kh9XUaAcT#Rvscy$+l_E zvbK^SUQPG+Kzu%>gB2ZxKUMZGz&o1vo{J;0A$T)tj{(Q8aJ(`&>c9x!Qp;U-*u|I= zJG3>qz0ONb|59kwY&*rjb|8QM@uhF9oZUK~^)cc2F{#}7-FvPK9}{Bq=nMarBbB$l z>l-hw7ZP%V;a-^3sgW>Ag7>ijer-{?3f0QOG=c^{Z}Iuf(f24f4BY_Lcg^Sk*COx7~OV2jl7t^Vd_YzpdwcSA35TeHEuf63kaiHo0yT`(A1B@=*FFo&bWnIR@&)Xy(JS+{W8 z!>V5`C5eq{3w3D1I;W4cF=NW|d1Hl&xOx>DMrW4F#&6hQmj#_e3h{W#`f<)?nl&WZ zDfa`$)#oD>1D3j$MfLmyPX*zUJ?fB?Mni!NGf8!Eio@?odaYewP9EPo`93wFvhORS zW*AkIowICJdesr%O2Fj}Q4i)FX+F^>&$~S-EFVIFiM5;J{vP>B2I&OG{gMeMezxj{PSOT6JNM3v zkp;bxw-L`k+!Tr%6n(Aqp2Su5!%#l=Kdx5VDJM{W#36j%7c&bDBhl`=r3*UBzpu1< z4GlY{>posF2#BT4wG^L?tdUy`Hs31QxsxQf?znid&iAu4?uWH%D(?o3y^N+_7R`3D8D3n+)|af8?oPePHgfuukY$jg z^;IwR`1NAauBu|Zz(Y$NlDFmf_vJoKysSObLwB0_J2xwiO)e*^UsTV}S;CbIC-6#` znGa|@>Mvf7Q4P%xjyJu&`@0f^rN}E;$<-`w1UK&dr z1|?K~Gex+AATozr+h_mxN5ts*PzmF zyUc0`S~08g^}Ili+tF5&3e~$;bSLAG+!HPbPPRIZAd`_?)A z#`CblhreVSO5mAGl;$YBJ;quaR?8^kZc1<~Zna`DHgR<5+cfILm#PR}Rh<8Dr-o~gmpb>;IC zs{N7X^+{4!M-vwdyMCP*zhdyz=?9K?xh@Yy$`@-)V}GhrYwEw(7LgjIofr2 zV96jT6!ccU^7|RYp=s)^W!*!5$F8Zzfr0amKx%#}F^5<`-SAR6^JKxSD)}ZOS3x7_ zeknojn7i<`9uBA?5X~+yJEa6(#xeaG{Bn)euX({a$u?efb$sEpXt#A+Rw^|nEC_6& zU{#aBzRemSy>^9KQq0_2QXCJ;1ctJ7d#H+)E6ssRq;@1R_U`ZVT21ucc!x!}N=sqn$0jvPe&p^Je32=W14`;Yj~<%T(|1MpJVY>%3FRu;+xN6wxss=B_Lal85#2uPpH4hXXn62h&PzR`mqLiQ zy>b3&U7|s+uuOo9P0+{ML;^Yz=LPg0#CwTIfU#6?1`HAiQ$U#)WTP^T=Oc7TR$ zUN^K}l^?FY>9tY7p;$8G4ytu~G-S>OykkzoLbE+)e68|HD_HO()rhvSjPv?XgFkS$ z%!41?{%AMmbZWHM2#XowF#LB<0 zaq9KCehln<{`S~GWa{0q%Gevw=GzKhESC7ODxq6t3etocnk}lGTAaySg-!TZK^~8x zBAQaOcn+wN9Xvx*2RNU*MzfJik#R`JHmK{h5}>U5dfaokc=nt-fn!>fo}FO%d7#V89)mxFES-|apeR7fb1|qi2PDya4yd z7@Su5+texBPutbc^%n#yKbB1!uU3mmE-F>HPO;Pnj1;^L&&+htwyj73OP{nC!AaRb zhNJ4xdXnO|25iIhgD>3V<5yVYr%JLG_~k8W-^y`DA6iU4NyTX>5XQ+Lox{1$S=w<& z*TWB1H6lJtvECfF#pv-_4T$LG4SD;iP;9F1N-L;A_FAQfNc>_Y(86RtPgi6)J3Sny zqT75XM90HqhfS4tjP{2wmaF~{M~l+Z#2xvLl|=b5ykCHD>+%Gbz>7Ze_0~&IdaSX5 z=e}!7IN{WG?Y=V5gHL;&zR6+6TLV?w#Z!H?4ZFr(ER{bdExQJ*CMc`X**2|BEaUX6 zLDa>csZ^Y`ouRDymofB1W!3AYsf#(p6mM366-(ViMejA;y+rJwBrQmw32C)KY=l~25x*2X>5H~+S z%M0S}`2v8*!uXxg;p_RYPJDl*Q#}4P?%(jQjEY|xm&dXqd_Z1dpa6)M56CCP3pN4* zSrPBQTmB_9d;B-_m!8e|Z;9Jqi8>e_(vVh}HiC;|C&CYyXLX_&^9}_)qM2=^q$~ABfN<{iB@#@W18& z@%@r4{bxH6NZ`LQFhXqi&vt_U!(On!f3@T1`=zw|k2!b|TlGIMgsAVo+6n!0&AbSA z`{%wOF#dn;3j!1V=UNcw2K={k^K^$GbX@Mg^TBi+ULafuA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/routerlicious/packages/common-utils/src/test/assets/book.xml b/server/routerlicious/packages/common-utils/src/test/assets/book.xml new file mode 100644 index 000000000000..64056b04956f --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/assets/book.xml @@ -0,0 +1,119 @@ + + + Gambardella, Matthew + XML Developer's Guide + Computer + 44.95 + 2000-10-01 + An in-depth look at creating applications + with XML. + + + Ralls, Kim + Midnight Rain + Fantasy + 5.95 + 2000-12-16 + A former architect battles corporate zombies, + an evil sorceress, and her own childhood to become queen + of the world. + + + Corets, Eva + Maeve Ascendant + Fantasy + 5.95 + 2000-11-17 + After the collapse of a nanotechnology + society in England, the young survivors lay the + foundation for a new society. + + + Corets, Eva + Oberon's Legacy + Fantasy + 5.95 + 2001-03-10 + In post-apocalypse England, the mysterious + agent known only as Oberon helps to create a new life + for the inhabitants of London. Sequel to Maeve + Ascendant. + + + Corets, Eva + The Sundered Grail + Fantasy + 5.95 + 2001-09-10 + The two daughters of Maeve, half-sisters, + battle one another for control of England. Sequel to + Oberon's Legacy. + + + Randall, Cynthia + Lover Birds + Romance + 4.95 + 2000-09-02 + When Carla meets Paul at an ornithology + conference, tempers fly as feathers get ruffled. + + + Thurman, Paula + Splish Splash + Romance + 4.95 + 2000-11-02 + A deep sea diver finds true love twenty + thousand leagues beneath the sea. + + + Knorr, Stefan + Creepy Crawlies + Horror + 4.95 + 2000-12-06 + An anthology of horror stories about roaches, + centipedes, scorpions and other insects. + + + Kress, Peter + Paradox Lost + Science Fiction + 6.95 + 2000-11-02 + After an inadvertant trip through a Heisenberg + Uncertainty Device, James Salway discovers the problems + of being quantum. + + + O'Brien, Tim + Microsoft .NET: The Programming Bible + Computer + 36.95 + 2000-12-09 + Microsoft's .NET initiative is explored in + detail in this deep programmer's reference. + + + O'Brien, Tim + MSXML3: A Comprehensive Guide + Computer + 36.95 + 2000-12-01 + The Microsoft MSXML3 parser is covered in + detail, with attention to XML DOM interfaces, XSLT processing, + SAX and more. + + + Galos, Mike + Visual Studio 7: A Comprehensive Guide + Computer + 49.95 + 2001-04-16 + Microsoft Visual Studio 7 is explored in depth, + looking at how Visual Basic, Visual C++, C#, and ASP+ are + integrated into a comprehensive development + environment. + + \ No newline at end of file diff --git a/server/routerlicious/packages/common-utils/src/test/assets/grid.gif b/server/routerlicious/packages/common-utils/src/test/assets/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7d63376bbcb05d0a6fa749594048c8ce6be23fb GIT binary patch literal 9137 zcmd^Ce{2&~9RIw>-PT_QG431QP zvakQg;WtjzMP|S9n7?iLe0=QfU7=RAtF&EfD}t($pna@HrFy3%ph-d*)Vn_B9G~J= z-6|D7{meg_%c2O<1XKe!RH|znLgVDxn1%!iCdkU3m>goCwGO`jK=j_NO=uhX^3|nY z{Pe~1M`(BS`&#%&Sc=R@JqRC6K*G>9+7Qu(bdGF-sU>r59n47*F6M;Rq!CGA6qVAz znSq)nsB&);q&2;b@I?7DD1EQ9rqTdu{6x z>uHh8DCbtZ#CzY^{AExAA1qi8Bsa-8J-iN2Bp;WNF8*=~fst(8W%1cFRxUX)@^sD7 zW3?m47ES-|^WP~^tqTJ4YveK$`L*#VcK>%L!!n*rioJbq3&BgTd9@^GTw_H}$I4|U zisCN?|5N8S6CBuY!lxJ3@2tCOj|!t%t7BhKM$#b7T_~2$|bn zN6Zg}>J3Jb&>`Og>|OPYgDw8!YX_?vmaw*t*k1v+Z&FGYe5w<9{^x&x*DQf$ zPF*_PxwiT8*{)}kFPa5(b7d3Sj(R^l4#-q&tx+hnFtj>B{GFv17ZxB_MgpP)K&JYB)e)_Tt!Q14#N@#ooh z5c>9ZlIOS=Mj-g)9vuZy9HFk26vv|y;?-3MUzlNIPjdYcnRbKNu(Qk<1*0_MDkhPe s>n@H(`~Rtg@X{{%V*v$z}6m&0B8Lwm(mGn;B)hSOJ#)4?&}?Q2+n{ literal 0 HcmV?d00001 diff --git a/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts b/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts new file mode 100644 index 000000000000..70faf6772fae --- /dev/null +++ b/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts @@ -0,0 +1,77 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import fs from "fs"; +import path from "path"; +import { strict as assert } from "assert"; + +import { gitHashFile } from "../hashFile"; + +async function getFileContents(p: string): Promise { + return new Promise((resolve, reject) => { + fs.readFile(p, (error, data) => { + if (error) { + reject(error); + } + resolve(data); + }); + }); +} + +const assetsDir = "../../src/test/assets"; + +describe("hashFile", () => { + let xmlFile: Buffer; + let svgFile: Buffer; + let pdfFile: Buffer; + let gifFile: Buffer; + + before(async () => { + /* eslint-disable unicorn/prefer-module */ + xmlFile = await getFileContents(path.join(__dirname, `${assetsDir}/book.xml`)); + svgFile = await getFileContents(path.join(__dirname, `${assetsDir}/bindy.svg`)); + pdfFile = await getFileContents(path.join(__dirname, `${assetsDir}/aka.pdf`)); + gifFile = await getFileContents(path.join(__dirname, `${assetsDir}/grid.gif`)); + /* eslint-enable unicorn/prefer-module */ + }); + + // Expected hashes are from git hash-object file... + // Make sure the hash is of the file and not of an LFS stub + describe("gitHashFile", () => { + it("XML should Hash", async () => { + const expectedHash = "64056b04956fb446b4014cb8d159d2e2494ed0fc"; + const hashNode = await gitHashFile(xmlFile); + + assert.equal(hashNode, expectedHash); + }); + + it("SVG should Hash", async () => { + const expectedHash = "c741e46ae4a5f1ca19debf0ac609aabc5fe94add"; + const hashNode = await gitHashFile(svgFile); + + assert.equal(hashNode, expectedHash); + }); + + it("AKA PDF should Hash", async () => { + const expectedHash = "f3423703f542852aa7f3d1a13e73f0de0d8c9c0f"; + const hashNode = await gitHashFile(pdfFile); + + assert.equal(hashNode, expectedHash); + }); + + it("Grid GIF should Hash", async () => { + const expectedHash = "a7d63376bbcb05d0a6fa749594048c8ce6be23fb"; + const hashNode = await gitHashFile(gifFile); + + assert.equal(hashNode, expectedHash); + }); + + it("Hash is consistent", async () => { + const hash1Node = await gitHashFile(svgFile); + const hash2Node = await gitHashFile(svgFile); + assert.equal(hash1Node, hash2Node); + }); + }); +}); diff --git a/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts b/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts deleted file mode 100644 index 15320d11974e..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/jest/gitHash.spec.ts +++ /dev/null @@ -1,193 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import fs from "fs"; -import http from "http"; -import { AddressInfo } from "net"; -import path from "path"; - -import rewire from "rewire"; - -import * as HashNode from "../../hashFile"; - -// Use rewire to access private functions -const HashBrowser = rewire("../../hashFileBrowser"); - -async function getFileContents(p: string): Promise { - return new Promise((resolve, reject) => { - fs.readFile(p, (error, data) => { - if (error) { - reject(error); - } - resolve(data); - }); - }); -} - -const dataDir = "../../../src/test/jest"; - -async function evaluateBrowserHash( - page, - file: Buffer, - algorithm: "SHA-1" | "SHA-256" = "SHA-1", - hashEncoding: "hex" | "base64" = "hex", -): Promise { - // convert the file to a string to pass into page.evaluate because - // Buffer/Uint8Array are not directly jsonable - const fileCharCodeString = Array.prototype.map - .call(file, (byte) => { - return String.fromCharCode(byte); - }) - .join(""); - - // puppeteer has issues with calling crypto through page.exposeFunction but not directly, - // so pull in the function as a string and eval it directly instead - // there are also issues around nested function calls when using page.exposeFunction, so - // do only the crypto.subtle part in page.evaluate and do the other half outside - const browserHashFn = HashBrowser.__get__("digestBuffer").toString(); - const hashCharCodeString = await (page.evaluate( - async (fn, f, alg) => { - // convert back into Uint8Array - const fileCharCodes = Array.prototype.map.call([...f], (char) => { - return char.charCodeAt(0) as number; - }) as number[]; - const fileUint8 = Uint8Array.from(fileCharCodes); - - // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func - const hashFn = new Function(`"use strict"; return ( ${fn} );`); - const pageHashArray = await (hashFn()(fileUint8, alg) as Promise); - - // Similarly, return the hash array as a string instead of a Uint8Array - return Array.prototype.map - .call(pageHashArray, (byte) => { - return String.fromCharCode(byte); - }) - .join(""); - }, - browserHashFn, - fileCharCodeString, - algorithm, - ) as Promise); - - // reconstruct the Uint8Array from the string - const charCodes = Array.prototype.map.call([...hashCharCodeString], (char) => { - return char.charCodeAt(0) as number; - }) as number[]; - const hashArray = Uint8Array.from(charCodes); - return HashBrowser.__get__("encodeDigest")(hashArray, hashEncoding) as string; -} - -/** - * Same as evaluateBrowserHash above except prepends the - * `blob ${size.toString()}${String.fromCharCode(0)}` prefix for git - * */ -async function evaluateBrowserGitHash(page, file: Buffer): Promise { - // Add the prefix for git hashing - const size = file.byteLength; - const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; - const prefixBuffer = Buffer.from(filePrefix, "utf-8"); - const hashBuffer = Buffer.concat([prefixBuffer, file], prefixBuffer.length + file.length); - return evaluateBrowserHash(page, hashBuffer); -} - -describe("Common-Utils", () => { - let xmlFile: Buffer; - let svgFile: Buffer; - let pdfFile: Buffer; - let gifFile: Buffer; - - let server: http.Server; - - beforeAll(async () => { - // crypto is only available in secure contexts (https pages) or localhost, - // so start a basic server to make this available - server = http.createServer((req, res) => { - res.statusCode = 200; - res.setHeader("Content-Type", "text/plain"); - res.end("basic test server"); - }); - - await new Promise((resolve) => { - server.listen(0, "localhost"); - server.on("listening", () => { - resolve(); - }); - server.on("error", (err) => { - throw err; - }); - }); - - // Since we're listening on an http port, address() will return an AddressInfo and not just a string - const port: number = (server.address() as AddressInfo).port; - - // Navigate to the local test server so crypto is available - await page.goto(`http://localhost:${port}`, { waitUntil: "load", timeout: 0 }); - - /* eslint-disable unicorn/prefer-module */ - xmlFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/book.xml`)); - svgFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/bindy.svg`)); - pdfFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/aka.pdf`)); - gifFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/grid.gif`)); - /* eslint-enable unicorn/prefer-module */ - }); - - afterAll(async () => { - await new Promise((resolve) => { - server.close(resolve); - // Puppeteer may have lingering connections which prevents the server from closing otherwise. - server.closeAllConnections(); - }); - }); - - // Expected hashes are from git hash-object file... - // Make sure the hash is of the file and not of an LFS stub - describe("gitHashFile", () => { - test("XML should Hash", async () => { - const expectedHash = "64056b04956fb446b4014cb8d159d2e2494ed0fc"; - const hashNode = await HashNode.gitHashFile(xmlFile); - const hashBrowser = await evaluateBrowserGitHash(page, xmlFile); - - expect(hashNode).toEqual(expectedHash); - expect(hashBrowser).toEqual(expectedHash); - }); - - test("SVG should Hash", async () => { - const expectedHash = "c741e46ae4a5f1ca19debf0ac609aabc5fe94add"; - const hashNode = await HashNode.gitHashFile(svgFile); - const hashBrowser = await evaluateBrowserGitHash(page, svgFile); - - expect(hashNode).toEqual(expectedHash); - expect(hashBrowser).toEqual(expectedHash); - }); - - test("AKA PDF should Hash", async () => { - const expectedHash = "f3423703f542852aa7f3d1a13e73f0de0d8c9c0f"; - const hashNode = await HashNode.gitHashFile(pdfFile); - const hashBrowser = await evaluateBrowserGitHash(page, pdfFile); - - expect(hashNode).toEqual(expectedHash); - expect(hashBrowser).toEqual(expectedHash); - }); - - test("Grid GIF should Hash", async () => { - const expectedHash = "a7d63376bbcb05d0a6fa749594048c8ce6be23fb"; - const hashNode = await HashNode.gitHashFile(gifFile); - const hashBrowser = await evaluateBrowserGitHash(page, gifFile); - - expect(hashNode).toEqual(expectedHash); - expect(hashBrowser).toEqual(expectedHash); - }); - - test("Hash is consistent", async () => { - const hash1Node = await HashNode.gitHashFile(svgFile); - const hash2Node = await HashNode.gitHashFile(svgFile); - expect(hash1Node).toEqual(hash2Node); - - const hash1Browser = await evaluateBrowserGitHash(page, svgFile); - const hash2Browser = await evaluateBrowserGitHash(page, svgFile); - expect(hash1Browser).toEqual(hash2Browser); - }); - }); -}); diff --git a/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json deleted file mode 100644 index 53e4ebcede51..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/jest/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "@fluidframework/build-common/ts-common-config.json", - "compilerOptions": { - "rootDir": "./", - "outDir": "../../../dist/test/jest", - "types": ["jest", "jest-environment-puppeteer", "node", "puppeteer"], - }, - "include": ["./**/*"], - "references": [ - { - "path": "../../..", - }, - ], -} diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/tsconfig.json similarity index 66% rename from server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json rename to server/routerlicious/packages/common-utils/src/test/tsconfig.json index db956b71efd0..b58e17f1917f 100644 --- a/server/routerlicious/packages/common-utils/src/test/mocha/tsconfig.json +++ b/server/routerlicious/packages/common-utils/src/test/tsconfig.json @@ -1,15 +1,16 @@ { "extends": "@fluidframework/build-common/ts-common-config.json", - "exclude": ["dist", "node_modules"], "compilerOptions": { "rootDir": "./", - "outDir": "../../../dist/test/mocha", + "outDir": "../../dist/test", "types": ["node", "mocha"], + "declaration": false, + "declarationMap": false, }, "include": ["./**/*"], "references": [ { - "path": "../../..", + "path": "../..", }, ], } diff --git a/server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts b/server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts similarity index 92% rename from server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts rename to server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts index 41673cdcf481..aa89ca269d8d 100644 --- a/server/routerlicious/packages/common-utils/src/test/mocha/typedEventEmitter.spec.ts +++ b/server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts @@ -5,8 +5,8 @@ import { strict as assert } from "assert"; -import { TypedEventEmitter } from "../.."; -import { IErrorEvent } from "../../typedEventEmitter"; +import { TypedEventEmitter } from ".."; +import { IErrorEvent } from "../typedEventEmitter"; describe("TypedEventEmitter", () => { it("Validate Function proxies", () => { diff --git a/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json deleted file mode 100644 index 9ea9798bcd75..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/types/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "@fluidframework/build-common/ts-common-config.json", - "exclude": ["dist", "node_modules"], - "compilerOptions": { - "rootDir": "./", - "outDir": "../../../dist/test/types", - }, - "include": ["./**/*"], - "references": [ - { - "path": "../../..", - }, - ], -} diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 808144f300c1..52de2de9b60c 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -96,12 +96,6 @@ importers: '@microsoft/api-extractor': specifier: ^7.45.1 version: 7.49.1(@types/node@18.19.39) - '@types/jest': - specifier: 29.5.3 - version: 29.5.3 - '@types/jest-environment-puppeteer': - specifier: 2.2.0 - version: 2.2.0(typescript@5.1.6) '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -123,15 +117,6 @@ importers: eslint: specifier: ~8.55.0 version: 8.55.0 - jest: - specifier: ^29.6.2 - version: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - jest-junit: - specifier: ^10.0.0 - version: 10.0.0 - jest-puppeteer: - specifier: ^10.1.3 - version: 10.1.4(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6) mocha: specifier: ^10.2.0 version: 10.2.0 @@ -141,9 +126,6 @@ importers: puppeteer: specifier: ^23.6.0 version: 23.11.1(typescript@5.1.6) - rewire: - specifier: ^5.0.0 - version: 5.0.0 rimraf: specifier: ^4.4.0 version: 4.4.1 @@ -2257,10 +2239,6 @@ packages: resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} engines: {node: '>=14.13.1'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} @@ -2398,176 +2376,18 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.9': - resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.9': - resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.9': - resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/runtime@7.23.6': resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.9': - resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} - engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2634,10 +2454,6 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -2788,12 +2604,6 @@ packages: resolution: {integrity: sha512-9KMSDtJ/sIov+5pcH+CAfiJXSiuYgN0KLKQFg0HHWR2DwcjGYkcbmhoZcWsaOWOqq4kihN1l7wX91UoRxxKKTQ==} engines: {node: '>=18.0.0'} - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2919,92 +2729,14 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@24.9.0': - resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} - engines: {node: '>= 6'} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.3': resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -3013,10 +2745,6 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.3': resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} @@ -3026,12 +2754,6 @@ packages: '@jridgewell/trace-mapping@0.3.20': resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -3381,15 +3103,6 @@ packages: '@rushstack/ts-command-line@4.23.3': resolution: {integrity: sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==} - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - '@sigstore/protobuf-specs@0.1.0': resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3398,9 +3111,6 @@ packages: resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@5.4.1': resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} engines: {node: '>=14.16'} @@ -3408,9 +3118,6 @@ packages: '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@sinonjs/fake-timers@11.2.2': resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} @@ -3603,18 +3310,6 @@ packages: '@ts-morph/common@0.23.0': resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tufjs/canonical-json@1.0.0': resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3635,18 +3330,6 @@ packages: '@types/async@3.2.20': resolution: {integrity: sha512-6jSBQQugzyX1aWto0CbvOnmxrU9tMoXfA9gc4IrLEtvr3dTwSg5GLGoWiZnGLI6UG/kqpB3JOQKQrqnhUWGKQA==} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/bluebird@3.5.38': resolution: {integrity: sha512-yR/Kxc0dd4FfwtEoLZMoqJbM/VE/W7hXn/MIjb+axcwag0iFmSPK7OBUZq1YWLynJUoWQkfUrI7T0HDqGApNSg==} @@ -3722,9 +3405,6 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/http-cache-semantics@4.0.1': resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -3734,21 +3414,6 @@ packages: '@types/istanbul-lib-coverage@2.0.4': resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@1.1.2': - resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest-environment-puppeteer@2.2.0': - resolution: {integrity: sha512-4XWMEDqFIocwxMerq5/0fghlUhvHTb3BtK9LUAmEX194R2ui34mX09EEpJavLRAzcjvfMklWfp3lm4CJYlBF1g==} - - '@types/jest@29.5.3': - resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3830,10 +3495,6 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - '@types/puppeteer@7.0.4': - resolution: {integrity: sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==} - deprecated: This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed. - '@types/qs@6.9.7': resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -3870,9 +3531,6 @@ packages: '@types/split@0.3.28': resolution: {integrity: sha512-t6JWsgzXTobVH6dgfYGedS8Y0ZRc20jtzHCWYx+Q/w9WfpwUkPY8FTa+5y8KPztQne3NmI4+/s0zbCMMkuk1tQ==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/string-hash@1.1.1': resolution: {integrity: sha512-ijt3zdHi2DmZxQpQTmozXszzDo78V4R3EdvX0jFMfnMH2ZzQSmCbaWOMPGXFUYSzSIdStv78HDjg32m5dxc+tA==} @@ -3906,15 +3564,6 @@ packages: '@types/ws@6.0.4': resolution: {integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@13.0.12': - resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -4154,15 +3803,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} @@ -4260,10 +3900,6 @@ packages: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4280,10 +3916,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -4372,10 +4004,6 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - astral-regex@1.0.0: - resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} - engines: {node: '>=4'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -4423,40 +4051,12 @@ packages: axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} - axios@1.8.1: - resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} - azure-devops-node-api@11.2.0: resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -4578,9 +4178,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - bson@4.7.2: resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} engines: {node: '>=6.9.0'} @@ -4671,10 +4268,6 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -4732,10 +4325,6 @@ packages: peerDependencies: '@changesets/cli': ^2.0.0 - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -4775,9 +4364,6 @@ packages: circular_buffer_js@1.10.0: resolution: {integrity: sha512-HXSDm8gm3nPog7Sh7kln9yb9dVFYan4nVwF4qOqOkR8YpAN6yJupyccXl9OcuTJfPqie0uRJdjHs44H1oCgBOQ==} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - classic-level@1.3.0: resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} engines: {node: '>=12'} @@ -4801,10 +4387,6 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4825,10 +4407,6 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -4848,10 +4426,6 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} @@ -4866,9 +4440,6 @@ packages: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4914,10 +4485,6 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - commander@2.15.1: resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} @@ -4978,9 +4545,6 @@ packages: convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - convert-to-spaces@2.0.1: resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5040,14 +4604,6 @@ packages: engines: {node: '>=0.8'} hasBin: true - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - croner@4.1.97: resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} @@ -5059,10 +4615,6 @@ packages: cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -5077,10 +4629,6 @@ packages: culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} - cwd@0.10.0: - resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} - engines: {node: '>=0.8'} - danger@12.3.3: resolution: {integrity: sha512-nZKzpgXN21rr4dwa6bFhM7G2JEa79dZRJiT3RVRSyi4yk1/hgZ2f8HDGoa7tMladTmu8WjJFyE3LpBIihh+aDw==} engines: {node: '>=18'} @@ -5169,14 +4717,6 @@ packages: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} engines: {node: '>=4'} - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -5184,10 +4724,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -5273,10 +4809,6 @@ packages: devtools-protocol@0.0.1367902: resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff3@0.0.3: resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} @@ -5337,16 +4869,9 @@ packages: electron-to-chromium@1.5.84: resolution: {integrity: sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==} - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5606,33 +5131,15 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-utils@1.4.3: - resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@6.8.0: - resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - eslint@8.55.0: resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - espree@6.2.1: - resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} - engines: {node: '>=6.0.0'} - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5690,30 +5197,14 @@ packages: resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} engines: {node: '>=0.8'} - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expand-tilde@1.2.2: - resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} - engines: {node: '>=0.10.0'} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} - expect-puppeteer@10.1.4: - resolution: {integrity: sha512-zNVzk/+TkPS/CuTlGSK7SjXuUpQiakXtUJhbTRrcPHop4jCWydPx9RlvHhQELzZYgXlLhIP+hvBzUNiN8WNAow==} - engines: {node: '>=16'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} @@ -5786,9 +5277,6 @@ packages: fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fclone@1.0.11: resolution: {integrity: sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==} @@ -5817,14 +5305,6 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - - file-entry-cache@5.0.1: - resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} - engines: {node: '>=4'} - file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5855,18 +5335,6 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - find-file-up@0.1.3: - resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==} - engines: {node: '>=0.10.0'} - - find-pkg@0.1.2: - resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} - engines: {node: '>=0.10.0'} - - find-process@1.4.10: - resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} - hasBin: true - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5882,10 +5350,6 @@ packages: find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - flat-cache@2.0.1: - resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} - engines: {node: '>=4'} - flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5894,9 +5358,6 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@2.0.2: - resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} - flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} @@ -5993,9 +5454,6 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -6008,10 +5466,6 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -6136,22 +5590,6 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} - global-modules@0.2.3: - resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} - engines: {node: '>=0.10.0'} - - global-prefix@0.1.5: - resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} - engines: {node: '>=0.10.0'} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@12.4.0: - resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} - engines: {node: '>=8'} - globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} @@ -6337,10 +5775,6 @@ packages: resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ignore@4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -6407,10 +5841,6 @@ packages: react-devtools-core: optional: true - inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - int64-buffer@0.1.10: resolution: {integrity: sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==} @@ -6517,10 +5947,6 @@ packages: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -6533,10 +5959,6 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -6667,10 +6089,6 @@ packages: is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - is-windows@0.2.0: - resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} - engines: {node: '>=0.10.0'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -6712,22 +6130,10 @@ packages: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - istanbul-reports@3.1.6: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} @@ -6744,173 +6150,15 @@ packages: engines: {node: '>=10'} hasBin: true - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': ^18.19.39 - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-dev-server@10.1.4: - resolution: {integrity: sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==} - engines: {node: '>=16'} - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-puppeteer@10.1.4: - resolution: {integrity: sha512-cx2jzf1qZb6/vdmLbRccF0k/zSsoWlrXi8bg10GzrODxiwsRomVDszTfoOCRsQ+C1sbJ+ubI1PlryIvvYjITrA==} - engines: {node: '>=16'} - - jest-get-type@24.9.0: - resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} - engines: {node: '>= 6'} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-junit@10.0.0: - resolution: {integrity: sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==} - engines: {node: '>=8.0.0'} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-puppeteer@10.1.4: - resolution: {integrity: sha512-I9bADDn9EzpaL9QgzEtyJhd29PBv45rZJFPROUC2KWZHUs+5OGjzBOZKBzmqECdGv2GV/JL+NMdjqRJde2A36Q==} - engines: {node: '>=16'} - peerDependencies: - puppeteer: '>=19' - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@24.9.0: - resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==} - engines: {node: '>= 6'} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - - js-git@0.7.8: - resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} + js-git@0.7.8: + resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -7096,14 +6344,6 @@ packages: resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} engines: {node: '>=12'} - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -7214,10 +6454,6 @@ packages: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - long@1.1.2: resolution: {integrity: sha512-pjR3OP1X2VVQhCQlrq3s8UxugQsuoucwMOn9Yj/kN/61HMc+lDFJS5bvpNEHneZ9NVaSm8gNWxZvtGS7lqHb3Q==} engines: {node: '>=0.6'} @@ -7255,9 +6491,6 @@ packages: lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -7284,9 +6517,6 @@ packages: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -7694,9 +6924,6 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - nise@6.1.1: resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==} @@ -7734,9 +6961,6 @@ packages: engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-rdkafka@3.0.1: resolution: {integrity: sha512-USTFu7ylRj+fEiGz0hA92GWSqmX/hu/xSTqtgmInPPmh5zKhjauTciRjDEG3yK5m6yChwyHKQTIgmr56DfhiaQ==} engines: {node: '>=16'} @@ -7915,10 +7139,6 @@ packages: optional@0.1.4: resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -8090,10 +7310,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -8164,10 +7380,6 @@ packages: pinpoint@1.1.0: resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -8208,10 +7420,6 @@ packages: engines: {node: '>=6'} hasBin: true - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -8231,14 +7439,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-format@24.9.0: - resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} - engines: {node: '>= 6'} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - prettyjson@1.2.5: resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} hasBin: true @@ -8360,9 +7560,6 @@ packages: engines: {node: '>=18'} hasBin: true - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} @@ -8398,9 +7595,6 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-reconciler@0.29.2: resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} engines: {node: '>=0.10.0'} @@ -8497,10 +7691,6 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} - regexpp@2.0.1: - resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} - engines: {node: '>=6.5.0'} - registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -8569,10 +7759,6 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} - resolve-dir@0.1.1: - resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} - engines: {node: '>=0.10.0'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -8607,10 +7793,6 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8630,14 +7812,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rewire@5.0.0: - resolution: {integrity: sha512-1zfitNyp9RH5UDyGGLe9/1N0bMlPQ0WrX0Tmg11kMHBpqwPJI4gfPpP7YngFyLbFmhXh19SToAG0sKKEFcOIJA==} - - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -8653,10 +7827,6 @@ packages: engines: {node: '>=14'} hasBin: true - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} @@ -8670,10 +7840,6 @@ packages: run-series@1.1.9: resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==} - rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -8883,10 +8049,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slice-ansi@2.1.0: - resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} - engines: {node: '>=6'} - slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -8964,9 +8126,6 @@ packages: peerDependencies: webpack: ^5.72.1 - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -8988,10 +8147,6 @@ packages: resolution: {integrity: sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw==} engines: {node: '>=14'} - spawnd@10.1.4: - resolution: {integrity: sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==} - engines: {node: '>=16'} - spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -9050,18 +8205,10 @@ packages: string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} - string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -9100,10 +8247,6 @@ packages: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -9120,10 +8263,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} @@ -9188,10 +8327,6 @@ packages: os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true - table@5.4.6: - resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} - engines: {node: '>=6.0.0'} - table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} @@ -9279,9 +8414,6 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} @@ -9343,20 +8475,6 @@ packages: ts-morph@22.0.0: resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': ^18.19.39 - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - ts-node@8.10.2: resolution: {integrity: sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==} engines: {node: '>=6.0.0'} @@ -9397,10 +8515,6 @@ packages: tx2@1.0.5: resolution: {integrity: sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==} - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -9627,12 +8741,6 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-compile-cache@2.4.0: - resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} - v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} @@ -9666,14 +8774,6 @@ packages: resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} engines: {node: '>=4.0'} - wait-on@8.0.2: - resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} - engines: {node: '>=12.0.0'} - hasBin: true - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -9799,10 +8899,6 @@ packages: resolution: {integrity: sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==} engines: {node: '>= 12.0.0'} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -9831,14 +8927,6 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - write@1.0.3: - resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} - engines: {node: '>=4'} - ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -9886,9 +8974,6 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} - xml@1.0.1: - resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} - xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -9904,9 +8989,6 @@ packages: yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -9993,11 +9075,6 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - '@andrewbranch/untar.js@1.0.3': {} '@aws-crypto/ie11-detection@3.0.0': @@ -10445,203 +9522,18 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.26.8': {} - - '@babel/core@7.26.9': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helpers': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.9': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - - '@babel/helper-compilation-targets@7.26.5': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.26.5': {} - - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helpers@7.26.9': - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - '@babel/parser@7.26.9': - dependencies: - '@babel/types': 7.26.9 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/runtime@7.23.6': dependencies: regenerator-runtime: 0.14.0 - '@babel/template@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - - '@babel/traverse@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - debug: 4.4.0(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.26.9': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} '@changesets/apply-release-plan@7.0.5': @@ -10792,11 +9684,6 @@ snapshots: '@colors/colors@1.6.0': {} - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - optional: true - '@dabh/diagnostics@2.0.3': dependencies: colorspace: 1.1.4 @@ -11644,12 +10531,6 @@ snapshots: '@gitbeaker/core': 38.12.1 '@gitbeaker/requester-utils': 38.12.1 - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -11926,225 +10807,30 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - '@istanbuljs/schema@0.1.3': {} - '@jest/console@29.7.0': + '@jridgewell/gen-mapping@0.3.3': dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.8.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node + '@jridgewell/resolve-uri@3.1.1': {} - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - jest-mock: 29.7.0 + '@jridgewell/set-array@1.1.2': {} - '@jest/expect-utils@29.7.0': + '@jridgewell/source-map@0.3.3': dependencies: - jest-get-type: 29.6.3 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.39 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 18.19.39 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.26.9 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@24.9.0': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 1.1.2 - '@types/yargs': 13.0.12 - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.39 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/set-array@1.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.3': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.4.15': {} '@jridgewell/trace-mapping@0.3.20': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - optional: true - '@kwsites/file-exists@1.1.1': dependencies: debug: 4.4.0(supports-color@8.1.1) @@ -12894,14 +11580,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - '@sigstore/protobuf-specs@0.1.0': {} '@sigstore/tuf@1.0.0': @@ -12912,18 +11590,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@sinclair/typebox@0.27.8': {} - '@sindresorhus/is@5.4.1': {} '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers@11.2.2': dependencies: '@sinonjs/commons': 3.0.1 @@ -13260,18 +11932,6 @@ snapshots: mkdirp: 3.0.1 path-browserify: 1.0.1 - '@tsconfig/node10@1.0.11': - optional: true - - '@tsconfig/node12@1.0.11': - optional: true - - '@tsconfig/node14@1.0.3': - optional: true - - '@tsconfig/node16@1.0.4': - optional: true - '@tufjs/canonical-json@1.0.0': {} '@tufjs/models@1.0.4': @@ -13290,27 +11950,6 @@ snapshots: '@types/async@3.2.20': {} - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.26.9 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.26.9 - '@types/bluebird@3.5.38': {} '@types/body-parser@1.19.2': @@ -13401,10 +12040,6 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 18.19.39 - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 18.19.39 - '@types/http-cache-semantics@4.0.1': {} '@types/ioredis-mock@8.2.5': @@ -13416,34 +12051,6 @@ snapshots: '@types/istanbul-lib-coverage@2.0.4': {} - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - - '@types/istanbul-reports@1.1.2': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-lib-report': 3.0.3 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest-environment-puppeteer@2.2.0(typescript@5.1.6)': - dependencies: - '@types/puppeteer': 7.0.4(typescript@5.1.6) - transitivePeerDependencies: - - bare-buffer - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@types/jest@29.5.3': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - '@types/json-schema@7.0.15': {} '@types/json-stringify-safe@5.0.0': {} @@ -13512,16 +12119,6 @@ snapshots: '@types/prop-types@15.7.14': {} - '@types/puppeteer@7.0.4(typescript@5.1.6)': - dependencies: - puppeteer: 23.11.1(typescript@5.1.6) - transitivePeerDependencies: - - bare-buffer - - bufferutil - - supports-color - - typescript - - utf-8-validate - '@types/qs@6.9.7': {} '@types/range-parser@1.2.4': {} @@ -13562,8 +12159,6 @@ snapshots: dependencies: '@types/node': 18.19.39 - '@types/stack-utils@2.0.3': {} - '@types/string-hash@1.1.1': {} '@types/superagent@4.1.18': @@ -13596,16 +12191,6 @@ snapshots: dependencies: '@types/node': 18.19.39 - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@13.0.12': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - '@types/yauzl@2.10.3': dependencies: '@types/node': 18.19.39 @@ -13939,21 +12524,10 @@ snapshots: dependencies: acorn: 8.11.2 - acorn-jsx@5.3.2(acorn@7.4.1): - dependencies: - acorn: 7.4.1 - acorn-jsx@5.3.2(acorn@8.11.2): dependencies: acorn: 8.11.2 - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.0 - optional: true - - acorn@7.4.1: {} - acorn@8.11.2: {} acorn@8.14.0: {} @@ -14054,8 +12628,6 @@ snapshots: ansi-regex@2.1.1: optional: true - ansi-regex@4.1.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -14068,8 +12640,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} ansis@3.9.0: {} @@ -14173,8 +12743,6 @@ snapshots: dependencies: tslib: 2.6.2 - astral-regex@1.0.0: {} - astral-regex@2.0.0: {} async-lock@1.4.0: {} @@ -14223,14 +12791,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.8.1: - dependencies: - follow-redirects: 1.15.6(debug@4.3.4) - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - azure-devops-node-api@11.2.0: dependencies: tunnel: 0.0.6 @@ -14238,61 +12798,6 @@ snapshots: b4a@1.6.7: {} - babel-jest@29.7.0(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.26.9) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) - - babel-preset-jest@29.6.3(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) - bail@2.0.2: {} balanced-match@1.0.2: {} @@ -14440,10 +12945,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - bson@4.7.2: dependencies: buffer: 5.7.1 @@ -14562,8 +13063,6 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 - camelcase@5.3.1: {} - camelcase@6.3.0: {} camelcase@7.0.1: {} @@ -14650,8 +13149,6 @@ snapshots: transitivePeerDependencies: - supports-color - char-regex@1.0.2: {} - character-entities@2.0.2: {} chardet@0.7.0: {} @@ -14689,8 +13186,6 @@ snapshots: circular_buffer_js@1.10.0: {} - cjs-module-lexer@1.4.3: {} - classic-level@1.3.0: dependencies: abstract-level: 1.0.3 @@ -14713,10 +13208,6 @@ snapshots: cli-boxes@3.0.0: {} - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -14738,8 +13229,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 - cli-width@3.0.0: {} - cli-width@4.1.0: {} cliui@7.0.4: @@ -14762,8 +13251,6 @@ snapshots: cluster-key-slot@1.1.2: {} - co@4.6.0: {} - code-block-writer@12.0.0: {} code-block-writer@13.0.1: {} @@ -14775,8 +13262,6 @@ snapshots: code-point-at@1.1.0: optional: true - collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -14818,8 +13303,6 @@ snapshots: commander@10.0.1: {} - commander@12.1.0: {} - commander@2.15.1: {} commander@2.20.3: {} @@ -14894,8 +13377,6 @@ snapshots: convert-source-map@1.9.0: {} - convert-source-map@2.0.0: {} - convert-to-spaces@2.0.1: {} cookie-parser@1.4.7: @@ -14962,24 +13443,6 @@ snapshots: exit-on-epipe: 1.0.1 printj: 1.1.2 - create-jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-require@1.1.1: - optional: true - croner@4.1.97: {} cross-env@7.0.3: @@ -14992,14 +13455,6 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -15014,11 +13469,6 @@ snapshots: culvert@0.1.2: {} - cwd@0.10.0: - dependencies: - find-pkg: 0.1.2 - fs-exists-sync: 0.1.0 - danger@12.3.3(encoding@0.1.13): dependencies: '@gitbeaker/rest': 38.12.1 @@ -15145,14 +13595,10 @@ snapshots: pify: 2.3.0 strip-dirs: 2.1.0 - dedent@1.5.3: {} - deep-extend@0.6.0: {} deep-is@0.1.4: {} - deepmerge@4.3.1: {} - defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -15217,8 +13663,6 @@ snapshots: devtools-protocol@0.0.1367902: {} - diff-sequences@29.6.3: {} - diff3@0.0.3: {} diff@4.0.2: {} @@ -15270,12 +13714,8 @@ snapshots: electron-to-chromium@1.5.84: {} - emittery@0.13.1: {} - emoji-regex@10.4.0: {} - emoji-regex@7.0.3: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -15612,56 +14052,8 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@1.4.3: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - eslint-visitor-keys@3.4.3: {} - eslint@6.8.0: - dependencies: - '@babel/code-frame': 7.23.5 - ajv: 6.12.6 - chalk: 2.4.2 - cross-spawn: 6.0.6 - debug: 4.4.0(supports-color@8.1.1) - doctrine: 3.0.0 - eslint-scope: 5.1.1 - eslint-utils: 1.4.3 - eslint-visitor-keys: 1.3.0 - espree: 6.2.1 - esquery: 1.5.0 - esutils: 2.0.3 - file-entry-cache: 5.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - inquirer: 7.3.3 - is-glob: 4.0.3 - js-yaml: 3.14.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.3.0 - lodash: 4.17.21 - minimatch: 3.1.2 - mkdirp: 0.5.6 - natural-compare: 1.4.0 - optionator: 0.8.3 - progress: 2.0.3 - regexpp: 2.0.1 - semver: 6.3.1 - strip-ansi: 5.2.0 - strip-json-comments: 3.1.1 - table: 5.4.6 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 - transitivePeerDependencies: - - supports-color - eslint@8.55.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -15705,12 +14097,6 @@ snapshots: transitivePeerDependencies: - supports-color - espree@6.2.1: - dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - eslint-visitor-keys: 1.3.0 - espree@9.6.1: dependencies: acorn: 8.11.2 @@ -15759,29 +14145,13 @@ snapshots: exit-on-epipe@1.0.1: {} - exit@0.1.2: {} - expand-template@2.0.3: optional: true - expand-tilde@1.2.2: - dependencies: - os-homedir: 1.0.2 - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 - expect-puppeteer@10.1.4: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - exponential-backoff@3.1.1: {} express@4.21.2: @@ -15889,10 +14259,6 @@ snapshots: dependencies: reusify: 1.0.4 - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - fclone@1.0.11: {} fd-slicer@1.1.0: @@ -15917,14 +14283,6 @@ snapshots: fflate@0.8.2: {} - figures@3.2.0: - dependencies: - escape-string-regexp: 1.0.5 - - file-entry-cache@5.0.1: - dependencies: - flat-cache: 2.0.1 - file-entry-cache@6.0.1: dependencies: flat-cache: 3.0.4 @@ -15957,21 +14315,6 @@ snapshots: transitivePeerDependencies: - supports-color - find-file-up@0.1.3: - dependencies: - fs-exists-sync: 0.1.0 - resolve-dir: 0.1.1 - - find-pkg@0.1.2: - dependencies: - find-file-up: 0.1.3 - - find-process@1.4.10: - dependencies: - chalk: 4.1.2 - commander: 12.1.0 - loglevel: 1.9.2 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -15992,12 +14335,6 @@ snapshots: dependencies: micromatch: 4.0.8 - flat-cache@2.0.1: - dependencies: - flatted: 2.0.2 - rimraf: 2.6.3 - write: 1.0.3 - flat-cache@3.0.4: dependencies: flatted: 3.2.7 @@ -16005,8 +14342,6 @@ snapshots: flat@5.0.2: {} - flatted@2.0.2: {} - flatted@3.2.7: {} fn.name@1.1.0: {} @@ -16095,8 +14430,6 @@ snapshots: es-abstract: 1.22.4 functions-have-names: 1.2.3 - functional-red-black-tree@1.0.1: {} - functions-have-names@1.2.3: {} gauge@2.7.4: @@ -16122,8 +14455,6 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 - gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} @@ -16263,24 +14594,6 @@ snapshots: dependencies: ini: 2.0.0 - global-modules@0.2.3: - dependencies: - global-prefix: 0.1.5 - is-windows: 0.2.0 - - global-prefix@0.1.5: - dependencies: - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 0.2.0 - which: 1.3.1 - - globals@11.12.0: {} - - globals@12.4.0: - dependencies: - type-fest: 0.8.1 - globals@13.20.0: dependencies: type-fest: 0.20.2 @@ -16509,8 +14822,6 @@ snapshots: dependencies: minimatch: 9.0.5 - ignore@4.0.6: {} - ignore@5.3.0: {} ignore@5.3.2: {} @@ -16581,22 +14892,6 @@ snapshots: - bufferutil - utf-8-validate - inquirer@7.3.3: - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - int64-buffer@0.1.10: {} internal-slot@1.0.7: @@ -16706,8 +15001,6 @@ snapshots: number-is-nan: 1.0.1 optional: true - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -16716,8 +15009,6 @@ snapshots: dependencies: get-east-asian-width: 1.3.0 - is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 @@ -16789,485 +15080,114 @@ snapshots: is-stream@2.0.1: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-subdir@1.2.0: - dependencies: - better-path-resolve: 1.0.0 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.14 - - is-typedarray@1.0.0: {} - - is-unicode-supported@0.1.0: {} - - is-upper-case@1.1.2: - dependencies: - upper-case: 1.1.3 - - is-weakmap@2.0.1: {} - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - is-weakset@2.0.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-windows@0.2.0: {} - - is-windows@1.0.2: {} - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - is-yarn-global@0.4.1: {} - - isarray@0.0.1: {} - - isarray@1.0.0: {} - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isobject@3.0.1: {} - - isomorphic-git@1.25.7: - dependencies: - async-lock: 1.4.0 - clean-git-ref: 2.0.1 - crc-32: 1.2.0 - diff3: 0.0.3 - ignore: 5.3.0 - minimisted: 2.0.1 - pako: 1.0.11 - pify: 4.0.1 - readable-stream: 3.6.2 - sha.js: 2.4.11 - simple-get: 4.0.1 - - issue-parser@7.0.1: - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - - istanbul-lib-coverage@3.2.0: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.26.9 - '@babel/parser': 7.26.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.26.9 - '@babel/parser': 7.26.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.0(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.6: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - iterator.prototype@1.1.2: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 - set-function-name: 2.0.2 - - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.8.7: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.3 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): - dependencies: - '@babel/core': 7.26.9 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.9) - chalk: 4.1.2 - ci-info: 3.8.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 18.19.39 - ts-node: 10.9.2(@types/node@18.19.39)(typescript@5.1.6) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-dev-server@10.1.4: - dependencies: - chalk: 4.1.2 - cwd: 0.10.0 - find-process: 1.4.10 - prompts: 2.4.2 - spawnd: 10.1.4 - tree-kill: 1.2.2 - wait-on: 8.0.2 - transitivePeerDependencies: - - debug - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: + is-string@1.0.7: dependencies: - detect-newline: 3.1.0 + has-tostringtag: 1.0.2 - jest-each@29.7.0: + is-subdir@1.2.0: dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 + better-path-resolve: 1.0.0 - jest-environment-node@29.7.0: + is-symbol@1.0.4: dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - jest-mock: 29.7.0 - jest-util: 29.7.0 + has-symbols: 1.0.3 - jest-environment-puppeteer@10.1.4(typescript@5.1.6): + is-typed-array@1.1.13: dependencies: - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.1.6) - deepmerge: 4.3.1 - jest-dev-server: 10.1.4 - jest-environment-node: 29.7.0 - transitivePeerDependencies: - - debug - - typescript + which-typed-array: 1.1.14 - jest-get-type@24.9.0: {} + is-typedarray@1.0.0: {} - jest-get-type@29.6.3: {} + is-unicode-supported@0.1.0: {} - jest-haste-map@29.7.0: + is-upper-case@1.1.2: dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.39 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 + upper-case: 1.1.3 - jest-junit@10.0.0: - dependencies: - jest-validate: 24.9.0 - mkdirp: 0.5.6 - strip-ansi: 5.2.0 - uuid: 3.4.0 - xml: 1.0.1 + is-weakmap@2.0.1: {} - jest-leak-detector@29.7.0: + is-weakref@1.0.2: dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + call-bind: 1.0.7 - jest-matcher-utils@29.7.0: + is-weakset@2.0.2: dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 + is-windows@1.0.2: {} - jest-mock@29.7.0: + is-wsl@2.2.0: dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - jest-util: 29.7.0 + is-docker: 2.2.1 - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 + is-yarn-global@0.4.1: {} - jest-puppeteer@10.1.4(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6): - dependencies: - expect-puppeteer: 10.1.4 - jest-environment-puppeteer: 10.1.4(typescript@5.1.6) - puppeteer: 23.11.1(typescript@5.1.6) - transitivePeerDependencies: - - debug - - typescript + isarray@0.0.1: {} - jest-regex-util@29.6.3: {} + isarray@1.0.0: {} - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color + isarray@2.0.5: {} - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 + isexe@2.0.0: {} + + isobject@3.0.1: {} - jest-runner@29.7.0: + isomorphic-git@1.25.7: dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color + async-lock: 1.4.0 + clean-git-ref: 2.0.1 + crc-32: 1.2.0 + diff3: 0.0.3 + ignore: 5.3.0 + minimisted: 2.0.1 + pako: 1.0.11 + pify: 4.0.1 + readable-stream: 3.6.2 + sha.js: 2.4.11 + simple-get: 4.0.1 - jest-runtime@29.7.0: + issue-parser@7.0.1: dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.26.9 - '@babel/generator': 7.26.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) - '@babel/types': 7.26.9 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color + istanbul-lib-coverage@3.2.0: {} - jest-util@29.7.0: + istanbul-lib-report@3.0.1: dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 - jest-validate@24.9.0: + istanbul-reports@3.1.6: dependencies: - '@jest/types': 24.9.0 - camelcase: 5.3.1 - chalk: 2.4.2 - jest-get-type: 24.9.0 - leven: 3.1.0 - pretty-format: 24.9.0 + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - jest-validate@29.7.0: + iterator.prototype@1.1.2: dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.5 + set-function-name: 2.0.2 + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - jest-watcher@29.7.0: + jake@10.8.7: dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.39 - ansi-escapes: 4.3.2 + async: 3.2.6 chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 + filelist: 1.0.4 + minimatch: 3.1.2 jest-worker@27.5.1: dependencies: @@ -17275,35 +15195,8 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.7.0: - dependencies: - '@types/node': 18.19.39 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.39)(ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jju@1.4.0: {} - joi@17.13.3: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - js-git@0.7.8: dependencies: bodec: 0.1.0 @@ -17515,13 +15408,6 @@ snapshots: browser-level: 1.0.1 classic-level: 1.3.0 - leven@3.1.0: {} - - levn@0.3.0: - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -17618,8 +15504,6 @@ snapshots: safe-stable-stringify: 2.4.3 triple-beam: 1.4.1 - loglevel@1.9.2: {} - long@1.1.2: {} longest-streak@3.1.0: {} @@ -17651,10 +15535,6 @@ snapshots: pseudomap: 1.0.2 yallist: 2.1.2 - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -17693,10 +15573,6 @@ snapshots: transitivePeerDependencies: - supports-color - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - markdown-table@3.0.4: {} mdast-util-find-and-replace@3.0.2: @@ -18141,6 +16017,7 @@ snapshots: mkdirp@0.5.6: dependencies: minimist: 1.2.8 + optional: true mkdirp@1.0.4: {} @@ -18286,8 +16163,6 @@ snapshots: netmask@2.0.2: {} - nice-try@1.0.5: {} - nise@6.1.1: dependencies: '@sinonjs/commons': 3.0.1 @@ -18345,8 +16220,6 @@ snapshots: transitivePeerDependencies: - supports-color - node-int64@0.4.0: {} - node-rdkafka@3.0.1: dependencies: bindings: 1.5.0 @@ -18635,15 +16508,6 @@ snapshots: optional@0.1.4: {} - optionator@0.8.3: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 - optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -18653,7 +16517,8 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - os-homedir@1.0.2: {} + os-homedir@1.0.2: + optional: true os-tmpdir@1.0.2: {} @@ -18848,8 +16713,6 @@ snapshots: path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -18898,8 +16761,6 @@ snapshots: pinpoint@1.1.0: {} - pirates@4.0.6: {} - pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -19001,8 +16862,6 @@ snapshots: which-pm-runs: 1.1.0 optional: true - prelude-ls@1.1.2: {} - prelude-ls@1.2.1: {} prettier@2.8.8: {} @@ -19011,19 +16870,6 @@ snapshots: prettier@3.2.5: {} - pretty-format@24.9.0: - dependencies: - '@jest/types': 24.9.0 - ansi-regex: 4.1.1 - ansi-styles: 3.2.1 - react-is: 16.13.1 - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - prettyjson@1.2.5: dependencies: colors: 1.4.0 @@ -19184,8 +17030,6 @@ snapshots: - typescript - utf-8-validate - pure-rand@6.1.0: {} - qs@6.11.2: dependencies: side-channel: 1.0.4 @@ -19227,8 +17071,6 @@ snapshots: react-is@16.13.1: {} - react-is@18.3.1: {} - react-reconciler@0.29.2(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -19352,8 +17194,6 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - regexpp@2.0.1: {} - registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -19451,11 +17291,6 @@ snapshots: dependencies: resolve-from: 5.0.0 - resolve-dir@0.1.1: - dependencies: - expand-tilde: 1.2.2 - global-modules: 0.2.3 - resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -19491,11 +17326,6 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -19509,16 +17339,6 @@ snapshots: reusify@1.0.4: {} - rewire@5.0.0: - dependencies: - eslint: 6.8.0 - transitivePeerDependencies: - - supports-color - - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -19531,8 +17351,6 @@ snapshots: dependencies: glob: 10.3.10 - run-async@2.4.1: {} - run-parallel-limit@1.1.0: dependencies: queue-microtask: 1.2.3 @@ -19545,10 +17363,6 @@ snapshots: run-series@1.1.9: {} - rxjs@6.6.7: - dependencies: - tslib: 1.14.1 - rxjs@7.8.1: dependencies: tslib: 2.6.2 @@ -19791,12 +17605,6 @@ snapshots: slash@3.0.0: {} - slice-ansi@2.1.0: - dependencies: - ansi-styles: 3.2.1 - astral-regex: 1.0.0 - is-fullwidth-code-point: 2.0.0 - slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -19926,11 +17734,6 @@ snapshots: source-map-js: 1.2.0 webpack: 5.94.0(webpack-cli@5.1.4) - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -19951,11 +17754,6 @@ snapshots: dependencies: cross-spawn: 7.0.6 - spawnd@10.1.4: - dependencies: - signal-exit: 4.1.0 - tree-kill: 1.2.2 - spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -20015,11 +17813,6 @@ snapshots: string-hash@1.1.3: {} - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - string-width@1.0.2: dependencies: code-point-at: 1.1.0 @@ -20027,12 +17820,6 @@ snapshots: strip-ansi: 3.0.1 optional: true - string-width@3.1.0: - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -20095,10 +17882,6 @@ snapshots: ansi-regex: 2.1.1 optional: true - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -20111,8 +17894,6 @@ snapshots: strip-bom@3.0.0: {} - strip-bom@4.0.0: {} - strip-dirs@2.1.0: dependencies: is-natural-number: 4.0.1 @@ -20181,13 +17962,6 @@ snapshots: systeminformation@5.21.24: optional: true - table@5.4.6: - dependencies: - ajv: 6.12.6 - lodash: 4.17.21 - slice-ansi: 2.1.0 - string-width: 3.1.0 - table@6.9.0: dependencies: ajv: 8.13.0 @@ -20316,8 +18090,6 @@ snapshots: dependencies: os-tmpdir: 1.0.2 - tmpl@1.0.5: {} - to-buffer@1.1.1: {} to-regex-range@5.0.1: @@ -20372,25 +18144,6 @@ snapshots: '@ts-morph/common': 0.23.0 code-block-writer: 13.0.1 - ts-node@10.9.2(@types/node@18.19.39)(typescript@5.1.6): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.39 - acorn: 8.14.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.6 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optional: true - ts-node@8.10.2(typescript@5.1.6): dependencies: arg: 4.1.3 @@ -20432,10 +18185,6 @@ snapshots: json-stringify-safe: 5.0.1 optional: true - type-check@0.3.2: - dependencies: - prelude-ls: 1.1.2 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -20665,11 +18414,6 @@ snapshots: uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: - optional: true - - v8-compile-cache@2.4.0: {} - v8-to-istanbul@9.1.0: dependencies: '@jridgewell/trace-mapping': 0.3.20 @@ -20708,20 +18452,6 @@ snapshots: ini: 1.3.8 js-git: 0.7.8 - wait-on@8.0.2: - dependencies: - axios: 1.8.1 - joi: 17.13.3 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.1 - transitivePeerDependencies: - - debug - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -20956,8 +18686,6 @@ snapshots: triple-beam: 1.3.0 winston-transport: 4.5.0 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} workerpool@6.2.1: {} @@ -20995,15 +18723,6 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - write@1.0.3: - dependencies: - mkdirp: 0.5.6 - ws@7.5.10: {} ws@8.17.1: {} @@ -21019,8 +18738,6 @@ snapshots: sax: 1.3.0 xmlbuilder: 11.0.1 - xml@1.0.1: {} - xmlbuilder@11.0.1: {} xtend@4.0.2: {} @@ -21029,8 +18746,6 @@ snapshots: yallist@2.1.2: {} - yallist@3.1.1: {} - yallist@4.0.0: {} yaml@2.7.0: {} From d8e488d5d7f5dcba17c28cdf48d5e74eae25efcd Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:17:40 +0000 Subject: [PATCH 24/38] Move assert to server-services-client --- .../common-utils/api-report/server-common-utils.api.md | 3 --- server/routerlicious/packages/common-utils/src/index.ts | 1 - .../packages/{common-utils => services-client}/src/assert.ts | 0 .../routerlicious/packages/services-client/src/gitManager.ts | 2 +- .../routerlicious/packages/services-client/src/storageUtils.ts | 2 +- .../packages/services-client/src/summaryTreeUploadManager.ts | 2 +- .../{common-utils => services-client}/src/test/assert.spec.ts | 0 7 files changed, 3 insertions(+), 7 deletions(-) rename server/routerlicious/packages/{common-utils => services-client}/src/assert.ts (100%) rename server/routerlicious/packages/{common-utils => services-client}/src/test/assert.spec.ts (100%) diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md index 83af67330009..c9250b08f604 100644 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -6,9 +6,6 @@ import { EventEmitter } from 'events'; -// @internal -export function assert(condition: boolean, message: string | number): asserts condition; - // @internal export class Buffer extends Uint8Array { // (undocumented) diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index fd9a4342ef6f..e45a083c0eda 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -20,4 +20,3 @@ export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { Buffer, IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; export { gitHashFile } from "./hashFile"; export { unreachableCase } from "./unreachable"; -export { assert } from "./assert"; diff --git a/server/routerlicious/packages/common-utils/src/assert.ts b/server/routerlicious/packages/services-client/src/assert.ts similarity index 100% rename from server/routerlicious/packages/common-utils/src/assert.ts rename to server/routerlicious/packages/services-client/src/assert.ts diff --git a/server/routerlicious/packages/services-client/src/gitManager.ts b/server/routerlicious/packages/services-client/src/gitManager.ts index 7058d6de0033..cbc7d5f4c088 100644 --- a/server/routerlicious/packages/services-client/src/gitManager.ts +++ b/server/routerlicious/packages/services-client/src/gitManager.ts @@ -6,7 +6,7 @@ import * as resources from "@fluidframework/gitresources"; import { buildGitTreeHierarchy } from "@fluidframework/protocol-base"; import * as api from "@fluidframework/protocol-definitions"; -import { assert } from "@fluidframework/server-common-utils"; +import { assert } from "./assert"; import { debug } from "./debug"; import { ICreateRefParamsExternal, diff --git a/server/routerlicious/packages/services-client/src/storageUtils.ts b/server/routerlicious/packages/services-client/src/storageUtils.ts index 526bf1bf76b5..35d407cbd8a7 100644 --- a/server/routerlicious/packages/services-client/src/storageUtils.ts +++ b/server/routerlicious/packages/services-client/src/storageUtils.ts @@ -4,13 +4,13 @@ */ import { - assert, stringToBuffer, Uint8ArrayToString, unreachableCase, } from "@fluidframework/server-common-utils"; import { getGitType } from "@fluidframework/protocol-base"; import { ISnapshotTree, SummaryObject, SummaryType } from "@fluidframework/protocol-definitions"; +import { assert } from "./assert"; import { ISummaryTree, IWholeSummaryTree, diff --git a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts index 26697b578ef4..7232cb682ce7 100644 --- a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts +++ b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts @@ -4,7 +4,6 @@ */ import { - assert, gitHashFile, IsoBuffer, Uint8ArrayToString, @@ -19,6 +18,7 @@ import { SummaryObject, SummaryType, } from "@fluidframework/protocol-definitions"; +import { assert } from "./assert"; import { ISummaryUploadManager, IGitManager } from "./storage"; import { IWholeSummaryPayloadType } from "./storageContracts"; diff --git a/server/routerlicious/packages/common-utils/src/test/assert.spec.ts b/server/routerlicious/packages/services-client/src/test/assert.spec.ts similarity index 100% rename from server/routerlicious/packages/common-utils/src/test/assert.spec.ts rename to server/routerlicious/packages/services-client/src/test/assert.spec.ts From 186ef4606ede9f86af94b3d644026ae7ae1775a3 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:39:16 +0000 Subject: [PATCH 25/38] Move Deferred to services-core --- .../common-utils/api-report/server-common-utils.api.md | 9 --------- server/routerlicious/packages/common-utils/src/index.ts | 1 - .../routerlicious/packages/lambdas-driver/package.json | 1 - .../src/kafka-service/checkpointManager.ts | 3 +-- .../packages/lambdas-driver/src/kafka-service/runner.ts | 2 +- server/routerlicious/packages/local-server/package.json | 1 - .../src/test/localDeltaConnectionServer.spec.ts | 3 +-- .../packages/memory-orderer/src/remoteNode.ts | 2 +- .../packages/routerlicious-base/src/alfred/runner.ts | 3 ++- .../packages/routerlicious-base/src/nexus/runner.ts | 3 ++- .../packages/routerlicious-base/src/riddler/runner.ts | 2 +- .../routerlicious-base/src/test/nexus/io.spec.ts | 2 +- .../{common-utils => services-core}/src/deferred.ts | 0 server/routerlicious/packages/services-core/src/index.ts | 1 + .../packages/services-core/src/pendingBoxcar.ts | 2 +- server/routerlicious/packages/services-core/src/queue.ts | 2 +- .../packages/services-ordering-rdkafka/package.json | 1 - .../services-ordering-rdkafka/src/rdkafkaConsumer.ts | 2 +- .../services-ordering-rdkafka/src/rdkafkaProducer.ts | 2 +- .../packages/services-shared/src/runnerUtils.ts | 3 +-- .../packages/services-shared/src/test/http.spec.ts | 2 +- .../routerlicious/packages/test-utils/src/testContext.ts | 2 +- server/routerlicious/packages/tinylicious/src/runner.ts | 3 ++- server/routerlicious/pnpm-lock.yaml | 9 --------- 24 files changed, 20 insertions(+), 41 deletions(-) rename server/routerlicious/packages/{common-utils => services-core}/src/deferred.ts (100%) diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md index c9250b08f604..410f2be538ed 100644 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -19,15 +19,6 @@ export class Buffer extends Uint8Array { // @internal export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; -// @internal -export class Deferred { - constructor(); - get isCompleted(): boolean; - get promise(): Promise; - reject(error: any): void; - resolve(value: T | PromiseLike): void; -} - // @internal export const delay: (timeMs: number) => Promise; diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index e45a083c0eda..d0567a2823da 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -export { Deferred } from "./deferred"; export { delay } from "./delay"; export { TypedEventEmitter, diff --git a/server/routerlicious/packages/lambdas-driver/package.json b/server/routerlicious/packages/lambdas-driver/package.json index c719c6e6aefc..eba975439c30 100644 --- a/server/routerlicious/packages/lambdas-driver/package.json +++ b/server/routerlicious/packages/lambdas-driver/package.json @@ -52,7 +52,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts index dc8c346eedb0..5c6b58e1aab3 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/checkpointManager.ts @@ -4,8 +4,7 @@ */ import assert from "assert"; -import { Deferred } from "@fluidframework/server-common-utils"; -import { IConsumer, IQueuedMessage } from "@fluidframework/server-services-core"; +import { Deferred, IConsumer, IQueuedMessage } from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; export class CheckpointManager { diff --git a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts index a5fde8ecf071..560c2378490c 100644 --- a/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts +++ b/server/routerlicious/packages/lambdas-driver/src/kafka-service/runner.ts @@ -5,9 +5,9 @@ import { inspect } from "util"; import { serializeError } from "serialize-error"; -import { Deferred } from "@fluidframework/server-common-utils"; import { promiseTimeout } from "@fluidframework/server-services-client"; import { + Deferred, IConsumer, IContextErrorData, ILogger, diff --git a/server/routerlicious/packages/local-server/package.json b/server/routerlicious/packages/local-server/package.json index 6eb04fdde253..6fe9a0b950d2 100644 --- a/server/routerlicious/packages/local-server/package.json +++ b/server/routerlicious/packages/local-server/package.json @@ -58,7 +58,6 @@ }, "dependencies": { "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-memory-orderer": "workspace:~", "@fluidframework/server-services-client": "workspace:~", diff --git a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts index 3fac035d46cc..440d322176cc 100644 --- a/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts +++ b/server/routerlicious/packages/local-server/src/test/localDeltaConnectionServer.spec.ts @@ -4,7 +4,6 @@ */ import { strict as assert } from "assert"; -import { Deferred } from "@fluidframework/server-common-utils"; import { ConnectionMode, IClient, @@ -17,7 +16,7 @@ import { MessageType, ScopeType, } from "@fluidframework/protocol-definitions"; -import { IWebSocket } from "@fluidframework/server-services-core"; +import { Deferred, IWebSocket } from "@fluidframework/server-services-core"; import { KJUR as jsrsasign } from "jsrsasign"; import { TestNotImplementedDocumentRepository } from "@fluidframework/server-test-utils"; import Sinon from "sinon"; diff --git a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts index 37208fe50071..9b5e0b36a39d 100644 --- a/server/routerlicious/packages/memory-orderer/src/remoteNode.ts +++ b/server/routerlicious/packages/memory-orderer/src/remoteNode.ts @@ -6,8 +6,8 @@ import assert from "assert"; import { EventEmitter } from "events"; import { IClient, IDocumentMessage } from "@fluidframework/protocol-definitions"; -import { Deferred } from "@fluidframework/server-common-utils"; import { + Deferred, INode, IOrderer, IOrdererConnection, diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts index 46a932022013..046dae2ece67 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts @@ -4,8 +4,9 @@ */ import cluster from "cluster"; -import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { + Deferred, ICache, IClusterDrainingChecker, IDeltaService, diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts index 8dfcd26d2d1a..1f0c5978bf25 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts @@ -4,8 +4,9 @@ */ import cluster from "cluster"; -import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { + Deferred, ICache, IClientManager, IClusterDrainingChecker, diff --git a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts index 89c4fb7ad038..fc5d5815b940 100644 --- a/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/riddler/runner.ts @@ -4,8 +4,8 @@ */ import cluster from "cluster"; -import { Deferred } from "@fluidframework/server-common-utils"; import { + Deferred, IRunner, ISecretManager, IWebServerFactory, diff --git a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts index c63954ceee4e..28e30b3a21e3 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/nexus/io.spec.ts @@ -19,7 +19,6 @@ import { IDocumentMessage, type ISentSignalMessage, } from "@fluidframework/protocol-definitions"; -import { Deferred } from "@fluidframework/server-common-utils"; import { KafkaOrdererFactory } from "@fluidframework/server-kafka-orderer"; import { LocalWebSocket, LocalWebSocketServer } from "@fluidframework/server-local-server"; import { configureWebSocketServices } from "@fluidframework/server-lambdas"; @@ -30,6 +29,7 @@ import { clientConnectivityStorageId, DefaultMetricClient, DefaultServiceConfiguration, + Deferred, IClientManager, IOrdererManager, MongoDatabaseManager, diff --git a/server/routerlicious/packages/common-utils/src/deferred.ts b/server/routerlicious/packages/services-core/src/deferred.ts similarity index 100% rename from server/routerlicious/packages/common-utils/src/deferred.ts rename to server/routerlicious/packages/services-core/src/deferred.ts diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index c33f9d0f1fed..6a13770cb12e 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -33,6 +33,7 @@ export { IRetryable, isRetryEnabled, } from "./database"; +export { Deferred } from "./deferred"; export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts index 277e19f8525e..e29e5ba26d89 100644 --- a/server/routerlicious/packages/services-core/src/pendingBoxcar.ts +++ b/server/routerlicious/packages/services-core/src/pendingBoxcar.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "@fluidframework/server-common-utils"; +import { Deferred } from "./deferred"; import { IPendingBoxcar } from "./queue"; diff --git a/server/routerlicious/packages/services-core/src/queue.ts b/server/routerlicious/packages/services-core/src/queue.ts index 8564c6812a3d..b8ea0f2b3438 100644 --- a/server/routerlicious/packages/services-core/src/queue.ts +++ b/server/routerlicious/packages/services-core/src/queue.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { Deferred } from "@fluidframework/server-common-utils"; +import { Deferred } from "./deferred"; import { ITicketedMessage } from "./messages"; diff --git a/server/routerlicious/packages/services-ordering-rdkafka/package.json b/server/routerlicious/packages/services-ordering-rdkafka/package.json index 54849c4bf902..190d917dbc93 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/package.json +++ b/server/routerlicious/packages/services-ordering-rdkafka/package.json @@ -28,7 +28,6 @@ "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" }, "dependencies": { - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts index 17c62a6ebdc8..3fac86da16c6 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaConsumer.ts @@ -5,8 +5,8 @@ import type * as kafkaTypes from "node-rdkafka"; -import { Deferred } from "@fluidframework/server-common-utils"; import { + Deferred, IConsumer, IPartition, IQueuedMessage, diff --git a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts index 780288bda6e2..19e0cce3f886 100644 --- a/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts +++ b/server/routerlicious/packages/services-ordering-rdkafka/src/rdkafkaProducer.ts @@ -4,9 +4,9 @@ */ import type * as kafkaTypes from "node-rdkafka"; -import { Deferred } from "@fluidframework/server-common-utils"; import { BoxcarType, + Deferred, IBoxcarMessage, IPendingBoxcar, IProducer, diff --git a/server/routerlicious/packages/services-shared/src/runnerUtils.ts b/server/routerlicious/packages/services-shared/src/runnerUtils.ts index 1ab015dcf6fb..428973a273e8 100644 --- a/server/routerlicious/packages/services-shared/src/runnerUtils.ts +++ b/server/routerlicious/packages/services-shared/src/runnerUtils.ts @@ -4,8 +4,7 @@ */ import { serializeError } from "serialize-error"; -import { Deferred } from "@fluidframework/server-common-utils"; -import { IWebServer } from "@fluidframework/server-services-core"; +import { Deferred, IWebServer } from "@fluidframework/server-services-core"; import { Lumber, Lumberjack } from "@fluidframework/server-services-telemetry"; import { promiseTimeout } from "@fluidframework/server-services-client"; import type { IRedisClientConnectionManager } from "@fluidframework/server-services-utils"; diff --git a/server/routerlicious/packages/services-shared/src/test/http.spec.ts b/server/routerlicious/packages/services-shared/src/test/http.spec.ts index d371d66207d4..72ede846da66 100644 --- a/server/routerlicious/packages/services-shared/src/test/http.spec.ts +++ b/server/routerlicious/packages/services-shared/src/test/http.spec.ts @@ -4,7 +4,7 @@ */ import assert from "assert"; -import { Deferred } from "@fluidframework/server-common-utils"; +import { Deferred } from "@fluidframework/server-services-core"; import { NetworkError } from "@fluidframework/server-services-client"; import type { Response, Request } from "express"; import { diff --git a/server/routerlicious/packages/test-utils/src/testContext.ts b/server/routerlicious/packages/test-utils/src/testContext.ts index b43984e135ed..bdf0b352eb3c 100644 --- a/server/routerlicious/packages/test-utils/src/testContext.ts +++ b/server/routerlicious/packages/test-utils/src/testContext.ts @@ -5,8 +5,8 @@ import { strict as assert } from "assert"; import { EventEmitter } from "events"; -import { Deferred } from "@fluidframework/server-common-utils"; import { + Deferred, IContext, IQueuedMessage, ILogger, diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index 9e982b9ec01b..4de09864a786 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. */ -import { Deferred, TypedEventEmitter } from "@fluidframework/server-common-utils"; +import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { + Deferred, IDocumentStorage, IOrdererManager, ITenantManager, diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 52de2de9b60c..9215c2b3962c 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -365,9 +365,6 @@ importers: packages/lambdas-driver: dependencies: - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -453,9 +450,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -1443,9 +1437,6 @@ importers: packages/services-ordering-rdkafka: dependencies: - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client From 2d60abfbd6e557f17e844f70512a8b2e0f81ff3c Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:43:06 +0000 Subject: [PATCH 26/38] Move delay to services-core --- .../common-utils/api-report/server-common-utils.api.md | 3 --- server/routerlicious/packages/common-utils/src/index.ts | 1 - .../packages/lambdas/src/scribe/checkpointManager.ts | 2 +- .../packages/routerlicious-base/src/utils/sessionHelper.ts | 2 +- .../packages/{common-utils => services-core}/src/delay.ts | 0 server/routerlicious/packages/services-core/src/index.ts | 1 + .../routerlicious/packages/services-core/src/runWithRetry.ts | 3 ++- 7 files changed, 5 insertions(+), 7 deletions(-) rename server/routerlicious/packages/{common-utils => services-core}/src/delay.ts (100%) diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md index 410f2be538ed..e98407b10d44 100644 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -19,9 +19,6 @@ export class Buffer extends Uint8Array { // @internal export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; -// @internal -export const delay: (timeMs: number) => Promise; - // @internal export type EventEmitterEventType = EventEmitter extends { on(event: infer E, listener: any): any; diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index d0567a2823da..1f41a966f2d1 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -export { delay } from "./delay"; export { TypedEventEmitter, TypedEventTransform, diff --git a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts index f4c6c5113e61..b2527a133b4b 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/checkpointManager.ts @@ -3,8 +3,8 @@ * Licensed under the MIT License. */ -import { delay } from "@fluidframework/server-common-utils"; import { + delay, ICollection, IContext, isRetryEnabled, diff --git a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts index 175de535412d..b62ad9ec8892 100644 --- a/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts +++ b/server/routerlicious/packages/routerlicious-base/src/utils/sessionHelper.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. */ -import { delay } from "@fluidframework/server-common-utils"; import { ISession, isNetworkError, NetworkError } from "@fluidframework/server-services-client"; import { + delay, IDocument, runWithRetry, IDocumentRepository, diff --git a/server/routerlicious/packages/common-utils/src/delay.ts b/server/routerlicious/packages/services-core/src/delay.ts similarity index 100% rename from server/routerlicious/packages/common-utils/src/delay.ts rename to server/routerlicious/packages/services-core/src/delay.ts diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index 6a13770cb12e..298b957a14f0 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -34,6 +34,7 @@ export { isRetryEnabled, } from "./database"; export { Deferred } from "./deferred"; +export { delay } from "./delay"; export { IDeltaService } from "./delta"; export { IClientSequenceNumber, diff --git a/server/routerlicious/packages/services-core/src/runWithRetry.ts b/server/routerlicious/packages/services-core/src/runWithRetry.ts index 23db6f57bdcc..32ce1d62f06a 100644 --- a/server/routerlicious/packages/services-core/src/runWithRetry.ts +++ b/server/routerlicious/packages/services-core/src/runWithRetry.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { delay } from "@fluidframework/server-common-utils"; import { LogLevel, Lumber, @@ -12,6 +11,8 @@ import { } from "@fluidframework/server-services-telemetry"; import { isNetworkError, NetworkError } from "@fluidframework/server-services-client"; +import { delay } from "./delay"; + /** * Executes a given API while providing support to retry on failures, ignore failures, and taking action on error. * @param api - function to run and retry in case of error From d533b2bb5d31820930a90d657a1bab26c2103eac Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 22:07:41 +0000 Subject: [PATCH 27/38] Move unreachable to the packages that use it --- .../api-report/server-common-utils.api.md | 3 --- .../packages/common-utils/src/index.ts | 1 - .../packages/common-utils/src/unreachable.ts | 24 ------------------- .../packages/protocol-base/src/gitHelper.ts | 19 ++++++++++++++- .../services-client/src/storageUtils.ts | 2 +- .../src/summaryTreeUploadManager.ts | 2 +- .../packages/services-client/src/utils.ts | 18 ++++++++++++++ 7 files changed, 38 insertions(+), 31 deletions(-) delete mode 100644 server/routerlicious/packages/common-utils/src/unreachable.ts diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md index e98407b10d44..e26478d91a6c 100644 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -249,9 +249,6 @@ export type TypedEventTransform = TransformedEvent Math.floor(Math.random() * range); + +/** + * This function can be used to assert at compile time that a given value has type never. + * One common usage is in the default case of a switch block, to ensure that all cases are explicitly handled. + * + * Example: + * ```typescript + * const bool: true | false = ...; + * switch(bool) { + * case true: {...} + * case false: {...} + * default: unreachableCase(bool); + * } + * ``` + */ +export function unreachableCase(_: never, message = "Unreachable Case"): never { + throw new Error(message); +} From 02eb780c42821ca4472a541f8f165a79a18a8a61 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 22:59:55 +0000 Subject: [PATCH 28/38] Move TypedEventEmitter --- .../api-report/server-common-utils.api.md | 208 -------- .../packages/common-utils/package.json | 2 - .../packages/common-utils/src/index.ts | 11 - .../packages/lambdas/src/deli/lambda.ts | 2 +- .../packages/lambdas/src/nexus/index.ts | 3 +- .../packages/lambdas/src/nexus/interfaces.ts | 2 +- .../api-report/protocol-base.api.md | 208 +++++++- .../packages/protocol-base/package.json | 2 +- .../packages/protocol-base/src/index.ts | 11 + .../packages/protocol-base/src/quorum.ts | 2 +- .../src/test/typedEventEmitter.spec.ts | 3 +- .../protocol-base/src/typedEventEmitter.ts | 461 ++++++++++++++++++ .../routerlicious-base/src/alfred/app.ts | 2 +- .../src/alfred/routes/api/api.ts | 4 +- .../src/alfred/routes/api/index.ts | 2 +- .../src/alfred/routes/index.ts | 2 +- .../routerlicious-base/src/alfred/runner.ts | 2 +- .../routerlicious-base/src/nexus/runner.ts | 2 +- .../src/nexus/runnerFactory.ts | 6 +- .../src/test/alfred/api.spec.ts | 2 +- .../packages/services-core/package.json | 1 + .../packages/services-core/src/index.ts | 11 + .../src/test/typedEventEmitter.spec.ts | 52 ++ .../src/typedEventEmitter.ts | 0 .../packages/tinylicious/src/app.ts | 7 +- .../packages/tinylicious/src/resources.ts | 3 +- .../tinylicious/src/resourcesFactory.ts | 2 +- .../packages/tinylicious/src/routes/index.ts | 7 +- .../tinylicious/src/routes/ordering/index.ts | 7 +- .../packages/tinylicious/src/runner.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 15 +- 31 files changed, 784 insertions(+), 260 deletions(-) rename server/routerlicious/packages/{common-utils => protocol-base}/src/test/typedEventEmitter.spec.ts (93%) create mode 100644 server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts create mode 100644 server/routerlicious/packages/services-core/src/test/typedEventEmitter.spec.ts rename server/routerlicious/packages/{common-utils => services-core}/src/typedEventEmitter.ts (100%) diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md index e26478d91a6c..e5784e8dd23d 100644 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md @@ -4,8 +4,6 @@ ```ts -import { EventEmitter } from 'events'; - // @internal export class Buffer extends Uint8Array { // (undocumented) @@ -19,11 +17,6 @@ export class Buffer extends Uint8Array { // @internal export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; -// @internal -export type EventEmitterEventType = EventEmitter extends { - on(event: infer E, listener: any): any; -} ? E : never; - // @internal export const fromBase64ToUtf8: (input: string) => string; @@ -33,219 +26,18 @@ export const fromUtf8ToBase64: (input: string) => string; // @internal export function gitHashFile(file: IsoBuffer): Promise; -// @internal -export interface IEvent { - // @eventProperty - (event: string, listener: (...args: any[]) => void): any; -} - -// @internal -export interface IEventProvider { - readonly off: IEventTransformer; - readonly on: IEventTransformer; - readonly once: IEventTransformer; -} - -// @internal -export type IEventThisPlaceHolder = { - thisPlaceHolder: "thisPlaceHolder"; -}; - -// @internal -export type IEventTransformer = TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: infer E10, listener: (...args: infer A10) => void): any; - (event: infer E11, listener: (...args: infer A11) => void): any; - (event: infer E12, listener: (...args: infer A12) => void): any; - (event: infer E13, listener: (...args: infer A13) => void): any; - (event: infer E14, listener: (...args: infer A14) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: infer E10, listener: (...args: infer A10) => void): any; - (event: infer E11, listener: (...args: infer A11) => void): any; - (event: infer E12, listener: (...args: infer A12) => void): any; - (event: infer E13, listener: (...args: infer A13) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: infer E10, listener: (...args: infer A10) => void): any; - (event: infer E11, listener: (...args: infer A11) => void): any; - (event: infer E12, listener: (...args: infer A12) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: infer E10, listener: (...args: infer A10) => void): any; - (event: infer E11, listener: (...args: infer A11) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: infer E10, listener: (...args: infer A10) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: infer E9, listener: (...args: infer A9) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: infer E8, listener: (...args: infer A8) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: infer E7, listener: (...args: infer A7) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: infer E6, listener: (...args: infer A6) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: infer E5, listener: (...args: infer A5) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: infer E4, listener: (...args: infer A4) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: infer E3, listener: (...args: infer A3) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: infer E2, listener: (...args: infer A2) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: infer E1, listener: (...args: infer A1) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent & TransformedEvent : TEvent extends { - (event: infer E0, listener: (...args: infer A0) => void): any; - (event: string, listener: (...args: any[]) => void): any; -} ? TransformedEvent : TransformedEvent; - // @internal (undocumented) export const IsoBuffer: typeof Buffer; // @internal (undocumented) export type IsoBuffer = Buffer; -// @internal -export type ReplaceIEventThisPlaceHolder = L extends any[] ? { - [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K]; -} : L; - // @internal export function stringToBuffer(input: string, encoding: string): ArrayBufferLike; // @internal export const toUtf8: (input: string, encoding: string) => string; -// @internal -export type TransformedEvent = (event: E, listener: (...args: ReplaceIEventThisPlaceHolder) => void) => TThis; - -// @internal -export class TypedEventEmitter extends EventEmitter implements IEventProvider { - constructor(); - // (undocumented) - readonly addListener: TypedEventTransform; - // (undocumented) - readonly off: TypedEventTransform; - // (undocumented) - readonly on: TypedEventTransform; - // (undocumented) - readonly once: TypedEventTransform; - // (undocumented) - readonly prependListener: TypedEventTransform; - // (undocumented) - readonly prependOnceListener: TypedEventTransform; - // (undocumented) - readonly removeListener: TypedEventTransform; -} - -// @internal (undocumented) -export type TypedEventTransform = TransformedEvent void) => void>> & IEventTransformer & TransformedEvent; - // @internal export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string; diff --git a/server/routerlicious/packages/common-utils/package.json b/server/routerlicious/packages/common-utils/package.json index 3c114762e0c9..4747b325fddf 100644 --- a/server/routerlicious/packages/common-utils/package.json +++ b/server/routerlicious/packages/common-utils/package.json @@ -60,8 +60,6 @@ "temp-directory": "nyc/.nyc_output" }, "dependencies": { - "@types/events": "^3.0.0", - "events": "^3.1.0", "sha.js": "^2.4.11" }, "devDependencies": { diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts index c793afe16b21..e85f1e9f9c30 100644 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ b/server/routerlicious/packages/common-utils/src/index.ts @@ -3,17 +3,6 @@ * Licensed under the MIT License. */ -export { - TypedEventEmitter, - TypedEventTransform, - IEvent, - IEventProvider, - IEventTransformer, - TransformedEvent, - EventEmitterEventType, - IEventThisPlaceHolder, - ReplaceIEventThisPlaceHolder, -} from "./typedEventEmitter"; export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; export { Buffer, IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; export { gitHashFile } from "./hashFile"; diff --git a/server/routerlicious/packages/lambdas/src/deli/lambda.ts b/server/routerlicious/packages/lambdas/src/deli/lambda.ts index 090b7e87dc6a..018bf25f65b3 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambda.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambda.ts @@ -19,7 +19,6 @@ import { ISummaryContent, IDocumentMessage, } from "@fluidframework/protocol-definitions"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { canSummarize, defaultHash, @@ -56,6 +55,7 @@ import { ISequencedSignalClient, IClientManager, ICheckpointService, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { CommonProperties, diff --git a/server/routerlicious/packages/lambdas/src/nexus/index.ts b/server/routerlicious/packages/lambdas/src/nexus/index.ts index 4234d2d947bb..b6a4e7ed2ded 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/index.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/index.ts @@ -11,7 +11,6 @@ import { ISignalMessage, NackErrorType, } from "@fluidframework/protocol-definitions"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { isNetworkError, NetworkError } from "@fluidframework/server-services-client"; import { v4 as uuid } from "uuid"; import * as core from "@fluidframework/server-services-core"; @@ -112,7 +111,7 @@ export function configureWebSocketServices( verifyMaxMessageSize?: boolean, socketTracker?: core.IWebSocketTracker, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: TypedEventEmitter, + collaborationSessionEventEmitter?: core.TypedEventEmitter, clusterDrainingChecker?: core.IClusterDrainingChecker, collaborationSessionTracker?: core.ICollaborationSessionTracker, ): void { diff --git a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts index 0dd2f0f03d2b..1771f5f41c31 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/interfaces.ts @@ -4,7 +4,6 @@ */ import type { IClient, IConnected } from "@fluidframework/protocol-definitions"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import type { IClientManager, IClusterDrainingChecker, @@ -17,6 +16,7 @@ import type { IThrottleAndUsageStorageManager, IThrottler, IWebSocketTracker, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { IEvent } from "../events"; import type { IRuntimeSignalEnvelope } from "../utils"; diff --git a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md index 846751303dbd..8fd17b8779d4 100644 --- a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md +++ b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md @@ -4,6 +4,7 @@ ```ts +import { EventEmitter } from 'events'; import * as git from '@fluidframework/gitresources'; import { ICommittedProposal } from '@fluidframework/protocol-definitions'; import { IDocumentAttributes } from '@fluidframework/protocol-definitions'; @@ -16,17 +17,192 @@ import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions' import { ISequencedProposal } from '@fluidframework/protocol-definitions'; import { ISnapshotTreeEx } from '@fluidframework/protocol-definitions'; import { SummaryObject } from '@fluidframework/protocol-definitions'; -import { TypedEventEmitter } from '@fluidframework/server-common-utils'; // @internal export function buildGitTreeHierarchy(flatTree: git.ITree, blobsShaToPathCache?: Map, removeAppTreePrefix?: boolean): ISnapshotTreeEx; +// @internal +export type EventEmitterEventType = typeof EventEmitter extends { + on(event: infer E, listener: any): any; +} ? E : never; + // @internal export function getGitMode(value: SummaryObject): string; // @internal export function getGitType(value: SummaryObject): "blob" | "tree"; +// @internal +export interface IEvent { + // @eventProperty + (event: string, listener: (...args: any[]) => void): any; +} + +// @internal +export interface IEventProvider { + readonly off: IEventTransformer; + readonly on: IEventTransformer; + readonly once: IEventTransformer; +} + +// @internal +export type IEventThisPlaceHolder = { + thisPlaceHolder: "thisPlaceHolder"; +}; + +// @internal +export type IEventTransformer = TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: infer E13, listener: (...args: infer A13) => void): any; + (event: infer E14, listener: (...args: infer A14) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: infer E13, listener: (...args: infer A13) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: infer E12, listener: (...args: infer A12) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: infer E11, listener: (...args: infer A11) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: infer E10, listener: (...args: infer A10) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: infer E9, listener: (...args: infer A9) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: infer E8, listener: (...args: infer A8) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: infer E7, listener: (...args: infer A7) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: infer E6, listener: (...args: infer A6) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: infer E5, listener: (...args: infer A5) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: infer E4, listener: (...args: infer A4) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: infer E3, listener: (...args: infer A3) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: infer E2, listener: (...args: infer A2) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: infer E1, listener: (...args: infer A1) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent & TransformedEvent : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void): any; + (event: string, listener: (...args: any[]) => void): any; +} ? TransformedEvent : TransformedEvent; + // @alpha (undocumented) export interface IProtocolHandler { // (undocumented) @@ -158,6 +334,36 @@ export type QuorumProposalsSnapshot = { values: [string, ICommittedProposal][]; }; +// @internal +export type ReplaceIEventThisPlaceHolder = L extends any[] ? { + [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K]; +} : L; + +// @internal +export type TransformedEvent = (event: E, listener: (...args: ReplaceIEventThisPlaceHolder) => void) => TThis; + +// @internal +export class TypedEventEmitter extends EventEmitter implements IEventProvider { + constructor(); + // (undocumented) + readonly addListener: TypedEventTransform; + // (undocumented) + readonly off: TypedEventTransform; + // (undocumented) + readonly on: TypedEventTransform; + // (undocumented) + readonly once: TypedEventTransform; + // (undocumented) + readonly prependListener: TypedEventTransform; + // (undocumented) + readonly prependOnceListener: TypedEventTransform; + // (undocumented) + readonly removeListener: TypedEventTransform; +} + +// @internal (undocumented) +export type TypedEventTransform = TransformedEvent void) => void>> & IEventTransformer & TransformedEvent; + // (No @packageDocumentation comment for this package) ``` diff --git a/server/routerlicious/packages/protocol-base/package.json b/server/routerlicious/packages/protocol-base/package.json index e99672cef6b9..1e9678d44c93 100644 --- a/server/routerlicious/packages/protocol-base/package.json +++ b/server/routerlicious/packages/protocol-base/package.json @@ -61,7 +61,7 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", + "@types/events": "^3.0.0", "events_pkg": "npm:events@^3.1.0" }, "devDependencies": { diff --git a/server/routerlicious/packages/protocol-base/src/index.ts b/server/routerlicious/packages/protocol-base/src/index.ts index c6549b340c4a..9d7658a43ffb 100644 --- a/server/routerlicious/packages/protocol-base/src/index.ts +++ b/server/routerlicious/packages/protocol-base/src/index.ts @@ -5,6 +5,17 @@ export { buildGitTreeHierarchy, getGitMode, getGitType } from "./gitHelper"; export { IProtocolHandler, IScribeProtocolState, ProtocolOpHandler } from "./protocol"; +export { + TypedEventEmitter, + TypedEventTransform, + IEvent, + IEventProvider, + IEventTransformer, + TransformedEvent, + EventEmitterEventType, + IEventThisPlaceHolder, + ReplaceIEventThisPlaceHolder, +} from "./typedEventEmitter"; export { IQuorumSnapshot, Quorum, diff --git a/server/routerlicious/packages/protocol-base/src/quorum.ts b/server/routerlicious/packages/protocol-base/src/quorum.ts index d0b3b63e8aed..1212f11d137e 100644 --- a/server/routerlicious/packages/protocol-base/src/quorum.ts +++ b/server/routerlicious/packages/protocol-base/src/quorum.ts @@ -6,7 +6,7 @@ import events_pkg from "events_pkg"; const { EventEmitter } = events_pkg; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; +import { TypedEventEmitter } from "./typedEventEmitter"; import { ICommittedProposal, IQuorum, diff --git a/server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts b/server/routerlicious/packages/protocol-base/src/test/typedEventEmitter.spec.ts similarity index 93% rename from server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts rename to server/routerlicious/packages/protocol-base/src/test/typedEventEmitter.spec.ts index aa89ca269d8d..9fbf356f553d 100644 --- a/server/routerlicious/packages/common-utils/src/test/typedEventEmitter.spec.ts +++ b/server/routerlicious/packages/protocol-base/src/test/typedEventEmitter.spec.ts @@ -5,8 +5,7 @@ import { strict as assert } from "assert"; -import { TypedEventEmitter } from ".."; -import { IErrorEvent } from "../typedEventEmitter"; +import { IErrorEvent, TypedEventEmitter } from "../typedEventEmitter"; describe("TypedEventEmitter", () => { it("Validate Function proxies", () => { diff --git a/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts b/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts new file mode 100644 index 000000000000..739578bec690 --- /dev/null +++ b/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts @@ -0,0 +1,461 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +// eslint-disable-next-line import/no-nodejs-modules +import { EventEmitter } from "events"; + +/** + * Base interface for event emitters. + * @internal + */ +export interface IEvent { + /** + * Base event emitter signature. + * + * @remarks The event emitter polyfill and the node event emitter have different event types: + * `string | symbol` vs. `string | number`. + * + * So for our typing we'll contrain to string, that way we work with both. + * + * @eventProperty + */ + + (event: string, listener: (...args: any[]) => void); +} + +/** + * Base interface for error event emitters. + * @internal + */ +export interface IErrorEvent extends IEvent { + /** + * Base error event emitter signature. + * + * @eventProperty + * + */ + + (event: "error", listener: (message: any) => void); +} + +/** + * Base interface for event providers. + * @internal + */ +export interface IEventProvider { + /** + * Registers a callback to be invoked when the corresponding event is triggered. + */ + readonly on: IEventTransformer; + + /** + * Registers a callback to be invoked the first time (after registration) the corresponding event is triggered. + */ + readonly once: IEventTransformer; + + /** + * Removes the corresponding event if it has been registered. + */ + readonly off: IEventTransformer; +} + +// These types handle replacing IEventThisPlaceHolder with `this`, so we can +// support polymorphic `this`. For instance if an event wanted to be: +// (event: "some-event", listener:(target: this)=>void) +// +// it should be written as +// (event: "some-event", listener:(target: IEventThisPlaceHolder)=>void) +// +// and IEventThisPlaceHolder will be replaced with this. +// This is all consumers of these types need to know. + +/** + * The placeholder type that should be used instead of `this` in events. + * @internal + */ +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type IEventThisPlaceHolder = { thisPlaceHolder: "thisPlaceHolder" }; + +/** + * Does the type replacement by changing types of {@link IEventThisPlaceHolder} to `TThis` + * @internal + */ + +export type ReplaceIEventThisPlaceHolder = L extends any[] + ? { [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K] } + : L; + +/** + * Transforms the event overload by replacing {@link IEventThisPlaceHolder} with `TThis` in the event listener + * arguments and having the overload return `TTHis` as well + * @internal + */ + +export type TransformedEvent = ( + event: E, + listener: (...args: ReplaceIEventThisPlaceHolder) => void, +) => TThis; + +/** + * This type is a conditional type for transforming all the overloads provided in `TEvent`. + * + * @remarks + * Due to limitations of the TypeScript typing system, we need to handle each number of overload individually. + * It currently supports the max of 15 event overloads which is more than we use anywhere. + * At more than 15 overloads we start to hit {@link https://github.com/microsoft/TypeScript/issues/37209 | TS2589}. + * If we need to move beyond 15 we should evaluate using a mapped type pattern like `{"event":(listenerArgs)=>void}` + * + * @internal + */ +export type IEventTransformer = TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: infer E13, listener: (...args: infer A13) => void); + (event: infer E14, listener: (...args: infer A14) => void); + (event: string, listener: (...args: any[]) => void); +} + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: infer E13, listener: (...args: infer A13) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: infer E12, listener: (...args: infer A12) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: infer E11, listener: (...args: infer A11) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: infer E10, listener: (...args: infer A10) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: infer E9, listener: (...args: infer A9) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: infer E8, listener: (...args: infer A8) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: infer E7, listener: (...args: infer A7) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: infer E6, listener: (...args: infer A6) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: infer E5, listener: (...args: infer A5) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + (event: infer E4, listener: (...args: infer A4) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: infer E3, listener: (...args: infer A3) => void); + + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: infer E2, listener: (...args: infer A2) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & + TransformedEvent & + TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: infer E1, listener: (...args: infer A1) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent & TransformedEvent + : TEvent extends { + (event: infer E0, listener: (...args: infer A0) => void); + (event: string, listener: (...args: any[]) => void); + } + ? TransformedEvent + : TransformedEvent; + +/** + * The event emitter polyfill and the node event emitter have different event types: + * string | symbol vs. string | number + * + * This type allow us to correctly handle either type + * @internal + */ +export type EventEmitterEventType = typeof EventEmitter extends { + on(event: infer E, listener: any); +} + ? E + : never; + +/** + * @internal + */ +export type TypedEventTransform = + // Event emitter supports some special events for the emitter itself to use + // this exposes those events for the TypedEventEmitter. + // Since we know what the shape of these events are, we can describe them directly via a TransformedEvent + // which easier than trying to extend TEvent directly + TransformedEvent< + TThis, + "newListener" | "removeListener", + Parameters<(event: string, listener: (...args: any[]) => void) => void> + > & + // Expose all the events provides by TEvent + IEventTransformer & + // Add the default overload so this is covertable to EventEmitter regardless of environment + TransformedEvent; + +/** + * Event Emitter helper class the supports emitting typed events + * @internal + */ +export class TypedEventEmitter + extends EventEmitter + implements IEventProvider +{ + constructor() { + super(); + this.addListener = super.addListener.bind(this) as TypedEventTransform; + this.on = super.on.bind(this) as TypedEventTransform; + this.once = super.once.bind(this) as TypedEventTransform; + this.prependListener = super.prependListener.bind(this) as TypedEventTransform< + this, + TEvent + >; + this.prependOnceListener = super.prependOnceListener.bind(this) as TypedEventTransform< + this, + TEvent + >; + this.removeListener = super.removeListener.bind(this) as TypedEventTransform; + this.off = super.off.bind(this) as TypedEventTransform; + } + readonly addListener: TypedEventTransform; + readonly on: TypedEventTransform; + readonly once: TypedEventTransform; + readonly prependListener: TypedEventTransform; + readonly prependOnceListener: TypedEventTransform; + readonly removeListener: TypedEventTransform; + readonly off: TypedEventTransform; +} diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts index 2136df059216..ec92b41efb82 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/app.ts @@ -4,7 +4,6 @@ */ import { isIPv4, isIPv6 } from "net"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { IDeltaService, IDocumentStorage, @@ -18,6 +17,7 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { json, urlencoded } from "body-parser"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts index c646f2a16ee6..b172ef74f7eb 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts @@ -5,7 +5,7 @@ import * as git from "@fluidframework/gitresources"; import { IClient, IClientJoin, ScopeType } from "@fluidframework/protocol-definitions"; -import { TypedEventEmitter, fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; +import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, @@ -52,7 +52,7 @@ export function create( tenantThrottlers: Map, jwtTokenCache?: core.ICache, revokedTokenChecker?: core.IRevokedTokenChecker, - collaborationSessionEventEmitter?: TypedEventEmitter, + collaborationSessionEventEmitter?: core.TypedEventEmitter, fluidAccessTokenGenerator?: core.IFluidAccessTokenGenerator, ): Router { const router: Router = Router(); diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts index 60c0f20a90fd..df49b0cbbc1b 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICache, IDeltaService, @@ -17,6 +16,7 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import cors from "cors"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts index 90bcf736dfdd..24c93716d95d 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/index.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IDeltaService, @@ -18,6 +17,7 @@ import { IClusterDrainingChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts index 046dae2ece67..32c98c40ba14 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/runner.ts @@ -4,7 +4,6 @@ */ import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { Deferred, ICache, @@ -22,6 +21,7 @@ import { IRevokedTokenChecker, IFluidAccessTokenGenerator, IReadinessCheck, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts index 1f0c5978bf25..07ba826461c4 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runner.ts @@ -4,7 +4,6 @@ */ import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { Deferred, ICache, @@ -23,6 +22,7 @@ import { IRevokedTokenChecker, ICollaborationSessionTracker, IReadinessCheck, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts index 3cd84bcb8b84..1bbbe456971d 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts @@ -5,7 +5,6 @@ import * as os from "os"; import cluster from "cluster"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { KafkaOrdererFactory } from "@fluidframework/server-kafka-orderer"; import { @@ -75,7 +74,7 @@ export class NexusResources implements core.IResources { public socketTracker?: core.IWebSocketTracker, public tokenRevocationManager?: core.ITokenRevocationManager, public revokedTokenChecker?: core.IRevokedTokenChecker, - public collaborationSessionEvents?: TypedEventEmitter, + public collaborationSessionEvents?: core.TypedEventEmitter, public serviceMessageResourceManager?: core.IServiceMessageResourceManager, public clusterDrainingChecker?: core.IClusterDrainingChecker, public collaborationSessionTracker?: core.ICollaborationSessionTracker, @@ -496,7 +495,8 @@ export class NexusResourcesFactory implements core.IResourcesFactory(); + const collaborationSessionEvents = + new core.TypedEventEmitter(); // This wanst to create stuff const port = utils.normalizePort(process.env.PORT || "3000"); diff --git a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts index dfbd2c468a9a..6f7b588e07aa 100644 --- a/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts +++ b/server/routerlicious/packages/routerlicious-base/src/test/alfred/api.spec.ts @@ -4,13 +4,13 @@ */ import { ScopeType } from "@fluidframework/protocol-definitions"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { IAlfredTenant, NetworkError } from "@fluidframework/server-services-client"; import { IDocument, MongoDatabaseManager, MongoManager, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { StartupCheck } from "@fluidframework/server-services-shared"; import { Lumberjack, TestEngine1 } from "@fluidframework/server-services-telemetry"; diff --git a/server/routerlicious/packages/services-core/package.json b/server/routerlicious/packages/services-core/package.json index 6b68eb99d433..6d811b06d7f5 100644 --- a/server/routerlicious/packages/services-core/package.json +++ b/server/routerlicious/packages/services-core/package.json @@ -37,6 +37,7 @@ "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", + "@types/events": "^3.0.0", "@types/nconf": "^0.10.2", "@types/node": "^18.19.39", "debug": "^4.3.4", diff --git a/server/routerlicious/packages/services-core/src/index.ts b/server/routerlicious/packages/services-core/src/index.ts index 298b957a14f0..2d17acec7902 100644 --- a/server/routerlicious/packages/services-core/src/index.ts +++ b/server/routerlicious/packages/services-core/src/index.ts @@ -163,6 +163,17 @@ export { ThrottlingError, } from "./throttler"; export { TokenGenerator } from "./token"; +export { + TypedEventEmitter, + TypedEventTransform, + IEvent, + IEventProvider, + IEventTransformer, + TransformedEvent, + EventEmitterEventType, + IEventThisPlaceHolder, + ReplaceIEventThisPlaceHolder, +} from "./typedEventEmitter"; export { clientConnectivityStorageId, IUsageData, diff --git a/server/routerlicious/packages/services-core/src/test/typedEventEmitter.spec.ts b/server/routerlicious/packages/services-core/src/test/typedEventEmitter.spec.ts new file mode 100644 index 000000000000..895a03f24af7 --- /dev/null +++ b/server/routerlicious/packages/services-core/src/test/typedEventEmitter.spec.ts @@ -0,0 +1,52 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { strict as assert } from "assert"; + +import { TypedEventEmitter, IErrorEvent } from "../typedEventEmitter"; + +describe("TypedEventEmitter", () => { + it("Validate Function proxies", () => { + const tee = new TypedEventEmitter(); + let once = 0; + + tee.once("error", () => once++); + assert.equal(tee.listenerCount("error"), 1); + + let on = 0; + tee.on("error", () => on++); + assert.equal(tee.listenerCount("error"), 2); + + for (let i = 0; i < 5; i++) { + tee.emit("error", "message"); + } + + assert.equal(once, 1); + assert.equal(on, 5); + }); + + it("Validate new and remove Listener", () => { + const tee = new TypedEventEmitter(); + let newListenerCalls = 0; + let removeListenerCalls = 0; + const errListener = (): void => {}; + tee.on("removeListener", (event, listener) => { + assert.equal(event, "error"); + assert.equal(listener, errListener); + removeListenerCalls++; + }); + tee.on("newListener", (event, listener) => { + assert.equal(event, "error"); + assert.equal(listener, errListener); + newListenerCalls++; + }); + + tee.on("error", errListener); + tee.removeListener("error", errListener); + + assert.equal(newListenerCalls, 1); + assert.equal(removeListenerCalls, 1); + }); +}); diff --git a/server/routerlicious/packages/common-utils/src/typedEventEmitter.ts b/server/routerlicious/packages/services-core/src/typedEventEmitter.ts similarity index 100% rename from server/routerlicious/packages/common-utils/src/typedEventEmitter.ts rename to server/routerlicious/packages/services-core/src/typedEventEmitter.ts diff --git a/server/routerlicious/packages/tinylicious/src/app.ts b/server/routerlicious/packages/tinylicious/src/app.ts index 14cda273ce12..bd2afe697a74 100644 --- a/server/routerlicious/packages/tinylicious/src/app.ts +++ b/server/routerlicious/packages/tinylicious/src/app.ts @@ -4,8 +4,11 @@ */ import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { + IDocumentStorage, + MongoManager, + TypedEventEmitter, +} from "@fluidframework/server-services-core"; import { RestLessServer } from "@fluidframework/server-services-shared"; import { json, urlencoded } from "body-parser"; import compression from "compression"; diff --git a/server/routerlicious/packages/tinylicious/src/resources.ts b/server/routerlicious/packages/tinylicious/src/resources.ts index 5f16f4dd90f7..562a7596761f 100644 --- a/server/routerlicious/packages/tinylicious/src/resources.ts +++ b/server/routerlicious/packages/tinylicious/src/resources.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import * as core from "@fluidframework/server-services-core"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { Provider } from "nconf"; @@ -17,7 +16,7 @@ export class TinyliciousResources implements core.IResources { public mongoManager: core.MongoManager, public port: any, public webServerFactory: core.IWebServerFactory, - public collaborationSessionEventEmitter?: TypedEventEmitter, + public collaborationSessionEventEmitter?: core.TypedEventEmitter, ) {} public async dispose(): Promise { diff --git a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts index 5ea4c0536c8c..355a15555de1 100644 --- a/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts +++ b/server/routerlicious/packages/tinylicious/src/resourcesFactory.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; import { LocalOrdererManager } from "@fluidframework/server-local-server"; import { DocumentStorage } from "@fluidframework/server-services-shared"; @@ -13,6 +12,7 @@ import { MongoManager, IResourcesFactory, MongoDocumentRepository, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import * as utils from "@fluidframework/server-services-utils"; import { Provider } from "nconf"; diff --git a/server/routerlicious/packages/tinylicious/src/routes/index.ts b/server/routerlicious/packages/tinylicious/src/routes/index.ts index f165fef1fb4d..c3c7a2aedb5a 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/index.ts @@ -3,9 +3,12 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { ICollaborationSessionEvents } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { + IDocumentStorage, + MongoManager, + TypedEventEmitter, +} from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as ordering from "./ordering"; diff --git a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts index 1e86425b4575..1e2b49285501 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/ordering/index.ts @@ -3,14 +3,17 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, IRoom, IRuntimeSignalEnvelope, } from "@fluidframework/server-lambdas"; -import { IDocumentStorage, MongoManager } from "@fluidframework/server-services-core"; +import { + IDocumentStorage, + MongoManager, + TypedEventEmitter, +} from "@fluidframework/server-services-core"; import { Router } from "express"; import { Provider } from "nconf"; import * as deltas from "./deltas"; diff --git a/server/routerlicious/packages/tinylicious/src/runner.ts b/server/routerlicious/packages/tinylicious/src/runner.ts index 4de09864a786..1679b49963d6 100644 --- a/server/routerlicious/packages/tinylicious/src/runner.ts +++ b/server/routerlicious/packages/tinylicious/src/runner.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. */ -import { TypedEventEmitter } from "@fluidframework/server-common-utils"; import { Deferred, IDocumentStorage, @@ -14,6 +13,7 @@ import { MongoManager, DefaultMetricClient, IRunner, + TypedEventEmitter, } from "@fluidframework/server-services-core"; import { Provider } from "nconf"; import * as winston from "winston"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 9215c2b3962c..77fca233eab2 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -71,12 +71,6 @@ importers: packages/common-utils: dependencies: - '@types/events': - specifier: ^3.0.0 - version: 3.0.3 - events: - specifier: ^3.1.0 - version: 3.3.0 sha.js: specifier: ^2.4.11 version: 2.4.11 @@ -674,9 +668,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils + '@types/events': + specifier: ^3.0.0 + version: 3.0.3 events_pkg: specifier: npm:events@^3.1.0 version: events@3.3.0 @@ -1297,6 +1291,9 @@ importers: '@fluidframework/server-services-telemetry': specifier: workspace:~ version: link:../services-telemetry + '@types/events': + specifier: ^3.0.0 + version: 3.0.3 '@types/nconf': specifier: ^0.10.2 version: 0.10.3 From 838bc6f89f276e96f6e22bfcd594e1132d946cea Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Thu, 6 Mar 2025 23:40:06 +0000 Subject: [PATCH 29/38] Move node+browser utils to services-client --- .../packages/services-client/.eslintrc.cjs | 7 +- .../services-client/jest-puppeteer.config.cjs | 13 + .../packages/services-client/jest.config.cjs | 20 + .../packages/services-client/package.json | 44 +- .../src/common-utils/base64Encoding.ts | 41 + .../src/common-utils/bufferBrowser.ts | 181 ++ .../src/common-utils/bufferNode.ts | 71 + .../src/common-utils/bufferShared.ts | 16 + .../src/common-utils/hashFileBrowser.ts | 79 + .../src/common-utils/hashFileNode.ts | 58 + .../services-client/src/common-utils/index.ts | 22 + .../src/common-utils/indexBrowser.ts | 13 + .../src/common-utils/indexNode.ts | 13 + .../packages/services-client/src/historian.ts | 2 +- .../services-client/src/storageUtils.ts | 5 +- .../src/summaryTreeUploadManager.ts | 6 +- .../src/test/jest/assets/aka.pdf | Bin 0 -> 14010 bytes .../src/test/jest/assets/bindy.svg | 2032 +++++++++++++++ .../src/test/jest/assets/book.xml | 119 + .../src/test/jest/assets/grid.gif | Bin 0 -> 9137 bytes .../src/test/jest/buffer.spec.ts | 263 ++ .../src/test/jest/gitHash.spec.ts | 215 ++ .../src/test/jest/tsconfig.json | 16 + .../src/test/{ => mocha}/array.spec.ts | 2 +- .../src/test/{ => mocha}/assert.spec.ts | 2 +- .../test/{ => mocha}/basicRestwrapper.spec.ts | 4 +- .../test/{ => mocha}/generateNames.spec.ts | 2 +- .../src/test/{ => mocha}/heap.spec.ts | 2 +- .../src/test/{ => mocha}/historian.spec.ts | 8 +- .../src/test/{ => mocha}/storageUtils.spec.ts | 6 +- .../src/test/{ => mocha}/tsconfig.json | 4 +- .../src/test/types/tsconfig.json | 14 + server/routerlicious/pnpm-lock.yaml | 2283 ++++++++++++++++- 33 files changed, 5487 insertions(+), 76 deletions(-) create mode 100644 server/routerlicious/packages/services-client/jest-puppeteer.config.cjs create mode 100644 server/routerlicious/packages/services-client/jest.config.cjs create mode 100644 server/routerlicious/packages/services-client/src/common-utils/base64Encoding.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/bufferBrowser.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/bufferNode.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/bufferShared.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/hashFileBrowser.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/hashFileNode.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/index.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/indexBrowser.ts create mode 100644 server/routerlicious/packages/services-client/src/common-utils/indexNode.ts create mode 100644 server/routerlicious/packages/services-client/src/test/jest/assets/aka.pdf create mode 100644 server/routerlicious/packages/services-client/src/test/jest/assets/bindy.svg create mode 100644 server/routerlicious/packages/services-client/src/test/jest/assets/book.xml create mode 100644 server/routerlicious/packages/services-client/src/test/jest/assets/grid.gif create mode 100644 server/routerlicious/packages/services-client/src/test/jest/buffer.spec.ts create mode 100644 server/routerlicious/packages/services-client/src/test/jest/gitHash.spec.ts create mode 100644 server/routerlicious/packages/services-client/src/test/jest/tsconfig.json rename server/routerlicious/packages/services-client/src/test/{ => mocha}/array.spec.ts (99%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/assert.spec.ts (93%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/basicRestwrapper.spec.ts (99%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/generateNames.spec.ts (94%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/heap.spec.ts (97%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/historian.spec.ts (98%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/storageUtils.spec.ts (97%) rename server/routerlicious/packages/services-client/src/test/{ => mocha}/tsconfig.json (81%) create mode 100644 server/routerlicious/packages/services-client/src/test/types/tsconfig.json diff --git a/server/routerlicious/packages/services-client/.eslintrc.cjs b/server/routerlicious/packages/services-client/.eslintrc.cjs index ee788a651853..ead64b923ec1 100644 --- a/server/routerlicious/packages/services-client/.eslintrc.cjs +++ b/server/routerlicious/packages/services-client/.eslintrc.cjs @@ -9,7 +9,12 @@ module.exports = { "prettier", ], parserOptions: { - project: ["./tsconfig.json", "./src/test/tsconfig.json"], + project: [ + "./tsconfig.json", + "./src/test/mocha/tsconfig.json", + "./src/test/jest/tsconfig.json", + "./src/test/types/tsconfig.json", + ], }, rules: { "import/no-nodejs-modules": "off", diff --git a/server/routerlicious/packages/services-client/jest-puppeteer.config.cjs b/server/routerlicious/packages/services-client/jest-puppeteer.config.cjs new file mode 100644 index 000000000000..d3d15152b332 --- /dev/null +++ b/server/routerlicious/packages/services-client/jest-puppeteer.config.cjs @@ -0,0 +1,13 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + launch: { + args: ["--no-sandbox", "--disable-setuid-sandbox"], // https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md#setting-up-chrome-linux-sandbox + dumpio: true, // output browser console to cmd line + // slowMo: 500, // slows down process for easier viewing + // headless: false, // run in the browser + }, +}; diff --git a/server/routerlicious/packages/services-client/jest.config.cjs b/server/routerlicious/packages/services-client/jest.config.cjs new file mode 100644 index 000000000000..5c79d7095fdf --- /dev/null +++ b/server/routerlicious/packages/services-client/jest.config.cjs @@ -0,0 +1,20 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +module.exports = { + preset: "jest-puppeteer", + testMatch: ["**/dist/test/jest/?(*.)+(spec|test).js"], + testPathIgnorePatterns: ["/node_modules/"], + reporters: [ + "default", + [ + "jest-junit", + { + outputDirectory: "nyc", + outputName: "jest-junit-report.xml", + }, + ], + ], +}; diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index ff32d03d9ac6..fb9d23d1de94 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -13,6 +13,10 @@ "sideEffects": false, "main": "dist/index.js", "module": "lib/index.js", + "browser": { + "./dist/common-utils/indexNode.js": "./dist/common-utils/indexBrowser.js", + "./lib/common-utils/indexNode.js": "./lib/common-utils/indexBrowser.js" + }, "types": "dist/index.d.ts", "scripts": { "build": "npm run build:genver && concurrently npm:build:compile npm:lint && npm run build:docs", @@ -21,7 +25,10 @@ "build:docs": "api-extractor run --local && copyfiles -u 1 \"./_api-extractor-temp/doc-models/*\" ../../_api-extractor-temp/", "build:esnext": "tsc --project ./tsconfig.esnext.json", "build:genver": "gen-version", - "build:test": "tsc --project ./src/test/tsconfig.json", + "build:test": "concurrently npm:build:test:mocha npm:build:test:jest npm:build:test:types", + "build:test:jest": "tsc --project ./src/test/jest/tsconfig.json", + "build:test:mocha": "tsc --project ./src/test/mocha/tsconfig.json", + "build:test:types": "tsc --project ./src/test/types/tsconfig.json", "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json", "ci:build:docs": "api-extractor run", "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc", @@ -32,8 +39,13 @@ "lint:fix": "npm run prettier:fix && npm run eslint:fix", "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", - "test": "mocha --recursive \"dist/test/**/*.spec.*js\"", - "test:coverage": "c8 npm test -- --reporter xunit --reporter-option output=nyc/junit-report.xml", + "test": "npm run test:mocha && npm run test:jest", + "test:coverage": "c8 npm run test:report", + "test:jest": "jest --ci", + "test:jest:report": "npm run test:jest -- --coverage", + "test:mocha": "mocha --recursive \"dist/test/mocha/**/*.spec.*js\"", + "test:mocha:report": "c8 npm test:mocha -- --reporter xunit --reporter-option output=nyc/junit-report.xml", + "test:report": "npm run test:mocha:report && npm run test:jest:report", "tsc": "tsc", "typetests:gen": "flub generate typetests --dir . -v", "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" @@ -62,13 +74,14 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "axios": "^1.7.7", + "base64-js": "^1.5.1", "crc-32": "1.2.0", "debug": "^4.3.4", "json-stringify-safe": "^5.0.1", "jsrsasign": "^11.0.0", "jwt-decode": "^4.0.0", + "sha.js": "^2.4.11", "sillyname": "^0.1.0", "uuid": "^9.0.0" }, @@ -80,6 +93,8 @@ "@fluidframework/server-services-client-previous": "npm:@fluidframework/server-services-client@5.0.0", "@microsoft/api-extractor": "^7.45.1", "@types/debug": "^4.1.5", + "@types/jest": "29.5.3", + "@types/jest-environment-puppeteer": "2.2.0", "@types/jsrsasign": "^10.5.12", "@types/mocha": "^10.0.1", "@types/node": "^18.19.39", @@ -89,11 +104,32 @@ "concurrently": "^8.2.1", "copyfiles": "^2.4.1", "eslint": "~8.55.0", + "jest": "^29.6.2", + "jest-junit": "^10.0.0", + "jest-puppeteer": "^10.1.3", "mocha": "^10.2.0", "prettier": "~3.0.3", + "rewire": "^5.0.0", "rimraf": "^4.4.0", "typescript": "~5.1.6" }, + "tasks": { + "eslint": [ + "tsc", + "build:test:mocha", + "build:test:jest", + "build:test:types" + ], + "build:test:jest": [ + "tsc" + ], + "build:test:mocha": [ + "tsc" + ], + "build:test:types": [ + "tsc" + ] + }, "typeValidation": { "broken": { "Class_NetworkError": { diff --git a/server/routerlicious/packages/services-client/src/common-utils/base64Encoding.ts b/server/routerlicious/packages/services-client/src/common-utils/base64Encoding.ts new file mode 100644 index 000000000000..6ea7538f3a74 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/base64Encoding.ts @@ -0,0 +1,41 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import { IsoBuffer } from "./indexNode"; + +/** + * Converts the provided {@link https://en.wikipedia.org/wiki/Base64 | base64}-encoded string + * to {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}. + * @internal + */ +export const fromBase64ToUtf8 = (input: string): string => + IsoBuffer.from(input, "base64").toString("utf-8"); + +/** + * Converts the provided {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}-encoded string + * to {@link https://en.wikipedia.org/wiki/Base64 | base64}. + * @internal + */ +export const fromUtf8ToBase64 = (input: string): string => + IsoBuffer.from(input, "utf8").toString("base64"); + +/** + * Convenience function to convert unknown encoding to utf8 that avoids + * buffer copies/encode ops when no conversion is needed. + * @param input - The source string to convert. + * @param encoding - The source string's encoding. + * @internal + */ +export const toUtf8 = (input: string, encoding: string): string => { + switch (encoding) { + case "utf8": + case "utf-8": { + return input; + } + default: { + return IsoBuffer.from(input, encoding).toString(); + } + } +}; diff --git a/server/routerlicious/packages/services-client/src/common-utils/bufferBrowser.ts b/server/routerlicious/packages/services-client/src/common-utils/bufferBrowser.ts new file mode 100644 index 000000000000..adf40ab43df4 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/bufferBrowser.ts @@ -0,0 +1,181 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import * as base64js from "base64-js"; + +/** + * Converts a Uint8Array to a string of the provided encoding + * Useful when the array might be an {@link IsoBuffer}. + * + * @param arr - The array to convert. + * @param encoding - Optional target encoding; only "utf8" and "base64" are + * supported, with "utf8" being default. + * @returns The converted string. + */ +export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string { + switch (encoding) { + case "base64": { + return base64js.fromByteArray(arr); + } + case "utf8": + case "utf-8": + case undefined: { + return new TextDecoder().decode(arr); + } + default: { + throw new Error("invalid/unsupported encoding"); + } + } +} + +/** + * Converts a {@link https://en.wikipedia.org/wiki/Base64 | base64} or + * {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8} string to array buffer. + * + * @param encoding - The input string's encoding. + */ +export const stringToBuffer = (input: string, encoding: string): ArrayBufferLike => + IsoBuffer.from(input, encoding).buffer; + +/** + * Convert binary blob to string format + * + * @param blob - the binary blob + * @param encoding - output string's encoding + * @returns the blob in string format + */ +export const bufferToString = (blob: ArrayBufferLike, encoding: string): string => + IsoBuffer.from(blob).toString(encoding); + +/** + * Determines if an object is an array buffer. + * + * @remarks Will detect and reject TypedArrays, like Uint8Array. + * Reason - they can be viewport into Array, they can be accepted, but caller has to deal with + * math properly (i.e. Take into account byteOffset at minimum). + * For example, construction of new TypedArray can be in the form of new TypedArray(typedArray) or + * new TypedArray(buffer, byteOffset, length), but passing TypedArray will result in fist path (and + * ignoring byteOffice, length). + * + * @param obj - The object to determine if it is an ArrayBuffer. + */ +export function isArrayBuffer(obj: any): obj is ArrayBuffer { + const maybe = obj as (Partial & Partial) | undefined; + return ( + obj instanceof ArrayBuffer || + (typeof maybe === "object" && + maybe !== null && + typeof maybe.byteLength === "number" && + typeof maybe.slice === "function" && + maybe.byteOffset === undefined && + maybe.buffer === undefined) + ); +} + +/** + * Minimal implementation of Buffer for our usages in the browser environment. + */ +export class IsoBuffer extends Uint8Array { + /** + * Convert the buffer to a string. + * Only supports encoding the whole string (unlike the Node Buffer equivalent) + * and only utf8 and base64 encodings. + * + * @param encoding - The encoding to use. + */ + public toString(encoding?: string): string { + return Uint8ArrayToString(this, encoding); + } + + /** + * Deprecated + * @param value - (string | ArrayBuffer) + * @param encodingOrOffset - (string | number) + * @param length - (number) + */ + static from(value, encodingOrOffset?, length?): IsoBuffer { + if (typeof value === "string") { + return IsoBuffer.fromString(value, encodingOrOffset as string | undefined); + // Capture any typed arrays, including Uint8Array (and thus - IsoBuffer!) + } else if (value !== null && typeof value === "object" && isArrayBuffer(value.buffer)) { + // The version of the from function for the node buffer, which takes a buffer or typed array + // as first parameter, does not have any offset or length parameters. Those are just silently + // ignored and not taken into account + return IsoBuffer.fromArrayBuffer(value.buffer, value.byteOffset, value.byteLength); + } else if (isArrayBuffer(value)) { + return IsoBuffer.fromArrayBuffer(value, encodingOrOffset as number | undefined, length); + } else { + // eslint-disable-next-line unicorn/error-message + throw new TypeError(); + } + } + + static fromArrayBuffer( + arrayBuffer: ArrayBuffer, + byteOffset?: number, + byteLength?: number, + ): IsoBuffer { + const offset = byteOffset ?? 0; + const validLength = byteLength ?? arrayBuffer.byteLength - offset; + if ( + offset < 0 || + offset > arrayBuffer.byteLength || + validLength < 0 || + validLength + offset > arrayBuffer.byteLength + ) { + // eslint-disable-next-line unicorn/error-message + throw new RangeError(); + } + + return new IsoBuffer(arrayBuffer, offset, validLength); + } + + static fromString(str: string, encoding?: string): IsoBuffer { + switch (encoding) { + case "base64": { + const sanitizedString = this.sanitizeBase64(str); + const encoded = base64js.toByteArray(sanitizedString); + return new IsoBuffer(encoded.buffer); + } + case "utf8": + case "utf-8": + case undefined: { + const encoded = new TextEncoder().encode(str); + return new IsoBuffer(encoded.buffer); + } + default: { + throw new Error("invalid/unsupported encoding"); + } + } + } + + static isBuffer(obj: any): boolean { + throw new Error("unimplemented"); + } + + /** + * Sanitize a base64 string to provide to base64-js library. + * {@link https://www.npmjs.com/package/base64-js} is not as tolerant of the same malformed base64 as Node' + * Buffer is. + */ + private static sanitizeBase64(str: string): string { + let sanitizedStr = str; + // Remove everything after padding - Node buffer ignores everything + // after any padding whereas base64-js does not + sanitizedStr = sanitizedStr.split("=")[0]; + + // Remove invalid characters - Node buffer strips invalid characters + // whereas base64-js replaces them with "A" + sanitizedStr = sanitizedStr.replace(/[^\w+-/]/g, ""); + + // Check for missing padding - Node buffer tolerates missing padding + // whereas base64-js does not + if (sanitizedStr.length % 4 !== 0) { + const paddingArray = ["", "===", "==", "="]; + sanitizedStr += paddingArray[sanitizedStr.length % 4]; + } + return sanitizedStr; + } +} diff --git a/server/routerlicious/packages/services-client/src/common-utils/bufferNode.ts b/server/routerlicious/packages/services-client/src/common-utils/bufferNode.ts new file mode 100644 index 000000000000..8c536decff92 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/bufferNode.ts @@ -0,0 +1,71 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Declare the subset of Buffer functionality we want to make available instead of + * exposing the entirely of Node's typings. This should match the public interface + * of the browser implementation, so any changes made in one should be made in both. + * @internal + */ +export declare class Buffer extends Uint8Array { + toString(encoding?: string): string; + /** + * @param value - (string | ArrayBuffer). + * @param encodingOrOffset - (string | number). + * @param length - (number). + */ + static from(value, encodingOrOffset?, length?): IsoBuffer; + static isBuffer(obj: any): obj is Buffer; +} + +/** + * @internal + */ +export const IsoBuffer = Buffer; + +/** + * @internal + */ +export type IsoBuffer = Buffer; + +/** + * Converts a Uint8Array to a string of the provided encoding. + * @remarks Useful when the array might be an IsoBuffer. + * @param arr - The array to convert. + * @param encoding - Optional target encoding; only "utf8" and "base64" are + * supported, with "utf8" being default. + * @returns The converted string. + * @internal + */ +export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string { + // Make this check because Buffer.from(arr) will always do a buffer copy + return (Buffer.isBuffer(arr) ? arr : Buffer.from(arr)).toString(encoding); +} + +/** + * Convert base64 or utf8 string to array buffer. + * @param encoding - The input string's encoding. + * @internal + */ +export function stringToBuffer(input: string, encoding: string): ArrayBufferLike { + const iso = IsoBuffer.from(input, encoding); + // In a Node environment, IsoBuffer may be a Node.js Buffer. Node.js will + // pool multiple small Buffer instances into a single ArrayBuffer, in which + // case we need to slice the appropriate span of bytes. + return iso.byteLength === iso.buffer.byteLength + ? iso.buffer + : iso.buffer.slice(iso.byteOffset, iso.byteOffset + iso.byteLength); +} + +/** + * Convert binary blob to string format + * + * @param blob - The binary blob + * @param encoding - Output string's encoding + * @returns The blob in string format + * @internal + */ +export const bufferToString = (blob: ArrayBufferLike, encoding: string): string => + IsoBuffer.from(blob).toString(encoding); diff --git a/server/routerlicious/packages/services-client/src/common-utils/bufferShared.ts b/server/routerlicious/packages/services-client/src/common-utils/bufferShared.ts new file mode 100644 index 000000000000..56435b56cbff --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/bufferShared.ts @@ -0,0 +1,16 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * Converts a Uint8Array array to an ArrayBuffer. + * @param array - Array to convert to ArrayBuffer. + * @internal + */ +export function Uint8ArrayToArrayBuffer(array: Uint8Array): ArrayBuffer { + if (array.byteOffset === 0 && array.byteLength === array.buffer.byteLength) { + return array.buffer; + } + return array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength); +} diff --git a/server/routerlicious/packages/services-client/src/common-utils/hashFileBrowser.ts b/server/routerlicious/packages/services-client/src/common-utils/hashFileBrowser.ts new file mode 100644 index 000000000000..49459b51e7de --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/hashFileBrowser.ts @@ -0,0 +1,79 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import * as base64js from "base64-js"; + +import { IsoBuffer } from "./bufferBrowser"; + +async function digestBuffer(file: IsoBuffer, algorithm: "SHA-1" | "SHA-256"): Promise { + const hash = await crypto.subtle.digest(algorithm, file); + return new Uint8Array(hash); +} + +function encodeDigest(hashArray: Uint8Array, encoding: "hex" | "base64"): string { + // eslint-disable-next-line default-case + switch (encoding) { + case "hex": { + const hashHex = Array.prototype.map + .call(hashArray, (byte) => { + return byte.toString(16).padStart(2, "0") as string; + }) + .join(""); + return hashHex; + } + case "base64": { + return base64js.fromByteArray(hashArray); + } + } +} + +/** + * Hash a file. Consistent within a session, but should not be persisted and + * is not consistent with git. + * If called under an insecure context for a browser, this will fallback to + * using the node implementation. + * + * @param file - The contents of the file in a buffer. + * @param algorithm - The hash algorithm to use, artificially constrained by what is used internally. + * @param hashEncoding - The encoding of the returned hash, also artificially constrained. + * @returns The hash of the content of the buffer. + */ +export async function hashFile( + file: IsoBuffer, + algorithm: "SHA-1" | "SHA-256" = "SHA-1", + hashEncoding: "hex" | "base64" = "hex", +): Promise { + // Handle insecure contexts (e.g. running with local services) + // by deferring to Node version, which uses a hash polyfill + // When packed, this chunk will show as "FluidFramework-HashFallback" separately + // from the main chunk and will be of non-trivial size. It will not be served + // under normal circumstances. + if (crypto.subtle === undefined) { + return import( + /* webpackChunkName: "FluidFramework-HashFallback" */ + "./hashFileNode" + ).then(async (m) => m.hashFile(file, algorithm, hashEncoding)); + } + + // This is split up this way to facilitate testing (see the test for more info) + const hashArray = await digestBuffer(file, algorithm); + return encodeDigest(hashArray, hashEncoding); +} + +/** + * Create a github hash (Github hashes the string with blob and size) + * Must be called under secure context for browsers + * + * @param file - The contents of the file in a buffer + * @returns The sha1 hash of the content of the buffer with the `blob` prefix and size + */ +export async function gitHashFile(file: IsoBuffer): Promise { + const size = file.byteLength; + const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; + const hashBuffer = IsoBuffer.from(filePrefix + file.toString()); + + // hashFile uses sha1; if that changes this will need to change too + return hashFile(hashBuffer); +} diff --git a/server/routerlicious/packages/services-client/src/common-utils/hashFileNode.ts b/server/routerlicious/packages/services-client/src/common-utils/hashFileNode.ts new file mode 100644 index 000000000000..1c888ef5cc10 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/hashFileNode.ts @@ -0,0 +1,58 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +// eslint-disable-next-line import/no-internal-modules +import sha1 from "sha.js/sha1"; +// eslint-disable-next-line import/no-internal-modules +import sha256 from "sha.js/sha256"; + +import { IsoBuffer } from "./bufferNode"; + +/** + * Hash a file. Consistent within a session, but should not be persisted and + * is not consistent with git. + * If called under an insecure context for a browser, this will fallback to + * using the node implementation. + * + * @param file - The contents of the file in a buffer. + * @param algorithm - The hash algorithm to use, artificially constrained by what is used internally. + * @param hashEncoding - The encoding of the returned hash, also artificially constrained. + * @returns The hash of the content of the buffer. + * @internal + */ +export async function hashFile( + file: IsoBuffer, + algorithm: "SHA-1" | "SHA-256" = "SHA-1", + hashEncoding: "hex" | "base64" = "hex", +): Promise { + let engine; + // eslint-disable-next-line default-case + switch (algorithm) { + case "SHA-1": { + engine = new sha1(); + break; + } + case "SHA-256": { + engine = new sha256(); + break; + } + } + return engine.update(file).digest(hashEncoding) as string; +} + +/** + * Create a github hash (Github hashes the string with blob and size) + * Must be called under secure context for browsers + * + * @param file - The contents of the file in a buffer + * @returns The sha1 hash of the content of the buffer with the `blob` prefix and size + * @internal + */ +export async function gitHashFile(file: IsoBuffer): Promise { + const size = file.byteLength; + const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; + const engine = new sha1(); + return engine.update(filePrefix).update(file).digest("hex") as string; +} diff --git a/server/routerlicious/packages/services-client/src/common-utils/index.ts b/server/routerlicious/packages/services-client/src/common-utils/index.ts new file mode 100644 index 000000000000..182d9d05d3f3 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/index.ts @@ -0,0 +1,22 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +/** + * This library contains common utility functions and classes used by the Fluid Framework. + * + * @packageDocumentation + */ + +export { fromBase64ToUtf8, fromUtf8ToBase64, toUtf8 } from "./base64Encoding"; +export { Uint8ArrayToArrayBuffer } from "./bufferShared"; +/** + * NOTE: This export is remapped to export from "./indexBrowser" in browser environments via package.json. + * Because the two files don't have fully isomorphic exports, using named exports for the full API surface + * is problematic if that named export includes values not in their intersection. + * + * In a future breaking change, we could use a named export for their intersection if we desired. + */ +// eslint-disable-next-line no-restricted-syntax +export * from "./indexNode"; diff --git a/server/routerlicious/packages/services-client/src/common-utils/indexBrowser.ts b/server/routerlicious/packages/services-client/src/common-utils/indexBrowser.ts new file mode 100644 index 000000000000..29baec890647 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/indexBrowser.ts @@ -0,0 +1,13 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +export { + bufferToString, + isArrayBuffer, + IsoBuffer, + stringToBuffer, + Uint8ArrayToString, +} from "./bufferBrowser"; +export { gitHashFile, hashFile } from "./hashFileBrowser"; diff --git a/server/routerlicious/packages/services-client/src/common-utils/indexNode.ts b/server/routerlicious/packages/services-client/src/common-utils/indexNode.ts new file mode 100644 index 000000000000..76b716d15624 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/common-utils/indexNode.ts @@ -0,0 +1,13 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +export { + Buffer, + bufferToString, + IsoBuffer, + stringToBuffer, + Uint8ArrayToString, +} from "./bufferNode"; +export { gitHashFile, hashFile } from "./hashFileNode"; diff --git a/server/routerlicious/packages/services-client/src/historian.ts b/server/routerlicious/packages/services-client/src/historian.ts index bf405626ab25..68b9822a5170 100644 --- a/server/routerlicious/packages/services-client/src/historian.ts +++ b/server/routerlicious/packages/services-client/src/historian.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import * as git from "@fluidframework/gitresources"; import { RestWrapper, BasicRestWrapper } from "./restWrapper"; import { IHistorian } from "./storage"; import { IWholeFlatSummary, IWholeSummaryPayload, IWriteSummaryResponse } from "./storageContracts"; import { NetworkError } from "./error"; +import { fromUtf8ToBase64 } from "./common-utils"; import { debug } from "./debug"; function endsWith(value: string, endings: string[]): boolean { diff --git a/server/routerlicious/packages/services-client/src/storageUtils.ts b/server/routerlicious/packages/services-client/src/storageUtils.ts index 1c7f87a1563d..77dafd267aa7 100644 --- a/server/routerlicious/packages/services-client/src/storageUtils.ts +++ b/server/routerlicious/packages/services-client/src/storageUtils.ts @@ -3,13 +3,10 @@ * Licensed under the MIT License. */ -import { - stringToBuffer, - Uint8ArrayToString, -} from "@fluidframework/server-common-utils"; import { getGitType } from "@fluidframework/protocol-base"; import { ISnapshotTree, SummaryObject, SummaryType } from "@fluidframework/protocol-definitions"; import { assert } from "./assert"; +import { stringToBuffer, Uint8ArrayToString } from "./common-utils"; import { ISummaryTree, IWholeSummaryTree, diff --git a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts index 949aa1676ea3..d43e85cd914f 100644 --- a/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts +++ b/server/routerlicious/packages/services-client/src/summaryTreeUploadManager.ts @@ -3,11 +3,6 @@ * Licensed under the MIT License. */ -import { - gitHashFile, - IsoBuffer, - Uint8ArrayToString, -} from "@fluidframework/server-common-utils"; import { ICreateTreeEntry } from "@fluidframework/gitresources"; import { getGitMode, getGitType } from "@fluidframework/protocol-base"; import { @@ -18,6 +13,7 @@ import { SummaryType, } from "@fluidframework/protocol-definitions"; import { assert } from "./assert"; +import { gitHashFile, IsoBuffer, Uint8ArrayToString } from "./common-utils"; import { ISummaryUploadManager, IGitManager } from "./storage"; import { IWholeSummaryPayloadType } from "./storageContracts"; import { unreachableCase } from "./utils"; diff --git a/server/routerlicious/packages/services-client/src/test/jest/assets/aka.pdf b/server/routerlicious/packages/services-client/src/test/jest/assets/aka.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f3423703f542852aa7f3d1a13e73f0de0d8c9c0f GIT binary patch literal 14010 zcma*O1yt1A`aTZQ-5?^$uO0tiSOz$5SA>}lhU_;!YP+Q`~ixmw!*BqXpsJl$;|&#--wQq$Y&qLF>j_OSL@7iGM$u02t%sPwi) z^b{Jno~U%~n`_yVtW6?b>G0&}hP4T^kq!Kk$4|SZ_Qk`O=`@}2ehv&0pr1NmZ2=9h z)xN?@DX9%PC}9f9>1xkiHI1dHqvjpHt<-)XA!&1GsL#7JYS+YAiKTH8h-(U>XnVWT ze)B9FM;-ksXKf(%@JVz^;(bD;8T^OaJ+_UD^`AB%e*H52m%YEfd4&ajRsQ*r#tB_lq^e#W-=T$w%^;{95?7(Tk>+G^sBAB^i>@{Ys7sGqzI{XO_M`rHhh+8pY*+& z=KFWU=}r6Vp1CF3Af0>h_b+bsj#>7{bEM*O440hut9ZJ|kuI2w-aKmPPSrzde1`sH zW2H*t5P)=ohSa$D_LMft*$g_cipz=5a&9Nh{EI|`Qky~o-rXW_WSNm z`|6}xj|9FKKele@a7O7jRM*E=4%^Js?iR@XW*J59J0v;IzP_ z2?4pGECP@sLKF#6(onb+A2>Wgt(TIRMZ%WiokjKzcXUIV41MtlRXt454c!FwX)m4| z4sM9T6YQuy6(I6rr~_u$5g}QDR7E0r5kaQ(G$FMSrk{+IrZ6eWpiE36A@s@hCzi5@ z?BNypGMeINjGk2On5N-3c^IDn{OI?{fe}O*4<;aZvq;S$b9JILm})cVkb&qbgHwS{0Nt|MfxA8&=_*te5? zk@PT(pwHvTGJw7tJD4Vzb}4~wsE0KX%LvsejDS83z~s!NOGt&eg?S%A1mo8VEz|I1 zh$8eGFtKEN_j*>UQ;CK}J(*M~iitv-i7m4+R9DH7!IVXurHej!M8sOb{h{F#GmRRi zT!1+<0aQ{mVd9ZWa#;nb zmM<-{EMqLgR|N*Om^-1N&=z8i@+UiWUzm&OsiY^0{l2s|sx^wt+sp$WDF_waP9*OP zp3!Z0onhH9+Zb;=-k{l_+GrTnMu!0{u0Yz9#c|1T9dQY#{F`m#YvW%9YaPsfcCw{j zv%9bdq%x%1rXr^%RH*8?PLWP!S3IlGm;^eqI6@rf9B-$%E91vY$9;0fv(5Q`uHQxP z*0smHXuWYf@81>QO{U7C>ZYQk(xXb}9}=L*LW+Q{1CA8xca!f8S^+A!K`G6SY& z9>8^NnHyrk`PDVwOSwKv6fIPWS6h`e7}yo6H;j>(Lb;8Fq*_c`bbO>WRCo+{%xkp{ z^Ch%$t8(z?D91IchOv@`&8F&dt|jlD z?}4IOrgaPC9qJw97x)(pw=B237~;{s(OvkLv!33MJ0b$7i1xNuTE~v#)-YK8S>H`4 zl`dr)jvsQrD&eH~$RJYUS2OeV=6 zNZ-kLM~Yzy;F^-%cs%6hrs^xFO^_SykA$Rw>{f8M=m zqx{2oO`>_9;d6FcYPv^Dgg;|QVC5UCHD~5+J{zbr$sN(R(5)ekt@vZpE1SC{)bxn@ zh|jX=1Ew)nN;OJkN^1`^q?(q!>dj9=*UM89QwrHY<)6zxIz%*HHBLw~LtfQ!n1aMv zyLkHf3xP82qYhICdL#u;J}0R@_As>V$awuj^;|KI=?!zZAx?v1{i2?<&41zV%u5#`O8Nu+x5OkZEaXHutG!*|d5Ceo}DK((!b^ zTOVTl+=9R%!8)OludKdHxzgBTLD zq%@tu?=Ll-s->O{LcXn3^^flr?6&vV1)B%UepftB8dr!^C?19-cuk2;&IpwWr3k{} zp+oQ1o)5d;FQ3c!lT_|#f(qNNP=)Ei$E(9vbcZ>(Vsn140xNb{?{hDjKN-C;%Afu= z9n)MS=-{vFzqAuFk^N}w5trnfp8;oa7nxZNqjoCeNn>Ph-+*&{f=;A|B9CKZD56E4 zdP=l6u7Am{sjFH15Sm_VcHHJ({8kil}^*!o7ewwx;C(V36$YH1H z@LAW6Tf=?YTJ`I0w7{(!(_5a!i}t{c*FUqVQDV_=4!FDhf0}(0-w9m2|BO*iU?vHF zA$)ItZ?(Txz>2NGo>L)NeLr_ zu0plKc-(c|!i#rjgGV3Y(kIp;d)R(7U#5Pp%nkCn?Xt5R88~wKyq77dyja!^zL~yw zwq?D&KH=kVSW^0Gv9eq8BJ@80*6M6HX=h*KN+UHlUeYH3>+Zyt<(ci~(q+Wy?SIqm z-!$|$*+!7!zxe7eX8Q|6kYFVl8EJ@zjWysmht&p{{?+Ce`~Hj4{!Pw3{=ewC#4@tcbC=y+Lr z{tg&)-Mwu7Slurx{-~5SFjO&+;*fzjJ6O6q{K4L3Z9J^p9o#%!-LZN9j4O0q^;{f& z$6LIA1`_fP?jD{p_7Haf2*KG^A%7P55jH(_u=ce7Z55v&fL{m<;1>|U<`dvUgd1Q0 z2+Rur2@3*1{9u3pQ0PBx{vV+q@Bh!(&ot?yV?U5E;_$^Q@senZIfrEQxcnm2fNcV= zTcqYj{4gW(diSHRKGRA%+YtPvgV+268O1M%yArARA zPVLfcDmZv7Px3|4uv3cnRmjNVSNRTJCdxgt-J>9WLgTN2%&7PWV>o11jGv3WYEn1oPnAx9VkW!1K?QORz z@ZOZ0z)0eDjV7q7d3NN$5WUmQ?Y)Le&5J4*vnl++LPy*jv4y?)!gFoH9f|B!ZT30M zGpS<8IB};ED27=X-PVHL)(*{?!0H`|uAFK=(;cvcTJneB+Q-tg`I3NsD4z0`g2ciP z1|e57>VvD5^>VW{yC|&3R7s(<+oe4llcI{yoOCjC(fp|CUXP9Ttx2--Y7=}3L9@a~LLYlNQ zp;q<@6ADSImSu^_{A_M{T)}F{Y>z_SJM|>CIic`C-8v;h!RrUI6_kGhR5s5A_k+FV zP^|@aM9i_l@gdDP4Qd(HFlQp$2H=~BxyPyrK5VsvW>*utw|&2Gs_j8jO?7HU=0E<0Q9D0^&qsVUdt-(m=>DNeD}%GOl58 zk`l8F5y&PsNFiem1}84j&&Y&LVuEBcc3`?VI?SrYKr&bgjt)zld4@Km1Pi2>!3I+$ zw}k?kVWc=9tqd#}DVEM-xG!V~3#6aH3nRr$=26W7w!y9hA?aF zH8K{N3{Qv{tTj@Jgheld2-X^*M8sm4!2}_WR3aQ=Q|$ykhYet_5e{+3sbxHbRKW}) zcyX+VhaSgCJ?sLCKpJ885n4Ef#PY;Za`F63a0iGw)@dP764OIF<0s~67jOydv>LdC zdFl%J!3>{)1u(>De*3-*l>9t1fc-{giIkZ$5bTo7R|}IyHv4kZz(wYA7~EAT?y0RFE3-O?F5SBRmymLJ!}7nXtgkAlzh|#1I(F zgcB|Y+b7zThHw*Z20*-VJaT|r*b^LZZiqK_gG|PEm@|oOCD1rxjuXxT5yYNggrh^I zaT?S!nqZzd4e}XNuqxsbm5fwa6`^e#FdN26QX-S#4VjN{AS;o}u!Uqr7_!5OAykou zoNxvRIW`F~%VRhg#!1KmPz?v3MrN|AW&=GUGa2EW5XZ<&Hr03_C?bWrRkkpi`69WJ(kxqwim`H=0P*zb#6(rc_d}mSxUr z)G3cIN-c^k$}EbpW*Z^iolz_vWQtWJhejxdF>NJs0m3vbfH^06lcte@qedq=zTitggFG6f}huat?gbY!U*z}5Uo>RLMrP&!3*?Sb>h14)P3eU3U;@~3GGM+)1hXvq}I+eXbVHk*0Sc0he{?$e#z^2 z*xl+UR3nv4wVKK4O0Tt!n4uI(W&ppOth>;4Ft&us3GT=QlSa~Aj*)~?F{|QhC{2F* zuo7+Iav@VfA`J^zmQRt3Kzj!QjaI}@#FZshe*P&*5yqe>8KZgv7(rp`VQkASN?7k! zd{A@qr7LBF7J9GiBQ#>l($Ocn-(mr!rijkRgF>qv%i6UvAz74qQJoL_-@Okr-G1j?9 z&%N_JX-C?K?2w8VUy=w>J3Ji#BiAQeV|Xp8-!~^Y#|wY`WR2ssq*@qyQdrXG%jC*+p-5k> zV_!!4DNP6T5l?J=g;k$|8g}9y3~kDoCA9LF1DDdHjPIrr`G_Tz*hU%^ITtAub;|jf zS26SXGp)4;`YyGwl%5apJ}QnOQXu4`Up2sFD`=O79up~Whpm-u%)Sh#o6UF`Zk~v( zcv9|9+a=8%lK_op8OgUURFsEWCtJ(W1f=mPb*6yA-Ai=%2yC7w7isnALW!8Tp`_6D zmt92QWQGgo#DSNAY)qj8O2it(3dAapXeRsArKpu~V^RmCxjs&Qk(FYM36<3-C`>bQ zEYHu&l9gjf0{%>_9{dP?=H!)I-_#Zy@e}zi>QAYC|AB6lr7+jt9-^NVS5#i+`FG4$ z4+8Mj0Y50ONWF6N?lg{guQ0Cs;e3}%mLdyup*>+eAp}IC`1hbIq|SsB|4%-BqRSe~ z&-Rorji=uoNJ=j?dbcgr*>;#?)b{l_p0}AJ^MqTK1!KLVsIL6R(<@2v6XR;DisRe3 zQF=%2JMZ?~W^ND3$nGA6Zq`1MUP({VafRNsW!?`)mxXCw2MU~f3(;KE-=cc~!Y{A- zm+2=TJy}4qB>F^PeU#@Hdy9Oke|ZT1x^Vf%r}Y*tx^Nll-zRP%*-HJ*X3S#=s|)4Z zYl#-A%gm?ku8}=xKWyDd?p%}hVcM&OEwmRXTNmf(-e}&a-WT67Gkg>`AJsf+5^esz z{q^_&Ke%eFQM^u|uG-bfLd8PI!egnV7cv!DCF2zutZZRruJL4oWT_!v;r@`eyjG!N zKWXSpk$u|g@c68Zi~7OdgT32nwAuD{udcmyudI=i_O(4-=WJ^#8WEAYu~dD$b60b_ zrl+-dRal;v)mT*r24n`I$lN?;uD zL5aN~N0%P#>jm5QjR`QEDT`Cj-cWoTA6W$4b} zR46-*7&U}$g)+bS6d6t#ngmSOl^ELadE^tg^97i`FS4sWJg@zYt%An5UYA$M&?vc+ zj{h zuR1_=^=|seHuu)0v|<;h)RSIEg%)dxevaM|<%TBl?SbRD)#!|}5sT8(I&|~zd7&RG zQ}MiFt#=r}P7=WvGdw9?6eFB z!19fJqqcPa9`j?FZy$Ivv!$X{#QoiBm!|C`O6%5YNWH4ra6unYs;?lq)0e%{ecd=Ip!*f>(!j3inB$~>{jr#AD#&9oWA~@~ zTa-KDozy_;w5rQKmm{{G$B{*}W&n#_hBO%y`8=H@JV| zI2Qdxv${(qc$W)_Mg0(^yS3H zGzoTlO@J71^oA!~8CZ_JxWGrc;q01N>`%atQGztFOG3*nurqL3LWwnTS;DaLFiFFX zEodI%423*MBsh7(eH8i`fD!kAQA+UrgUntWz9%9_NJ5Gz4-plXB^E@S%A zh@sP>C4}@Z6Fx-6=tKOUxFO+&U~XgZ`4WmD1z{Xu1TIUs@w8&>WB7!3^ky&PyNR~q z?W44W8TWo%W;rr;V{An>A*ex_33KY5T4q0@c4KaRV1mz$;@?-iOiYMQ5gyx1>qg%i z(v*6xyw(35eJj*Mif0zhJM58#=q!437?%ZT7F95ewhp-pW3Sif6W(;llm*%L1CBoI zIvUR~n>>`paKTU5Mo&QY4^;YyKVg!G%URH4h602!IFXP)A#H~H<>AB8JbF1bacsk= zfGDaMQ+e3BVc63b96hQ(=c6fZnh1`bN=OVXrDgkB4Pm@#^u+qHtQ3r6Ra#5+14Faw zb+yHwAx{vuwf~&nKBj+qQ{94_P+j1@i#Jd59LYYxes#l(dr5M2*UvSUPrO(CMn-08Rcy6oW$G8l zNv`n2Ck|{zD<=h4xklBH1!p|tVZl1uW+KUjqrF0Avle}}%R05IIe2qjwKMhCF>l#i zA-1INWpfp>LWQ=hUn5h&>Di^i`J{6n$LuI9rY`DYX9o@5nRA;4l;~xc!ng-T%!jz` zde$#<^gPfy!c0ek!cSKmz41EIOcPF5TlPzG<^}!6xR*2aZ{DG}_JeZu4qT#HeJWR@hh4!F-nrU77#+zAkxjGXtt84x9YkNp z5Be6n6VBh=9-k)D9h6-lUx?alSWk~LIEOsyRhEF`*Gn<~kem{K=`=iki!19PH)ahU zz;94+ixL}qy{df56ePROJMdbzP=l?y?2hSH++W#Y&?$GI?VPhlbG(6KHg@0Uf?s(! zWot|GMP%2InVqYWe(TdY$>V@mT?O|q2kZFms`nvPLu$@gK|drV8rk3@7kGh^jSk!X z=eX1K0?T;o_Xfo%``Q6~?`}%d)4pAa&i2&#dRuH8pIdI1=^WaNYAi{dMFy`#QaBs* zxIDYenyPHquQ6C`t19fOw%LIW4aSm3g@s04pYHB$j%A8hdfR@C+nLf!CEKw1@x?)> zR5eFeTkN^CmQ;}0LD_zls%w-e+ajdJ@FPp1RPBW0q;GJJ@kX`F$@@9AdX}%ER`Rqw z{%?rvY02%O;+T553-T97K_AORDvRm3M1!WkXmH)z87X^@lL|8P%;;>Kzvt0=As+q( zb_2LuRCayOn5%i`Jm^%P8b%g*=6QCc%j~89!n%A!hxw`NKJHTiz0D2fdt05zmV$+p z^ba>`wg#ZLVxwOdc;d5I*yIH&9JPC1QC8jA*m&vddAu=sN>^3kSzH>O@~~3VeWV@R zuy*}~Go9DgJEm0f(*Ej;l&F)#iQ#}UA+`6c&<3PbU z!r}Csv0?X-yxgWdz~wYX`96fJ2J@8SO1i!xW`>4LU<|2thfKh(UC58OL2t35WczSv zjH#_@;apKlm@y2!v&9ApiFoX!m$O-QajSba4Gv>Dw3`-9{hNtQ{)Zb zig}J`yrZh3$B$9sY;O;T%U3;!vTc=96~=^+x5* z`84IaRh>&5rn*aq>D*a8K;QRc8CwNW7P67!S#L&V?la49XitEfPYc*-H>4H^`fabPkv4FAziCLNI9Xd#Z^U;j8{*-!Cj@C$ zr5h!@Y8K2J8gs%2eN#MIp&L>qxMBL_`sD^MsBo#Ez5-Yrpv3T!M&7t^0G$)6=YGz} z`Wgumz`Wpk)`8EK`PkE7S5Ad?Pwv7VM7H)ZiW#QzB@_ejnGur{7vJFF3CFm-))-xD z1e4b)O@DmJ=)}-?&-eT>H=UQ};sy`K^zM}F*RzMLQ+=r9s~X<3xcav_U!BhR*$rp$zJG&iob^qj0|LctEjmn;JHM3ix#aqYFL&sJ{nvW=eC ztVHPETowQ>qt+7>dhFf6bV2tV;Oor)d;HJ5|NNnj9gG1qNkI%Y-Hs4n)2WDsQ z0CFaeR|nk`Ruqa_EY_>dbejbIfP2CUn^rs%A7KOIGP3i}Kh9XUaAcT#Rvscy$+l_E zvbK^SUQPG+Kzu%>gB2ZxKUMZGz&o1vo{J;0A$T)tj{(Q8aJ(`&>c9x!Qp;U-*u|I= zJG3>qz0ONb|59kwY&*rjb|8QM@uhF9oZUK~^)cc2F{#}7-FvPK9}{Bq=nMarBbB$l z>l-hw7ZP%V;a-^3sgW>Ag7>ijer-{?3f0QOG=c^{Z}Iuf(f24f4BY_Lcg^Sk*COx7~OV2jl7t^Vd_YzpdwcSA35TeHEuf63kaiHo0yT`(A1B@=*FFo&bWnIR@&)Xy(JS+{W8 z!>V5`C5eq{3w3D1I;W4cF=NW|d1Hl&xOx>DMrW4F#&6hQmj#_e3h{W#`f<)?nl&WZ zDfa`$)#oD>1D3j$MfLmyPX*zUJ?fB?Mni!NGf8!Eio@?odaYewP9EPo`93wFvhORS zW*AkIowICJdesr%O2Fj}Q4i)FX+F^>&$~S-EFVIFiM5;J{vP>B2I&OG{gMeMezxj{PSOT6JNM3v zkp;bxw-L`k+!Tr%6n(Aqp2Su5!%#l=Kdx5VDJM{W#36j%7c&bDBhl`=r3*UBzpu1< z4GlY{>posF2#BT4wG^L?tdUy`Hs31QxsxQf?znid&iAu4?uWH%D(?o3y^N+_7R`3D8D3n+)|af8?oPePHgfuukY$jg z^;IwR`1NAauBu|Zz(Y$NlDFmf_vJoKysSObLwB0_J2xwiO)e*^UsTV}S;CbIC-6#` znGa|@>Mvf7Q4P%xjyJu&`@0f^rN}E;$<-`w1UK&dr z1|?K~Gex+AATozr+h_mxN5ts*PzmF zyUc0`S~08g^}Ili+tF5&3e~$;bSLAG+!HPbPPRIZAd`_?)A z#`CblhreVSO5mAGl;$YBJ;quaR?8^kZc1<~Zna`DHgR<5+cfILm#PR}Rh<8Dr-o~gmpb>;IC zs{N7X^+{4!M-vwdyMCP*zhdyz=?9K?xh@Yy$`@-)V}GhrYwEw(7LgjIofr2 zV96jT6!ccU^7|RYp=s)^W!*!5$F8Zzfr0amKx%#}F^5<`-SAR6^JKxSD)}ZOS3x7_ zeknojn7i<`9uBA?5X~+yJEa6(#xeaG{Bn)euX({a$u?efb$sEpXt#A+Rw^|nEC_6& zU{#aBzRemSy>^9KQq0_2QXCJ;1ctJ7d#H+)E6ssRq;@1R_U`ZVT21ucc!x!}N=sqn$0jvPe&p^Je32=W14`;Yj~<%T(|1MpJVY>%3FRu;+xN6wxss=B_Lal85#2uPpH4hXXn62h&PzR`mqLiQ zy>b3&U7|s+uuOo9P0+{ML;^Yz=LPg0#CwTIfU#6?1`HAiQ$U#)WTP^T=Oc7TR$ zUN^K}l^?FY>9tY7p;$8G4ytu~G-S>OykkzoLbE+)e68|HD_HO()rhvSjPv?XgFkS$ z%!41?{%AMmbZWHM2#XowF#LB<0 zaq9KCehln<{`S~GWa{0q%Gevw=GzKhESC7ODxq6t3etocnk}lGTAaySg-!TZK^~8x zBAQaOcn+wN9Xvx*2RNU*MzfJik#R`JHmK{h5}>U5dfaokc=nt-fn!>fo}FO%d7#V89)mxFES-|apeR7fb1|qi2PDya4yd z7@Su5+texBPutbc^%n#yKbB1!uU3mmE-F>HPO;Pnj1;^L&&+htwyj73OP{nC!AaRb zhNJ4xdXnO|25iIhgD>3V<5yVYr%JLG_~k8W-^y`DA6iU4NyTX>5XQ+Lox{1$S=w<& z*TWB1H6lJtvECfF#pv-_4T$LG4SD;iP;9F1N-L;A_FAQfNc>_Y(86RtPgi6)J3Sny zqT75XM90HqhfS4tjP{2wmaF~{M~l+Z#2xvLl|=b5ykCHD>+%Gbz>7Ze_0~&IdaSX5 z=e}!7IN{WG?Y=V5gHL;&zR6+6TLV?w#Z!H?4ZFr(ER{bdExQJ*CMc`X**2|BEaUX6 zLDa>csZ^Y`ouRDymofB1W!3AYsf#(p6mM366-(ViMejA;y+rJwBrQmw32C)KY=l~25x*2X>5H~+S z%M0S}`2v8*!uXxg;p_RYPJDl*Q#}4P?%(jQjEY|xm&dXqd_Z1dpa6)M56CCP3pN4* zSrPBQTmB_9d;B-_m!8e|Z;9Jqi8>e_(vVh}HiC;|C&CYyXLX_&^9}_)qM2=^q$~ABfN<{iB@#@W18& z@%@r4{bxH6NZ`LQFhXqi&vt_U!(On!f3@T1`=zw|k2!b|TlGIMgsAVo+6n!0&AbSA z`{%wOF#dn;3j!1V=UNcw2K={k^K^$GbX@Mg^TBi+ULafuA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/routerlicious/packages/services-client/src/test/jest/assets/book.xml b/server/routerlicious/packages/services-client/src/test/jest/assets/book.xml new file mode 100644 index 000000000000..64056b04956f --- /dev/null +++ b/server/routerlicious/packages/services-client/src/test/jest/assets/book.xml @@ -0,0 +1,119 @@ + + + Gambardella, Matthew + XML Developer's Guide + Computer + 44.95 + 2000-10-01 + An in-depth look at creating applications + with XML. + + + Ralls, Kim + Midnight Rain + Fantasy + 5.95 + 2000-12-16 + A former architect battles corporate zombies, + an evil sorceress, and her own childhood to become queen + of the world. + + + Corets, Eva + Maeve Ascendant + Fantasy + 5.95 + 2000-11-17 + After the collapse of a nanotechnology + society in England, the young survivors lay the + foundation for a new society. + + + Corets, Eva + Oberon's Legacy + Fantasy + 5.95 + 2001-03-10 + In post-apocalypse England, the mysterious + agent known only as Oberon helps to create a new life + for the inhabitants of London. Sequel to Maeve + Ascendant. + + + Corets, Eva + The Sundered Grail + Fantasy + 5.95 + 2001-09-10 + The two daughters of Maeve, half-sisters, + battle one another for control of England. Sequel to + Oberon's Legacy. + + + Randall, Cynthia + Lover Birds + Romance + 4.95 + 2000-09-02 + When Carla meets Paul at an ornithology + conference, tempers fly as feathers get ruffled. + + + Thurman, Paula + Splish Splash + Romance + 4.95 + 2000-11-02 + A deep sea diver finds true love twenty + thousand leagues beneath the sea. + + + Knorr, Stefan + Creepy Crawlies + Horror + 4.95 + 2000-12-06 + An anthology of horror stories about roaches, + centipedes, scorpions and other insects. + + + Kress, Peter + Paradox Lost + Science Fiction + 6.95 + 2000-11-02 + After an inadvertant trip through a Heisenberg + Uncertainty Device, James Salway discovers the problems + of being quantum. + + + O'Brien, Tim + Microsoft .NET: The Programming Bible + Computer + 36.95 + 2000-12-09 + Microsoft's .NET initiative is explored in + detail in this deep programmer's reference. + + + O'Brien, Tim + MSXML3: A Comprehensive Guide + Computer + 36.95 + 2000-12-01 + The Microsoft MSXML3 parser is covered in + detail, with attention to XML DOM interfaces, XSLT processing, + SAX and more. + + + Galos, Mike + Visual Studio 7: A Comprehensive Guide + Computer + 49.95 + 2001-04-16 + Microsoft Visual Studio 7 is explored in depth, + looking at how Visual Basic, Visual C++, C#, and ASP+ are + integrated into a comprehensive development + environment. + + \ No newline at end of file diff --git a/server/routerlicious/packages/services-client/src/test/jest/assets/grid.gif b/server/routerlicious/packages/services-client/src/test/jest/assets/grid.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7d63376bbcb05d0a6fa749594048c8ce6be23fb GIT binary patch literal 9137 zcmd^Ce{2&~9RIw>-PT_QG431QP zvakQg;WtjzMP|S9n7?iLe0=QfU7=RAtF&EfD}t($pna@HrFy3%ph-d*)Vn_B9G~J= z-6|D7{meg_%c2O<1XKe!RH|znLgVDxn1%!iCdkU3m>goCwGO`jK=j_NO=uhX^3|nY z{Pe~1M`(BS`&#%&Sc=R@JqRC6K*G>9+7Qu(bdGF-sU>r59n47*F6M;Rq!CGA6qVAz znSq)nsB&);q&2;b@I?7DD1EQ9rqTdu{6x z>uHh8DCbtZ#CzY^{AExAA1qi8Bsa-8J-iN2Bp;WNF8*=~fst(8W%1cFRxUX)@^sD7 zW3?m47ES-|^WP~^tqTJ4YveK$`L*#VcK>%L!!n*rioJbq3&BgTd9@^GTw_H}$I4|U zisCN?|5N8S6CBuY!lxJ3@2tCOj|!t%t7BhKM$#b7T_~2$|bn zN6Zg}>J3Jb&>`Og>|OPYgDw8!YX_?vmaw*t*k1v+Z&FGYe5w<9{^x&x*DQf$ zPF*_PxwiT8*{)}kFPa5(b7d3Sj(R^l4#-q&tx+hnFtj>B{GFv17ZxB_MgpP)K&JYB)e)_Tt!Q14#N@#ooh z5c>9ZlIOS=Mj-g)9vuZy9HFk26vv|y;?-3MUzlNIPjdYcnRbKNu(Qk<1*0_MDkhPe s>n@H(`~Rtg@X{{%V*v$z}6m&0B8Lwm(mGn;B)hSOJ#)4?&}?Q2+n{ literal 0 HcmV?d00001 diff --git a/server/routerlicious/packages/services-client/src/test/jest/buffer.spec.ts b/server/routerlicious/packages/services-client/src/test/jest/buffer.spec.ts new file mode 100644 index 000000000000..d0256f899b83 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/test/jest/buffer.spec.ts @@ -0,0 +1,263 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import * as BufferBrowser from "../../common-utils/bufferBrowser"; +import * as BufferNode from "../../common-utils/bufferNode"; + +describe("Buffer isomorphism", () => { + test("from string utf-8/16 is compatible", () => { + const testArray = [ + "", + "asdfasdf", // ascii range + "比特币", // non-ascii range + "😂💁🏼‍♂️💁🏼‍💁‍♂", // surrogate pairs with glyph modifiers + "\u0080\u0080", // invalid sequence of utf-8 continuation codes + "\uD800", // single utf-16 surrogate without pair + "\u2962\u0000\uFFFF\uAAAA", // garbage + ]; + + for (const item of testArray) { + const nodeBuffer = BufferNode.IsoBuffer.from(item); + const browserBuffer = BufferBrowser.IsoBuffer.from(item); + + expect(nodeBuffer.toString()).toEqual(browserBuffer.toString()); + } + + { + const nodeBuffer = BufferNode.IsoBuffer.from(testArray[1]); + const browserBuffer = BufferBrowser.IsoBuffer.from(testArray[1]); + expect(nodeBuffer.toString("utf8")).toEqual(browserBuffer.toString("utf8")); + expect(nodeBuffer.toString("utf-8")).toEqual(browserBuffer.toString("utf-8")); + } + }); + + test("from string base64 is compatible", () => { + const testArray = [ + "", + "aa_/-", + "a==", + "a=======", + "äa=bb==cc==", + "Not A Base64 String 🤪", + "YXNkZmFzZGY=", // asdfasdf + "5q+U54m55biB", // 比特币 + "8J+YgvCfkoHwn4+84oCN4pmC77iP8J+SgfCfj7zigI3wn5KB4oCN4pmC", // 😂💁🏼‍♂️💁🏼‍💁‍♂ + ]; + + for (const item of testArray) { + const nodeBuffer = BufferNode.IsoBuffer.from(item, "base64"); + const browserBuffer = BufferBrowser.IsoBuffer.from(item, "base64"); + + expect(nodeBuffer.toString("base64")).toEqual(browserBuffer.toString("base64")); + } + }); + + test("from arraybuffer is compatible", () => { + const testArray = [ + "", + "asdfasdf", // ascii range + "比特币", // non-ascii range + "😂💁🏼‍♂️💁🏼‍💁‍♂", // surrogate pairs with glyph modifiers + ]; + + for (const item of testArray) { + const encoded = new TextEncoder().encode(item).buffer; + const nodeBuffer = BufferNode.IsoBuffer.from(encoded); + const browserBuffer = BufferBrowser.IsoBuffer.from(encoded); + + expect(nodeBuffer.toString()).toEqual(browserBuffer.toString()); + } + }); + + test("utf8 base64 conversion is compatible", () => { + const testArrayUtf8 = [ + "", + "asdfasdf", // ascii range + "比特币", // non-ascii range + "😂💁🏼‍♂️💁🏼‍💁‍♂", // surrogate pairs with glyph modifiers + ]; + + const testArrayBase64 = [ + "", + "YXNkZmFzZGY=", // asdfasdf + "5q+U54m55biB", // 比特币 + "8J+YgvCfkoHwn4+84oCN4pmC77iP8J+SgfCfj7zigI3wn5KB4oCN4pmC", // 😂💁🏼‍♂️💁🏼‍💁‍♂ + ]; + + for (let i = 0; i < testArrayUtf8.length; i++) { + const nodeBuffer1 = BufferNode.IsoBuffer.from(testArrayUtf8[i]); + expect(nodeBuffer1.toString("base64")).toEqual(testArrayBase64[i]); + + const nodeBuffer2 = BufferNode.IsoBuffer.from(nodeBuffer1.toString("base64"), "base64"); + expect(nodeBuffer2.toString()).toEqual(testArrayUtf8[i]); + + const browserBuffer1 = BufferBrowser.IsoBuffer.from(testArrayUtf8[i]); + expect(browserBuffer1.toString("base64")).toEqual(testArrayBase64[i]); + + const browserBuffer2 = BufferBrowser.IsoBuffer.from( + browserBuffer1.toString("base64"), + "base64", + ); + expect(browserBuffer2.toString()).toEqual(testArrayUtf8[i]); + } + }); + + test("bytelength is compatible", () => { + const testString = "8J+YgvCfkoHwn4+84oCN4pmC77iP8J+SgfCfj7zigI3wn5KB4oCN4pmC"; + + const nodeBufferUtf8 = BufferNode.IsoBuffer.from(testString); + const browserBufferUtf8 = BufferBrowser.IsoBuffer.from(testString); + expect(nodeBufferUtf8.byteLength).toEqual(browserBufferUtf8.byteLength); + + const nodeBufferBase64 = BufferNode.IsoBuffer.from(testString, "base64"); + const browserBufferBase64 = BufferBrowser.IsoBuffer.from(testString, "base64"); + expect(nodeBufferBase64.byteLength).toEqual(browserBufferBase64.byteLength); + }); + + test("Views are supported", () => { + const testArray = [ + "", + "asdfasdf", // ascii range + "比特币", // non-ascii range + "😂💁🏼‍♂️💁🏼‍💁‍♂", // surrogate pairs with glyph modifiers + ]; + + for (const item of testArray) { + const encoded = new TextEncoder().encode(`aa${item}bb`).buffer; + const view = new Uint8Array(encoded, 2, encoded.byteLength - 4); + const nodeBuffer = BufferNode.IsoBuffer.from(view); + const browserBuffer = BufferBrowser.IsoBuffer.from(view); + + expect(nodeBuffer.toString()).toEqual(browserBuffer.toString()); + + const encodedWithoutView = new TextEncoder().encode(item).buffer; + const nodeBufferWithoutView = BufferNode.IsoBuffer.from(encodedWithoutView); + const browserBufferWithoutView = BufferNode.IsoBuffer.from(encodedWithoutView); + + expect(nodeBufferWithoutView.toString("base64")).toEqual(nodeBuffer.toString("base64")); + expect(browserBufferWithoutView.toString("base64")).toEqual( + browserBuffer.toString("base64"), + ); + + expect(nodeBufferWithoutView.toString("utf8")).toEqual(nodeBuffer.toString("utf8")); + expect(browserBufferWithoutView.toString("utf8")).toEqual( + browserBuffer.toString("utf8"), + ); + + expect(nodeBufferWithoutView.byteLength).toEqual(nodeBuffer.byteLength); + expect(browserBufferWithoutView.byteLength).toEqual(browserBuffer.byteLength); + + expect(BufferNode.bufferToString(nodeBufferWithoutView, "base64")).toEqual( + BufferNode.bufferToString(nodeBuffer, "base64"), + ); + expect(BufferBrowser.bufferToString(browserBufferWithoutView, "base64")).toEqual( + BufferBrowser.bufferToString(browserBuffer, "base64"), + ); + + expect(BufferNode.bufferToString(nodeBufferWithoutView, "utf8")).toEqual( + BufferNode.bufferToString(nodeBuffer, "utf8"), + ); + expect(BufferBrowser.bufferToString(browserBufferWithoutView, "utf8")).toEqual( + BufferBrowser.bufferToString(browserBuffer, "utf8"), + ); + } + }); + + test("Ranges parameters are ignored when passing views", () => { + const testArray = [ + "", // The specified view lies outside of the string + "abcdefg", // The specified view lies within the string + ]; + + for (const item of testArray) { + const encoded = new TextEncoder().encode(`aa${item}bb`).buffer; + + const uint8View = new Uint8Array(encoded, 2, encoded.byteLength - 4); + + const fullBuffer = BufferNode.IsoBuffer.from(uint8View); + + const subsetUInt8ViewNode = BufferNode.IsoBuffer.from(uint8View, 2, 4); + const subsetFullBufferNode = BufferNode.IsoBuffer.from(fullBuffer, 2, 4); + expect(fullBuffer.toString()).toEqual(subsetUInt8ViewNode.toString()); + expect(fullBuffer.toString()).toEqual(subsetFullBufferNode.toString()); + + const subsetUInt8ViewBrowser = BufferBrowser.IsoBuffer.from(uint8View, 2, 4); + const subsetFullBufferBrowser = BufferBrowser.IsoBuffer.from(fullBuffer, 2, 4); + expect(fullBuffer.toString()).toEqual(subsetUInt8ViewBrowser.toString()); + expect(fullBuffer.toString()).toEqual(subsetFullBufferBrowser.toString()); + } + }); + + test("Uint8ArrayToString is compatible", () => { + const testArray = new Uint8Array([1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]); + + const nodeStringUtf8 = BufferNode.Uint8ArrayToString(testArray, "utf8"); + const browserStringUtf8 = BufferBrowser.Uint8ArrayToString(testArray, "utf8"); + expect(nodeStringUtf8).toEqual(browserStringUtf8); + + const nodeStringBase64 = BufferNode.Uint8ArrayToString(testArray, "base64"); + const browserStringBase64 = BufferBrowser.Uint8ArrayToString(testArray, "base64"); + expect(nodeStringBase64).toEqual(browserStringBase64); + }); + + test("stringToBuffer is compatible", () => { + const test = "hello"; + const nodeBufferUtf8 = BufferNode.stringToBuffer(test, "utf8"); + const browserBufferUtf8 = BufferBrowser.stringToBuffer(test, "utf8"); + expect(nodeBufferUtf8).toEqual(browserBufferUtf8); + + const nodeBufferBase64 = BufferNode.stringToBuffer(test, "base64"); + const browserBufferBase64 = BufferBrowser.stringToBuffer(test, "base64"); + expect(nodeBufferBase64).toEqual(browserBufferBase64); + }); + + test("bufferToString with utf8 encoding is compatible", () => { + const test = "hello"; + const nodeBufferUtf8 = BufferNode.stringToBuffer(test, "utf8"); + const browserBufferUtf8 = BufferBrowser.stringToBuffer(test, "utf8"); + + const nodeStringUtf8 = BufferNode.bufferToString(nodeBufferUtf8, "utf8"); + const browserStringUtf8 = BufferBrowser.bufferToString(browserBufferUtf8, "utf8"); + expect(nodeStringUtf8).toEqual(browserStringUtf8); + expect(nodeStringUtf8).toEqual(test); + expect(browserStringUtf8).toEqual(test); + + const nodeStringBase64 = BufferNode.bufferToString(nodeBufferUtf8, "base64"); + const browserStringBase64 = BufferBrowser.bufferToString(browserBufferUtf8, "base64"); + expect(nodeStringBase64).toEqual(browserStringBase64); + expect(nodeStringBase64).toEqual("aGVsbG8="); + expect(browserStringBase64).toEqual("aGVsbG8="); + }); + + test("bufferToString with base64 encoding is compatible", () => { + const test = "aGVsbG90aGVyZQ=="; + const nodeBufferBase64 = BufferNode.stringToBuffer(test, "base64"); + const browserBufferBase64 = BufferBrowser.stringToBuffer(test, "base64"); + + const nodeStringBase64 = BufferNode.bufferToString(nodeBufferBase64, "base64"); + const browserStringBase64 = BufferBrowser.bufferToString(browserBufferBase64, "base64"); + expect(nodeStringBase64).toEqual(browserStringBase64); + expect(nodeStringBase64).toEqual(test); + expect(browserStringBase64).toEqual(test); + + const nodeStringUtf8 = BufferNode.bufferToString(nodeBufferBase64, "utf8"); + const browserStringUtf8 = BufferBrowser.bufferToString(browserBufferBase64, "utf8"); + expect(nodeStringUtf8).toEqual(browserStringUtf8); + expect(nodeStringUtf8).toEqual("hellothere"); + expect(browserStringUtf8).toEqual("hellothere"); + }); + + test("bufferToString working with IsoBuffer", () => { + const test = "aGVsbG90aGVyZQ=="; + + const buffer = BufferBrowser.IsoBuffer.from(test, "base64"); + expect(BufferBrowser.bufferToString(buffer, "base64")).toEqual(test); + expect(BufferBrowser.bufferToString(buffer, "utf-8")).toEqual("hellothere"); + + const buffer2 = BufferNode.IsoBuffer.from(test, "base64"); + expect(BufferNode.bufferToString(buffer2, "base64")).toEqual(test); + expect(BufferNode.bufferToString(buffer2, "utf-8")).toEqual("hellothere"); + }); +}); diff --git a/server/routerlicious/packages/services-client/src/test/jest/gitHash.spec.ts b/server/routerlicious/packages/services-client/src/test/jest/gitHash.spec.ts new file mode 100644 index 000000000000..6e4a5abeefe0 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/test/jest/gitHash.spec.ts @@ -0,0 +1,215 @@ +/*! + * Copyright (c) Microsoft Corporation and contributors. All rights reserved. + * Licensed under the MIT License. + */ + +import fs from "fs"; +import http from "http"; +import { AddressInfo } from "net"; +import path from "path"; + +import rewire from "rewire"; + +import * as HashNode from "../../common-utils/hashFileNode"; + +// Use rewire to access private functions +const HashBrowser = rewire("../../common-utils/hashFileBrowser"); + +async function getFileContents(p: string): Promise { + return new Promise((resolve, reject) => { + fs.readFile(p, (error, data) => { + if (error) { + reject(error); + } + resolve(data); + }); + }); +} + +const dataDir = "../../../src/test/jest"; + +async function evaluateBrowserHash( + page, + file: Buffer, + algorithm: "SHA-1" | "SHA-256" = "SHA-1", + hashEncoding: "hex" | "base64" = "hex", +): Promise { + // convert the file to a string to pass into page.evaluate because + // Buffer/Uint8Array are not directly jsonable + const fileCharCodeString = Array.prototype.map + .call(file, (byte) => { + return String.fromCharCode(byte); + }) + .join(""); + + // puppeteer has issues with calling crypto through page.exposeFunction but not directly, + // so pull in the function as a string and eval it directly instead + // there are also issues around nested function calls when using page.exposeFunction, so + // do only the crypto.subtle part in page.evaluate and do the other half outside + const browserHashFn = HashBrowser.__get__("digestBuffer").toString(); + const hashCharCodeString = await (page.evaluate( + async (fn, f, alg) => { + // convert back into Uint8Array + const fileCharCodes = Array.prototype.map.call([...f], (char) => { + return char.charCodeAt(0) as number; + }) as number[]; + const fileUint8 = Uint8Array.from(fileCharCodes); + + // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func + const hashFn = new Function(`"use strict"; return ( ${fn} );`); + const pageHashArray = await (hashFn()(fileUint8, alg) as Promise); + + // Similarly, return the hash array as a string instead of a Uint8Array + return Array.prototype.map + .call(pageHashArray, (byte) => { + return String.fromCharCode(byte); + }) + .join(""); + }, + browserHashFn, + fileCharCodeString, + algorithm, + ) as Promise); + + // reconstruct the Uint8Array from the string + const charCodes = Array.prototype.map.call([...hashCharCodeString], (char) => { + return char.charCodeAt(0) as number; + }) as number[]; + const hashArray = Uint8Array.from(charCodes); + return HashBrowser.__get__("encodeDigest")(hashArray, hashEncoding) as string; +} + +/** + * Same as evaluateBrowserHash above except prepends the + * `blob ${size.toString()}${String.fromCharCode(0)}` prefix for git + * */ +async function evaluateBrowserGitHash(page, file: Buffer): Promise { + // Add the prefix for git hashing + const size = file.byteLength; + const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; + const prefixBuffer = Buffer.from(filePrefix, "utf-8"); + const hashBuffer = Buffer.concat([prefixBuffer, file], prefixBuffer.length + file.length); + return evaluateBrowserHash(page, hashBuffer); +} + +describe("Common-Utils", () => { + let xmlFile: Buffer; + let svgFile: Buffer; + let pdfFile: Buffer; + let gifFile: Buffer; + + let server: http.Server; + + beforeAll(async () => { + // crypto is only available in secure contexts (https pages) or localhost, + // so start a basic server to make this available + server = http.createServer((req, res) => { + res.statusCode = 200; + res.setHeader("Content-Type", "text/plain"); + res.end("basic test server"); + }); + + await new Promise((resolve) => { + server.listen(0, "localhost"); + server.on("listening", () => { + resolve(); + }); + server.on("error", (err) => { + throw err; + }); + }); + + // Since we're listening on an http port, address() will return an AddressInfo and not just a string + const port: number = (server.address() as AddressInfo).port; + + // Navigate to the local test server so crypto is available + await page.goto(`http://localhost:${port}`, { waitUntil: "load", timeout: 0 }); + + xmlFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/book.xml`)); + svgFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/bindy.svg`)); + pdfFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/aka.pdf`)); + gifFile = await getFileContents(path.join(__dirname, `${dataDir}/assets/grid.gif`)); + }); + + afterAll(async () => { + await new Promise((resolve) => { + server.close(resolve); + // Puppeteer may have lingering connections which prevents the server from closing otherwise. + server.closeAllConnections(); + }); + }); + + // Expected hashes are from git hash-object file... + // Make sure the hash is of the file and not of an LFS stub + describe("gitHashFile", () => { + test("XML should Hash", async () => { + const expectedHash = "64056b04956fb446b4014cb8d159d2e2494ed0fc"; + const hashNode = await HashNode.gitHashFile(xmlFile); + const hashBrowser = await evaluateBrowserGitHash(page, xmlFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("SVG should Hash", async () => { + const expectedHash = "c741e46ae4a5f1ca19debf0ac609aabc5fe94add"; + const hashNode = await HashNode.gitHashFile(svgFile); + const hashBrowser = await evaluateBrowserGitHash(page, svgFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("AKA PDF should Hash", async () => { + const expectedHash = "f3423703f542852aa7f3d1a13e73f0de0d8c9c0f"; + const hashNode = await HashNode.gitHashFile(pdfFile); + const hashBrowser = await evaluateBrowserGitHash(page, pdfFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("Grid GIF should Hash", async () => { + const expectedHash = "a7d63376bbcb05d0a6fa749594048c8ce6be23fb"; + const hashNode = await HashNode.gitHashFile(gifFile); + const hashBrowser = await evaluateBrowserGitHash(page, gifFile); + + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("Hash is consistent", async () => { + const hash1Node = await HashNode.gitHashFile(svgFile); + const hash2Node = await HashNode.gitHashFile(svgFile); + expect(hash1Node).toEqual(hash2Node); + + const hash1Browser = await evaluateBrowserGitHash(page, svgFile); + const hash2Browser = await evaluateBrowserGitHash(page, svgFile); + expect(hash1Browser).toEqual(hash2Browser); + }); + }); + + describe("hashFile", () => { + test("SHA256 hashes match", async () => { + const expectedHash = "9b8abd0b90324ffce0b6a9630e5c4301972c364ed9aeb7e7329e424a4ae8a630"; + const hashNode = await HashNode.hashFile(svgFile, "SHA-256"); + const hashBrowser = await evaluateBrowserHash(page, svgFile, "SHA-256"); + expect(hashNode).toEqual(expectedHash); + expect(hashBrowser).toEqual(expectedHash); + }); + + test("base64 encoded hashes match", async () => { + const expectedHash1 = "4/nXhjtBQhhvXTNNSNq/cJgb4sQ="; + const hashNode1 = await HashNode.hashFile(xmlFile, "SHA-1", "base64"); + const hashBrowser1 = await evaluateBrowserHash(page, xmlFile, "SHA-1", "base64"); + expect(hashNode1).toEqual(expectedHash1); + expect(hashBrowser1).toEqual(expectedHash1); + + const expectedHash256 = "QPQh34aj1TNmyo34aPDA0vMIU7r5QC/6KNgIzlLYiFY="; + const hashNode256 = await HashNode.hashFile(pdfFile, "SHA-256", "base64"); + const hashBrowser256 = await evaluateBrowserHash(page, pdfFile, "SHA-256", "base64"); + expect(hashNode256).toEqual(expectedHash256); + expect(hashBrowser256).toEqual(expectedHash256); + }); + }); +}); diff --git a/server/routerlicious/packages/services-client/src/test/jest/tsconfig.json b/server/routerlicious/packages/services-client/src/test/jest/tsconfig.json new file mode 100644 index 000000000000..ff245ff25523 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/test/jest/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "../../../dist/test/jest", + "types": ["jest", "jest-environment-puppeteer", "node", "puppeteer"], + "declaration": false, + "declarationMap": false, + }, + "include": ["./**/*"], + "references": [ + { + "path": "../../..", + }, + ], +} diff --git a/server/routerlicious/packages/services-client/src/test/array.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/array.spec.ts similarity index 99% rename from server/routerlicious/packages/services-client/src/test/array.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/array.spec.ts index e4014ac38daa..8656e6920c3f 100644 --- a/server/routerlicious/packages/services-client/src/test/array.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/array.spec.ts @@ -9,7 +9,7 @@ import { dedupeSortedArray, mergeKArrays, mergeSortedArrays, -} from "../array"; +} from "../../array"; describe("convertToRanges", () => { it("Should return empty array if input is empty", () => { diff --git a/server/routerlicious/packages/services-client/src/test/assert.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/assert.spec.ts similarity index 93% rename from server/routerlicious/packages/services-client/src/test/assert.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/assert.spec.ts index 12140b3bce1d..2b632d406524 100644 --- a/server/routerlicious/packages/services-client/src/test/assert.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/assert.spec.ts @@ -5,7 +5,7 @@ import { strict } from "assert"; -import { assert } from "../assert"; +import { assert } from "../../assert"; describe("Assert", () => { it("Validate Shortcode Format", async () => { diff --git a/server/routerlicious/packages/services-client/src/test/basicRestwrapper.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/basicRestwrapper.spec.ts similarity index 99% rename from server/routerlicious/packages/services-client/src/test/basicRestwrapper.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/basicRestwrapper.spec.ts index 4dbfb4ff712d..e01fefb95a6e 100644 --- a/server/routerlicious/packages/services-client/src/test/basicRestwrapper.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/basicRestwrapper.spec.ts @@ -7,8 +7,8 @@ import { strict as assert } from "assert"; import Axios, { AxiosHeaders } from "axios"; import { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; import AxiosMockAdapter from "axios-mock-adapter"; -import { CorrelationIdHeaderName } from "../constants"; -import { BasicRestWrapper } from "../restWrapper"; +import { CorrelationIdHeaderName } from "../../constants"; +import { BasicRestWrapper } from "../../restWrapper"; import { KJUR as jsrsasign } from "jsrsasign"; import { jwtDecode } from "jwt-decode"; diff --git a/server/routerlicious/packages/services-client/src/test/generateNames.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/generateNames.spec.ts similarity index 94% rename from server/routerlicious/packages/services-client/src/test/generateNames.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/generateNames.spec.ts index 14a1661c0f38..dff520f6af84 100644 --- a/server/routerlicious/packages/services-client/src/test/generateNames.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/generateNames.spec.ts @@ -5,7 +5,7 @@ import { strict as assert } from "assert"; -import { getRandomName, choose } from "../generateNames"; +import { getRandomName, choose } from "../../generateNames"; describe("DockerNames", () => { describe("getRandomName", () => { diff --git a/server/routerlicious/packages/services-client/src/test/heap.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/heap.spec.ts similarity index 97% rename from server/routerlicious/packages/services-client/src/test/heap.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/heap.spec.ts index a6f3d2446587..9b9d73083b34 100644 --- a/server/routerlicious/packages/services-client/src/test/heap.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/heap.spec.ts @@ -4,7 +4,7 @@ */ import { strict as assert } from "assert"; -import { Heap } from "../heap"; +import { Heap } from "../../heap"; interface TestObject { value: number; diff --git a/server/routerlicious/packages/services-client/src/test/historian.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/historian.spec.ts similarity index 98% rename from server/routerlicious/packages/services-client/src/test/historian.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/historian.spec.ts index 413ed877cf0e..317ec3846f49 100644 --- a/server/routerlicious/packages/services-client/src/test/historian.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/historian.spec.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. */ -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import * as git from "@fluidframework/gitresources"; import assert from "assert"; import Axios, { AxiosRequestConfig } from "axios"; import AxiosMockAdapter from "axios-mock-adapter"; -import { Historian, ICredentials, getAuthorizationTokenFromCredentials } from "../historian"; -import { BasicRestWrapper, RestWrapper } from "../restWrapper"; -import { IWholeSummaryPayload, IWriteSummaryResponse } from "../storageContracts"; +import { fromUtf8ToBase64 } from "../../common-utils"; +import { Historian, ICredentials, getAuthorizationTokenFromCredentials } from "../../historian"; +import { BasicRestWrapper, RestWrapper } from "../../restWrapper"; +import { IWholeSummaryPayload, IWriteSummaryResponse } from "../../storageContracts"; describe("Historian", () => { const endpoint = "http://test:3000"; diff --git a/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts b/server/routerlicious/packages/services-client/src/test/mocha/storageUtils.spec.ts similarity index 97% rename from server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts rename to server/routerlicious/packages/services-client/src/test/mocha/storageUtils.spec.ts index 336c89f6346e..48d252fd67e3 100644 --- a/server/routerlicious/packages/services-client/src/test/storageUtils.spec.ts +++ b/server/routerlicious/packages/services-client/src/test/mocha/storageUtils.spec.ts @@ -4,20 +4,20 @@ */ import assert from "assert"; -import { fromUtf8ToBase64, stringToBuffer } from "@fluidframework/server-common-utils"; +import { fromUtf8ToBase64, stringToBuffer } from "../../common-utils"; import { buildTreePath, convertSummaryTreeToWholeSummaryTree, convertWholeFlatSummaryToSnapshotTreeAndBlobs, convertFirstSummaryWholeSummaryTreeToSummaryTree, -} from "../storageUtils"; +} from "../../storageUtils"; import { IWholeFlatSummaryBlob, IWholeFlatSummary, IWholeFlatSummaryTree, IWholeFlatSummaryTreeEntry, -} from "../storageContracts"; +} from "../../storageContracts"; import { IDocumentAttributes, ISummaryTree, diff --git a/server/routerlicious/packages/services-client/src/test/tsconfig.json b/server/routerlicious/packages/services-client/src/test/mocha/tsconfig.json similarity index 81% rename from server/routerlicious/packages/services-client/src/test/tsconfig.json rename to server/routerlicious/packages/services-client/src/test/mocha/tsconfig.json index 1e69713da957..750b2baf6d11 100644 --- a/server/routerlicious/packages/services-client/src/test/tsconfig.json +++ b/server/routerlicious/packages/services-client/src/test/mocha/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "strictNullChecks": false, "rootDir": "./", - "outDir": "../../dist/test", + "outDir": "../../../dist/test/mocha", "types": ["node", "mocha"], "declaration": false, "declarationMap": false, @@ -11,7 +11,7 @@ "include": ["./**/*"], "references": [ { - "path": "../..", + "path": "../../..", }, ], } diff --git a/server/routerlicious/packages/services-client/src/test/types/tsconfig.json b/server/routerlicious/packages/services-client/src/test/types/tsconfig.json new file mode 100644 index 000000000000..9ea9798bcd75 --- /dev/null +++ b/server/routerlicious/packages/services-client/src/test/types/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@fluidframework/build-common/ts-common-config.json", + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "rootDir": "./", + "outDir": "../../../dist/test/types", + }, + "include": ["./**/*"], + "references": [ + { + "path": "../../..", + }, + ], +} diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 77fca233eab2..b1d1c3bbbd86 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1185,12 +1185,12 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils axios: specifier: ^1.7.7 version: 1.7.7(debug@4.3.4) + base64-js: + specifier: ^1.5.1 + version: 1.5.1 crc-32: specifier: 1.2.0 version: 1.2.0 @@ -1206,6 +1206,9 @@ importers: jwt-decode: specifier: ^4.0.0 version: 4.0.0 + sha.js: + specifier: ^2.4.11 + version: 2.4.11 sillyname: specifier: ^0.1.0 version: 0.1.0 @@ -1234,6 +1237,12 @@ importers: '@types/debug': specifier: ^4.1.5 version: 4.1.8 + '@types/jest': + specifier: 29.5.3 + version: 29.5.3 + '@types/jest-environment-puppeteer': + specifier: 2.2.0 + version: 2.2.0(typescript@5.1.6) '@types/jsrsasign': specifier: ^10.5.12 version: 10.5.12 @@ -1261,12 +1270,24 @@ importers: eslint: specifier: ~8.55.0 version: 8.55.0 + jest: + specifier: ^29.6.2 + version: 29.7.0(@types/node@18.19.39) + jest-junit: + specifier: ^10.0.0 + version: 10.0.0 + jest-puppeteer: + specifier: ^10.1.3 + version: 10.1.4(debug@4.3.4)(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6) mocha: specifier: ^10.2.0 version: 10.2.0 prettier: specifier: ~3.0.3 version: 3.0.3 + rewire: + specifier: ^5.0.0 + version: 5.0.0 rimraf: specifier: ^4.4.0 version: 4.4.1 @@ -2227,6 +2248,10 @@ packages: resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} engines: {node: '>=14.13.1'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} @@ -2364,18 +2389,176 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.23.6': resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2592,6 +2775,12 @@ packages: resolution: {integrity: sha512-9KMSDtJ/sIov+5pcH+CAfiJXSiuYgN0KLKQFg0HHWR2DwcjGYkcbmhoZcWsaOWOqq4kihN1l7wX91UoRxxKKTQ==} engines: {node: '>=18.0.0'} + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2717,14 +2906,92 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@24.9.0': + resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} + engines: {node: '>= 6'} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.3': resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -2733,6 +3000,10 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.3': resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} @@ -2742,6 +3013,9 @@ packages: '@jridgewell/trace-mapping@0.3.20': resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@kwsites/file-exists@1.1.1': resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} @@ -3091,6 +3365,15 @@ packages: '@rushstack/ts-command-line@4.23.3': resolution: {integrity: sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==} + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sigstore/protobuf-specs@0.1.0': resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3099,6 +3382,9 @@ packages: resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sindresorhus/is@5.4.1': resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} engines: {node: '>=14.16'} @@ -3106,6 +3392,9 @@ packages: '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@11.2.2': resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} @@ -3318,6 +3607,18 @@ packages: '@types/async@3.2.20': resolution: {integrity: sha512-6jSBQQugzyX1aWto0CbvOnmxrU9tMoXfA9gc4IrLEtvr3dTwSg5GLGoWiZnGLI6UG/kqpB3JOQKQrqnhUWGKQA==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/bluebird@3.5.38': resolution: {integrity: sha512-yR/Kxc0dd4FfwtEoLZMoqJbM/VE/W7hXn/MIjb+axcwag0iFmSPK7OBUZq1YWLynJUoWQkfUrI7T0HDqGApNSg==} @@ -3393,6 +3694,9 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/http-cache-semantics@4.0.1': resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -3402,6 +3706,21 @@ packages: '@types/istanbul-lib-coverage@2.0.4': resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@1.1.2': + resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest-environment-puppeteer@2.2.0': + resolution: {integrity: sha512-4XWMEDqFIocwxMerq5/0fghlUhvHTb3BtK9LUAmEX194R2ui34mX09EEpJavLRAzcjvfMklWfp3lm4CJYlBF1g==} + + '@types/jest@29.5.3': + resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3483,6 +3802,10 @@ packages: '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/puppeteer@7.0.4': + resolution: {integrity: sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==} + deprecated: This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed. + '@types/qs@6.9.7': resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -3519,6 +3842,9 @@ packages: '@types/split@0.3.28': resolution: {integrity: sha512-t6JWsgzXTobVH6dgfYGedS8Y0ZRc20jtzHCWYx+Q/w9WfpwUkPY8FTa+5y8KPztQne3NmI4+/s0zbCMMkuk1tQ==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/string-hash@1.1.1': resolution: {integrity: sha512-ijt3zdHi2DmZxQpQTmozXszzDo78V4R3EdvX0jFMfnMH2ZzQSmCbaWOMPGXFUYSzSIdStv78HDjg32m5dxc+tA==} @@ -3552,6 +3878,15 @@ packages: '@types/ws@6.0.4': resolution: {integrity: sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@13.0.12': + resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -3791,6 +4126,11 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} @@ -3888,6 +4228,10 @@ packages: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3904,6 +4248,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3992,6 +4340,10 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -4039,12 +4391,40 @@ packages: axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + axios@1.8.1: + resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + azure-devops-node-api@11.2.0: resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -4166,6 +4546,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bson@4.7.2: resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} engines: {node: '>=6.9.0'} @@ -4256,6 +4639,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -4313,6 +4700,10 @@ packages: peerDependencies: '@changesets/cli': ^2.0.0 + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} @@ -4352,6 +4743,9 @@ packages: circular_buffer_js@1.10.0: resolution: {integrity: sha512-HXSDm8gm3nPog7Sh7kln9yb9dVFYan4nVwF4qOqOkR8YpAN6yJupyccXl9OcuTJfPqie0uRJdjHs44H1oCgBOQ==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + classic-level@1.3.0: resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} engines: {node: '>=12'} @@ -4375,6 +4769,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4395,6 +4793,10 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -4414,6 +4816,10 @@ packages: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} @@ -4428,6 +4834,9 @@ packages: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4473,6 +4882,10 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@2.15.1: resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==} @@ -4533,6 +4946,9 @@ packages: convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-to-spaces@2.0.1: resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4592,6 +5008,11 @@ packages: engines: {node: '>=0.8'} hasBin: true + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + croner@4.1.97: resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} @@ -4603,6 +5024,10 @@ packages: cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4617,6 +5042,10 @@ packages: culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} + cwd@0.10.0: + resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} + engines: {node: '>=0.8'} + danger@12.3.3: resolution: {integrity: sha512-nZKzpgXN21rr4dwa6bFhM7G2JEa79dZRJiT3RVRSyi4yk1/hgZ2f8HDGoa7tMladTmu8WjJFyE3LpBIihh+aDw==} engines: {node: '>=18'} @@ -4705,6 +5134,14 @@ packages: resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} engines: {node: '>=4'} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4712,6 +5149,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4797,6 +5238,10 @@ packages: devtools-protocol@0.0.1367902: resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff3@0.0.3: resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} @@ -4857,9 +5302,16 @@ packages: electron-to-chromium@1.5.84: resolution: {integrity: sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==} + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5119,15 +5571,33 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-utils@1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + + eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@8.55.0: resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true + espree@6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5185,14 +5655,30 @@ packages: resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} engines: {node: '>=0.8'} + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + expand-tilde@1.2.2: + resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} + engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} + expect-puppeteer@10.1.4: + resolution: {integrity: sha512-zNVzk/+TkPS/CuTlGSK7SjXuUpQiakXtUJhbTRrcPHop4jCWydPx9RlvHhQELzZYgXlLhIP+hvBzUNiN8WNAow==} + engines: {node: '>=16'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} @@ -5265,6 +5751,9 @@ packages: fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fclone@1.0.11: resolution: {integrity: sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==} @@ -5293,6 +5782,14 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5323,6 +5820,18 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + find-file-up@0.1.3: + resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==} + engines: {node: '>=0.10.0'} + + find-pkg@0.1.2: + resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} + engines: {node: '>=0.10.0'} + + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} + hasBin: true + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5338,6 +5847,10 @@ packages: find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + flat-cache@2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5346,6 +5859,9 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatted@2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} @@ -5442,6 +5958,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -5454,6 +5973,10 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -5578,6 +6101,22 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} + global-modules@0.2.3: + resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} + engines: {node: '>=0.10.0'} + + global-prefix@0.1.5: + resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} + engines: {node: '>=0.10.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} @@ -5763,6 +6302,10 @@ packages: resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -5829,6 +6372,10 @@ packages: react-devtools-core: optional: true + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + int64-buffer@0.1.10: resolution: {integrity: sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA==} @@ -5935,6 +6482,10 @@ packages: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5947,6 +6498,10 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -6077,6 +6632,10 @@ packages: is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-windows@0.2.0: + resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} + engines: {node: '>=0.10.0'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -6118,10 +6677,22 @@ packages: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + istanbul-reports@3.1.6: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} @@ -6138,23 +6709,181 @@ packages: engines: {node: '>=10'} hasBin: true - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - - js-git@0.7.8: - resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - js-yaml@3.13.1: - resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true - + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': ^18.19.39 + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-dev-server@10.1.4: + resolution: {integrity: sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==} + engines: {node: '>=16'} + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-puppeteer@10.1.4: + resolution: {integrity: sha512-cx2jzf1qZb6/vdmLbRccF0k/zSsoWlrXi8bg10GzrODxiwsRomVDszTfoOCRsQ+C1sbJ+ubI1PlryIvvYjITrA==} + engines: {node: '>=16'} + + jest-get-type@24.9.0: + resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} + engines: {node: '>= 6'} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-junit@10.0.0: + resolution: {integrity: sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==} + engines: {node: '>=8.0.0'} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-puppeteer@10.1.4: + resolution: {integrity: sha512-I9bADDn9EzpaL9QgzEtyJhd29PBv45rZJFPROUC2KWZHUs+5OGjzBOZKBzmqECdGv2GV/JL+NMdjqRJde2A36Q==} + engines: {node: '>=16'} + peerDependencies: + puppeteer: '>=19' + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@24.9.0: + resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==} + engines: {node: '>= 6'} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + js-git@0.7.8: + resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.13.1: + resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} + hasBin: true + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -6332,6 +7061,14 @@ packages: resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} engines: {node: '>=12'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -6442,6 +7179,10 @@ packages: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + long@1.1.2: resolution: {integrity: sha512-pjR3OP1X2VVQhCQlrq3s8UxugQsuoucwMOn9Yj/kN/61HMc+lDFJS5bvpNEHneZ9NVaSm8gNWxZvtGS7lqHb3Q==} engines: {node: '>=0.6'} @@ -6479,6 +7220,9 @@ packages: lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -6505,6 +7249,9 @@ packages: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -6912,6 +7659,9 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nise@6.1.1: resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==} @@ -6949,6 +7699,9 @@ packages: engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-rdkafka@3.0.1: resolution: {integrity: sha512-USTFu7ylRj+fEiGz0hA92GWSqmX/hu/xSTqtgmInPPmh5zKhjauTciRjDEG3yK5m6yChwyHKQTIgmr56DfhiaQ==} engines: {node: '>=16'} @@ -7127,6 +7880,10 @@ packages: optional@0.1.4: resolution: {integrity: sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==} + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -7298,6 +8055,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -7368,6 +8129,10 @@ packages: pinpoint@1.1.0: resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -7408,6 +8173,10 @@ packages: engines: {node: '>=6'} hasBin: true + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -7427,6 +8196,14 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@24.9.0: + resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} + engines: {node: '>= 6'} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + prettyjson@1.2.5: resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} hasBin: true @@ -7548,6 +8325,9 @@ packages: engines: {node: '>=18'} hasBin: true + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} @@ -7583,6 +8363,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-reconciler@0.29.2: resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} engines: {node: '>=0.10.0'} @@ -7679,6 +8462,10 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regexpp@2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} + engines: {node: '>=6.5.0'} + registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -7747,6 +8534,10 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} + resolve-dir@0.1.1: + resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7781,6 +8572,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7800,6 +8595,14 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rewire@5.0.0: + resolution: {integrity: sha512-1zfitNyp9RH5UDyGGLe9/1N0bMlPQ0WrX0Tmg11kMHBpqwPJI4gfPpP7YngFyLbFmhXh19SToAG0sKKEFcOIJA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -7815,6 +8618,10 @@ packages: engines: {node: '>=14'} hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} @@ -7828,6 +8635,10 @@ packages: run-series@1.1.9: resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -8037,6 +8848,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -8114,6 +8929,9 @@ packages: peerDependencies: webpack: ^5.72.1 + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -8135,6 +8953,10 @@ packages: resolution: {integrity: sha512-KM8coezO6ISQ89c1BzyWNtcn2V2kAVtwIXd3cN/V5a0xPYc1F/vydrRc01wsKFEQ/p+V1a4sw4z2yMITIXrgGw==} engines: {node: '>=14'} + spawnd@10.1.4: + resolution: {integrity: sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==} + engines: {node: '>=16'} + spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -8193,10 +9015,18 @@ packages: string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} + string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -8235,6 +9065,10 @@ packages: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -8251,6 +9085,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} @@ -8315,6 +9153,10 @@ packages: os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true + table@5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} @@ -8402,6 +9244,9 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} @@ -8503,6 +9348,10 @@ packages: tx2@1.0.5: resolution: {integrity: sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==} + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -8729,6 +9578,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} @@ -8762,6 +9614,14 @@ packages: resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} engines: {node: '>=4.0'} + wait-on@8.0.2: + resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} + engines: {node: '>=12.0.0'} + hasBin: true + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -8887,6 +9747,10 @@ packages: resolution: {integrity: sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==} engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -8915,6 +9779,14 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + write@1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -8962,6 +9834,9 @@ packages: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -8977,6 +9852,9 @@ packages: yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -9063,6 +9941,11 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@andrewbranch/untar.js@1.0.3': {} '@aws-crypto/ie11-detection@3.0.0': @@ -9510,18 +10393,203 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/runtime@7.23.6': dependencies: regenerator-runtime: 0.14.0 + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@changesets/apply-release-plan@7.0.5': @@ -10131,9 +11199,9 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) @@ -10519,6 +11587,12 @@ snapshots: '@gitbeaker/core': 38.12.1 '@gitbeaker/requester-utils': 38.12.1 + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -10795,26 +11869,215 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.3': + '@jest/console@29.7.0': dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 - '@jridgewell/resolve-uri@3.1.1': {} + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@18.19.39) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node - '@jridgewell/set-array@1.1.2': {} + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-mock: 29.7.0 - '@jridgewell/source-map@0.3.3': + '@jest/expect-utils@29.7.0': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + jest-get-type: 29.6.3 - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/trace-mapping@0.3.20': + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 18.19.39 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + '@types/node': 18.19.39 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.26.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@24.9.0': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 1.1.2 + '@types/yargs': 13.0.12 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.4 + '@types/node': 18.19.39 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/set-array@1.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.3': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.20': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -11568,6 +12831,14 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@sigstore/protobuf-specs@0.1.0': {} '@sigstore/tuf@1.0.0': @@ -11578,12 +12849,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@sinclair/typebox@0.27.8': {} + '@sindresorhus/is@5.4.1': {} '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers@11.2.2': dependencies: '@sinonjs/commons': 3.0.1 @@ -11938,6 +13215,27 @@ snapshots: '@types/async@3.2.20': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.9 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.9 + '@types/bluebird@3.5.38': {} '@types/body-parser@1.19.2': @@ -12028,6 +13326,10 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 18.19.39 + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 18.19.39 + '@types/http-cache-semantics@4.0.1': {} '@types/ioredis-mock@8.2.5': @@ -12039,6 +13341,34 @@ snapshots: '@types/istanbul-lib-coverage@2.0.4': {} + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + + '@types/istanbul-reports@1.1.2': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-report': 3.0.3 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest-environment-puppeteer@2.2.0(typescript@5.1.6)': + dependencies: + '@types/puppeteer': 7.0.4(typescript@5.1.6) + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@types/jest@29.5.3': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + '@types/json-schema@7.0.15': {} '@types/json-stringify-safe@5.0.0': {} @@ -12107,6 +13437,16 @@ snapshots: '@types/prop-types@15.7.14': {} + '@types/puppeteer@7.0.4(typescript@5.1.6)': + dependencies: + puppeteer: 23.11.1(typescript@5.1.6) + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + '@types/qs@6.9.7': {} '@types/range-parser@1.2.4': {} @@ -12147,6 +13487,8 @@ snapshots: dependencies: '@types/node': 18.19.39 + '@types/stack-utils@2.0.3': {} + '@types/string-hash@1.1.1': {} '@types/superagent@4.1.18': @@ -12179,6 +13521,16 @@ snapshots: dependencies: '@types/node': 18.19.39 + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@13.0.12': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + '@types/yauzl@2.10.3': dependencies: '@types/node': 18.19.39 @@ -12512,10 +13864,16 @@ snapshots: dependencies: acorn: 8.11.2 + acorn-jsx@5.3.2(acorn@7.4.1): + dependencies: + acorn: 7.4.1 + acorn-jsx@5.3.2(acorn@8.11.2): dependencies: acorn: 8.11.2 + acorn@7.4.1: {} + acorn@8.11.2: {} acorn@8.14.0: {} @@ -12616,6 +13974,8 @@ snapshots: ansi-regex@2.1.1: optional: true + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -12628,6 +13988,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} ansis@3.9.0: {} @@ -12731,6 +14093,8 @@ snapshots: dependencies: tslib: 2.6.2 + astral-regex@1.0.0: {} + astral-regex@2.0.0: {} async-lock@1.4.0: {} @@ -12779,6 +14143,14 @@ snapshots: transitivePeerDependencies: - debug + axios@1.8.1(debug@4.3.4): + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + azure-devops-node-api@11.2.0: dependencies: tunnel: 0.0.6 @@ -12786,6 +14158,61 @@ snapshots: b4a@1.6.7: {} + babel-jest@29.7.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) + + babel-preset-jest@29.6.3(@babel/core@7.26.9): + dependencies: + '@babel/core': 7.26.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -12933,6 +14360,10 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + bson@4.7.2: dependencies: buffer: 5.7.1 @@ -13051,6 +14482,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.2 + camelcase@5.3.1: {} + camelcase@6.3.0: {} camelcase@7.0.1: {} @@ -13137,6 +14570,8 @@ snapshots: transitivePeerDependencies: - supports-color + char-regex@1.0.2: {} + character-entities@2.0.2: {} chardet@0.7.0: {} @@ -13174,6 +14609,8 @@ snapshots: circular_buffer_js@1.10.0: {} + cjs-module-lexer@1.4.3: {} + classic-level@1.3.0: dependencies: abstract-level: 1.0.3 @@ -13196,6 +14633,10 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 @@ -13217,6 +14658,8 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 + cli-width@3.0.0: {} + cli-width@4.1.0: {} cliui@7.0.4: @@ -13239,6 +14682,8 @@ snapshots: cluster-key-slot@1.1.2: {} + co@4.6.0: {} + code-block-writer@12.0.0: {} code-block-writer@13.0.1: {} @@ -13250,6 +14695,8 @@ snapshots: code-point-at@1.1.0: optional: true + collect-v8-coverage@1.0.2: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -13291,6 +14738,8 @@ snapshots: commander@10.0.1: {} + commander@12.1.0: {} + commander@2.15.1: {} commander@2.20.3: {} @@ -13365,6 +14814,8 @@ snapshots: convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} + convert-to-spaces@2.0.1: {} cookie-parser@1.4.7: @@ -13431,6 +14882,21 @@ snapshots: exit-on-epipe: 1.0.1 printj: 1.1.2 + create-jest@29.7.0(@types/node@18.19.39): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.19.39) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + croner@4.1.97: {} cross-env@7.0.3: @@ -13443,6 +14909,14 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13457,6 +14931,11 @@ snapshots: culvert@0.1.2: {} + cwd@0.10.0: + dependencies: + find-pkg: 0.1.2 + fs-exists-sync: 0.1.0 + danger@12.3.3(encoding@0.1.13): dependencies: '@gitbeaker/rest': 38.12.1 @@ -13583,10 +15062,14 @@ snapshots: pify: 2.3.0 strip-dirs: 2.1.0 + dedent@1.5.3: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} + deepmerge@4.3.1: {} + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -13651,6 +15134,8 @@ snapshots: devtools-protocol@0.0.1367902: {} + diff-sequences@29.6.3: {} + diff3@0.0.3: {} diff@4.0.2: {} @@ -13702,8 +15187,12 @@ snapshots: electron-to-chromium@1.5.84: {} + emittery@0.13.1: {} + emoji-regex@10.4.0: {} + emoji-regex@7.0.3: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -13893,13 +15382,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.55.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -13910,24 +15399,24 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) transitivePeerDependencies: - supports-color @@ -13937,13 +15426,13 @@ snapshots: eslint: 8.55.0 ignore: 5.3.0 - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): dependencies: debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) get-tsconfig: 4.10.0 is-glob: 4.0.3 minimatch: 3.1.2 @@ -14040,8 +15529,56 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-utils@1.4.3: + dependencies: + eslint-visitor-keys: 1.3.0 + + eslint-visitor-keys@1.3.0: {} + eslint-visitor-keys@3.4.3: {} + eslint@6.8.0: + dependencies: + '@babel/code-frame': 7.26.2 + ajv: 6.12.6 + chalk: 2.4.2 + cross-spawn: 6.0.6 + debug: 4.4.0(supports-color@8.1.1) + doctrine: 3.0.0 + eslint-scope: 5.1.1 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.5.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + inquirer: 7.3.3 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.3.0 + lodash: 4.17.21 + minimatch: 3.1.2 + mkdirp: 0.5.6 + natural-compare: 1.4.0 + optionator: 0.8.3 + progress: 2.0.3 + regexpp: 2.0.1 + semver: 6.3.1 + strip-ansi: 5.2.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + eslint@8.55.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) @@ -14085,6 +15622,12 @@ snapshots: transitivePeerDependencies: - supports-color + espree@6.2.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + espree@9.6.1: dependencies: acorn: 8.11.2 @@ -14133,13 +15676,29 @@ snapshots: exit-on-epipe@1.0.1: {} + exit@0.1.2: {} + expand-template@2.0.3: optional: true + expand-tilde@1.2.2: + dependencies: + os-homedir: 1.0.2 + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 + expect-puppeteer@10.1.4: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + exponential-backoff@3.1.1: {} express@4.21.2: @@ -14247,6 +15806,10 @@ snapshots: dependencies: reusify: 1.0.4 + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + fclone@1.0.11: {} fd-slicer@1.1.0: @@ -14271,6 +15834,14 @@ snapshots: fflate@0.8.2: {} + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@5.0.1: + dependencies: + flat-cache: 2.0.1 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.0.4 @@ -14303,6 +15874,21 @@ snapshots: transitivePeerDependencies: - supports-color + find-file-up@0.1.3: + dependencies: + fs-exists-sync: 0.1.0 + resolve-dir: 0.1.1 + + find-pkg@0.1.2: + dependencies: + find-file-up: 0.1.3 + + find-process@1.4.10: + dependencies: + chalk: 4.1.2 + commander: 12.1.0 + loglevel: 1.9.2 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -14323,6 +15909,12 @@ snapshots: dependencies: micromatch: 4.0.8 + flat-cache@2.0.1: + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + flat-cache@3.0.4: dependencies: flatted: 3.2.7 @@ -14330,6 +15922,8 @@ snapshots: flat@5.0.2: {} + flatted@2.0.2: {} + flatted@3.2.7: {} fn.name@1.1.0: {} @@ -14418,6 +16012,8 @@ snapshots: es-abstract: 1.22.4 functions-have-names: 1.2.3 + functional-red-black-tree@1.0.1: {} + functions-have-names@1.2.3: {} gauge@2.7.4: @@ -14443,6 +16039,8 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} get-east-asian-width@1.3.0: {} @@ -14582,13 +16180,31 @@ snapshots: dependencies: ini: 2.0.0 - globals@13.20.0: + global-modules@0.2.3: dependencies: - type-fest: 0.20.2 + global-prefix: 0.1.5 + is-windows: 0.2.0 - globalthis@1.0.3: + global-prefix@0.1.5: dependencies: - define-properties: 1.2.1 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 0.2.0 + which: 1.3.1 + + globals@11.12.0: {} + + globals@12.4.0: + dependencies: + type-fest: 0.8.1 + + globals@13.20.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.3: + dependencies: + define-properties: 1.2.1 globby@10.0.0: dependencies: @@ -14810,6 +16426,8 @@ snapshots: dependencies: minimatch: 9.0.5 + ignore@4.0.6: {} + ignore@5.3.0: {} ignore@5.3.2: {} @@ -14880,6 +16498,22 @@ snapshots: - bufferutil - utf-8-validate + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + int64-buffer@0.1.10: {} internal-slot@1.0.7: @@ -14989,6 +16623,8 @@ snapshots: number-is-nan: 1.0.1 optional: true + is-fullwidth-code-point@2.0.0: {} + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -14997,6 +16633,8 @@ snapshots: dependencies: get-east-asian-width: 1.3.0 + is-generator-fn@2.1.0: {} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 @@ -15103,6 +16741,8 @@ snapshots: call-bind: 1.0.7 get-intrinsic: 1.2.4 + is-windows@0.2.0: {} + is-windows@1.0.2: {} is-wsl@2.2.0: @@ -15145,12 +16785,40 @@ snapshots: istanbul-lib-coverage@3.2.0: {} + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 4.0.0 supports-color: 7.2.0 + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 @@ -15177,14 +16845,381 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@18.19.39): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.19.39) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.19.39) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@18.19.39): + dependencies: + '@babel/core': 7.26.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.9) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 18.19.39 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-dev-server@10.1.4(debug@4.3.4): + dependencies: + chalk: 4.1.2 + cwd: 0.10.0 + find-process: 1.4.10 + prompts: 2.4.2 + spawnd: 10.1.4 + tree-kill: 1.2.2 + wait-on: 8.0.2(debug@4.3.4) + transitivePeerDependencies: + - debug + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-environment-puppeteer@10.1.4(debug@4.3.4)(typescript@5.1.6): + dependencies: + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.1.6) + deepmerge: 4.3.1 + jest-dev-server: 10.1.4(debug@4.3.4) + jest-environment-node: 29.7.0 + transitivePeerDependencies: + - debug + - typescript + + jest-get-type@24.9.0: {} + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 18.19.39 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-junit@10.0.0: + dependencies: + jest-validate: 24.9.0 + mkdirp: 0.5.6 + strip-ansi: 5.2.0 + uuid: 3.4.0 + xml: 1.0.1 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.23.5 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-puppeteer@10.1.4(debug@4.3.4)(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6): + dependencies: + expect-puppeteer: 10.1.4 + jest-environment-puppeteer: 10.1.4(debug@4.3.4)(typescript@5.1.6) + puppeteer: 23.11.1(typescript@5.1.6) + transitivePeerDependencies: + - debug + - typescript + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.26.9 + '@babel/generator': 7.26.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + '@babel/types': 7.26.9 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@24.9.0: + dependencies: + '@jest/types': 24.9.0 + camelcase: 5.3.1 + chalk: 2.4.2 + jest-get-type: 24.9.0 + leven: 3.1.0 + pretty-format: 24.9.0 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.39 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + jest-worker@27.5.1: dependencies: '@types/node': 18.19.39 merge-stream: 2.0.0 supports-color: 8.1.1 + jest-worker@29.7.0: + dependencies: + '@types/node': 18.19.39 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@18.19.39): + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.19.39) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jju@1.4.0: {} + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + js-git@0.7.8: dependencies: bodec: 0.1.0 @@ -15396,6 +17431,13 @@ snapshots: browser-level: 1.0.1 classic-level: 1.3.0 + leven@3.1.0: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -15492,6 +17534,8 @@ snapshots: safe-stable-stringify: 2.4.3 triple-beam: 1.4.1 + loglevel@1.9.2: {} + long@1.1.2: {} longest-streak@3.1.0: {} @@ -15523,6 +17567,10 @@ snapshots: pseudomap: 1.0.2 yallist: 2.1.2 + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -15561,6 +17609,10 @@ snapshots: transitivePeerDependencies: - supports-color + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + markdown-table@3.0.4: {} mdast-util-find-and-replace@3.0.2: @@ -16005,7 +18057,6 @@ snapshots: mkdirp@0.5.6: dependencies: minimist: 1.2.8 - optional: true mkdirp@1.0.4: {} @@ -16151,6 +18202,8 @@ snapshots: netmask@2.0.2: {} + nice-try@1.0.5: {} + nise@6.1.1: dependencies: '@sinonjs/commons': 3.0.1 @@ -16208,6 +18261,8 @@ snapshots: transitivePeerDependencies: - supports-color + node-int64@0.4.0: {} + node-rdkafka@3.0.1: dependencies: bindings: 1.5.0 @@ -16496,6 +18551,15 @@ snapshots: optional@0.1.4: {} + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -16505,8 +18569,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - os-homedir@1.0.2: - optional: true + os-homedir@1.0.2: {} os-tmpdir@1.0.2: {} @@ -16701,6 +18764,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -16749,6 +18814,8 @@ snapshots: pinpoint@1.1.0: {} + pirates@4.0.6: {} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -16850,6 +18917,8 @@ snapshots: which-pm-runs: 1.1.0 optional: true + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} prettier@2.8.8: {} @@ -16858,6 +18927,19 @@ snapshots: prettier@3.2.5: {} + pretty-format@24.9.0: + dependencies: + '@jest/types': 24.9.0 + ansi-regex: 4.1.1 + ansi-styles: 3.2.1 + react-is: 16.13.1 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + prettyjson@1.2.5: dependencies: colors: 1.4.0 @@ -17018,6 +19100,8 @@ snapshots: - typescript - utf-8-validate + pure-rand@6.1.0: {} + qs@6.11.2: dependencies: side-channel: 1.0.4 @@ -17059,6 +19143,8 @@ snapshots: react-is@16.13.1: {} + react-is@18.3.1: {} + react-reconciler@0.29.2(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -17182,6 +19268,8 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regexpp@2.0.1: {} + registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -17279,6 +19367,11 @@ snapshots: dependencies: resolve-from: 5.0.0 + resolve-dir@0.1.1: + dependencies: + expand-tilde: 1.2.2 + global-modules: 0.2.3 + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -17314,6 +19407,11 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -17327,6 +19425,16 @@ snapshots: reusify@1.0.4: {} + rewire@5.0.0: + dependencies: + eslint: 6.8.0 + transitivePeerDependencies: + - supports-color + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -17339,6 +19447,8 @@ snapshots: dependencies: glob: 10.3.10 + run-async@2.4.1: {} + run-parallel-limit@1.1.0: dependencies: queue-microtask: 1.2.3 @@ -17351,6 +19461,10 @@ snapshots: run-series@1.1.9: {} + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + rxjs@7.8.1: dependencies: tslib: 2.6.2 @@ -17593,6 +19707,12 @@ snapshots: slash@3.0.0: {} + slice-ansi@2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -17722,6 +19842,11 @@ snapshots: source-map-js: 1.2.0 webpack: 5.94.0(webpack-cli@5.1.4) + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -17742,6 +19867,11 @@ snapshots: dependencies: cross-spawn: 7.0.6 + spawnd@10.1.4: + dependencies: + signal-exit: 4.1.0 + tree-kill: 1.2.2 + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -17801,6 +19931,11 @@ snapshots: string-hash@1.1.3: {} + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + string-width@1.0.2: dependencies: code-point-at: 1.1.0 @@ -17808,6 +19943,12 @@ snapshots: strip-ansi: 3.0.1 optional: true + string-width@3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -17870,6 +20011,10 @@ snapshots: ansi-regex: 2.1.1 optional: true + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -17882,6 +20027,8 @@ snapshots: strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + strip-dirs@2.1.0: dependencies: is-natural-number: 4.0.1 @@ -17950,6 +20097,13 @@ snapshots: systeminformation@5.21.24: optional: true + table@5.4.6: + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + table@6.9.0: dependencies: ajv: 8.13.0 @@ -18078,6 +20232,8 @@ snapshots: dependencies: os-tmpdir: 1.0.2 + tmpl@1.0.5: {} + to-buffer@1.1.1: {} to-regex-range@5.0.1: @@ -18173,6 +20329,10 @@ snapshots: json-stringify-safe: 5.0.1 optional: true + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -18402,6 +20562,8 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache@2.4.0: {} + v8-to-istanbul@9.1.0: dependencies: '@jridgewell/trace-mapping': 0.3.20 @@ -18440,6 +20602,20 @@ snapshots: ini: 1.3.8 js-git: 0.7.8 + wait-on@8.0.2(debug@4.3.4): + dependencies: + axios: 1.8.1(debug@4.3.4) + joi: 17.13.3 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -18674,6 +20850,8 @@ snapshots: triple-beam: 1.3.0 winston-transport: 4.5.0 + word-wrap@1.2.5: {} + wordwrap@1.0.0: {} workerpool@6.2.1: {} @@ -18711,6 +20889,15 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write@1.0.3: + dependencies: + mkdirp: 0.5.6 + ws@7.5.10: {} ws@8.17.1: {} @@ -18726,6 +20913,8 @@ snapshots: sax: 1.3.0 xmlbuilder: 11.0.1 + xml@1.0.1: {} + xmlbuilder@11.0.1: {} xtend@4.0.2: {} @@ -18734,6 +20923,8 @@ snapshots: yallist@2.1.2: {} + yallist@3.1.1: {} + yallist@4.0.0: {} yaml@2.7.0: {} From 10730f8292a793f01043428520600eebbb3cd588 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 00:00:46 +0000 Subject: [PATCH 30/38] Remove server-common-utils --- fluidBuild.config.cjs | 5 +- layerInfo.json | 2 +- server/routerlicious/feeds/internal-build.txt | 3 +- server/routerlicious/feeds/internal-test.txt | 3 +- server/routerlicious/feeds/public.txt | 3 +- .../packages/common-utils/.eslintrc.cjs | 27 - .../packages/common-utils/.gitignore | 52 - .../packages/common-utils/.npmignore | 7 - .../packages/common-utils/CHANGELOG.md | 5 - .../packages/common-utils/LICENSE | 21 - .../packages/common-utils/README.md | 3 - .../common-utils/api-extractor-lint.json | 4 - .../packages/common-utils/api-extractor.json | 4 - .../api-report/server-common-utils.api.md | 46 - .../packages/common-utils/package.json | 89 - .../common-utils/src/base64Encoding.ts | 41 - .../packages/common-utils/src/buffer.ts | 71 - .../packages/common-utils/src/hashFile.ts | 24 - .../packages/common-utils/src/index.ts | 8 - .../common-utils/src/packageVersion.ts | 9 - .../common-utils/src/test/assets/aka.pdf | Bin 14010 -> 0 bytes .../common-utils/src/test/assets/bindy.svg | 2032 ----------------- .../common-utils/src/test/assets/book.xml | 119 - .../common-utils/src/test/assets/grid.gif | Bin 9137 -> 0 bytes .../common-utils/src/test/gitHash.spec.ts | 77 - .../common-utils/src/test/tsconfig.json | 16 - .../common-utils/tsconfig.esnext.json | 7 - .../packages/common-utils/tsconfig.json | 11 - .../packages/lambdas/package.json | 1 - .../lambdas/src/deli/lambdaFactory.ts | 3 +- .../lambdas/src/scribe/summaryReader.ts | 3 +- .../lambdas/src/scribe/summaryWriter.ts | 2 +- .../packages/memory-orderer/package.json | 1 - .../memory-orderer/src/localOrdererSetup.ts | 3 +- .../packages/memory-orderer/src/socket.ts | 2 +- .../packages/routerlicious-base/package.json | 1 - .../src/alfred/routes/api/api.ts | 3 +- .../src/alfred/services/deltaService.ts | 2 +- .../api-report/server-services-client.api.md | 44 + .../packages/services-client/src/index.ts | 2 + .../packages/services-core/package.json | 1 - .../packages/services-shared/package.json | 1 - .../packages/services-shared/src/storage.ts | 2 +- .../packages/services/package.json | 1 - .../packages/services/src/deltaManager.ts | 3 +- .../packages/services/src/tenant.ts | 2 +- .../packages/test-utils/package.json | 1 - .../src/test/testsForHistorian.spec.ts | 3 +- .../test-utils/src/testDocumentStorage.ts | 4 +- .../packages/test-utils/src/testHistorian.ts | 3 +- .../packages/tinylicious/package.json | 1 - .../src/routes/storage/git/blobs.ts | 2 +- server/routerlicious/pnpm-lock.yaml | 104 +- 53 files changed, 83 insertions(+), 2801 deletions(-) delete mode 100644 server/routerlicious/packages/common-utils/.eslintrc.cjs delete mode 100644 server/routerlicious/packages/common-utils/.gitignore delete mode 100644 server/routerlicious/packages/common-utils/.npmignore delete mode 100644 server/routerlicious/packages/common-utils/CHANGELOG.md delete mode 100644 server/routerlicious/packages/common-utils/LICENSE delete mode 100644 server/routerlicious/packages/common-utils/README.md delete mode 100644 server/routerlicious/packages/common-utils/api-extractor-lint.json delete mode 100644 server/routerlicious/packages/common-utils/api-extractor.json delete mode 100644 server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md delete mode 100644 server/routerlicious/packages/common-utils/package.json delete mode 100644 server/routerlicious/packages/common-utils/src/base64Encoding.ts delete mode 100644 server/routerlicious/packages/common-utils/src/buffer.ts delete mode 100644 server/routerlicious/packages/common-utils/src/hashFile.ts delete mode 100644 server/routerlicious/packages/common-utils/src/index.ts delete mode 100644 server/routerlicious/packages/common-utils/src/packageVersion.ts delete mode 100644 server/routerlicious/packages/common-utils/src/test/assets/aka.pdf delete mode 100644 server/routerlicious/packages/common-utils/src/test/assets/bindy.svg delete mode 100644 server/routerlicious/packages/common-utils/src/test/assets/book.xml delete mode 100644 server/routerlicious/packages/common-utils/src/test/assets/grid.gif delete mode 100644 server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts delete mode 100644 server/routerlicious/packages/common-utils/src/test/tsconfig.json delete mode 100644 server/routerlicious/packages/common-utils/tsconfig.esnext.json delete mode 100644 server/routerlicious/packages/common-utils/tsconfig.json diff --git a/fluidBuild.config.cjs b/fluidBuild.config.cjs index a9f5d1bc4d53..a136b5393f95 100644 --- a/fluidBuild.config.cjs +++ b/fluidBuild.config.cjs @@ -322,7 +322,10 @@ module.exports = { // TODO: AB#7630 uses lint only ts projects for coverage which don't have representative tsc scripts "^packages/tools/fluid-runner/package.json", ], - "fluid-build-tasks-tsc": [], + "fluid-build-tasks-tsc": [ + // Not seeing the dependencies it wants even when I add them + "^server/routerlicious/packages/services-client/package.json", + ], "html-copyright-file-header": [ // Tests generate HTML "snapshot" artifacts "tools/api-markdown-documenter/src/test/snapshots/.*", diff --git a/layerInfo.json b/layerInfo.json index a0a5afbbe878..0db9fc1396f0 100644 --- a/layerInfo.json +++ b/layerInfo.json @@ -30,7 +30,7 @@ "Utils": { "layers": { "Common-Utils": { - "packages": ["@fluidframework/common-utils", "@fluidframework/server-common-utils"], + "packages": ["@fluidframework/common-utils"], "deps": ["Common-Definitions"] }, "Core-Utils": { diff --git a/server/routerlicious/feeds/internal-build.txt b/server/routerlicious/feeds/internal-build.txt index cea8d9ea88c7..a8e4f2b9104e 100644 --- a/server/routerlicious/feeds/internal-build.txt +++ b/server/routerlicious/feeds/internal-build.txt @@ -17,5 +17,4 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources -@fluidframework/server-common-utils \ No newline at end of file +@fluidframework/gitresources \ No newline at end of file diff --git a/server/routerlicious/feeds/internal-test.txt b/server/routerlicious/feeds/internal-test.txt index cea8d9ea88c7..a8e4f2b9104e 100644 --- a/server/routerlicious/feeds/internal-test.txt +++ b/server/routerlicious/feeds/internal-test.txt @@ -17,5 +17,4 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources -@fluidframework/server-common-utils \ No newline at end of file +@fluidframework/gitresources \ No newline at end of file diff --git a/server/routerlicious/feeds/public.txt b/server/routerlicious/feeds/public.txt index cea8d9ea88c7..a8e4f2b9104e 100644 --- a/server/routerlicious/feeds/public.txt +++ b/server/routerlicious/feeds/public.txt @@ -17,5 +17,4 @@ tinylicious @fluidframework/server-lambdas-driver @fluidframework/server-lambdas @fluidframework/server-kafka-orderer -@fluidframework/gitresources -@fluidframework/server-common-utils \ No newline at end of file +@fluidframework/gitresources \ No newline at end of file diff --git a/server/routerlicious/packages/common-utils/.eslintrc.cjs b/server/routerlicious/packages/common-utils/.eslintrc.cjs deleted file mode 100644 index c0b2fad09b18..000000000000 --- a/server/routerlicious/packages/common-utils/.eslintrc.cjs +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -module.exports = { - extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], - parserOptions: { - project: ["./tsconfig.json", "./src/test/tsconfig.json"], - }, - rules: { - // The whole server release group is intended to run in NodeJS; this is fine - "import/no-nodejs-modules": "off", - - // This package has been deprecated. The following rules have a significant number of violations - // that will not be fixed here. - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "unicorn/text-encoding-identifier-case": "off", - "unicorn/prefer-node-protocol": "off", - "unicorn/prefer-code-point": "off", - }, -}; diff --git a/server/routerlicious/packages/common-utils/.gitignore b/server/routerlicious/packages/common-utils/.gitignore deleted file mode 100644 index ee26a5e7bdbf..000000000000 --- a/server/routerlicious/packages/common-utils/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Compiled TypeScript and CSS -dist -lib - -# Babel -public/scripts/es5 - -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt -.cache-loader - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- -node_modules - -# Typings -typings - -# Debug log from npm -npm-debug.log - -# Code coverage -nyc -.nyc_output/ - -# Chart dependencies -**/charts/*.tgz - -# Generated modules -intel_modules/ -temp_modules/ diff --git a/server/routerlicious/packages/common-utils/.npmignore b/server/routerlicious/packages/common-utils/.npmignore deleted file mode 100644 index f518002fc4dd..000000000000 --- a/server/routerlicious/packages/common-utils/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -nyc -*.log -**/*.tsbuildinfo -src/test -dist/test -lib/test -**/_api-extractor-temp/** diff --git a/server/routerlicious/packages/common-utils/CHANGELOG.md b/server/routerlicious/packages/common-utils/CHANGELOG.md deleted file mode 100644 index ca70647d2524..000000000000 --- a/server/routerlicious/packages/common-utils/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -# @fluidframework/server-common-utils - -## 6.0.0 - -Initial version diff --git a/server/routerlicious/packages/common-utils/LICENSE b/server/routerlicious/packages/common-utils/LICENSE deleted file mode 100644 index 60af0a6a40e9..000000000000 --- a/server/routerlicious/packages/common-utils/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation and contributors. All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/server/routerlicious/packages/common-utils/README.md b/server/routerlicious/packages/common-utils/README.md deleted file mode 100644 index 731c47a1d222..000000000000 --- a/server/routerlicious/packages/common-utils/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @fluidframework/server-common-utils - -Non-Fluid-specific utilities that can be reused across server code. diff --git a/server/routerlicious/packages/common-utils/api-extractor-lint.json b/server/routerlicious/packages/common-utils/api-extractor-lint.json deleted file mode 100644 index 0f9ae261139c..000000000000 --- a/server/routerlicious/packages/common-utils/api-extractor-lint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-lint-base.json" -} diff --git a/server/routerlicious/packages/common-utils/api-extractor.json b/server/routerlicious/packages/common-utils/api-extractor.json deleted file mode 100644 index a2b0a68fb307..000000000000 --- a/server/routerlicious/packages/common-utils/api-extractor.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "extends": "../../api-extractor-build-base.json" -} diff --git a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md b/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md deleted file mode 100644 index e5784e8dd23d..000000000000 --- a/server/routerlicious/packages/common-utils/api-report/server-common-utils.api.md +++ /dev/null @@ -1,46 +0,0 @@ -## API Report File for "@fluidframework/server-common-utils" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -// @internal -export class Buffer extends Uint8Array { - // (undocumented) - static from(value: any, encodingOrOffset?: any, length?: any): IsoBuffer; - // (undocumented) - static isBuffer(obj: any): obj is Buffer; - // (undocumented) - toString(encoding?: string): string; -} - -// @internal -export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; - -// @internal -export const fromBase64ToUtf8: (input: string) => string; - -// @internal -export const fromUtf8ToBase64: (input: string) => string; - -// @internal -export function gitHashFile(file: IsoBuffer): Promise; - -// @internal (undocumented) -export const IsoBuffer: typeof Buffer; - -// @internal (undocumented) -export type IsoBuffer = Buffer; - -// @internal -export function stringToBuffer(input: string, encoding: string): ArrayBufferLike; - -// @internal -export const toUtf8: (input: string, encoding: string) => string; - -// @internal -export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string; - -// (No @packageDocumentation comment for this package) - -``` diff --git a/server/routerlicious/packages/common-utils/package.json b/server/routerlicious/packages/common-utils/package.json deleted file mode 100644 index 4747b325fddf..000000000000 --- a/server/routerlicious/packages/common-utils/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "@fluidframework/server-common-utils", - "version": "6.0.0", - "description": "Common utilities for Fluid server code", - "homepage": "https://fluidframework.com", - "repository": { - "type": "git", - "url": "https://github.com/microsoft/FluidFramework.git", - "directory": "server/routerlicious/packages/common-utils" - }, - "license": "MIT", - "author": "Microsoft and contributors", - "sideEffects": false, - "main": "dist/index.js", - "module": "lib/index.js", - "types": "dist/index.d.ts", - "scripts": { - "build": "npm run build:compile && concurrently npm:lint npm:build:docs", - "build:commonjs": "npm run tsc && npm run typetests:gen && npm run build:test", - "build:compile": "concurrently npm:build:commonjs npm:build:esnext", - "build:docs": "api-extractor run --local --typescript-compiler-folder ./node_modules/typescript && copyfiles -u 1 \"./_api-extractor-temp/doc-models/*\" ../../../_api-extractor-temp/", - "build:esnext": "tsc --project ./tsconfig.esnext.json", - "build:genver": "gen-version", - "build:test": "tsc --project ./src/test/tsconfig.json", - "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json", - "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" nyc _api-extractor-temp", - "eslint": "eslint --format stylish src", - "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout", - "format": "npm run prettier:fix", - "lint": "npm run prettier && npm run check:release-tags && npm run eslint", - "lint:fix": "npm run prettier:fix && npm run eslint:fix", - "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", - "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", - "test": "npm run test:mocha", - "test:coverage": "c8 npm run test:report", - "test:mocha": "mocha --unhandled-rejections=strict --recursive \"dist/test/**/*.spec.*js\"", - "test:report": "npm run test:mocha -- -- --reporter xunit --reporter-option output=nyc/mocha-junit-report.xml", - "tsc": "tsc", - "typetests:gen": "flub generate typetests --dir . -v", - "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" - }, - "c8": { - "all": true, - "cache-dir": "nyc/.cache", - "exclude": [ - "src/test/**/*.*ts", - "dist/test/**/*.*js" - ], - "exclude-after-remap": false, - "include": [ - "src/**/*.*ts", - "dist/**/*.*js" - ], - "report-dir": "nyc/report", - "reporter": [ - "cobertura", - "html", - "text" - ], - "temp-directory": "nyc/.nyc_output" - }, - "dependencies": { - "sha.js": "^2.4.11" - }, - "devDependencies": { - "@fluid-tools/build-cli": "0.52.0-315632", - "@fluidframework/build-common": "^2.0.3", - "@fluidframework/build-tools": "0.52.0-315632", - "@fluidframework/eslint-config-fluid": "^5.2.0", - "@microsoft/api-extractor": "^7.45.1", - "@types/mocha": "^10.0.10", - "@types/node": "^18.19.39", - "c8": "^8.0.1", - "concurrently": "^8.2.1", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "eslint": "~8.55.0", - "mocha": "^10.2.0", - "prettier": "~3.0.3", - "puppeteer": "^23.6.0", - "rimraf": "^4.4.0", - "typescript": "~5.1.6" - }, - "typeValidation": { - "disabled": true, - "broken": {}, - "entrypoint": "public" - } -} diff --git a/server/routerlicious/packages/common-utils/src/base64Encoding.ts b/server/routerlicious/packages/common-utils/src/base64Encoding.ts deleted file mode 100644 index 04e89f782655..000000000000 --- a/server/routerlicious/packages/common-utils/src/base64Encoding.ts +++ /dev/null @@ -1,41 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import { IsoBuffer } from "./buffer"; - -/** - * Converts the provided {@link https://en.wikipedia.org/wiki/Base64 | base64}-encoded string - * to {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}. - * @internal - */ -export const fromBase64ToUtf8 = (input: string): string => - IsoBuffer.from(input, "base64").toString("utf-8"); - -/** - * Converts the provided {@link https://en.wikipedia.org/wiki/UTF-8 | utf-8}-encoded string - * to {@link https://en.wikipedia.org/wiki/Base64 | base64}. - * @internal - */ -export const fromUtf8ToBase64 = (input: string): string => - IsoBuffer.from(input, "utf8").toString("base64"); - -/** - * Convenience function to convert unknown encoding to utf8 that avoids - * buffer copies/encode ops when no conversion is needed. - * @param input - The source string to convert. - * @param encoding - The source string's encoding. - * @internal - */ -export const toUtf8 = (input: string, encoding: string): string => { - switch (encoding) { - case "utf8": - case "utf-8": { - return input; - } - default: { - return IsoBuffer.from(input, encoding).toString(); - } - } -}; diff --git a/server/routerlicious/packages/common-utils/src/buffer.ts b/server/routerlicious/packages/common-utils/src/buffer.ts deleted file mode 100644 index 8c536decff92..000000000000 --- a/server/routerlicious/packages/common-utils/src/buffer.ts +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -/** - * Declare the subset of Buffer functionality we want to make available instead of - * exposing the entirely of Node's typings. This should match the public interface - * of the browser implementation, so any changes made in one should be made in both. - * @internal - */ -export declare class Buffer extends Uint8Array { - toString(encoding?: string): string; - /** - * @param value - (string | ArrayBuffer). - * @param encodingOrOffset - (string | number). - * @param length - (number). - */ - static from(value, encodingOrOffset?, length?): IsoBuffer; - static isBuffer(obj: any): obj is Buffer; -} - -/** - * @internal - */ -export const IsoBuffer = Buffer; - -/** - * @internal - */ -export type IsoBuffer = Buffer; - -/** - * Converts a Uint8Array to a string of the provided encoding. - * @remarks Useful when the array might be an IsoBuffer. - * @param arr - The array to convert. - * @param encoding - Optional target encoding; only "utf8" and "base64" are - * supported, with "utf8" being default. - * @returns The converted string. - * @internal - */ -export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string { - // Make this check because Buffer.from(arr) will always do a buffer copy - return (Buffer.isBuffer(arr) ? arr : Buffer.from(arr)).toString(encoding); -} - -/** - * Convert base64 or utf8 string to array buffer. - * @param encoding - The input string's encoding. - * @internal - */ -export function stringToBuffer(input: string, encoding: string): ArrayBufferLike { - const iso = IsoBuffer.from(input, encoding); - // In a Node environment, IsoBuffer may be a Node.js Buffer. Node.js will - // pool multiple small Buffer instances into a single ArrayBuffer, in which - // case we need to slice the appropriate span of bytes. - return iso.byteLength === iso.buffer.byteLength - ? iso.buffer - : iso.buffer.slice(iso.byteOffset, iso.byteOffset + iso.byteLength); -} - -/** - * Convert binary blob to string format - * - * @param blob - The binary blob - * @param encoding - Output string's encoding - * @returns The blob in string format - * @internal - */ -export const bufferToString = (blob: ArrayBufferLike, encoding: string): string => - IsoBuffer.from(blob).toString(encoding); diff --git a/server/routerlicious/packages/common-utils/src/hashFile.ts b/server/routerlicious/packages/common-utils/src/hashFile.ts deleted file mode 100644 index a90a38980bcf..000000000000 --- a/server/routerlicious/packages/common-utils/src/hashFile.ts +++ /dev/null @@ -1,24 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -// eslint-disable-next-line import/no-internal-modules -import sha1 from "sha.js/sha1"; - -import { IsoBuffer } from "./buffer"; - -/** - * Create a github hash (Github hashes the string with blob and size) - * Must be called under secure context for browsers - * - * @param file - The contents of the file in a buffer - * @returns The sha1 hash of the content of the buffer with the `blob` prefix and size - * @internal - */ -export async function gitHashFile(file: IsoBuffer): Promise { - const size = file.byteLength; - const filePrefix = `blob ${size.toString()}${String.fromCharCode(0)}`; - const engine = new sha1(); - return engine.update(filePrefix).update(file).digest("hex") as string; -} diff --git a/server/routerlicious/packages/common-utils/src/index.ts b/server/routerlicious/packages/common-utils/src/index.ts deleted file mode 100644 index e85f1e9f9c30..000000000000 --- a/server/routerlicious/packages/common-utils/src/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -export { toUtf8, fromBase64ToUtf8, fromUtf8ToBase64 } from "./base64Encoding"; -export { Buffer, IsoBuffer, bufferToString, stringToBuffer, Uint8ArrayToString } from "./buffer"; -export { gitHashFile } from "./hashFile"; diff --git a/server/routerlicious/packages/common-utils/src/packageVersion.ts b/server/routerlicious/packages/common-utils/src/packageVersion.ts deleted file mode 100644 index 6ecdaac5065d..000000000000 --- a/server/routerlicious/packages/common-utils/src/packageVersion.ts +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - * - * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY - */ - -export const pkgName = "@fluidframework/server-common-utils"; -export const pkgVersion = "6.0.0"; diff --git a/server/routerlicious/packages/common-utils/src/test/assets/aka.pdf b/server/routerlicious/packages/common-utils/src/test/assets/aka.pdf deleted file mode 100644 index f3423703f542852aa7f3d1a13e73f0de0d8c9c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14010 zcma*O1yt1A`aTZQ-5?^$uO0tiSOz$5SA>}lhU_;!YP+Q`~ixmw!*BqXpsJl$;|&#--wQq$Y&qLF>j_OSL@7iGM$u02t%sPwi) z^b{Jno~U%~n`_yVtW6?b>G0&}hP4T^kq!Kk$4|SZ_Qk`O=`@}2ehv&0pr1NmZ2=9h z)xN?@DX9%PC}9f9>1xkiHI1dHqvjpHt<-)XA!&1GsL#7JYS+YAiKTH8h-(U>XnVWT ze)B9FM;-ksXKf(%@JVz^;(bD;8T^OaJ+_UD^`AB%e*H52m%YEfd4&ajRsQ*r#tB_lq^e#W-=T$w%^;{95?7(Tk>+G^sBAB^i>@{Ys7sGqzI{XO_M`rHhh+8pY*+& z=KFWU=}r6Vp1CF3Af0>h_b+bsj#>7{bEM*O440hut9ZJ|kuI2w-aKmPPSrzde1`sH zW2H*t5P)=ohSa$D_LMft*$g_cipz=5a&9Nh{EI|`Qky~o-rXW_WSNm z`|6}xj|9FKKele@a7O7jRM*E=4%^Js?iR@XW*J59J0v;IzP_ z2?4pGECP@sLKF#6(onb+A2>Wgt(TIRMZ%WiokjKzcXUIV41MtlRXt454c!FwX)m4| z4sM9T6YQuy6(I6rr~_u$5g}QDR7E0r5kaQ(G$FMSrk{+IrZ6eWpiE36A@s@hCzi5@ z?BNypGMeINjGk2On5N-3c^IDn{OI?{fe}O*4<;aZvq;S$b9JILm})cVkb&qbgHwS{0Nt|MfxA8&=_*te5? zk@PT(pwHvTGJw7tJD4Vzb}4~wsE0KX%LvsejDS83z~s!NOGt&eg?S%A1mo8VEz|I1 zh$8eGFtKEN_j*>UQ;CK}J(*M~iitv-i7m4+R9DH7!IVXurHej!M8sOb{h{F#GmRRi zT!1+<0aQ{mVd9ZWa#;nb zmM<-{EMqLgR|N*Om^-1N&=z8i@+UiWUzm&OsiY^0{l2s|sx^wt+sp$WDF_waP9*OP zp3!Z0onhH9+Zb;=-k{l_+GrTnMu!0{u0Yz9#c|1T9dQY#{F`m#YvW%9YaPsfcCw{j zv%9bdq%x%1rXr^%RH*8?PLWP!S3IlGm;^eqI6@rf9B-$%E91vY$9;0fv(5Q`uHQxP z*0smHXuWYf@81>QO{U7C>ZYQk(xXb}9}=L*LW+Q{1CA8xca!f8S^+A!K`G6SY& z9>8^NnHyrk`PDVwOSwKv6fIPWS6h`e7}yo6H;j>(Lb;8Fq*_c`bbO>WRCo+{%xkp{ z^Ch%$t8(z?D91IchOv@`&8F&dt|jlD z?}4IOrgaPC9qJw97x)(pw=B237~;{s(OvkLv!33MJ0b$7i1xNuTE~v#)-YK8S>H`4 zl`dr)jvsQrD&eH~$RJYUS2OeV=6 zNZ-kLM~Yzy;F^-%cs%6hrs^xFO^_SykA$Rw>{f8M=m zqx{2oO`>_9;d6FcYPv^Dgg;|QVC5UCHD~5+J{zbr$sN(R(5)ekt@vZpE1SC{)bxn@ zh|jX=1Ew)nN;OJkN^1`^q?(q!>dj9=*UM89QwrHY<)6zxIz%*HHBLw~LtfQ!n1aMv zyLkHf3xP82qYhICdL#u;J}0R@_As>V$awuj^;|KI=?!zZAx?v1{i2?<&41zV%u5#`O8Nu+x5OkZEaXHutG!*|d5Ceo}DK((!b^ zTOVTl+=9R%!8)OludKdHxzgBTLD zq%@tu?=Ll-s->O{LcXn3^^flr?6&vV1)B%UepftB8dr!^C?19-cuk2;&IpwWr3k{} zp+oQ1o)5d;FQ3c!lT_|#f(qNNP=)Ei$E(9vbcZ>(Vsn140xNb{?{hDjKN-C;%Afu= z9n)MS=-{vFzqAuFk^N}w5trnfp8;oa7nxZNqjoCeNn>Ph-+*&{f=;A|B9CKZD56E4 zdP=l6u7Am{sjFH15Sm_VcHHJ({8kil}^*!o7ewwx;C(V36$YH1H z@LAW6Tf=?YTJ`I0w7{(!(_5a!i}t{c*FUqVQDV_=4!FDhf0}(0-w9m2|BO*iU?vHF zA$)ItZ?(Txz>2NGo>L)NeLr_ zu0plKc-(c|!i#rjgGV3Y(kIp;d)R(7U#5Pp%nkCn?Xt5R88~wKyq77dyja!^zL~yw zwq?D&KH=kVSW^0Gv9eq8BJ@80*6M6HX=h*KN+UHlUeYH3>+Zyt<(ci~(q+Wy?SIqm z-!$|$*+!7!zxe7eX8Q|6kYFVl8EJ@zjWysmht&p{{?+Ce`~Hj4{!Pw3{=ewC#4@tcbC=y+Lr z{tg&)-Mwu7Slurx{-~5SFjO&+;*fzjJ6O6q{K4L3Z9J^p9o#%!-LZN9j4O0q^;{f& z$6LIA1`_fP?jD{p_7Haf2*KG^A%7P55jH(_u=ce7Z55v&fL{m<;1>|U<`dvUgd1Q0 z2+Rur2@3*1{9u3pQ0PBx{vV+q@Bh!(&ot?yV?U5E;_$^Q@senZIfrEQxcnm2fNcV= zTcqYj{4gW(diSHRKGRA%+YtPvgV+268O1M%yArARA zPVLfcDmZv7Px3|4uv3cnRmjNVSNRTJCdxgt-J>9WLgTN2%&7PWV>o11jGv3WYEn1oPnAx9VkW!1K?QORz z@ZOZ0z)0eDjV7q7d3NN$5WUmQ?Y)Le&5J4*vnl++LPy*jv4y?)!gFoH9f|B!ZT30M zGpS<8IB};ED27=X-PVHL)(*{?!0H`|uAFK=(;cvcTJneB+Q-tg`I3NsD4z0`g2ciP z1|e57>VvD5^>VW{yC|&3R7s(<+oe4llcI{yoOCjC(fp|CUXP9Ttx2--Y7=}3L9@a~LLYlNQ zp;q<@6ADSImSu^_{A_M{T)}F{Y>z_SJM|>CIic`C-8v;h!RrUI6_kGhR5s5A_k+FV zP^|@aM9i_l@gdDP4Qd(HFlQp$2H=~BxyPyrK5VsvW>*utw|&2Gs_j8jO?7HU=0E<0Q9D0^&qsVUdt-(m=>DNeD}%GOl58 zk`l8F5y&PsNFiem1}84j&&Y&LVuEBcc3`?VI?SrYKr&bgjt)zld4@Km1Pi2>!3I+$ zw}k?kVWc=9tqd#}DVEM-xG!V~3#6aH3nRr$=26W7w!y9hA?aF zH8K{N3{Qv{tTj@Jgheld2-X^*M8sm4!2}_WR3aQ=Q|$ykhYet_5e{+3sbxHbRKW}) zcyX+VhaSgCJ?sLCKpJ885n4Ef#PY;Za`F63a0iGw)@dP764OIF<0s~67jOydv>LdC zdFl%J!3>{)1u(>De*3-*l>9t1fc-{giIkZ$5bTo7R|}IyHv4kZz(wYA7~EAT?y0RFE3-O?F5SBRmymLJ!}7nXtgkAlzh|#1I(F zgcB|Y+b7zThHw*Z20*-VJaT|r*b^LZZiqK_gG|PEm@|oOCD1rxjuXxT5yYNggrh^I zaT?S!nqZzd4e}XNuqxsbm5fwa6`^e#FdN26QX-S#4VjN{AS;o}u!Uqr7_!5OAykou zoNxvRIW`F~%VRhg#!1KmPz?v3MrN|AW&=GUGa2EW5XZ<&Hr03_C?bWrRkkpi`69WJ(kxqwim`H=0P*zb#6(rc_d}mSxUr z)G3cIN-c^k$}EbpW*Z^iolz_vWQtWJhejxdF>NJs0m3vbfH^06lcte@qedq=zTitggFG6f}huat?gbY!U*z}5Uo>RLMrP&!3*?Sb>h14)P3eU3U;@~3GGM+)1hXvq}I+eXbVHk*0Sc0he{?$e#z^2 z*xl+UR3nv4wVKK4O0Tt!n4uI(W&ppOth>;4Ft&us3GT=QlSa~Aj*)~?F{|QhC{2F* zuo7+Iav@VfA`J^zmQRt3Kzj!QjaI}@#FZshe*P&*5yqe>8KZgv7(rp`VQkASN?7k! zd{A@qr7LBF7J9GiBQ#>l($Ocn-(mr!rijkRgF>qv%i6UvAz74qQJoL_-@Okr-G1j?9 z&%N_JX-C?K?2w8VUy=w>J3Ji#BiAQeV|Xp8-!~^Y#|wY`WR2ssq*@qyQdrXG%jC*+p-5k> zV_!!4DNP6T5l?J=g;k$|8g}9y3~kDoCA9LF1DDdHjPIrr`G_Tz*hU%^ITtAub;|jf zS26SXGp)4;`YyGwl%5apJ}QnOQXu4`Up2sFD`=O79up~Whpm-u%)Sh#o6UF`Zk~v( zcv9|9+a=8%lK_op8OgUURFsEWCtJ(W1f=mPb*6yA-Ai=%2yC7w7isnALW!8Tp`_6D zmt92QWQGgo#DSNAY)qj8O2it(3dAapXeRsArKpu~V^RmCxjs&Qk(FYM36<3-C`>bQ zEYHu&l9gjf0{%>_9{dP?=H!)I-_#Zy@e}zi>QAYC|AB6lr7+jt9-^NVS5#i+`FG4$ z4+8Mj0Y50ONWF6N?lg{guQ0Cs;e3}%mLdyup*>+eAp}IC`1hbIq|SsB|4%-BqRSe~ z&-Rorji=uoNJ=j?dbcgr*>;#?)b{l_p0}AJ^MqTK1!KLVsIL6R(<@2v6XR;DisRe3 zQF=%2JMZ?~W^ND3$nGA6Zq`1MUP({VafRNsW!?`)mxXCw2MU~f3(;KE-=cc~!Y{A- zm+2=TJy}4qB>F^PeU#@Hdy9Oke|ZT1x^Vf%r}Y*tx^Nll-zRP%*-HJ*X3S#=s|)4Z zYl#-A%gm?ku8}=xKWyDd?p%}hVcM&OEwmRXTNmf(-e}&a-WT67Gkg>`AJsf+5^esz z{q^_&Ke%eFQM^u|uG-bfLd8PI!egnV7cv!DCF2zutZZRruJL4oWT_!v;r@`eyjG!N zKWXSpk$u|g@c68Zi~7OdgT32nwAuD{udcmyudI=i_O(4-=WJ^#8WEAYu~dD$b60b_ zrl+-dRal;v)mT*r24n`I$lN?;uD zL5aN~N0%P#>jm5QjR`QEDT`Cj-cWoTA6W$4b} zR46-*7&U}$g)+bS6d6t#ngmSOl^ELadE^tg^97i`FS4sWJg@zYt%An5UYA$M&?vc+ zj{h zuR1_=^=|seHuu)0v|<;h)RSIEg%)dxevaM|<%TBl?SbRD)#!|}5sT8(I&|~zd7&RG zQ}MiFt#=r}P7=WvGdw9?6eFB z!19fJqqcPa9`j?FZy$Ivv!$X{#QoiBm!|C`O6%5YNWH4ra6unYs;?lq)0e%{ecd=Ip!*f>(!j3inB$~>{jr#AD#&9oWA~@~ zTa-KDozy_;w5rQKmm{{G$B{*}W&n#_hBO%y`8=H@JV| zI2Qdxv${(qc$W)_Mg0(^yS3H zGzoTlO@J71^oA!~8CZ_JxWGrc;q01N>`%atQGztFOG3*nurqL3LWwnTS;DaLFiFFX zEodI%423*MBsh7(eH8i`fD!kAQA+UrgUntWz9%9_NJ5Gz4-plXB^E@S%A zh@sP>C4}@Z6Fx-6=tKOUxFO+&U~XgZ`4WmD1z{Xu1TIUs@w8&>WB7!3^ky&PyNR~q z?W44W8TWo%W;rr;V{An>A*ex_33KY5T4q0@c4KaRV1mz$;@?-iOiYMQ5gyx1>qg%i z(v*6xyw(35eJj*Mif0zhJM58#=q!437?%ZT7F95ewhp-pW3Sif6W(;llm*%L1CBoI zIvUR~n>>`paKTU5Mo&QY4^;YyKVg!G%URH4h602!IFXP)A#H~H<>AB8JbF1bacsk= zfGDaMQ+e3BVc63b96hQ(=c6fZnh1`bN=OVXrDgkB4Pm@#^u+qHtQ3r6Ra#5+14Faw zb+yHwAx{vuwf~&nKBj+qQ{94_P+j1@i#Jd59LYYxes#l(dr5M2*UvSUPrO(CMn-08Rcy6oW$G8l zNv`n2Ck|{zD<=h4xklBH1!p|tVZl1uW+KUjqrF0Avle}}%R05IIe2qjwKMhCF>l#i zA-1INWpfp>LWQ=hUn5h&>Di^i`J{6n$LuI9rY`DYX9o@5nRA;4l;~xc!ng-T%!jz` zde$#<^gPfy!c0ek!cSKmz41EIOcPF5TlPzG<^}!6xR*2aZ{DG}_JeZu4qT#HeJWR@hh4!F-nrU77#+zAkxjGXtt84x9YkNp z5Be6n6VBh=9-k)D9h6-lUx?alSWk~LIEOsyRhEF`*Gn<~kem{K=`=iki!19PH)ahU zz;94+ixL}qy{df56ePROJMdbzP=l?y?2hSH++W#Y&?$GI?VPhlbG(6KHg@0Uf?s(! zWot|GMP%2InVqYWe(TdY$>V@mT?O|q2kZFms`nvPLu$@gK|drV8rk3@7kGh^jSk!X z=eX1K0?T;o_Xfo%``Q6~?`}%d)4pAa&i2&#dRuH8pIdI1=^WaNYAi{dMFy`#QaBs* zxIDYenyPHquQ6C`t19fOw%LIW4aSm3g@s04pYHB$j%A8hdfR@C+nLf!CEKw1@x?)> zR5eFeTkN^CmQ;}0LD_zls%w-e+ajdJ@FPp1RPBW0q;GJJ@kX`F$@@9AdX}%ER`Rqw z{%?rvY02%O;+T553-T97K_AORDvRm3M1!WkXmH)z87X^@lL|8P%;;>Kzvt0=As+q( zb_2LuRCayOn5%i`Jm^%P8b%g*=6QCc%j~89!n%A!hxw`NKJHTiz0D2fdt05zmV$+p z^ba>`wg#ZLVxwOdc;d5I*yIH&9JPC1QC8jA*m&vddAu=sN>^3kSzH>O@~~3VeWV@R zuy*}~Go9DgJEm0f(*Ej;l&F)#iQ#}UA+`6c&<3PbU z!r}Csv0?X-yxgWdz~wYX`96fJ2J@8SO1i!xW`>4LU<|2thfKh(UC58OL2t35WczSv zjH#_@;apKlm@y2!v&9ApiFoX!m$O-QajSba4Gv>Dw3`-9{hNtQ{)Zb zig}J`yrZh3$B$9sY;O;T%U3;!vTc=96~=^+x5* z`84IaRh>&5rn*aq>D*a8K;QRc8CwNW7P67!S#L&V?la49XitEfPYc*-H>4H^`fabPkv4FAziCLNI9Xd#Z^U;j8{*-!Cj@C$ zr5h!@Y8K2J8gs%2eN#MIp&L>qxMBL_`sD^MsBo#Ez5-Yrpv3T!M&7t^0G$)6=YGz} z`Wgumz`Wpk)`8EK`PkE7S5Ad?Pwv7VM7H)ZiW#QzB@_ejnGur{7vJFF3CFm-))-xD z1e4b)O@DmJ=)}-?&-eT>H=UQ};sy`K^zM}F*RzMLQ+=r9s~X<3xcav_U!BhR*$rp$zJG&iob^qj0|LctEjmn;JHM3ix#aqYFL&sJ{nvW=eC ztVHPETowQ>qt+7>dhFf6bV2tV;Oor)d;HJ5|NNnj9gG1qNkI%Y-Hs4n)2WDsQ z0CFaeR|nk`Ruqa_EY_>dbejbIfP2CUn^rs%A7KOIGP3i}Kh9XUaAcT#Rvscy$+l_E zvbK^SUQPG+Kzu%>gB2ZxKUMZGz&o1vo{J;0A$T)tj{(Q8aJ(`&>c9x!Qp;U-*u|I= zJG3>qz0ONb|59kwY&*rjb|8QM@uhF9oZUK~^)cc2F{#}7-FvPK9}{Bq=nMarBbB$l z>l-hw7ZP%V;a-^3sgW>Ag7>ijer-{?3f0QOG=c^{Z}Iuf(f24f4BY_Lcg^Sk*COx7~OV2jl7t^Vd_YzpdwcSA35TeHEuf63kaiHo0yT`(A1B@=*FFo&bWnIR@&)Xy(JS+{W8 z!>V5`C5eq{3w3D1I;W4cF=NW|d1Hl&xOx>DMrW4F#&6hQmj#_e3h{W#`f<)?nl&WZ zDfa`$)#oD>1D3j$MfLmyPX*zUJ?fB?Mni!NGf8!Eio@?odaYewP9EPo`93wFvhORS zW*AkIowICJdesr%O2Fj}Q4i)FX+F^>&$~S-EFVIFiM5;J{vP>B2I&OG{gMeMezxj{PSOT6JNM3v zkp;bxw-L`k+!Tr%6n(Aqp2Su5!%#l=Kdx5VDJM{W#36j%7c&bDBhl`=r3*UBzpu1< z4GlY{>posF2#BT4wG^L?tdUy`Hs31QxsxQf?znid&iAu4?uWH%D(?o3y^N+_7R`3D8D3n+)|af8?oPePHgfuukY$jg z^;IwR`1NAauBu|Zz(Y$NlDFmf_vJoKysSObLwB0_J2xwiO)e*^UsTV}S;CbIC-6#` znGa|@>Mvf7Q4P%xjyJu&`@0f^rN}E;$<-`w1UK&dr z1|?K~Gex+AATozr+h_mxN5ts*PzmF zyUc0`S~08g^}Ili+tF5&3e~$;bSLAG+!HPbPPRIZAd`_?)A z#`CblhreVSO5mAGl;$YBJ;quaR?8^kZc1<~Zna`DHgR<5+cfILm#PR}Rh<8Dr-o~gmpb>;IC zs{N7X^+{4!M-vwdyMCP*zhdyz=?9K?xh@Yy$`@-)V}GhrYwEw(7LgjIofr2 zV96jT6!ccU^7|RYp=s)^W!*!5$F8Zzfr0amKx%#}F^5<`-SAR6^JKxSD)}ZOS3x7_ zeknojn7i<`9uBA?5X~+yJEa6(#xeaG{Bn)euX({a$u?efb$sEpXt#A+Rw^|nEC_6& zU{#aBzRemSy>^9KQq0_2QXCJ;1ctJ7d#H+)E6ssRq;@1R_U`ZVT21ucc!x!}N=sqn$0jvPe&p^Je32=W14`;Yj~<%T(|1MpJVY>%3FRu;+xN6wxss=B_Lal85#2uPpH4hXXn62h&PzR`mqLiQ zy>b3&U7|s+uuOo9P0+{ML;^Yz=LPg0#CwTIfU#6?1`HAiQ$U#)WTP^T=Oc7TR$ zUN^K}l^?FY>9tY7p;$8G4ytu~G-S>OykkzoLbE+)e68|HD_HO()rhvSjPv?XgFkS$ z%!41?{%AMmbZWHM2#XowF#LB<0 zaq9KCehln<{`S~GWa{0q%Gevw=GzKhESC7ODxq6t3etocnk}lGTAaySg-!TZK^~8x zBAQaOcn+wN9Xvx*2RNU*MzfJik#R`JHmK{h5}>U5dfaokc=nt-fn!>fo}FO%d7#V89)mxFES-|apeR7fb1|qi2PDya4yd z7@Su5+texBPutbc^%n#yKbB1!uU3mmE-F>HPO;Pnj1;^L&&+htwyj73OP{nC!AaRb zhNJ4xdXnO|25iIhgD>3V<5yVYr%JLG_~k8W-^y`DA6iU4NyTX>5XQ+Lox{1$S=w<& z*TWB1H6lJtvECfF#pv-_4T$LG4SD;iP;9F1N-L;A_FAQfNc>_Y(86RtPgi6)J3Sny zqT75XM90HqhfS4tjP{2wmaF~{M~l+Z#2xvLl|=b5ykCHD>+%Gbz>7Ze_0~&IdaSX5 z=e}!7IN{WG?Y=V5gHL;&zR6+6TLV?w#Z!H?4ZFr(ER{bdExQJ*CMc`X**2|BEaUX6 zLDa>csZ^Y`ouRDymofB1W!3AYsf#(p6mM366-(ViMejA;y+rJwBrQmw32C)KY=l~25x*2X>5H~+S z%M0S}`2v8*!uXxg;p_RYPJDl*Q#}4P?%(jQjEY|xm&dXqd_Z1dpa6)M56CCP3pN4* zSrPBQTmB_9d;B-_m!8e|Z;9Jqi8>e_(vVh}HiC;|C&CYyXLX_&^9}_)qM2=^q$~ABfN<{iB@#@W18& z@%@r4{bxH6NZ`LQFhXqi&vt_U!(On!f3@T1`=zw|k2!b|TlGIMgsAVo+6n!0&AbSA z`{%wOF#dn;3j!1V=UNcw2K={k^K^$GbX@Mg^TBi+ULafuA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/routerlicious/packages/common-utils/src/test/assets/book.xml b/server/routerlicious/packages/common-utils/src/test/assets/book.xml deleted file mode 100644 index 64056b04956f..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/assets/book.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - Gambardella, Matthew - XML Developer's Guide - Computer - 44.95 - 2000-10-01 - An in-depth look at creating applications - with XML. - - - Ralls, Kim - Midnight Rain - Fantasy - 5.95 - 2000-12-16 - A former architect battles corporate zombies, - an evil sorceress, and her own childhood to become queen - of the world. - - - Corets, Eva - Maeve Ascendant - Fantasy - 5.95 - 2000-11-17 - After the collapse of a nanotechnology - society in England, the young survivors lay the - foundation for a new society. - - - Corets, Eva - Oberon's Legacy - Fantasy - 5.95 - 2001-03-10 - In post-apocalypse England, the mysterious - agent known only as Oberon helps to create a new life - for the inhabitants of London. Sequel to Maeve - Ascendant. - - - Corets, Eva - The Sundered Grail - Fantasy - 5.95 - 2001-09-10 - The two daughters of Maeve, half-sisters, - battle one another for control of England. Sequel to - Oberon's Legacy. - - - Randall, Cynthia - Lover Birds - Romance - 4.95 - 2000-09-02 - When Carla meets Paul at an ornithology - conference, tempers fly as feathers get ruffled. - - - Thurman, Paula - Splish Splash - Romance - 4.95 - 2000-11-02 - A deep sea diver finds true love twenty - thousand leagues beneath the sea. - - - Knorr, Stefan - Creepy Crawlies - Horror - 4.95 - 2000-12-06 - An anthology of horror stories about roaches, - centipedes, scorpions and other insects. - - - Kress, Peter - Paradox Lost - Science Fiction - 6.95 - 2000-11-02 - After an inadvertant trip through a Heisenberg - Uncertainty Device, James Salway discovers the problems - of being quantum. - - - O'Brien, Tim - Microsoft .NET: The Programming Bible - Computer - 36.95 - 2000-12-09 - Microsoft's .NET initiative is explored in - detail in this deep programmer's reference. - - - O'Brien, Tim - MSXML3: A Comprehensive Guide - Computer - 36.95 - 2000-12-01 - The Microsoft MSXML3 parser is covered in - detail, with attention to XML DOM interfaces, XSLT processing, - SAX and more. - - - Galos, Mike - Visual Studio 7: A Comprehensive Guide - Computer - 49.95 - 2001-04-16 - Microsoft Visual Studio 7 is explored in depth, - looking at how Visual Basic, Visual C++, C#, and ASP+ are - integrated into a comprehensive development - environment. - - \ No newline at end of file diff --git a/server/routerlicious/packages/common-utils/src/test/assets/grid.gif b/server/routerlicious/packages/common-utils/src/test/assets/grid.gif deleted file mode 100644 index a7d63376bbcb05d0a6fa749594048c8ce6be23fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9137 zcmd^Ce{2&~9RIw>-PT_QG431QP zvakQg;WtjzMP|S9n7?iLe0=QfU7=RAtF&EfD}t($pna@HrFy3%ph-d*)Vn_B9G~J= z-6|D7{meg_%c2O<1XKe!RH|znLgVDxn1%!iCdkU3m>goCwGO`jK=j_NO=uhX^3|nY z{Pe~1M`(BS`&#%&Sc=R@JqRC6K*G>9+7Qu(bdGF-sU>r59n47*F6M;Rq!CGA6qVAz znSq)nsB&);q&2;b@I?7DD1EQ9rqTdu{6x z>uHh8DCbtZ#CzY^{AExAA1qi8Bsa-8J-iN2Bp;WNF8*=~fst(8W%1cFRxUX)@^sD7 zW3?m47ES-|^WP~^tqTJ4YveK$`L*#VcK>%L!!n*rioJbq3&BgTd9@^GTw_H}$I4|U zisCN?|5N8S6CBuY!lxJ3@2tCOj|!t%t7BhKM$#b7T_~2$|bn zN6Zg}>J3Jb&>`Og>|OPYgDw8!YX_?vmaw*t*k1v+Z&FGYe5w<9{^x&x*DQf$ zPF*_PxwiT8*{)}kFPa5(b7d3Sj(R^l4#-q&tx+hnFtj>B{GFv17ZxB_MgpP)K&JYB)e)_Tt!Q14#N@#ooh z5c>9ZlIOS=Mj-g)9vuZy9HFk26vv|y;?-3MUzlNIPjdYcnRbKNu(Qk<1*0_MDkhPe s>n@H(`~Rtg@X{{%V*v$z}6m&0B8Lwm(mGn;B)hSOJ#)4?&}?Q2+n{ diff --git a/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts b/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts deleted file mode 100644 index 70faf6772fae..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/gitHash.spec.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * Copyright (c) Microsoft Corporation and contributors. All rights reserved. - * Licensed under the MIT License. - */ - -import fs from "fs"; -import path from "path"; -import { strict as assert } from "assert"; - -import { gitHashFile } from "../hashFile"; - -async function getFileContents(p: string): Promise { - return new Promise((resolve, reject) => { - fs.readFile(p, (error, data) => { - if (error) { - reject(error); - } - resolve(data); - }); - }); -} - -const assetsDir = "../../src/test/assets"; - -describe("hashFile", () => { - let xmlFile: Buffer; - let svgFile: Buffer; - let pdfFile: Buffer; - let gifFile: Buffer; - - before(async () => { - /* eslint-disable unicorn/prefer-module */ - xmlFile = await getFileContents(path.join(__dirname, `${assetsDir}/book.xml`)); - svgFile = await getFileContents(path.join(__dirname, `${assetsDir}/bindy.svg`)); - pdfFile = await getFileContents(path.join(__dirname, `${assetsDir}/aka.pdf`)); - gifFile = await getFileContents(path.join(__dirname, `${assetsDir}/grid.gif`)); - /* eslint-enable unicorn/prefer-module */ - }); - - // Expected hashes are from git hash-object file... - // Make sure the hash is of the file and not of an LFS stub - describe("gitHashFile", () => { - it("XML should Hash", async () => { - const expectedHash = "64056b04956fb446b4014cb8d159d2e2494ed0fc"; - const hashNode = await gitHashFile(xmlFile); - - assert.equal(hashNode, expectedHash); - }); - - it("SVG should Hash", async () => { - const expectedHash = "c741e46ae4a5f1ca19debf0ac609aabc5fe94add"; - const hashNode = await gitHashFile(svgFile); - - assert.equal(hashNode, expectedHash); - }); - - it("AKA PDF should Hash", async () => { - const expectedHash = "f3423703f542852aa7f3d1a13e73f0de0d8c9c0f"; - const hashNode = await gitHashFile(pdfFile); - - assert.equal(hashNode, expectedHash); - }); - - it("Grid GIF should Hash", async () => { - const expectedHash = "a7d63376bbcb05d0a6fa749594048c8ce6be23fb"; - const hashNode = await gitHashFile(gifFile); - - assert.equal(hashNode, expectedHash); - }); - - it("Hash is consistent", async () => { - const hash1Node = await gitHashFile(svgFile); - const hash2Node = await gitHashFile(svgFile); - assert.equal(hash1Node, hash2Node); - }); - }); -}); diff --git a/server/routerlicious/packages/common-utils/src/test/tsconfig.json b/server/routerlicious/packages/common-utils/src/test/tsconfig.json deleted file mode 100644 index b58e17f1917f..000000000000 --- a/server/routerlicious/packages/common-utils/src/test/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "@fluidframework/build-common/ts-common-config.json", - "compilerOptions": { - "rootDir": "./", - "outDir": "../../dist/test", - "types": ["node", "mocha"], - "declaration": false, - "declarationMap": false, - }, - "include": ["./**/*"], - "references": [ - { - "path": "../..", - }, - ], -} diff --git a/server/routerlicious/packages/common-utils/tsconfig.esnext.json b/server/routerlicious/packages/common-utils/tsconfig.esnext.json deleted file mode 100644 index 1ea62d46b20b..000000000000 --- a/server/routerlicious/packages/common-utils/tsconfig.esnext.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./lib", - "module": "esnext", - }, -} diff --git a/server/routerlicious/packages/common-utils/tsconfig.json b/server/routerlicious/packages/common-utils/tsconfig.json deleted file mode 100644 index 9e92087afa65..000000000000 --- a/server/routerlicious/packages/common-utils/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@fluidframework/build-common/ts-common-config.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "outDir": "./dist", - "baseUrl": ".", - }, - "include": ["src/**/*"], - "exclude": ["src/test/**/*"], -} diff --git a/server/routerlicious/packages/lambdas/package.json b/server/routerlicious/packages/lambdas/package.json index 70e92389fbd6..54bd7df3b948 100644 --- a/server/routerlicious/packages/lambdas/package.json +++ b/server/routerlicious/packages/lambdas/package.json @@ -55,7 +55,6 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas-driver": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", diff --git a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts index f3c89617c6e6..bc4f52138ddb 100644 --- a/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts +++ b/server/routerlicious/packages/lambdas/src/deli/lambdaFactory.ts @@ -5,7 +5,6 @@ import { EventEmitter } from "events"; import { inspect } from "util"; -import { toUtf8 } from "@fluidframework/server-common-utils"; import { ICheckpointService, IClientManager, @@ -25,7 +24,7 @@ import { MongoManager, requestWithRetry, } from "@fluidframework/server-services-core"; -import { defaultHash, IGitManager } from "@fluidframework/server-services-client"; +import { defaultHash, IGitManager, toUtf8 } from "@fluidframework/server-services-client"; import { Lumber, LumberEventName, diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts index 7e115359bbe3..8674096e6a37 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryReader.ts @@ -7,12 +7,13 @@ import { IDocumentAttributes, ISequencedDocumentMessage, } from "@fluidframework/protocol-definitions"; -import { bufferToString, toUtf8 } from "@fluidframework/server-common-utils"; import { convertWholeFlatSummaryToSnapshotTreeAndBlobs, IGitManager, IWholeFlatSummary, LatestSummaryId, + bufferToString, + toUtf8, } from "@fluidframework/server-services-client"; import { IDeliState, diff --git a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts index 26fd47974252..587cdc8e62b2 100644 --- a/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts +++ b/server/routerlicious/packages/lambdas/src/scribe/summaryWriter.ts @@ -14,9 +14,9 @@ import { SummaryObject, SummaryType, } from "@fluidframework/protocol-definitions"; -import { fromBase64ToUtf8 } from "@fluidframework/server-common-utils"; import { buildTreePath, + fromBase64ToUtf8, IGitManager, ISummaryTree, NetworkError, diff --git a/server/routerlicious/packages/memory-orderer/package.json b/server/routerlicious/packages/memory-orderer/package.json index 7fb1ee3afb8c..c6f7d2b06eb5 100644 --- a/server/routerlicious/packages/memory-orderer/package.json +++ b/server/routerlicious/packages/memory-orderer/package.json @@ -58,7 +58,6 @@ "dependencies": { "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", diff --git a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts index 855513c4aec4..26097842b73c 100644 --- a/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts +++ b/server/routerlicious/packages/memory-orderer/src/localOrdererSetup.ts @@ -4,8 +4,7 @@ */ import { IDocumentAttributes } from "@fluidframework/protocol-definitions"; -import { fromBase64ToUtf8 } from "@fluidframework/server-common-utils"; -import { IGitManager } from "@fluidframework/server-services-client"; +import { IGitManager, fromBase64ToUtf8 } from "@fluidframework/server-services-client"; import { CheckpointService, ICheckpoint, diff --git a/server/routerlicious/packages/memory-orderer/src/socket.ts b/server/routerlicious/packages/memory-orderer/src/socket.ts index 74777f6051c0..ff78a87b2ab3 100644 --- a/server/routerlicious/packages/memory-orderer/src/socket.ts +++ b/server/routerlicious/packages/memory-orderer/src/socket.ts @@ -5,7 +5,7 @@ import { EventEmitter } from "events"; import ws from "ws"; -import { IsoBuffer } from "@fluidframework/server-common-utils"; +import { IsoBuffer } from "@fluidframework/server-services-client"; import { debug } from "./debug"; export class Socket extends EventEmitter { diff --git a/server/routerlicious/packages/routerlicious-base/package.json b/server/routerlicious/packages/routerlicious-base/package.json index a6086be4f254..d9fdce15a281 100644 --- a/server/routerlicious/packages/routerlicious-base/package.json +++ b/server/routerlicious/packages/routerlicious-base/package.json @@ -53,7 +53,6 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-kafka-orderer": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-lambdas-driver": "workspace:~", diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts index b172ef74f7eb..13de1d404f43 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/routes/api/api.ts @@ -5,14 +5,13 @@ import * as git from "@fluidframework/gitresources"; import { IClient, IClientJoin, ScopeType } from "@fluidframework/protocol-definitions"; -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { IBroadcastSignalEventPayload, ICollaborationSessionEvents, IRoom, IRuntimeSignalEnvelope, } from "@fluidframework/server-lambdas"; -import { BasicRestWrapper } from "@fluidframework/server-services-client"; +import { BasicRestWrapper, fromUtf8ToBase64 } from "@fluidframework/server-services-client"; import * as core from "@fluidframework/server-services-core"; import { throttle, diff --git a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts index adace502d99a..2585bf07b608 100644 --- a/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts +++ b/server/routerlicious/packages/routerlicious-base/src/alfred/services/deltaService.ts @@ -4,7 +4,7 @@ */ import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions"; -import { toUtf8 } from "@fluidframework/server-common-utils"; +import { toUtf8 } from "@fluidframework/server-services-client"; import { ICollection, IDeltaService, diff --git a/server/routerlicious/packages/services-client/api-report/server-services-client.api.md b/server/routerlicious/packages/services-client/api-report/server-services-client.api.md index 8fb4ec009c35..68ec7d2e7b46 100644 --- a/server/routerlicious/packages/services-client/api-report/server-services-client.api.md +++ b/server/routerlicious/packages/services-client/api-report/server-services-client.api.md @@ -31,6 +31,20 @@ export class BasicRestWrapper extends RestWrapper { protected request(requestConfig: AxiosRequestConfig, statusCode: number, canRetry?: boolean): Promise; } +// @internal +class Buffer_2 extends Uint8Array { + // (undocumented) + static from(value: any, encodingOrOffset?: any, length?: any): IsoBuffer; + // (undocumented) + static isBuffer(obj: any): obj is Buffer_2; + // (undocumented) + toString(encoding?: string): string; +} +export { Buffer_2 as Buffer } + +// @internal +export const bufferToString: (blob: ArrayBufferLike, encoding: string) => string; + // @internal export const buildTreePath: (...nodeNames: string[]) => string; @@ -88,6 +102,12 @@ export const DriverVersionHeaderName = "x-driver-version"; // @internal (undocumented) export type ExtendedSummaryObject = SummaryObject | IEmbeddedSummaryHandle; +// @internal +export const fromBase64ToUtf8: (input: string) => string; + +// @internal +export const fromUtf8ToBase64: (input: string) => string; + // @internal (undocumented) export function generateServiceProtocolEntries(deli: string, scribe: string): ITreeEntry[]; @@ -118,6 +138,9 @@ export const getRandomInt: (range: number) => number; // @internal (undocumented) export function getRandomName(connector?: string, capitalize?: boolean): string; +// @internal +export function gitHashFile(file: IsoBuffer): Promise; + // @internal (undocumented) export class GitManager implements IGitManager { constructor(historian: IHistorian); @@ -165,6 +188,9 @@ export class GitManager implements IGitManager { write(branch: string, inputTree: api.ITree, parents: string[], message: string): Promise; } +// @internal +export function hashFile(file: IsoBuffer, algorithm?: "SHA-1" | "SHA-256", hashEncoding?: "hex" | "base64"): Promise; + // @internal export class Heap { constructor(comparator: IHeapComparator); @@ -443,6 +469,12 @@ export interface ISession { // @internal (undocumented) export function isNetworkError(error: unknown): error is NetworkError; +// @internal (undocumented) +export const IsoBuffer: typeof Buffer_2; + +// @internal (undocumented) +export type IsoBuffer = Buffer_2; + // @internal (undocumented) export interface ISummaryTree extends ISummaryTree_2 { // (undocumented) @@ -668,6 +700,9 @@ export abstract class RestWrapper { // @internal export const setGlobalTimeoutContext: (timeoutContext: ITimeoutContext) => void; +// @internal +export function stringToBuffer(input: string, encoding: string): ArrayBufferLike; + // @internal export class SummaryTreeUploadManager implements ISummaryUploadManager { constructor(manager: IGitManager, blobsShaCache: Map, getPreviousFullSnapshot: (parentHandle: string) => Promise); @@ -684,6 +719,15 @@ export function throwFluidServiceNetworkError(statusCode: number, errorData?: IN // @internal export const TokenRevokeScopeType = "token:revoke"; +// @internal +export const toUtf8: (input: string, encoding: string) => string; + +// @internal +export function Uint8ArrayToArrayBuffer(array: Uint8Array): ArrayBuffer; + +// @internal +export function Uint8ArrayToString(arr: Uint8Array, encoding?: string): string; + // @internal export function validateTokenClaims(token: string, documentId: string, tenantId: string): ITokenClaims; diff --git a/server/routerlicious/packages/services-client/src/index.ts b/server/routerlicious/packages/services-client/src/index.ts index 43a900bea3f5..41f7e9a164c0 100644 --- a/server/routerlicious/packages/services-client/src/index.ts +++ b/server/routerlicious/packages/services-client/src/index.ts @@ -15,6 +15,8 @@ export { mergeKArrays, mergeSortedArrays, } from "./array"; +// eslint-disable-next-line no-restricted-syntax +export * from "./common-utils"; export { CorrelationIdHeaderName, DriverVersionHeaderName, diff --git a/server/routerlicious/packages/services-core/package.json b/server/routerlicious/packages/services-core/package.json index 6d811b06d7f5..7e775f5eab8c 100644 --- a/server/routerlicious/packages/services-core/package.json +++ b/server/routerlicious/packages/services-core/package.json @@ -34,7 +34,6 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", "@types/events": "^3.0.0", diff --git a/server/routerlicious/packages/services-shared/package.json b/server/routerlicious/packages/services-shared/package.json index 496ad360ebe7..78c6995c56b4 100644 --- a/server/routerlicious/packages/services-shared/package.json +++ b/server/routerlicious/packages/services-shared/package.json @@ -55,7 +55,6 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/services-shared/src/storage.ts b/server/routerlicious/packages/services-shared/src/storage.ts index 63d773996366..13575148e7fc 100644 --- a/server/routerlicious/packages/services-shared/src/storage.ts +++ b/server/routerlicious/packages/services-shared/src/storage.ts @@ -11,13 +11,13 @@ import { ISummaryTree, SummaryType, } from "@fluidframework/protocol-definitions"; -import { toUtf8 } from "@fluidframework/server-common-utils"; import { IGitCache, SummaryTreeUploadManager, WholeSummaryUploadManager, ISession, getGlobalTimeoutContext, + toUtf8, } from "@fluidframework/server-services-client"; import { ICollection, diff --git a/server/routerlicious/packages/services/package.json b/server/routerlicious/packages/services/package.json index 2861670958ac..a4a948f5a5f1 100644 --- a/server/routerlicious/packages/services/package.json +++ b/server/routerlicious/packages/services/package.json @@ -52,7 +52,6 @@ }, "dependencies": { "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-ordering-kafkanode": "workspace:~", diff --git a/server/routerlicious/packages/services/src/deltaManager.ts b/server/routerlicious/packages/services/src/deltaManager.ts index d6e79a4a674b..ae026e040a28 100644 --- a/server/routerlicious/packages/services/src/deltaManager.ts +++ b/server/routerlicious/packages/services/src/deltaManager.ts @@ -4,8 +4,7 @@ */ import { ISequencedDocumentMessage, ScopeType } from "@fluidframework/protocol-definitions"; -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; -import { BasicRestWrapper } from "@fluidframework/server-services-client"; +import { BasicRestWrapper, fromUtf8ToBase64 } from "@fluidframework/server-services-client"; import { IDeltaService, type ITenantManager } from "@fluidframework/server-services-core"; import { getGlobalTelemetryContext } from "@fluidframework/server-services-telemetry"; import { getRefreshTokenIfNeededCallback, TenantManager } from "./tenant"; diff --git a/server/routerlicious/packages/services/src/tenant.ts b/server/routerlicious/packages/services/src/tenant.ts index aeb3a8370502..da3933e47c92 100644 --- a/server/routerlicious/packages/services/src/tenant.ts +++ b/server/routerlicious/packages/services/src/tenant.ts @@ -4,7 +4,6 @@ */ import { ScopeType, type IUser } from "@fluidframework/protocol-definitions"; -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; import { GitManager, Historian, @@ -13,6 +12,7 @@ import { getAuthorizationTokenFromCredentials, IGitManager, parseToken, + fromUtf8ToBase64, } from "@fluidframework/server-services-client"; import * as core from "@fluidframework/server-services-core"; import { diff --git a/server/routerlicious/packages/test-utils/package.json b/server/routerlicious/packages/test-utils/package.json index a0c9cbf5fbdf..7d609ed55ab2 100644 --- a/server/routerlicious/packages/test-utils/package.json +++ b/server/routerlicious/packages/test-utils/package.json @@ -54,7 +54,6 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-services-client": "workspace:~", "@fluidframework/server-services-core": "workspace:~", "@fluidframework/server-services-telemetry": "workspace:~", diff --git a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts index a858c86813ce..aba2e426c03b 100644 --- a/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts +++ b/server/routerlicious/packages/test-utils/src/test/testsForHistorian.spec.ts @@ -5,9 +5,8 @@ import { strict as assert } from "assert"; import { TestHistorian } from "../testHistorian"; -import { GitManager } from "@fluidframework/server-services-client"; +import { GitManager, fromUtf8ToBase64 } from "@fluidframework/server-services-client"; import { ICreateBlobParams, ICreateCommitParams } from "@fluidframework/gitresources"; -import { fromUtf8ToBase64 } from "@fluidframework/server-common-utils"; describe("Test for Historian", () => { let gitManager: GitManager; diff --git a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts index 98460c608923..86de8fa5baa4 100644 --- a/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts +++ b/server/routerlicious/packages/test-utils/src/testDocumentStorage.ts @@ -9,13 +9,15 @@ import { ICreateCommitParams, ICreateTreeEntry, } from "@fluidframework/gitresources"; -import { gitHashFile, IsoBuffer, Uint8ArrayToString } from "@fluidframework/server-common-utils"; import { IGitCache, IGitManager, ISession, getQuorumTreeEntries, mergeAppAndProtocolTree, + gitHashFile, + IsoBuffer, + Uint8ArrayToString, } from "@fluidframework/server-services-client"; import { IDatabaseManager, diff --git a/server/routerlicious/packages/test-utils/src/testHistorian.ts b/server/routerlicious/packages/test-utils/src/testHistorian.ts index 49b517a96a58..0e959449a9cb 100644 --- a/server/routerlicious/packages/test-utils/src/testHistorian.ts +++ b/server/routerlicious/packages/test-utils/src/testHistorian.ts @@ -23,13 +23,14 @@ import { ITree, ITreeEntry, } from "@fluidframework/gitresources"; -import { gitHashFile, IsoBuffer } from "@fluidframework/server-common-utils"; import { IHistorian, IWholeFlatSummary, IWholeSummaryPayload, IWriteSummaryResponse, NetworkError, + gitHashFile, + IsoBuffer, } from "@fluidframework/server-services-client"; import { ICollection, IDb } from "@fluidframework/server-services-core"; import { v4 as uuid } from "uuid"; diff --git a/server/routerlicious/packages/tinylicious/package.json b/server/routerlicious/packages/tinylicious/package.json index 724d4cf0a020..71da6cc2d640 100644 --- a/server/routerlicious/packages/tinylicious/package.json +++ b/server/routerlicious/packages/tinylicious/package.json @@ -39,7 +39,6 @@ "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-base": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@fluidframework/server-common-utils": "workspace:~", "@fluidframework/server-lambdas": "workspace:~", "@fluidframework/server-local-server": "workspace:~", "@fluidframework/server-memory-orderer": "workspace:~", diff --git a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts index 66841c05b504..7e9627b3656b 100644 --- a/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts +++ b/server/routerlicious/packages/tinylicious/src/routes/storage/git/blobs.ts @@ -5,7 +5,7 @@ import fs from "fs"; import { IBlob, ICreateBlobParams, ICreateBlobResponse } from "@fluidframework/gitresources"; -import { Uint8ArrayToString } from "@fluidframework/server-common-utils"; +import { Uint8ArrayToString } from "@fluidframework/server-services-client"; import { Router } from "express"; import * as git from "isomorphic-git"; import nconf from "nconf"; diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index b1d1c3bbbd86..195e3c5c49ed 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -69,64 +69,6 @@ importers: specifier: ~5.1.6 version: 5.1.6 - packages/common-utils: - dependencies: - sha.js: - specifier: ^2.4.11 - version: 2.4.11 - devDependencies: - '@fluid-tools/build-cli': - specifier: 0.52.0-315632 - version: 0.52.0-315632(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6) - '@fluidframework/build-common': - specifier: ^2.0.3 - version: 2.0.3 - '@fluidframework/build-tools': - specifier: 0.52.0-315632 - version: 0.52.0-315632(@types/node@18.19.39) - '@fluidframework/eslint-config-fluid': - specifier: ^5.2.0 - version: 5.2.0(eslint@8.55.0)(typescript@5.1.6) - '@microsoft/api-extractor': - specifier: ^7.45.1 - version: 7.49.1(@types/node@18.19.39) - '@types/mocha': - specifier: ^10.0.10 - version: 10.0.10 - '@types/node': - specifier: ^18.19.39 - version: 18.19.39 - c8: - specifier: ^8.0.1 - version: 8.0.1 - concurrently: - specifier: ^8.2.1 - version: 8.2.1 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - eslint: - specifier: ~8.55.0 - version: 8.55.0 - mocha: - specifier: ^10.2.0 - version: 10.2.0 - prettier: - specifier: ~3.0.3 - version: 3.0.3 - puppeteer: - specifier: ^23.6.0 - version: 23.11.1(typescript@5.1.6) - rimraf: - specifier: ^4.4.0 - version: 4.4.1 - typescript: - specifier: ~5.1.6 - version: 5.1.6 - packages/gitresources: devDependencies: '@fluid-tools/build-cli': @@ -220,9 +162,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-lambdas-driver': specifier: workspace:~ version: link:../lambdas-driver @@ -559,9 +498,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -835,9 +771,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-kafka-orderer': specifier: workspace:~ version: link:../kafka-orderer @@ -1037,9 +970,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1303,9 +1233,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1598,9 +1525,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -1943,9 +1867,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-services-client': specifier: workspace:~ version: link:../services-client @@ -2052,9 +1973,6 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@fluidframework/server-common-utils': - specifier: workspace:~ - version: link:../common-utils '@fluidframework/server-lambdas': specifier: workspace:~ version: link:../lambdas @@ -11199,9 +11117,9 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0)(typescript@5.1.6) '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint-config-prettier: 9.0.0(eslint@8.55.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) eslint-plugin-jsdoc: 46.8.2(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) @@ -15382,13 +15300,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.55.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) - eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) + eslint-plugin-import: eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -15399,24 +15317,24 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.7.5(eslint@8.55.0)(typescript@5.1.6) eslint: 8.55.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1)(eslint@8.55.0) transitivePeerDependencies: - supports-color @@ -15426,13 +15344,13 @@ snapshots: eslint: 8.55.0 ignore: 5.3.0 - eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0): + eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0): dependencies: debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint@8.55.0))(eslint@8.55.0))(eslint@8.55.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.7.5(eslint@8.55.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.55.0) get-tsconfig: 4.10.0 is-glob: 4.0.3 minimatch: 3.1.2 From 3b0fe6d9c314c5a0222b1755852b3373429a8d6f Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 00:12:19 +0000 Subject: [PATCH 31/38] Cleanup --- server/routerlicious/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/server/routerlicious/Dockerfile b/server/routerlicious/Dockerfile index 54538196507b..ad9af5375ce4 100644 --- a/server/routerlicious/Dockerfile +++ b/server/routerlicious/Dockerfile @@ -57,7 +57,6 @@ COPY lerna.json ./ COPY scripts/*.* ./scripts/ COPY patches/*.* ./patches/ -COPY packages/common-utils/package*.json packages/common-utils/ COPY packages/gitresources/package*.json packages/gitresources/ COPY packages/kafka-orderer/package*.json packages/kafka-orderer/ COPY packages/lambdas-driver/package*.json packages/lambdas-driver/ From 10f65490937a982e60743dce9148b2903a6cca8c Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:06:42 +0000 Subject: [PATCH 32/38] Add puppeteer devDep --- server/routerlicious/packages/services-client/package.json | 1 + server/routerlicious/pnpm-lock.yaml | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index fb9d23d1de94..37eeb6626bc1 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -109,6 +109,7 @@ "jest-puppeteer": "^10.1.3", "mocha": "^10.2.0", "prettier": "~3.0.3", + "puppeteer": "^23.6.0", "rewire": "^5.0.0", "rimraf": "^4.4.0", "typescript": "~5.1.6" diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 195e3c5c49ed..262a72ea9c4c 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1215,6 +1215,9 @@ importers: prettier: specifier: ~3.0.3 version: 3.0.3 + puppeteer: + specifier: ^23.6.0 + version: 23.11.1(typescript@5.1.6) rewire: specifier: ^5.0.0 version: 5.0.0 @@ -12574,7 +12577,7 @@ snapshots: extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.6.3 + semver: 7.7.1 tar-fs: 3.0.8 unbzip2-stream: 1.4.3 yargs: 17.7.2 @@ -13559,7 +13562,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) eslint: 8.55.0 eslint-scope: 5.1.1 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - typescript From c479fa74cf33699eb23b6ac9a9d29019d9e1bd85 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:13:22 +0000 Subject: [PATCH 33/38] Fix protocol-base use of events/events_pkg --- .../protocol-base/api-report/protocol-base.api.md | 2 +- .../packages/protocol-base/package.json | 14 ++++++++++++-- .../validateProtocolBasePrevious.generated.ts | 3 +++ .../protocol-base/src/typedEventEmitter.ts | 3 +-- server/routerlicious/pnpm-lock.yaml | 6 +++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md index 8fd17b8779d4..323ac1cfd128 100644 --- a/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md +++ b/server/routerlicious/packages/protocol-base/api-report/protocol-base.api.md @@ -4,7 +4,7 @@ ```ts -import { EventEmitter } from 'events'; +import { EventEmitter } from 'events_pkg'; import * as git from '@fluidframework/gitresources'; import { ICommittedProposal } from '@fluidframework/protocol-definitions'; import { IDocumentAttributes } from '@fluidframework/protocol-definitions'; diff --git a/server/routerlicious/packages/protocol-base/package.json b/server/routerlicious/packages/protocol-base/package.json index 1e9678d44c93..3fa6bbb2456c 100644 --- a/server/routerlicious/packages/protocol-base/package.json +++ b/server/routerlicious/packages/protocol-base/package.json @@ -61,7 +61,7 @@ "dependencies": { "@fluidframework/gitresources": "workspace:~", "@fluidframework/protocol-definitions": "^3.2.0", - "@types/events": "^3.0.0", + "@types/events_pkg": "npm:@types/events@^3.0.0", "events_pkg": "npm:events@^3.1.0" }, "devDependencies": { @@ -84,7 +84,17 @@ "typescript": "~5.1.6" }, "typeValidation": { - "broken": {}, + "broken": { + "ClassStatics_Quorum": { + "backCompat": false + }, + "ClassStatics_QuorumClients": { + "backCompat": false + }, + "ClassStatics_QuorumProposals": { + "backCompat": false + } + }, "entrypoint": "public" } } diff --git a/server/routerlicious/packages/protocol-base/src/test/types/validateProtocolBasePrevious.generated.ts b/server/routerlicious/packages/protocol-base/src/test/types/validateProtocolBasePrevious.generated.ts index 07e649117d15..8b721c6c8582 100644 --- a/server/routerlicious/packages/protocol-base/src/test/types/validateProtocolBasePrevious.generated.ts +++ b/server/routerlicious/packages/protocol-base/src/test/types/validateProtocolBasePrevious.generated.ts @@ -103,6 +103,7 @@ declare type current_as_old_for_ClassStatics_ProtocolOpHandler = requireAssignab * typeValidation.broken: * "ClassStatics_Quorum": {"backCompat": false} */ +// @ts-expect-error compatibility expected to be broken declare type current_as_old_for_ClassStatics_Quorum = requireAssignableTo, TypeOnly> /* @@ -112,6 +113,7 @@ declare type current_as_old_for_ClassStatics_Quorum = requireAssignableTo, TypeOnly> /* @@ -121,6 +123,7 @@ declare type current_as_old_for_ClassStatics_QuorumClients = requireAssignableTo * typeValidation.broken: * "ClassStatics_QuorumProposals": {"backCompat": false} */ +// @ts-expect-error compatibility expected to be broken declare type current_as_old_for_ClassStatics_QuorumProposals = requireAssignableTo, TypeOnly> /* diff --git a/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts b/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts index 739578bec690..e15ef2667a6c 100644 --- a/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts +++ b/server/routerlicious/packages/protocol-base/src/typedEventEmitter.ts @@ -3,8 +3,7 @@ * Licensed under the MIT License. */ -// eslint-disable-next-line import/no-nodejs-modules -import { EventEmitter } from "events"; +import { EventEmitter } from "events_pkg"; /** * Base interface for event emitters. diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 262a72ea9c4c..6d5f43777daa 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -604,9 +604,9 @@ importers: '@fluidframework/protocol-definitions': specifier: ^3.2.0 version: 3.2.0 - '@types/events': - specifier: ^3.0.0 - version: 3.0.3 + '@types/events_pkg': + specifier: npm:@types/events@^3.0.0 + version: '@types/events@3.0.3' events_pkg: specifier: npm:events@^3.1.0 version: events@3.3.0 From fe4324452e91558d1eede69b957ede518fd29531 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 20:40:27 +0000 Subject: [PATCH 34/38] Try adding missing jest-environment-puppeteer --- .../packages/services-client/package.json | 5 +- server/routerlicious/pnpm-lock.yaml | 91 +++++-------------- 2 files changed, 25 insertions(+), 71 deletions(-) diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index 37eeb6626bc1..42aeee831b8e 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -105,7 +105,8 @@ "copyfiles": "^2.4.1", "eslint": "~8.55.0", "jest": "^29.6.2", - "jest-junit": "^10.0.0", + "jest-environment-puppeteer": "^10.1.3", + "jest-junit": "^16.0.0", "jest-puppeteer": "^10.1.3", "mocha": "^10.2.0", "prettier": "~3.0.3", @@ -115,7 +116,7 @@ "typescript": "~5.1.6" }, "tasks": { - "eslint": [ + "lint": [ "tsc", "build:test:mocha", "build:test:jest", diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index 6d5f43777daa..9d3dbe98bdfc 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -1203,9 +1203,12 @@ importers: jest: specifier: ^29.6.2 version: 29.7.0(@types/node@18.19.39) + jest-environment-puppeteer: + specifier: ^10.1.3 + version: 10.1.4(debug@4.3.4)(typescript@5.1.6) jest-junit: - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^16.0.0 + version: 16.0.0 jest-puppeteer: specifier: ^10.1.3 version: 10.1.4(debug@4.3.4)(puppeteer@23.11.1(typescript@5.1.6))(typescript@5.1.6) @@ -2897,10 +2900,6 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@24.9.0': - resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} - engines: {node: '>= 6'} - '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3630,9 +3629,6 @@ packages: '@types/istanbul-lib-report@3.0.3': resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - '@types/istanbul-reports@1.1.2': - resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==} - '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} @@ -3802,9 +3798,6 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@13.0.12': - resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} - '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} @@ -6684,10 +6677,6 @@ packages: resolution: {integrity: sha512-cx2jzf1qZb6/vdmLbRccF0k/zSsoWlrXi8bg10GzrODxiwsRomVDszTfoOCRsQ+C1sbJ+ubI1PlryIvvYjITrA==} engines: {node: '>=16'} - jest-get-type@24.9.0: - resolution: {integrity: sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==} - engines: {node: '>= 6'} - jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6696,9 +6685,9 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-junit@10.0.0: - resolution: {integrity: sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==} - engines: {node: '>=8.0.0'} + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} jest-leak-detector@29.7.0: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} @@ -6759,10 +6748,6 @@ packages: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-validate@24.9.0: - resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==} - engines: {node: '>= 6'} - jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8117,10 +8102,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-format@24.9.0: - resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} - engines: {node: '>= 6'} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9491,6 +9472,10 @@ packages: deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true @@ -11953,12 +11938,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/types@24.9.0': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 1.1.2 - '@types/yargs': 13.0.12 - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -12213,7 +12192,7 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.3 + semver: 7.7.1 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -13266,11 +13245,6 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports@1.1.2': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-lib-report': 3.0.3 - '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 @@ -13444,10 +13418,6 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@types/yargs@13.0.12': - dependencies: - '@types/yargs-parser': 21.0.3 - '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 @@ -16898,8 +16868,6 @@ snapshots: - debug - typescript - jest-get-type@24.9.0: {} - jest-get-type@29.6.3: {} jest-haste-map@29.7.0: @@ -16918,12 +16886,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-junit@10.0.0: + jest-junit@16.0.0: dependencies: - jest-validate: 24.9.0 - mkdirp: 0.5.6 - strip-ansi: 5.2.0 - uuid: 3.4.0 + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 xml: 1.0.1 jest-leak-detector@29.7.0: @@ -17077,15 +17044,6 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-validate@24.9.0: - dependencies: - '@jest/types': 24.9.0 - camelcase: 5.3.1 - chalk: 2.4.2 - jest-get-type: 24.9.0 - leven: 3.1.0 - pretty-format: 24.9.0 - jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -18288,7 +18246,7 @@ snapshots: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-name: 5.0.0 npm-packlist@7.0.4: @@ -18300,7 +18258,7 @@ snapshots: npm-install-checks: 6.1.1 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.6.3 + semver: 7.7.1 npm-registry-fetch@14.0.5: dependencies: @@ -18848,13 +18806,6 @@ snapshots: prettier@3.2.5: {} - pretty-format@24.9.0: - dependencies: - '@jest/types': 24.9.0 - ansi-regex: 4.1.1 - ansi-styles: 3.2.1 - react-is: 16.13.1 - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -19436,7 +19387,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 semver-utils@1.1.4: {} @@ -20479,6 +20430,8 @@ snapshots: uuid@3.4.0: {} + uuid@8.3.2: {} + uuid@9.0.0: {} uuid@9.0.1: {} From e8981f0834db7c7c3b4ec92742a4546e75901d30 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 21:25:15 +0000 Subject: [PATCH 35/38] Change how we run jest tests in CI --- server/routerlicious/package.json | 2 +- .../packages/services-client/package.json | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/server/routerlicious/package.json b/server/routerlicious/package.json index ff22db844a77..7f9753f3b475 100644 --- a/server/routerlicious/package.json +++ b/server/routerlicious/package.json @@ -59,7 +59,7 @@ "test:copyresults": "copyfiles --exclude \"**/node_modules/**\" \"packages/**/nyc/**\" nyc", "test:coverage": "c8 npm run test:report", "test:fromroot": "mocha \"packages/**/dist/test/**/*.spec.*js\" --exit", - "test:report": "pnpm run -r --no-sort --stream --no-bail test -- -- --reporter xunit --reporter-option output=nyc/junit-report.xml", + "test:report": "pnpm run -r --no-sort --stream --no-bail test -- -- --reporter xunit --reporter-option output=nyc/junit-report.xml && pnpm run -r --no-sort --stream --no-bail test:jest", "tsc": "pnpm run -r --stream tsc", "typetests:gen": "pnpm -r typetests:gen", "typetests:prepare": "flub typetests -g server --reset --normalize", diff --git a/server/routerlicious/packages/services-client/package.json b/server/routerlicious/packages/services-client/package.json index 42aeee831b8e..87e40cd83b87 100644 --- a/server/routerlicious/packages/services-client/package.json +++ b/server/routerlicious/packages/services-client/package.json @@ -39,13 +39,9 @@ "lint:fix": "npm run prettier:fix && npm run eslint:fix", "prettier": "prettier --check . --cache --ignore-path ../../.prettierignore", "prettier:fix": "prettier --write . --cache --ignore-path ../../.prettierignore", - "test": "npm run test:mocha && npm run test:jest", - "test:coverage": "c8 npm run test:report", + "test": "mocha --recursive \"dist/test/mocha/**/*.spec.*js\"", + "test:coverage": "c8 npm test -- --reporter xunit --reporter-option output=nyc/junit-report.xml", "test:jest": "jest --ci", - "test:jest:report": "npm run test:jest -- --coverage", - "test:mocha": "mocha --recursive \"dist/test/mocha/**/*.spec.*js\"", - "test:mocha:report": "c8 npm test:mocha -- --reporter xunit --reporter-option output=nyc/junit-report.xml", - "test:report": "npm run test:mocha:report && npm run test:jest:report", "tsc": "tsc", "typetests:gen": "flub generate typetests --dir . -v", "typetests:prepare": "flub typetests --dir . --reset --previous --normalize" @@ -130,6 +126,9 @@ ], "build:test:types": [ "tsc" + ], + "test": [ + "test:jest" ] }, "typeValidation": { From 1e25cd446c51fe9929fb56bf0cb0ce0387e1c5d7 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 21:51:45 +0000 Subject: [PATCH 36/38] Dep for jest tests in Dockerfile --- server/routerlicious/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/routerlicious/Dockerfile b/server/routerlicious/Dockerfile index ad9af5375ce4..0a83d01b96be 100644 --- a/server/routerlicious/Dockerfile +++ b/server/routerlicious/Dockerfile @@ -34,6 +34,10 @@ RUN apt-get update && apt-get install -y \ libssl-dev \ ca-certificates +# dependencies to run jest tests +RUN apt-get update && apt-get install -y \ + libglib2.0-0 + # Add Tini ENV TINI_VERSION=v0.18.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini From 617ea8a647a6bbd275227e4c5f34379134e175f5 Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 22:17:37 +0000 Subject: [PATCH 37/38] More deps for jest tests --- server/routerlicious/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/routerlicious/Dockerfile b/server/routerlicious/Dockerfile index 0a83d01b96be..5a5e45bba916 100644 --- a/server/routerlicious/Dockerfile +++ b/server/routerlicious/Dockerfile @@ -36,7 +36,8 @@ RUN apt-get update && apt-get install -y \ # dependencies to run jest tests RUN apt-get update && apt-get install -y \ - libglib2.0-0 + libglib2.0-0 \ + libnss3 # Add Tini ENV TINI_VERSION=v0.18.0 From fe22d79ecf2514e0f9c17a1fd58b33e9606193cc Mon Sep 17 00:00:00 2001 From: Alex Villarreal <716334+alexvy86@users.noreply.github.com> Date: Fri, 7 Mar 2025 22:40:02 +0000 Subject: [PATCH 38/38] More deps --- server/routerlicious/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/routerlicious/Dockerfile b/server/routerlicious/Dockerfile index 5a5e45bba916..d959ba2fc079 100644 --- a/server/routerlicious/Dockerfile +++ b/server/routerlicious/Dockerfile @@ -37,7 +37,8 @@ RUN apt-get update && apt-get install -y \ # dependencies to run jest tests RUN apt-get update && apt-get install -y \ libglib2.0-0 \ - libnss3 + libnss3 \ + libdbus-1-3 # Add Tini ENV TINI_VERSION=v0.18.0