diff --git a/.gitignore b/.gitignore index 02c43c024..567f468c1 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,5 @@ apps/mudita-center/static/sql-wasm* matomo-to-gsheet-*.json scripts/manage-test-files/file-manager-test-files/* + +libs/app-mtp/**/*.js diff --git a/apps/mudita-center/resources/MtpFileTransfer_boxed.exe b/apps/mudita-center/resources/MtpFileTransfer_boxed.exe new file mode 100644 index 000000000..d4a827567 Binary files /dev/null and b/apps/mudita-center/resources/MtpFileTransfer_boxed.exe differ diff --git a/libs/app-mtp/.eslintrc.json b/libs/app-mtp/.eslintrc.json new file mode 100644 index 000000000..52ff40a0d --- /dev/null +++ b/libs/app-mtp/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": [ + "../../.eslintrc.js" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} diff --git a/libs/app-mtp/README.md b/libs/app-mtp/README.md new file mode 100644 index 000000000..b2e0483a5 --- /dev/null +++ b/libs/app-mtp/README.md @@ -0,0 +1,33 @@ +# app-mtp + +# app-mtp-cli + +`app-mtp-cli` is a CLI tool for interacting with MTP devices, supporting actions like retrieving devices, storages, and +uploading files. + +### Example Commands + +#### 1. Get Devices + +```bash +npm run app-mtp:cli \'{\"action\":\"GET_DEVICES\", \"data\":\"\"}\' +``` + +#### 2. Get Device Storages + +```bash +npm run app-mtp:cli \'{\"action\":\"GET_DEVICE_STORAGES\", \"deviceId\":\"device123\"}\' +``` + +#### 3. Upload File + +```bash +npm run app-mtp:cli \'{\"action\":\"UPLOAD_FILE\", \"deviceId\":\"device123\", \"storageId\":\"storage456\", \"destinationPath\":\"/path/to/destination\", \"sourcePath\":\"/path/to/source\"}\' +``` + +#### 4. Get Upload File Progress + +```bash +npm run app-mtp:cli \'{\"action\":\"GET_UPLOAD_FILE_PROGRESS\", \"transactionId\":\"transaction123\"}\' +``` + diff --git a/libs/app-mtp/jest.config.ts b/libs/app-mtp/jest.config.ts new file mode 100644 index 000000000..d3df8bfa5 --- /dev/null +++ b/libs/app-mtp/jest.config.ts @@ -0,0 +1,11 @@ +/* eslint-disable */ +export default { + displayName: "app-mtp", + preset: "../../jest.preset.js", + testEnvironment: "node", + transform: { + "^.+\\.[tj]s$": ["ts-jest", { tsconfig: "/tsconfig.spec.json" }], + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/libs/app-mtp", +} diff --git a/libs/app-mtp/project.json b/libs/app-mtp/project.json new file mode 100644 index 000000000..9fb75deb9 --- /dev/null +++ b/libs/app-mtp/project.json @@ -0,0 +1,50 @@ +{ + "name": "app-mtp", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/app-mtp/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/libs/app-mtp", + "main": "libs/app-mtp/src/index.ts", + "tsConfig": "libs/app-mtp/tsconfig.lib.json", + "assets": [ + "libs/app-mtp/*.md" + ] + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": [ + "{options.outputFile}" + ] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": [ + "{workspaceRoot}/coverage/{projectRoot}" + ], + "options": { + "jestConfig": "libs/app-mtp/jest.config.ts" + } + }, + "serve": { + "executor": "nx:run-commands", + "options": { + "command": "nodemon --watch './libs/app-mtp/src/**' --ext 'ts' --exec 'ts-node --project libs/app-mtp/tsconfig.lib.json libs/app-mtp/src/lib/app-examples/app-mtp-server.ts'" + } + }, + "cli": { + "executor": "nx:run-commands", + "options": { + "command": "nodemon --watch './libs/app-mtp/src/**' --ext 'ts' --exec 'ts-node --project libs/app-mtp/tsconfig.lib.json libs/app-mtp/src/lib/app-examples/app-mtp-cli.ts'" + } + } + }, + "tags": [] +} diff --git a/libs/app-mtp/src/index.ts b/libs/app-mtp/src/index.ts new file mode 100644 index 000000000..045cb11e4 --- /dev/null +++ b/libs/app-mtp/src/index.ts @@ -0,0 +1,6 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +export * from "./lib/app-mtp" diff --git a/libs/app-mtp/src/lib/app-examples/app-mtp-cli.ts b/libs/app-mtp/src/lib/app-examples/app-mtp-cli.ts new file mode 100644 index 000000000..1ba5e3dc7 --- /dev/null +++ b/libs/app-mtp/src/lib/app-examples/app-mtp-cli.ts @@ -0,0 +1,104 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import yargs from "yargs" +import { hideBin } from "yargs/helpers" +import { AppMtp } from "../app-mtp" +import { GetUploadFileProgress, MtpUploadFileData } from "../app-mtp.interface" +import * as dotenv from "dotenv" + +dotenv.config() +const appMtp = new AppMtp() + +enum MtpCliCommandAction { + GET_DEVICES = "GET_DEVICES", + GET_DEVICE_STORAGES = "GET_DEVICE_STORAGES", + UPLOAD_FILE = "UPLOAD_FILE", + GET_UPLOAD_FILE_PROGRESS = "GET_UPLOAD_FILE_PROGRESS", +} + +interface MtpCliCommand { + action: MtpCliCommandAction + + [key: string]: unknown +} + +const handleAction = (action: MtpCliCommandAction, parsedData: unknown) => { + switch (action) { + case MtpCliCommandAction.GET_DEVICES: + appMtp + .getDevices() + .then((devices) => { + console.log("[app-mtp-cli] output: ", devices) + }) + .catch((err) => { + console.error("[app-mtp-cli] output: Error fetching devices:", err) + }) + break + + case MtpCliCommandAction.GET_DEVICE_STORAGES: + appMtp + .getDeviceStorages((parsedData as { deviceId: string }).deviceId) + .then((storages) => { + console.log("[app-mtp-cli] output:", storages) + }) + .catch((err) => { + console.error( + "[app-mtp-cli] output: Error fetching device storages:", + err + ) + }) + break + + case MtpCliCommandAction.UPLOAD_FILE: + appMtp + .uploadFile(parsedData as MtpUploadFileData) + .then(() => { + console.log("[app-mtp-cli] output: File uploaded successfully.") + }) + .catch((err) => { + console.error("[app-mtp-cli] output: Error uploading file:", err) + }) + break + + case MtpCliCommandAction.GET_UPLOAD_FILE_PROGRESS: + appMtp + .getUploadFileProgress(parsedData as GetUploadFileProgress) + .then((progress) => { + console.log("[app-mtp-cli] output:", progress) + }) + .catch((err) => { + console.error( + "[app-mtp-cli] output: Error fetching upload file progress:", + err + ) + }) + break + + default: + console.error("[app-mtp-cli] output: Unknown action:", action) + } +} + +yargs(hideBin(process.argv)) + .middleware((argv) => { + const jsonString = argv._[0] as string + if (jsonString) { + try { + const parsedData: MtpCliCommand = JSON.parse(jsonString) + console.log("[app-mtp-cli] input: ", parsedData) + + const { action } = parsedData + + handleAction(action, parsedData) + } catch (error) { + console.error("[app-mtp-cli] output: Invalid JSON string:", jsonString) + console.error("[app-mtp-cli] output:", error) + } + } else { + console.error("[app-mtp-cli] output: No JSON string provided.") + } + }) + .help().argv diff --git a/libs/app-mtp/src/lib/app-examples/app-mtp-server.ts b/libs/app-mtp/src/lib/app-examples/app-mtp-server.ts new file mode 100644 index 000000000..69180f159 --- /dev/null +++ b/libs/app-mtp/src/lib/app-examples/app-mtp-server.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import express, { Application, Request, Response, Router } from "express" +import bodyParser from "body-parser" +import http from "http" +import { AppMtp } from "../app-mtp" +import * as dotenv from "dotenv" + +dotenv.config() +const appMtp = new AppMtp() + +const app: Application = express() +const router: Router = Router() + +app.use(bodyParser.json()) + +router.get("/get-devices", (req: Request, res: Response) => { + appMtp.getDevices().then((devices) => { + res.json(devices) + }) +}) + +router.get("/get-device-storages/:deviceId", (req: Request, res: Response) => { + const { deviceId } = req.params + appMtp.getDeviceStorages(deviceId).then((storages) => { + res.json(storages) + }) +}) + +router.post("/upload-file", (req: Request, res: Response) => { + appMtp.uploadFile(req.body).then((result) => { + res.json(result) + }) +}) + +router.get("/upload-file-progress", (req: Request, res: Response) => { + appMtp.getUploadFileProgress(req.body).then((result) => { + res.json(result) + }) +}) + +app.use("/", router) + +const server = http.createServer(app) +server.listen(3000, () => { + console.log("[app-mtp-server] running at http://127.0.0.1:3000/") +}) diff --git a/libs/app-mtp/src/lib/app-mtp.factory.ts b/libs/app-mtp/src/lib/app-mtp.factory.ts new file mode 100644 index 000000000..a7f0d433e --- /dev/null +++ b/libs/app-mtp/src/lib/app-mtp.factory.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import { MtpInterface } from "./app-mtp.interface" +import { DotnetMtp } from "./dotnet-mtp/dotnet-mtp" +import { NodeMtp } from "./node-mtp/node-mtp" +import { NodeMtpDeviceManager } from "./node-mtp/node-mtp-device-manager" + +export class MtpFactory { + static createInstance(): MtpInterface { + if (process.platform === "win32") { + return new DotnetMtp() + } else { + return new NodeMtp(new NodeMtpDeviceManager()) + } + } +} diff --git a/libs/app-mtp/src/lib/app-mtp.interface.ts b/libs/app-mtp/src/lib/app-mtp.interface.ts new file mode 100644 index 000000000..48dc4858c --- /dev/null +++ b/libs/app-mtp/src/lib/app-mtp.interface.ts @@ -0,0 +1,63 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import { ResultObject } from "../../../core/core/builder/result.builder" +import { AppError } from "../../../core/core/errors/app-error" + +export interface MtpDevice { + id: string + name: string +} + +export interface MtpStorage { + id: string + name: string +} + +export interface TransactionStatus { + progress: number + error?: AppError +} + +export enum MTPError { + MTP_DEVICE_NOT_FOUND = "MTP_DEVICE_NOT_FOUND", + MTP_STORAGE_NOT_FOUND = "MTP_STORAGE_NOT_FOUND", + MTP_SOURCE_PATH_NOT_FOUND = "MTP_SOURCE_PATH_NOT_FOUND", + MTP_TRANSACTION_NOT_FOUND = "MTP_TRANSACTION_NOT_FOUND", + MTP_GENERAL_ERROR = "MTP_GENERAL_ERROR", +} + +export interface MtpUploadFileData { + deviceId: string + storageId: string + destinationPath: string + sourcePath: string +} + +export interface UploadFileResultData { + transactionId: string +} + +export interface GetUploadFileProgress { + transactionId: string +} + +export interface GetUploadFileProgressResultData { + progress: number +} + +export interface MtpInterface { + getDevices(): Promise + + getDeviceStorages(deviceId: string): Promise> + + uploadFile( + data: MtpUploadFileData + ): Promise> + + getUploadFileProgress( + data: GetUploadFileProgress + ): Promise> +} diff --git a/libs/app-mtp/src/lib/app-mtp.ts b/libs/app-mtp/src/lib/app-mtp.ts new file mode 100644 index 000000000..4c886eb13 --- /dev/null +++ b/libs/app-mtp/src/lib/app-mtp.ts @@ -0,0 +1,67 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import { + GetUploadFileProgress, + GetUploadFileProgressResultData, + MtpDevice, + MtpInterface, + MtpStorage, + MtpUploadFileData, + UploadFileResultData, +} from "./app-mtp.interface" +import { MtpFactory } from "./app-mtp.factory" +import { ResultObject } from "../../../core/core/builder/result.builder" + +export class AppMtp implements MtpInterface { + private mtp: MtpInterface + + constructor() { + this.mtp = MtpFactory.createInstance() + } + + async getDevices(): Promise { + console.log(`[app-mtp] getting devices`) + const result = await this.mtp.getDevices() + console.log(`[app-mtp] getting devices result: ${JSON.stringify(result)}`) + return result + } + + async getDeviceStorages( + deviceId: string + ): Promise> { + console.log(`[app-mtp] getting device storages for device: ${deviceId}`) + const result = await this.mtp.getDeviceStorages(deviceId) + console.log( + `[app-mtp] getting device storages result: ${JSON.stringify(result)}` + ) + return result + } + + async uploadFile( + data: MtpUploadFileData + ): Promise> { + const result = await this.mtp.uploadFile(data) + console.log( + `[app-mtp] starting upload file process: ${JSON.stringify(result)}` + ) + return result + } + + async getUploadFileProgress( + data: GetUploadFileProgress + ): Promise> { + console.log( + `[app-mtp] getting upload file progress for transaction: ${data.transactionId}` + ) + const result = await this.mtp.getUploadFileProgress(data) + + console.log( + `[app-mtp] getting upload file progress result: ${JSON.stringify(result)}` + ) + + return result + } +} diff --git a/libs/app-mtp/src/lib/dotnet-mtp/dotnet-mtp.ts b/libs/app-mtp/src/lib/dotnet-mtp/dotnet-mtp.ts new file mode 100644 index 000000000..5cb2f9238 --- /dev/null +++ b/libs/app-mtp/src/lib/dotnet-mtp/dotnet-mtp.ts @@ -0,0 +1,97 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import { spawn } from "child_process" +import path from "path" +import { + GetUploadFileProgress, + GetUploadFileProgressResultData, + MtpDevice, + MtpInterface, + MtpStorage, + MtpUploadFileData, + TransactionStatus, + UploadFileResultData, +} from "../app-mtp.interface" +import { generateId } from "../utils/generate-id" +import { + Result, + ResultObject, +} from "../../../../core/core/builder/result.builder" + +export class DotnetMtp implements MtpInterface { + private uploadFileTransactionStatus: Record = {} + + async getDevices(): Promise { + return [{ id: "device-1", name: "Device 1" }] + } + + async getDeviceStorages( + deviceId: string + ): Promise> { + return Result.success([ + { id: "storage-1", name: "Storage 1" }, + { id: "storage-2", name: "Storage 2" }, + ]) + } + + async uploadFile( + data: MtpUploadFileData + ): Promise> { + const transactionId = generateId() + void this.processFileUpload(data, transactionId) + return Result.success({ transactionId }) + } + + async getUploadFileProgress({ + transactionId, + }: GetUploadFileProgress): Promise< + ResultObject + > { + return Result.success({ + progress: this.uploadFileTransactionStatus[transactionId].progress, + }) + } + + private async processFileUpload( + data: MtpUploadFileData, + transactionId: string + ): Promise { + this.uploadFileTransactionStatus[transactionId] = { + progress: 0, + } + + return new Promise((resolve, reject) => { + const exePath = path.join( + __dirname, + "../../../../../apps/mudita-center/resources/MtpFileTransfer_boxed.exe" + ) + const args = '{"action":"UPLOAD_FILE"}' + const child = spawn(exePath, [args]) + + child.stdout.on("data", (data) => { + console.log(`[app-mtp/dotnet-mtp] data stdout: ${data}`) + this.uploadFileTransactionStatus[transactionId].progress = + JSON.parse(data).data.progress + }) + + child.stderr.on("data", (data) => { + console.error(`[app-mtp/dotnet-mtp] data stderr: ${data}`) + }) + + child.on("close", (code) => { + if (code !== 0) { + console.log( + `[app-mtp/dotnet-mtp] child process exited with code: ${code}` + ) + } else { + console.log(`[app-mtp/dotnet-mtp] child process exited successfully`) + } + + resolve() + }) + }) + } +} diff --git a/libs/app-mtp/src/lib/node-mtp/node-mtp-device-manager.ts b/libs/app-mtp/src/lib/node-mtp/node-mtp-device-manager.ts new file mode 100644 index 000000000..2375cc096 --- /dev/null +++ b/libs/app-mtp/src/lib/node-mtp/node-mtp-device-manager.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import { NodeMtpDevice } from "./node-mtp-device" + +export class NodeMtpDeviceManager { + getDevice(): NodeMtpDevice { + // mock implementation + return new NodeMtpDevice() + } +} diff --git a/libs/app-mtp/src/lib/node-mtp/node-mtp-device.ts b/libs/app-mtp/src/lib/node-mtp/node-mtp-device.ts new file mode 100644 index 000000000..a9c295dae --- /dev/null +++ b/libs/app-mtp/src/lib/node-mtp/node-mtp-device.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +export interface UploadFileInfoOptions { + size: number + name: string + storageId: number + parentObjectHandle: number +} + +export class NodeMtpDevice { + async uploadFileInfo(options: UploadFileInfoOptions): Promise { + // mock implementation + return 0 + } + + async uploadFileCommand() { + // mock implementation + } + + async uploadFileData(chunk: Buffer | string) { + // mock implementation + } +} diff --git a/libs/app-mtp/src/lib/node-mtp/node-mtp.ts b/libs/app-mtp/src/lib/node-mtp/node-mtp.ts new file mode 100644 index 000000000..5c9a49560 --- /dev/null +++ b/libs/app-mtp/src/lib/node-mtp/node-mtp.ts @@ -0,0 +1,183 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +import path from "node:path" +import fs from "node:fs" +import { NodeMtpDeviceManager } from "./node-mtp-device-manager" +import { + GetUploadFileProgress, + GetUploadFileProgressResultData, + MtpDevice, + MTPError, + MtpInterface, + MtpStorage, + MtpUploadFileData, + TransactionStatus, + UploadFileResultData, +} from "../app-mtp.interface" +import { generateId } from "../utils/generate-id" +import { isEmpty } from "../utils/is-empty" +import { + Result, + ResultObject, +} from "../../../../core/core/builder/result.builder" +import { AppError } from "../../../../core/core/errors/app-error" + +export const delay = (ms: number = 500): Promise => { + return new Promise((resolve) => setTimeout(resolve, ms)) +} + +export class NodeMtp implements MtpInterface { + private uploadFileTransactionStatus: Record = {} + + constructor(private deviceManager: NodeMtpDeviceManager) {} + + async getDevices(): Promise { + return [{ id: "device-1", name: "Device 1" }] + } + + async getDeviceStorages( + deviceId: string + ): Promise> { + if (isEmpty(deviceId)) { + return Result.failed({ type: MTPError.MTP_DEVICE_NOT_FOUND } as AppError) + } + + return Result.success([ + { id: "storage-1", name: "Storage 1" }, + { id: "storage-2", name: "Storage 2" }, + ]) + } + + async uploadFile( + data: MtpUploadFileData + ): Promise> { + if (isEmpty(data.deviceId)) { + return Result.failed({ type: MTPError.MTP_DEVICE_NOT_FOUND } as AppError) + } + + const result = await this.processUploadFileInfo(data) + + if (!result.ok) { + return result + } + + const transactionId = generateId() + void this.processUploadFile(data, transactionId) + return Result.success({ transactionId }) + } + + async getUploadFileProgress({ + transactionId, + }: GetUploadFileProgress): Promise< + ResultObject + > { + if (isEmpty(this.uploadFileTransactionStatus[transactionId])) { + return Result.failed({ + type: MTPError.MTP_TRANSACTION_NOT_FOUND, + } as AppError) + } + + if (this.uploadFileTransactionStatus[transactionId].error) { + return Result.failed( + this.uploadFileTransactionStatus[transactionId].error as AppError + ) + } + + return Result.success({ + progress: this.uploadFileTransactionStatus[transactionId].progress, + }) + } + + private async processUploadFileInfo({ + sourcePath, + destinationPath, + }: MtpUploadFileData): Promise> { + try { + if (!fs.existsSync(sourcePath)) { + return Result.failed({ + type: MTPError.MTP_SOURCE_PATH_NOT_FOUND, + message: + "`sourcePath` not found. Please check the provided path in the request.", + } as AppError) + } + + const PHONE_STORAGE_ID = 65537 + // const SD_CARD_STORAGE_ID = 131073 + + const device = this.deviceManager.getDevice() + const size = await this.getFileSize(sourcePath) + const name = path.basename(sourcePath) + const parentObjectHandle = this.getParentObjectHandle(destinationPath) + + const newObjectID = await device.uploadFileInfo({ + size, + name, + storageId: PHONE_STORAGE_ID, + parentObjectHandle, + }) + + if (newObjectID === undefined) { + console.log( + `[app-mtp/node-mtp] process upload file info error - newObjectID is undefined` + ) + return Result.failed({ type: MTPError.MTP_GENERAL_ERROR } as AppError) + } + + return Result.success(newObjectID) + } catch (error) { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + console.log(`[app-mtp/node-mtp] process upload file info error: ${error}`) + return Result.failed({ type: MTPError.MTP_GENERAL_ERROR } as AppError) + } + } + + private async processUploadFile( + { sourcePath, destinationPath }: MtpUploadFileData, + transactionId: string + ): Promise { + try { + this.uploadFileTransactionStatus[transactionId] = { + progress: 0, + } + + const device = this.deviceManager.getDevice() + const size = await this.getFileSize(sourcePath) + + const fileStream = fs.createReadStream(sourcePath, { + highWaterMark: 1024, + }) + let uploadedBytes = 0 + + for await (const chunk of fileStream) { + await delay(200) + await device.uploadFileData(chunk) + + uploadedBytes += chunk.length + const progress = (uploadedBytes / size) * 100 + this.uploadFileTransactionStatus[transactionId].progress = progress + console.log(`[app-mtp/node-mtp] progress: ${progress}%`) + } + } catch (error) { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + console.log(`[app-mtp/node-mtp] process upload file error: ${error}`) + this.uploadFileTransactionStatus[transactionId].error = { + type: MTPError.MTP_GENERAL_ERROR, + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + message: `Error uploading file in progress: ${this.uploadFileTransactionStatus[transactionId].progress}% - ${error}`, + } as AppError + } + } + + private async getFileSize(filePath: string): Promise { + const stats = await fs.promises.stat(filePath) + return stats.size + } + + private getParentObjectHandle(filePath: string): number { + // mock implementation + return 0 + } +} diff --git a/libs/app-mtp/src/lib/utils/generate-id.ts b/libs/app-mtp/src/lib/utils/generate-id.ts new file mode 100644 index 000000000..cb8ea076d --- /dev/null +++ b/libs/app-mtp/src/lib/utils/generate-id.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +export const generateId = (): string => { + const timestamp = Date.now() + const randomPart = Math.random().toString(36).slice(2, 11) + return `${timestamp}${randomPart}` +} diff --git a/libs/app-mtp/src/lib/utils/is-empty.ts b/libs/app-mtp/src/lib/utils/is-empty.ts new file mode 100644 index 000000000..75066f712 --- /dev/null +++ b/libs/app-mtp/src/lib/utils/is-empty.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) Mudita sp. z o.o. All rights reserved. + * For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md + */ + +/** + * Helper function to check if a value is considered "empty." + * This is a temporary helper until MTP is used as a mock. + */ +export const isEmpty = (value: unknown): boolean => { + return ( + value === null || + value === undefined || + value === "" || + value === 0 || + value === "0" + ) +} diff --git a/libs/app-mtp/tsconfig.json b/libs/app-mtp/tsconfig.json new file mode 100644 index 000000000..70e90f909 --- /dev/null +++ b/libs/app-mtp/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../tsconfig.base.json" +} diff --git a/libs/app-mtp/tsconfig.lib.json b/libs/app-mtp/tsconfig.lib.json new file mode 100644 index 000000000..b7163622e --- /dev/null +++ b/libs/app-mtp/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": [ + "node" + ] + }, + "include": [ + "./libs/app-mtp/src/**/*.ts", + "./libs/core/**/*.ts" + ], + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts" + ] +} diff --git a/libs/app-mtp/tsconfig.spec.json b/libs/app-mtp/tsconfig.spec.json new file mode 100644 index 000000000..273663ec6 --- /dev/null +++ b/libs/app-mtp/tsconfig.spec.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/package-lock.json b/package-lock.json index 23f466786..cc10ae780 100644 --- a/package-lock.json +++ b/package-lock.json @@ -168,6 +168,7 @@ "is-electron-renderer": "^2.0.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", + "jest-environment-node": "^29.4.1", "jest-styled-components": "^7.0.8", "lint-staged": "^13.0.3", "lodash": "^4.17.21", @@ -178,7 +179,7 @@ "moment": "^2.29.4", "node-gyp": "^10.0.1", "node-polyfill-webpack-plugin": "^2.0.1", - "nodemon": "^2.0.19", + "nodemon": "^2.0.22", "nx": "^17.1.3", "p-queue": "^7.3.0", "prettier": "^2.7.1", @@ -225,7 +226,7 @@ "tcp-port-used": "^1.0.2", "terser-webpack-plugin": "^5.3.6", "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "^5.2.2", "url-loader": "4.1.1", "usb": "^1.9.2", @@ -5095,6 +5096,30 @@ } } }, + "node_modules/@nx/js/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@nx/js/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@nx/js/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5110,6 +5135,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@nx/js/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/@nx/js/node_modules/babel-plugin-macros": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", @@ -5153,6 +5184,15 @@ "node": ">=8" } }, + "node_modules/@nx/js/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/@nx/js/node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", @@ -5275,6 +5315,49 @@ "node": ">=8" } }, + "node_modules/@nx/js/node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/@nx/js/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -7006,15 +7089,15 @@ } }, "node_modules/@storybook/addons": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.6.6.tgz", - "integrity": "sha512-QkbN0KNCyfuiJOfV5kCn1gy6rEpntQ95csbtBKldIlgVcaXe8g8DH/b7+4KS4fo5mdGyTgvGO+LUapVN5YtUqQ==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.6.17.tgz", + "integrity": "sha512-Ok18Y698Ccyg++MoUNJNHY0cXUvo8ETFIRLJk1g9ElJ70j6kPgNnzW2pAtZkBNmswHtofZ7pT156cj96k/LgfA==", "dev": true, "peer": true, "dependencies": { - "@storybook/manager-api": "7.6.6", - "@storybook/preview-api": "7.6.6", - "@storybook/types": "7.6.6" + "@storybook/manager-api": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/types": "7.6.17" }, "funding": { "type": "opencollective", @@ -7022,14 +7105,14 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/channels": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.6.tgz", - "integrity": "sha512-vvo7fBe2WffPonNNOA7Xx7jcHAto8qJYlq+VMysfheXrsRRbhHl3WQOA18Vm8hV9txtqdqk0hwQiXOWvhYVpeQ==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", "dev": true, "peer": true, "dependencies": { - "@storybook/client-logger": "7.6.6", - "@storybook/core-events": "7.6.6", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -7041,9 +7124,9 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/client-logger": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.6.tgz", - "integrity": "sha512-WEvVyuQR5oNF8jcMmGA13zDjxP/l46kOBBvB6JSc8toUdtLZ/kZWSnU0ioNM8+ECpFqXHjBcF2K6uSJOEb6YEg==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", "dev": true, "peer": true, "dependencies": { @@ -7055,9 +7138,9 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/core-events": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.6.tgz", - "integrity": "sha512-7+q9HiZiLxaQcwpaSLQrLdjHNHBoOoUY9ZcZXI9iNFSopOgb/ItDnzzlpv08NC7CbKae1hVKJM/t5aSTl7tCMw==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", "dev": true, "peer": true, "dependencies": { @@ -7069,24 +7152,23 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/manager-api": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.6.tgz", - "integrity": "sha512-euRAbSZAUzHDt6z1Pq/g45N/RNqta9RaQAym18zt/oLWiYOIrkLmdf7kCuFYsmuA5XQBytiJqwkAD7uF1aLe0g==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz", + "integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==", "dev": true, "peer": true, "dependencies": { - "@storybook/channels": "7.6.6", - "@storybook/client-logger": "7.6.6", - "@storybook/core-events": "7.6.6", + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.6", - "@storybook/theming": "7.6.6", - "@storybook/types": "7.6.6", + "@storybook/router": "7.6.17", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "semver": "^7.3.7", "store2": "^2.14.2", "telejson": "^7.2.0", "ts-dedent": "^2.0.0" @@ -7097,18 +7179,18 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/preview-api": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.6.tgz", - "integrity": "sha512-Bt6xIAR5yZ/JWc90X4BbLOA97iL65glZ1SOBgFFv2mHrdZ1lcdKhAlQr2aeJAf1mLvBtalPjvKzi9EuVY3FZ4w==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz", + "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", "dev": true, "peer": true, "dependencies": { - "@storybook/channels": "7.6.6", - "@storybook/client-logger": "7.6.6", - "@storybook/core-events": "7.6.6", + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.6", + "@storybook/types": "7.6.17", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -7124,13 +7206,13 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/router": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.6.tgz", - "integrity": "sha512-dkn81MtxrG7JMDbOHEcVZkTDVKsneg72CyqJ8ELZfC81iKQcDMQkV9mdmnMl45aKn6UrscudI4K23OxQmsevkw==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz", + "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", "dev": true, "peer": true, "dependencies": { - "@storybook/client-logger": "7.6.6", + "@storybook/client-logger": "7.6.17", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -7140,14 +7222,14 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/theming": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.6.tgz", - "integrity": "sha512-hNZOOxaF55iAGUEM0dvAIP6LfGMgPKCJQIk/qyotFk+SKkg3PBqzph89XfFl9yCD3KiX5cryqarULgVuNawLJg==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz", + "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", "dev": true, "peer": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.6", + "@storybook/client-logger": "7.6.17", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7161,13 +7243,13 @@ } }, "node_modules/@storybook/addons/node_modules/@storybook/types": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.6.tgz", - "integrity": "sha512-77vbQp3GX93OD8UzFkY4a0fAmkZrqLe61XVo6yABrwbVDY0EcAwaCF5gcXRhOHldlH7KYbLfEQkDkkKTBjX7ow==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", "dev": true, "peer": true, "dependencies": { - "@storybook/channels": "7.6.6", + "@storybook/channels": "7.6.17", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -7178,14 +7260,14 @@ } }, "node_modules/@storybook/api": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.6.tgz", - "integrity": "sha512-e3k45k7twP3z5ZJ+rCCaHI+jmYm5yoFo2eLjYmnYFUv2V3vvYPgqD2CiT0crne7uWmhpRxP49aU9DEvQaEZtdA==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.17.tgz", + "integrity": "sha512-l92PI+5XL4zB/o4IBWFCKQWTXvPg9hR45DCJqlPHrLZStiR6Xj1mbrtOjUlgIOH+nYb/SZFZqO53hhrs7X4Nvg==", "dev": true, "peer": true, "dependencies": { - "@storybook/client-logger": "7.6.6", - "@storybook/manager-api": "7.6.6" + "@storybook/client-logger": "7.6.17", + "@storybook/manager-api": "7.6.17" }, "funding": { "type": "opencollective", @@ -7193,14 +7275,14 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/channels": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.6.tgz", - "integrity": "sha512-vvo7fBe2WffPonNNOA7Xx7jcHAto8qJYlq+VMysfheXrsRRbhHl3WQOA18Vm8hV9txtqdqk0hwQiXOWvhYVpeQ==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", "dev": true, "peer": true, "dependencies": { - "@storybook/client-logger": "7.6.6", - "@storybook/core-events": "7.6.6", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -7212,9 +7294,9 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/client-logger": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.6.tgz", - "integrity": "sha512-WEvVyuQR5oNF8jcMmGA13zDjxP/l46kOBBvB6JSc8toUdtLZ/kZWSnU0ioNM8+ECpFqXHjBcF2K6uSJOEb6YEg==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", "dev": true, "peer": true, "dependencies": { @@ -7226,9 +7308,9 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/core-events": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.6.tgz", - "integrity": "sha512-7+q9HiZiLxaQcwpaSLQrLdjHNHBoOoUY9ZcZXI9iNFSopOgb/ItDnzzlpv08NC7CbKae1hVKJM/t5aSTl7tCMw==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", "dev": true, "peer": true, "dependencies": { @@ -7240,24 +7322,23 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/manager-api": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.6.tgz", - "integrity": "sha512-euRAbSZAUzHDt6z1Pq/g45N/RNqta9RaQAym18zt/oLWiYOIrkLmdf7kCuFYsmuA5XQBytiJqwkAD7uF1aLe0g==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.17.tgz", + "integrity": "sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==", "dev": true, "peer": true, "dependencies": { - "@storybook/channels": "7.6.6", - "@storybook/client-logger": "7.6.6", - "@storybook/core-events": "7.6.6", + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.6", - "@storybook/theming": "7.6.6", - "@storybook/types": "7.6.6", + "@storybook/router": "7.6.17", + "@storybook/theming": "7.6.17", + "@storybook/types": "7.6.17", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "semver": "^7.3.7", "store2": "^2.14.2", "telejson": "^7.2.0", "ts-dedent": "^2.0.0" @@ -7268,13 +7349,13 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/router": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.6.tgz", - "integrity": "sha512-dkn81MtxrG7JMDbOHEcVZkTDVKsneg72CyqJ8ELZfC81iKQcDMQkV9mdmnMl45aKn6UrscudI4K23OxQmsevkw==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.17.tgz", + "integrity": "sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==", "dev": true, "peer": true, "dependencies": { - "@storybook/client-logger": "7.6.6", + "@storybook/client-logger": "7.6.17", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -7284,14 +7365,14 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/theming": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.6.tgz", - "integrity": "sha512-hNZOOxaF55iAGUEM0dvAIP6LfGMgPKCJQIk/qyotFk+SKkg3PBqzph89XfFl9yCD3KiX5cryqarULgVuNawLJg==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.17.tgz", + "integrity": "sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==", "dev": true, "peer": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.6", + "@storybook/client-logger": "7.6.17", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7305,13 +7386,13 @@ } }, "node_modules/@storybook/api/node_modules/@storybook/types": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.6.tgz", - "integrity": "sha512-77vbQp3GX93OD8UzFkY4a0fAmkZrqLe61XVo6yABrwbVDY0EcAwaCF5gcXRhOHldlH7KYbLfEQkDkkKTBjX7ow==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", "dev": true, "peer": true, "dependencies": { - "@storybook/channels": "7.6.6", + "@storybook/channels": "7.6.17", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -11174,19 +11255,19 @@ } }, "node_modules/@wdio/cli/node_modules/devtools": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.40.2.tgz", - "integrity": "sha512-DR/P5LEdxTJO5tVGW4UtjMKKpZbg3g8+VmLQWwq5Lz7pMP1I83G2PlQ3JrRJGDTx9ur52/1QLYHuDrhxYjCMCA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.42.0.tgz", + "integrity": "sha512-Y9LRUJlGI0wjXLbeU6TEHufF9HnG2H22+/EABD0KtHlJt5AIRQnTGi8uLAJsE1aeQMF1YXd8l7ExaxBkfEBq8w==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0", - "@wdio/config": "8.40.2", + "@types/node": "^22.2.0", + "@wdio/config": "8.41.0", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/protocols": "8.40.3", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -11206,28 +11287,17 @@ "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", "dev": true }, - "node_modules/@wdio/cli/node_modules/devtools/node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@wdio/cli/node_modules/devtools/node_modules/@wdio/config": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.2.tgz", - "integrity": "sha512-RED2vcdX5Zdd6r+K+aWcjK4douxjJY4LP/8YvvavgqM0TURd5PDI0Y7IEz7+BIJOT4Uh+3atZawIN9/3yWFeag==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.41.0.tgz", + "integrity": "sha512-/6Z3sfSyhX5oVde0l01fyHimbqRYIVUDBnhDG2EMSCoC2lsaJX3Bm3IYpYHYHHFsgoDCi3B3Gv++t9dn2eSZZw==", "dev": true, "optional": true, "peer": true, "dependencies": { "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -11237,43 +11307,35 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/cli/node_modules/devtools/node_modules/@wdio/protocols": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@wdio/cli/node_modules/devtools/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/cli/node_modules/devtools/node_modules/@wdio/utils": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.2.tgz", - "integrity": "sha512-leYcCUSaAdLUCVKqRKNgMCASPOUo/VvOTKETiZ/qpdY2azCBt/KnLugtiycCzakeYg6Kp+VIjx5fkm0M7y4qhA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-0TcTjBiax1VxtJQ/iQA0ZyYOSHjjX2ARVmEI0AMo9+AuIq+xBfnY561+v8k9GqOMPKsiH/HrK3xwjx8xCVS03g==", "dev": true, "optional": true, "peer": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", + "@wdio/types": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.5.0", - "geckodriver": "^4.3.1", + "geckodriver": "~4.2.0", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "locate-app": "^2.1.0", @@ -12192,14 +12254,13 @@ } }, "node_modules/@wdio/globals/node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "optional": true, - "peer": true, "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.20.0" } }, "node_modules/@wdio/globals/node_modules/@types/which": { @@ -12211,16 +12272,16 @@ "peer": true }, "node_modules/@wdio/globals/node_modules/@wdio/config": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.2.tgz", - "integrity": "sha512-RED2vcdX5Zdd6r+K+aWcjK4douxjJY4LP/8YvvavgqM0TURd5PDI0Y7IEz7+BIJOT4Uh+3atZawIN9/3yWFeag==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.41.0.tgz", + "integrity": "sha512-/6Z3sfSyhX5oVde0l01fyHimbqRYIVUDBnhDG2EMSCoC2lsaJX3Bm3IYpYHYHHFsgoDCi3B3Gv++t9dn2eSZZw==", "dev": true, "optional": true, "peer": true, "dependencies": { "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -12231,14 +12292,14 @@ } }, "node_modules/@wdio/globals/node_modules/@wdio/config/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -12261,12 +12322,11 @@ } }, "node_modules/@wdio/globals/node_modules/@wdio/protocols": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", + "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/@wdio/globals/node_modules/@wdio/repl": { "version": "8.40.3", @@ -12281,31 +12341,21 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/globals/node_modules/@wdio/repl/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@wdio/globals/node_modules/@wdio/utils": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.2.tgz", - "integrity": "sha512-leYcCUSaAdLUCVKqRKNgMCASPOUo/VvOTKETiZ/qpdY2azCBt/KnLugtiycCzakeYg6Kp+VIjx5fkm0M7y4qhA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-0TcTjBiax1VxtJQ/iQA0ZyYOSHjjX2ARVmEI0AMo9+AuIq+xBfnY561+v8k9GqOMPKsiH/HrK3xwjx8xCVS03g==", "dev": true, "optional": true, "peer": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", + "@wdio/types": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.5.0", - "geckodriver": "^4.3.1", + "geckodriver": "~4.2.0", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "locate-app": "^2.1.0", @@ -12318,14 +12368,14 @@ } }, "node_modules/@wdio/globals/node_modules/@wdio/utils/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -12544,19 +12594,19 @@ } }, "node_modules/@wdio/globals/node_modules/devtools": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.40.2.tgz", - "integrity": "sha512-DR/P5LEdxTJO5tVGW4UtjMKKpZbg3g8+VmLQWwq5Lz7pMP1I83G2PlQ3JrRJGDTx9ur52/1QLYHuDrhxYjCMCA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.42.0.tgz", + "integrity": "sha512-Y9LRUJlGI0wjXLbeU6TEHufF9HnG2H22+/EABD0KtHlJt5AIRQnTGi8uLAJsE1aeQMF1YXd8l7ExaxBkfEBq8w==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0", - "@wdio/config": "8.40.2", + "@types/node": "^22.2.0", + "@wdio/config": "8.41.0", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/protocols": "8.40.3", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -12578,14 +12628,14 @@ "optional": true }, "node_modules/@wdio/globals/node_modules/devtools/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -12921,6 +12971,13 @@ "streamx": "^2.15.0" } }, + "node_modules/@wdio/globals/node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "optional": true + }, "node_modules/@wdio/globals/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -12959,16 +13016,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/globals/node_modules/webdriver/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@wdio/globals/node_modules/webdriver/node_modules/@wdio/config": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", @@ -12988,13 +13035,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/globals/node_modules/webdriver/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true, - "optional": true - }, "node_modules/@wdio/globals/node_modules/webdriver/node_modules/@wdio/utils": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", @@ -13065,16 +13105,6 @@ } } }, - "node_modules/@wdio/globals/node_modules/webdriverio/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@wdio/globals/node_modules/webdriverio/node_modules/@wdio/config": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", @@ -13094,13 +13124,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/globals/node_modules/webdriverio/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true, - "optional": true - }, "node_modules/@wdio/globals/node_modules/webdriverio/node_modules/@wdio/utils": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", @@ -13631,12 +13654,10 @@ } }, "node_modules/@wdio/runner/node_modules/@wdio/protocols": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", - "dev": true, - "optional": true, - "peer": true + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", + "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", + "dev": true }, "node_modules/@wdio/runner/node_modules/@wdio/repl": { "version": "8.40.3", @@ -13874,19 +13895,19 @@ } }, "node_modules/@wdio/runner/node_modules/devtools": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.40.2.tgz", - "integrity": "sha512-DR/P5LEdxTJO5tVGW4UtjMKKpZbg3g8+VmLQWwq5Lz7pMP1I83G2PlQ3JrRJGDTx9ur52/1QLYHuDrhxYjCMCA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.42.0.tgz", + "integrity": "sha512-Y9LRUJlGI0wjXLbeU6TEHufF9HnG2H22+/EABD0KtHlJt5AIRQnTGi8uLAJsE1aeQMF1YXd8l7ExaxBkfEBq8w==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0", - "@wdio/config": "8.40.2", + "@types/node": "^22.2.0", + "@wdio/config": "8.41.0", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/protocols": "8.40.3", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -13906,28 +13927,17 @@ "integrity": "sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==", "dev": true }, - "node_modules/@wdio/runner/node_modules/devtools/node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@wdio/runner/node_modules/devtools/node_modules/@wdio/config": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.2.tgz", - "integrity": "sha512-RED2vcdX5Zdd6r+K+aWcjK4douxjJY4LP/8YvvavgqM0TURd5PDI0Y7IEz7+BIJOT4Uh+3atZawIN9/3yWFeag==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.41.0.tgz", + "integrity": "sha512-/6Z3sfSyhX5oVde0l01fyHimbqRYIVUDBnhDG2EMSCoC2lsaJX3Bm3IYpYHYHHFsgoDCi3B3Gv++t9dn2eSZZw==", "dev": true, "optional": true, "peer": true, "dependencies": { "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -13938,34 +13948,34 @@ } }, "node_modules/@wdio/runner/node_modules/devtools/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" } }, "node_modules/@wdio/runner/node_modules/devtools/node_modules/@wdio/utils": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.2.tgz", - "integrity": "sha512-leYcCUSaAdLUCVKqRKNgMCASPOUo/VvOTKETiZ/qpdY2azCBt/KnLugtiycCzakeYg6Kp+VIjx5fkm0M7y4qhA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-0TcTjBiax1VxtJQ/iQA0ZyYOSHjjX2ARVmEI0AMo9+AuIq+xBfnY561+v8k9GqOMPKsiH/HrK3xwjx8xCVS03g==", "dev": true, "optional": true, "peer": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", + "@wdio/types": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.5.0", - "geckodriver": "^4.3.1", + "geckodriver": "~4.2.0", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "locate-app": "^2.1.0", @@ -14328,12 +14338,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/@wdio/runner/node_modules/webdriver/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true - }, "node_modules/@wdio/runner/node_modules/webdriverio": { "version": "8.40.5", "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.40.5.tgz", @@ -14378,12 +14382,6 @@ } } }, - "node_modules/@wdio/runner/node_modules/webdriverio/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true - }, "node_modules/@wdio/runner/node_modules/webdriverio/node_modules/devtools-protocol": { "version": "0.0.1342118", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1342118.tgz", @@ -15449,6 +15447,17 @@ "deep-equal": "^2.0.5" } }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", @@ -15518,6 +15527,17 @@ "node": ">=8" } }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -16439,9 +16459,9 @@ } }, "node_modules/babel-plugin-react-intl/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "optional": true, "peer": true, @@ -16758,16 +16778,17 @@ } }, "node_modules/babel-plugin-react-intl/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", "dev": true, "optional": true, "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -16809,6 +16830,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "optional": true, "peer": true, @@ -17805,9 +17827,9 @@ } }, "node_modules/babel-plugin-react-intl/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "optional": true, "peer": true, @@ -18903,6 +18925,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -21836,6 +21871,20 @@ "node": ">=12" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -22653,13 +22702,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -22699,15 +22745,28 @@ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -23871,6 +23930,99 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -23942,14 +24094,13 @@ } }, "node_modules/expect-webdriverio/node_modules/@types/node": { - "version": "20.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", - "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "optional": true, - "peer": true, "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.20.0" } }, "node_modules/expect-webdriverio/node_modules/@types/which": { @@ -23961,16 +24112,16 @@ "peer": true }, "node_modules/expect-webdriverio/node_modules/@wdio/config": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.2.tgz", - "integrity": "sha512-RED2vcdX5Zdd6r+K+aWcjK4douxjJY4LP/8YvvavgqM0TURd5PDI0Y7IEz7+BIJOT4Uh+3atZawIN9/3yWFeag==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.41.0.tgz", + "integrity": "sha512-/6Z3sfSyhX5oVde0l01fyHimbqRYIVUDBnhDG2EMSCoC2lsaJX3Bm3IYpYHYHHFsgoDCi3B3Gv++t9dn2eSZZw==", "dev": true, "optional": true, "peer": true, "dependencies": { "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.0.0", "glob": "^10.2.2", @@ -23981,14 +24132,14 @@ } }, "node_modules/expect-webdriverio/node_modules/@wdio/config/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -24011,12 +24162,11 @@ } }, "node_modules/expect-webdriverio/node_modules/@wdio/protocols": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", + "version": "8.40.3", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", + "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/expect-webdriverio/node_modules/@wdio/repl": { "version": "8.40.3", @@ -24031,31 +24181,21 @@ "node": "^16.13 || >=18" } }, - "node_modules/expect-webdriverio/node_modules/@wdio/repl/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/expect-webdriverio/node_modules/@wdio/utils": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.2.tgz", - "integrity": "sha512-leYcCUSaAdLUCVKqRKNgMCASPOUo/VvOTKETiZ/qpdY2azCBt/KnLugtiycCzakeYg6Kp+VIjx5fkm0M7y4qhA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-0TcTjBiax1VxtJQ/iQA0ZyYOSHjjX2ARVmEI0AMo9+AuIq+xBfnY561+v8k9GqOMPKsiH/HrK3xwjx8xCVS03g==", "dev": true, "optional": true, "peer": true, "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", - "@wdio/types": "8.39.0", + "@wdio/types": "8.41.0", "decamelize": "^6.0.0", "deepmerge-ts": "^5.1.0", "edgedriver": "^5.5.0", - "geckodriver": "^4.3.1", + "geckodriver": "~4.2.0", "get-port": "^7.0.0", "import-meta-resolve": "^4.0.0", "locate-app": "^2.1.0", @@ -24068,14 +24208,14 @@ } }, "node_modules/expect-webdriverio/node_modules/@wdio/utils/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -24294,19 +24434,19 @@ } }, "node_modules/expect-webdriverio/node_modules/devtools": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.40.2.tgz", - "integrity": "sha512-DR/P5LEdxTJO5tVGW4UtjMKKpZbg3g8+VmLQWwq5Lz7pMP1I83G2PlQ3JrRJGDTx9ur52/1QLYHuDrhxYjCMCA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-8.42.0.tgz", + "integrity": "sha512-Y9LRUJlGI0wjXLbeU6TEHufF9HnG2H22+/EABD0KtHlJt5AIRQnTGi8uLAJsE1aeQMF1YXd8l7ExaxBkfEBq8w==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0", - "@wdio/config": "8.40.2", + "@types/node": "^22.2.0", + "@wdio/config": "8.41.0", "@wdio/logger": "8.38.0", - "@wdio/protocols": "8.38.0", - "@wdio/types": "8.39.0", - "@wdio/utils": "8.40.2", + "@wdio/protocols": "8.40.3", + "@wdio/types": "8.41.0", + "@wdio/utils": "8.41.0", "chrome-launcher": "^1.0.0", "edge-paths": "^3.0.5", "import-meta-resolve": "^4.0.0", @@ -24328,14 +24468,14 @@ "optional": true }, "node_modules/expect-webdriverio/node_modules/devtools/node_modules/@wdio/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.41.0.tgz", + "integrity": "sha512-t4NaNTvJZci3Xv/yUZPH4eTL0hxrVTf5wdwNnYIBrzMnlRDbNefjQ0P7FM7ZjQCLaH92AEH6t/XanUId7Webug==", "dev": true, "optional": true, "peer": true, "dependencies": { - "@types/node": "^20.1.0" + "@types/node": "^22.2.0" }, "engines": { "node": "^16.13 || >=18" @@ -24671,6 +24811,13 @@ "streamx": "^2.15.0" } }, + "node_modules/expect-webdriverio/node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "optional": true + }, "node_modules/expect-webdriverio/node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -24709,16 +24856,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/expect-webdriverio/node_modules/webdriver/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/expect-webdriverio/node_modules/webdriver/node_modules/@wdio/config": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", @@ -24738,13 +24875,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/expect-webdriverio/node_modules/webdriver/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true, - "optional": true - }, "node_modules/expect-webdriverio/node_modules/webdriver/node_modules/@wdio/utils": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", @@ -24815,16 +24945,6 @@ } } }, - "node_modules/expect-webdriverio/node_modules/webdriverio/node_modules/@types/node": { - "version": "22.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", - "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", - "dev": true, - "optional": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/expect-webdriverio/node_modules/webdriverio/node_modules/@wdio/config": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.40.3.tgz", @@ -24844,13 +24964,6 @@ "node": "^16.13 || >=18" } }, - "node_modules/expect-webdriverio/node_modules/webdriverio/node_modules/@wdio/protocols": { - "version": "8.40.3", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.40.3.tgz", - "integrity": "sha512-wK7+eyrB3TAei8RwbdkcyoNk2dPu+mduMBOdPJjp8jf/mavd15nIUXLID1zA+w5m1Qt1DsT1NbvaeO9+aJQ33A==", - "dev": true, - "optional": true - }, "node_modules/expect-webdriverio/node_modules/webdriverio/node_modules/@wdio/utils": { "version": "8.40.3", "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.40.3.tgz", @@ -24996,34 +25109,6 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -25050,6 +25135,66 @@ "node": ">=0.10.0" } }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -26204,16 +26349,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -26261,6 +26411,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -26753,12 +26916,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26950,9 +27113,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "engines": { "node": ">= 0.4" @@ -26962,12 +27125,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -27082,9 +27245,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -28571,12 +28734,29 @@ "dev": true }, "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } @@ -30094,9 +30274,9 @@ } }, "node_modules/jest-jasmine2/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "optional": true, "peer": true, @@ -30388,16 +30568,17 @@ } }, "node_modules/jest-jasmine2/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", "dev": true, "optional": true, "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -30407,6 +30588,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "optional": true, "peer": true, @@ -31180,9 +31362,9 @@ } }, "node_modules/jest-jasmine2/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "optional": true, "peer": true, @@ -33850,6 +34032,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -35739,34 +35930,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -36046,28 +36209,6 @@ "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -41197,28 +41338,6 @@ "normalize-path": "^2.1.1" } }, - "node_modules/sane/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sane/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -41257,9 +41376,9 @@ } }, "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "optional": true, "peer": true, @@ -41274,17 +41393,6 @@ "node": ">=4.8" } }, - "node_modules/sane/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, "node_modules/sane/node_modules/execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -41305,118 +41413,6 @@ "node": ">=6" } }, - "node_modules/sane/node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sane/node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sane/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -41470,6 +41466,17 @@ "optional": true, "peer": true }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sane/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -41535,14 +41542,6 @@ "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/sane/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -42080,6 +42079,17 @@ "node": ">=0.10.0" } }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/set-value/node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -42539,6 +42549,17 @@ "node": ">= 0.4" } }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -44825,9 +44846,9 @@ } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -45282,6 +45303,17 @@ "node": ">=0.10.0" } }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", diff --git a/package.json b/package.json index a5cb95183..a8d841e9b 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "app:develop": "nx develop mudita-center", "app:dist": "nx dist mudita-center", "app:translations:sync": "nx translations:sync mudita-center", + "app-mtp:cli": "nx run app-mtp:cli", + "app-mtp:serve": "nx run app-mtp:serve", "test": "npm run test:nx && npm run test:core", "test:core": "cross-env TZ=UTC jest --config=jest/jest.config.js", "test:nx": "nx run-many --target=test --exclude api-devices-testing", @@ -197,6 +199,7 @@ "is-electron-renderer": "^2.0.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", + "jest-environment-node": "^29.4.1", "jest-styled-components": "^7.0.8", "lint-staged": "^13.0.3", "lodash": "^4.17.21", @@ -207,7 +210,7 @@ "moment": "^2.29.4", "node-gyp": "^10.0.1", "node-polyfill-webpack-plugin": "^2.0.1", - "nodemon": "^2.0.19", + "nodemon": "^2.0.22", "nx": "^17.1.3", "p-queue": "^7.3.0", "prettier": "^2.7.1", @@ -254,7 +257,7 @@ "tcp-port-used": "^1.0.2", "terser-webpack-plugin": "^5.3.6", "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "^5.2.2", "url-loader": "4.1.1", "usb": "^1.9.2", diff --git a/tsconfig.base.json b/tsconfig.base.json index bcf62d5c5..cfd445a25 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -35,6 +35,7 @@ "libs/active-device-registry/models/src/index.ts" ], "api-devices-testing": ["libs/api-devices-testing/src/index.ts"], + "app-mtp": ["libs/app-mtp/src/index.ts"], "core-device/feature": ["libs/core-device/feature/src/index.ts"], "core-device/models": ["libs/core-device/models/src/index.ts"], "device-manager/feature": ["libs/device-manager/feature/src/index.ts"],